code: def hybrid_forward(self, F, scores, target_dists, finished, best_hyp_indices):
          
          # Map the negative logprobs to probabilities so as to have a distribution
          target_dists = F.exp(-target_dists)
  
          # n == 0 means sample from the full vocabulary. Otherwise, we sample from the top n.
          if self.n != 0:
              # select the top n in each row, via a mask
              masked_items = F.topk(target_dists, k=self.n, ret_typ='mask', axis=1, is_ascend=False)
              # set unmasked items to 0
              masked_items = F.where(masked_items, target_dists, masked_items)
              # renormalize
              target_dists = F.broadcast_div(masked_items, F.sum(masked_items, axis=1, keepdims=True))
  
          # Sample from the target distributions over words, then get the corresponding values from the cumulative scores
          best_word_indices = F.random.multinomial(target_dists, get_prob=False)
          # Zeroes for finished hypotheses.
          best_word_indices = F.where(finished, F.zeros_like(best_word_indices), best_word_indices)
          values = F.pick(scores, best_word_indices, axis=1, keepdims=True)
  
          best_hyp_indices = F.slice_like(best_hyp_indices, best_word_indices, axes=(0,))
  
          return best_hyp_indices, best_word_indices, values
docs: Choose an extension of each hypothesis from its softmax distribution.
  
          :param scores: Vocabulary scores for the next beam step. (batch_size * beam_size, target_vocabulary_size)
          :param target_dists: The non-cumulative target distributions (ignored).
          :param finished: The list of finished hypotheses.
          :param best_hyp_indices: Best hypothesis indices constant.
          :return: The row indices, column indices, and values of the sampled words.