看了一下网上对beam search的讲解,感觉都说的太杂了,我试图用一个最简单的例子来帮助读者理解。
见下图
假设我有一个模型,能够根据当前词输出下一个词的概率分布,最后依次这样就能生成一大串文本。
以上面的图为例
“The”
的下一个词的最大概率为“nice”, p=0.5
但这样选容易造成“局部最优”
所以指定beam size是2时,保留概率最大和第二大的组合。
概率最大的是“The nice”(p = 0.5)
概率第二大的是“The dog”(p = 0.4)
概率最小“The car”(p = 0.1)
不再考虑未纳入当前序列的节点即“car”
再向后拓展一步,三个词时有以下组合:
“The dog and”(p = 0.02)
“The dog runs”(p = 0.02)
"The dog has"(p = 0.36)
"The nice woman"(p = 0.2)
“The nice house”(p = 0.15)
“The nice guy”(p = 0.15)
依然是选择其中最大的两种组合作为当前序列
“The dog has”(p = 0.36)
“The nice woman”(p = 0.2)
原来2-grams最大的序列,在3-grams时不再是最大的,体现了局部最优和全局最优的区别(这句话看不懂也没关系,不影响对这个算法的理解)
如果继续向下,按照这个方法继续进行拓展
直到遇到结束符或者达到最大长度为止。最终输出得分最高的2个序列。
所以总结一下:
beam search使用了减枝方法
beam search有可能忽略全局最优的选项
beam size 的大小选择很重要
拓展,一个beam search案例的应用(可不看)
64匹马,8个赛道,找出跑得最快的4匹马