beam search(集束搜索)
而beam search是对贪心策略一个改进。思路也很简单,就是稍微放宽一些考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保留num_beams个。当num_beams=1时集束搜索就退化成了贪心搜索。
优点:综合了Greedy search和Exhausitive Search,在他们中间取取平衡,beam size为1即为greddy search,beam size为N(词库大小)即为Exhausitive Search。 缺点:无。
Exhausitive Search(暴力搜索)
暴力搜索考虑的是全局最优解,需要把每一种可能输出结果都算出来,然后找出概率最大的输出。这种搜索空间是非常巨大的,假设我们的词表大小为N,句子长度为T个单词,整个搜索时间复杂度为O(NNT),一般N取值在几万到几十万级别,T在为几百个单词,实际计算比较慢。
优点:全局最优解, 缺点:计算速度慢。
greedy search(贪心搜索)
greedy search比较简单,就是贪婪式的搜索,每一步都选择概率最大的单词输出,最后组成整个句子输出。这种方法给出的结果一般情况结果比较差,因为只考虑了每一步的最优解,往往里全局最优解差距很大。假设我们的词表大小为N,句子长度为T个单词,整个搜索时间复杂度为O(1NT)。
例如下图,每一个时间步都取出了条件概率最大一个结果,生成了序列[A,B,C]。
很明显,这样做将原来指数级别的求解空间直接压缩到了与长度线性相关的大小。由于丢弃了绝大多数的可能解,这种关注当下的策略无法保证最终得到的序列概率是最优的。
总结
工作随笔,希望可以帮助到大家!
如有不足之处,请多多指教!