最近读论文的时候看到文中经常用到集束搜索(beam search),可能很多人不懂这到底是个什么算法,其实很简单,顺便把贪心搜索(greedy search)也介绍一下。
贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度。
集束搜索是一种启发式图搜索算法,在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。
具体过程为:使用广度优先策略在树的每一层建立搜索树,按照启发代价对节点进行排序,然后仅留下预先确定的个数(Beam Width-集束宽度)的节点,仅这些节点在下一层次继续扩展,其他节点就被剪掉了。(注意:如果集束宽度无穷大,那该搜索就是宽度优先搜索)
好处:减少了空间消耗,并提高了时间效率。
概念可能不好理解,下完下面的例子你就会发觉真的很简单。
假设字典为[a,b,c],beam size选择2,则如下图有:
是不是很简单啊?