神经网络学习-初探束搜索
理解束搜索思路
在本次文章中会介绍束搜索的思路和使用场景,并结合实际的简单例子进行说明。束搜索是一种在自然语言处理中常用的搜索方式,它全称是集束搜索,也就是Beam-Search,通常认为该方法也是一种启发式的搜索方式。
在介绍束搜索之前,我们先来了解两种比较极端的搜索方式,第一种是穷举搜索、第二种是贪心搜索。对于穷举搜索来说,顾名思义就是搜索所有的可能结果,对于自然语言处理来说,就是遍历所有可能的上下文,计算所有序列的条件概率,然后以条件概率最大的词语作为预测词语,每一步都是如此,循环往复,非常消耗资源。那么对于贪心搜索来说,其实是一种短期最优化的思路,也就是每次就搜索对于当前需要预测的词语的条件概率最大的词语,也就是每次只做当前步数最优的搜索。那么从实际情况来看,穷举搜索会消耗巨大的资源,无法在实际应用使用;而贪心搜索会由于只看当前步数的最优搜索,会陷入局部的最优点,从而导致预测的错误。
因此为了性能和准确率,我们介绍本文的主角“束搜索”。这种搜索方式其实是在穷举搜索和贪心搜索之间做了一次折中,它会预留最优的前N个候选的答案进行下一步搜索,从而达到更为准确的预测效果。首先对于束搜索方法要确定超参数N,也就是束宽,确定了N的值后就可以开始搜索。下面以一个案例来进行比较贪心搜索和束搜索的区别,假设我们要把“He eats apple”翻译成“他吃苹果”,并且各个英文单词对应中文的条件概率如下所示:
他 | 吃 | 苹果 | |
---|---|---|---|
He | 0.6 |