diversity beam search

 

Seq2Seq中常用到的优化方法就是Beam Search,但是Beam Search的一个缺点就是生成的N个回答往往差异性很小,无法体现语言的多样性(比如文本摘要、机器翻译的生成文本,往往有不止一种表述方式)。最近看论文的时候发现Google提出的改进Beam Search方法,下面来稍微总结下。

论文地址:https://arxiv.org/pdf/1610.02424.pdf

具体如下:选择 Beam size 为 B,然后将其分为 G 组,每一组就有 diversity beam search个beam。每个单独的组内跟 beam search很像,不断延展序列。同时通过引入一个dissimilarity 项来保证组与组之间有差异。

diversity beam search

如上图所示,B = 6, G=3,每一组的beam width为2。

组内与 beam search 很像:从t-1到 t 时刻,不断的减少搜索空间(如同beam search一样)。

组间差异:对于t=4时刻,我们先对第一组输出y(t=4),然后我们开始对第二组输出y(t=4),但是第二组y(t=4)的score不仅取决于第二组之前的y(t=3),也取决于其与第一组的相似程度。以此类推,在t=4时刻对于第三组的输出,我们从上图可以看到其score的打分标准。这儿对于其 dissimilarity 项的计算采用的办法是 hamming diversity,这个理解起来很简单,比如这个时刻可能输出的词在上面的组出现过,我们就对这个词的分数-1,如果这个时刻可能输出的词在上面组没有出现过,我们就对这个词的分数不惩罚。

diversity beam search

Reference

文本生成解码之 Beam Search