Beam Search
beam search 束搜索是基于穷举搜索和贪心搜索的折中搜索方案
穷举搜索
假设我有 A B C 三个词需要解码
我们可以穷尽所有排列组合,一共是27种,因为3个时间步,每个时间步都有3个选择,组合有:
AAA AAB AAC ABA ACA 。。。。
这种搜索带来的问题在于时间复杂度过大
贪心搜索
贪心搜索仅考虑当前状态下最优的组合
我们先看T1时间步,发现是A概率最高。
于是我们以A为基础继续看T2时间步,组合有: AA, AB, AC,然后发现是与B组合概率高,因此以AB作为基础
我们最后看第三时间步,组合有:ABA, ABB, ABC,可以观察到 ABB的概率是最高的,因此我们对应的结果就是 ABB
注意这个并不意味着ABB是全局最优的组合。
束搜索
穷举搜索过于复杂,贪心搜索只考虑当前情况,而做不到全局最优。因此我们提出了束搜索。
首先我们定义一个概念,束宽:beam_size
束宽代表每个时间步下,我们束搜索关注概率为前beam_size个最大的词
因此贪心搜索是束搜索的一个特例,即beam_size = 1
下面我们还是以ABC的示例,看看beam_size = 2的情形
时间步T1,我们选出概率最大的两个词,即A和B
时间步T2,我们就需要考虑两种情况:
- 时间步T1为 A
- 时间步T2为 B
每个时间步有3个组合,因此2x3就是6种组合
可以看到这里我们有六种组合,我们选择前2个最大的,即AC和BA,进入到下一轮的束搜索