seq2seq中的beam search

因工作需要,最近在疯狂补充 自然语言处理和语音识别的知识,内容多为转载,转的内容使我这个小白比较容易理解,大牛可以忽略。。。。

转自:https://www.sohu.com/a/159397046_206784

首先说明在sequence2sequence模型中,beam search的方法只用在测试的情况,因为在训练过程中,每一个decoder的输出是有正确答案的,也就不需要beam search去加大输出的准确率。

假设现在我们用机器翻译作为例子来说明。

我们的任务是翻译中文“我是中国人”--->英文“I am Chinese”

假设我们的词表大小只有三个单词就是I am Chinese。

那么如果我们的beam size为2的话,我们现在来解释,

如下图所示,我们在decoder的过程中,有了beam search方法后,在第一次的输出,我们选取概率最大的"I"和"am"两个单词,而不是只挑选概率最大的单词。

然后接下来我们要做的就是,把“I”单词作为下一个decoder的输入算一遍得到y2的输出概率分布,把“am”单词作为下一个decoder的输入算一遍也得到y2的输出概率分布。

比如将“I”单词作为下一个decoder的输入算一遍得到y2的输出概率分布如下:

扫描二维码关注公众号,回复: 3006338 查看本文章

比如将“am”单词作为下一个decoder的输入算一遍得到y2的输出概率分布如下:

那么此时我们由于我们的beam size为2,也就是我们只能保留概率最大的两个序列,此时我们可以计算所有的序列概率:

“I I” = 0.4*0.3 "I am" = 0.4*0.6

"I Chinese" = 0.4*0.1 "am I" = 0.5*0.3

"am am" = 0.5*0.3 "am Chinese" = 0.5*0.4

我们很容易得出俩个最大概率的序列为 “I am”和“am Chinese”,然后后面会不断重复这个过程,直到遇到结束符为止。

最终输出2个得分最高的序列。

猜你喜欢

转载自blog.csdn.net/Suan2014/article/details/82178263