背景:如图1所示,在seq2seq推理过程中,需要通过上下文和上一个预测的单词,来预测下一个词。如果前面的单词是w1,通过上下文和w1可以预测w2,然后再通过w2和上下文预测出w3,这种算法简单快速,能够得到不错的效果,但是这种贪心算法有个问题就是,如果在预测序列中有一个单词预测的不准确,那么它会影响后面所有单词的预测。Beam Search就是在这种背景下产生的,Beam有“束”的意思,Beam Search的字面意思就是在一个范围内搜索。
图1 rnn推理
原理:还是如图1所示,在从w1得到w2的过程中,一般是得到了所有词表中单词出现的概率的排序,w2是出现概率最大单词(一般是用softmax回归得到概率),Beam Search如果把Beam设置为n,算法每次搜索到概率最大的n个单词,而不是一个单词。
如图2所示,假如词表大小为5,里面有abcde五个单词,Beam大小为2,预测到的第一个单词是c和e,单词是c时下个输出可能是ca,cb,cc,cd,ce,单词是e时,下个输出是ea,eb,ec,ed,ee,我们在这10个可能中挑到概率最大的两个组合ce和eb,依次再以e和b为输入获得10个组合可能,找到概率最大的两个组合,这就是Beam Search的基本原理。
需要注意的是什么时