其他分享
首页 > 其他分享> > beam search

beam search

作者:互联网

假设现在有一个简化版的中文翻译英文任务,输入和输出如下,为了方便描述搜索算法,限制输出词典只有{"I", "H", "U"} 这3个候选词,限制1个时间步长翻译1个汉字,1个汉字对应1个英文单词,这里总共3个汉字,所以只有3个时间步长。

中文输入:"我" "恨" "你"
英文输出:"I" "H" "U"

目标:得到最优的翻译序列 I-H-U

exhaustive search(穷举搜索)

最直观的方法就是穷举所有可能的输出序列,3个时间步长,每个步长3种选择,共计  种排列组合。

 

I-I-I
I-I-H
I-I-U
I-H-I
I-H-H
I-H-U
I-U-I
I-U-H
I-U-U
H-I-I
H-I-H
H-I-U
H-H-I
H-H-H
H-H-U
H-U-I
H-U-H
H-U-U
U-I-I
U-I-H
U-I-U
U-H-I
U-H-H
U-H-U
U-U-I
U-U-H
U-U-U

从所有的排列组合中找到输出条件概率最大的序列。穷举搜索能保证全局最优,但计算复杂度太高,当输出词典稍微大一点根本无法使用。 

greedy search(贪心搜索)

贪心算法在翻译每个字的时候,直接选择条件概率最大的候选值作为当前最优。如下图所以,

PS:图中的概率如何得来的?不同的模型有不同的算法,我自己随便填的。

 贪心算法每一步选择中都采取在当前状态下最好或最优的选择,通过这种局部最优策略期望产生全局最优解。但是期望是好的,能不能实现是另外一回事了。贪心算法本质上没有从整体最优上加以考虑,并不能保证最终的结果一定是全局最优的。但是相对穷举搜索,搜索效率大大提升。

beam search(束搜索)

beam search是对greedy search的一个改进算法。相对greedy search扩大了搜索空间,但远远不及穷举搜索指数级的搜索空间,是二者的一个折中方案。

beam search有一个超参数beam size(束宽),设为 K 。第一个时间步长,选取当前条件概率最大的 K 个词,当做候选输出序列的第一个词。之后的每个时间步长,基于上个步长的输出序列,挑选出所有组合中条件概率最大的 K 个,作为该时间步长下的候选输出序列。始终保持 K 个候选。最后从 K 个候选中挑出最优的。

还是以上面的任务为例,假设 K=2 ,我们走一遍这个搜索流程。

 

 

 

标签:候选,输出,search,概率,beam,步长,最优
来源: https://blog.csdn.net/qq_42233538/article/details/119255150