Beam Search

背景:如图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的基本原理。

需要注意的是什么时候搜索结束,如果最大概率的单词里面遇到eos了,那么搜索宽度就会减少eos的个数,直到搜索结束。如:第三个预测单词是eos,那么搜索到的一个可能句子就是xxeos,这个时候b之后的搜索宽度就会减少1,直到搜索结束;如xxbaeos,搜索到两句话就是xx和xxba最后取其中单词平均概率最大的一个句子为最终的结果。

图2 Beam Search


总结

       1.相对于只取一个概率最大的单词,Beam Search能够得到更合理的句子结果。需要注意的是它得到的不是最优结果,但是这不妨碍Beam Search的工程应用,可以说它综合考虑了精度和速度,是个非常好的办法。

       2.文中提到的Beam Search结束搜索方法只是常用到的一种方法,不是唯一方法。


参考

https://www.zhihu.com/question/54356960

https://zhuanlan.zhihu.com/p/36029811?group_id=972420376412762112

猜你喜欢

转载自blog.csdn.net/wdmlovekerry/article/details/80375346