tf.multinomial()
做生成任务时,得到 decoder 最终的输出之后,就需要决策选如何利用得到的输出张量进行生成。tf.argmax()是最简单最粗暴的一种方法,直接选取概率最大的词汇作为输出。beam search 等算法的出现,使得生成的结果有了更多的可能性。最近看到一段代码,使用的是 tf.multinomial() 进行采样,也尝试用了一下。
tf.multinomial(logits, num_samples, seed=None, name=None)
logits是一个二维张量,num_samples指的是采样的个数。其实很好理解,我们生成每个时刻的 logits 时,输出维度应该是 [ batch_size, vocab_size ] 形式的,代表着该时刻,每一个batch对应的词典中各词汇生成的概率。tf.multinomial() 将按照该概率分布进行采样,返回的值是 logits 第二维上的 id,也就是我们需要的字典的 id。
举个例子: