3.4 改进集束搜索(Refinements to Beam Search)
长度归一化(Length normalization)是对束搜索算法稍作调整的一种方式,使之得到更好的结果
即乘积概率(the product probabilities):
这些概率值通常都远小于1,会造成数值下溢(numerical underflow),即数值太小了,导致电脑的浮点表示不能精确地储存
会得到一个数值上更稳定的算法,不容易出现数值的舍入误差(rounding errors)或者说数值下溢(numerical underflow)
解决:可以把它归一化,通过除以翻译结果的单词数量。即取每个单词的概率对数值的平均,这样很明显地减少了对输出长的结果的惩罚:
总结一下如何运行束搜索算法:
如何选择束宽B:
B越大,考虑的选择越多,找到的句子可能越好,但是算法的计算代价越大,因为要把很多的可能选择保存起来,内存占用增大
如果用小的束宽B,结果会没那么好,因为在算法运行中,保存的选择更少,但是算法运行的更快,内存占用也小
在产品中,经常可以看到把束宽设到10,当B很大的时候,性能提高会越来越少。对于很多应用来说,从束宽1,也就是贪心算法,到束宽为3、到10,会看到一个很大的改善。但是当束宽从1000增加到3000时,效果就没那么明显
相对广度优先搜索(BFS, Breadth First Search algorithms),深度优先搜索(DFS, Depth First Search)这些精确的搜索算法(exact search algorithms),束搜索运行的更快,但是不能保证一定能找到argmax的准确的最大值
Last updated