序列概率最大化问题是当前NLP经典任务之一,使得生成序列的整体概率最大化,并保证执行效率和性能之间的平衡,是一个很直接的科学问题。

通常,场景的工业任务包括两种,一种是分词、词性标注等任务,另一种是生成任务,应用于机器翻译、对话系统、文本摘要、文本纠错、变体还原等,其核心在于局部最优解和全局最优解之间的争论,也产出了工业妥协的话题。

在第一种任务中,为前后隐状态独立的条件下的场景,如HMM,CRF,可以选用维特比算法得到全局最优解,该算法认为,全局最优解为各分段最优解之和,后面的概率和前面的没关系,那前面选最大的概率即可,前后状态结果间无关系,相互独立。

另一种,则是序列之间关系彼此依赖的场景,如翻译模型、transformer。因为输出依赖与上一个结果的输入即文本生成,而为了解决这个问题,可以考虑计算每个句子全部输出的概率乘积,选择概率最大的那个句子,但如此一来,如果句子很长,候选词很多,那么需要保存的数据就会非常大,需要计算的数据量就会发生爆炸。

因此,为了在效果和性能上进行更改,陆续出现了以greedy search贪心算法、beam search(受限的宽度优先搜索方法)为代表的多种策略,利用局部最优解来逼近

本文主要围绕《NLP中的工业妥协:生成任务中的greedy search与beamsearch算法剖析与动手实践》,介绍这两种方法的实现思想,对这一经典问题进行编码动手实践,总结其优缺点和相应优化方法。

内容中包含的图片若涉及版权问题,请及时与我们联系删除