论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models

      因为最近一个实验室项目即将开始,关于给中国移动公司做一个智能客服对话系统,所以这段时间我开始搜集相关的最新论文开始阅读,今天给大家带来的是<>


      Neural Sequence Model(RNN、LSTM)常用来处理有时序性的数据。目前在decode的过程中经常会使用beam search算法,这个算法类似于贪心算法,在每个时刻输出后会保留概率前k大的序列,其它的舍弃掉。举个例子,在t-1时刻我们经过筛选已经有了k个序列,那么在t时刻,我们的输出会有k×n个序列(其中n是单词库的总数)。然后我们选取其中概率前k大的序列,其余的全部舍弃掉。不断重复这样的做法,直到输出结束。但是beam search有个最大的问题是其输出的k个句子之间差异性很小(这样就相当于耗费巨大时间输出的结果基本相似),这样造成了计算的浪费,并且不能体现实际语言的多样性(比如在image captioning中,针对一张图片应该会有好多种描述方式的,而不仅仅局限于一种两种)。而这篇论文提出了diverse beam search算法,相当于对beam search算法的改进。经过实验证明,这种算法会使得输出多样性和准确性都大幅提高,而且DBS算法有很广阔的应用领域,包括image captioning、machine translation、conversation、visual question generation等。   

   

       在decode过程中,假设我们的单词表共有N个单词,经过t时间,我们将有N^t种可能,会得到N^t个概率,然后我们从中选取概率最大的一个序列作为输出,但这样会导致很大的计算量(比如N=1000,t=10)。因此我们会使用beam search,在每个时刻输出中,只选择前K个概率最大的,其余全部舍弃掉,这样会大大的减少搜索空间,提高搜索效率。但正如上文所说,beam search一个很大的缺点是其输出没有多样性,除此之外,beam search还经常会引起safe response的问题(比如对方无论说什么,我都回答“OK”,样保证了输出概率最大,但也显得没有实际意义)。 


       下图是beam search的一个例子,并且将其与本文介绍的diverse beam search进行了对比。

  

论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models_第1张图片


         接下里我将用数学语言来分别讲解beam search和本论文提到的diverse beam search。


The Decoding Problem


      给定一个输入x,对于t时刻的输出y的概率,取决于之前的所有时刻的输出以及此时的输入,由条件概率的公式可得theta(y(t))=log P(y(t)|y(t-1)....y(1),x)。那么如果此时输出一段序列Y[t]=[y(1),y(2).....y(n)],那么这段序列对应的概率就是theta(y(t))对所有时刻求和。那么decoding problem的目标就是找到一个序列,使得Y[t]对应的概率最大。


Beam Search


      beam search就是在每个时刻中,从所有的可能序列保留前K个最大概率的序列。然后进入下一个时刻,以此类推。(其中B称为Beam Width)用数学语言描述如下:


       在时刻t输出之前,我们已经有了B个序列,并且每个序列都已经有了t-1次输出了,我们把这B个序列的集合称为Y[t-1]


 


       那么对于t时刻输出时,我们所拥有的所有可能序列为

  


       跟之前一样,我们从中选择前B个最大的序列,用数学语言描述为:


      


Diverse Beam Search



       为了解决beam search所带来的输出单一性问题,我们引入了diverse beam search。具体来说是这样的,比如我们选择的beam width为B,然后我们将其分成G组,那么每一组就有(B/G)个beam(当然一般我们选择整除关系)。我们在每一个单独的组内就跟beam search很像,不断的延展序列。同时也通过引入一个dissimilarity 项来保证组与组之间有差异。以下图为例:


论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models_第2张图片


       如上图所示,我们选择的beam width是6,并将其分为三组,每一组的beam width为2。我们让组与组之间保持差异性,并且从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,如果这个时刻可能输出的词在上面组没有出现过,我们就对这个词的分数不惩罚.


       具体数学公式如下所示(表示在t时刻对于第g组的延伸):

         论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models_第3张图片

       以下是DBS的算法实现:

       论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models_第4张图片


      这就是基本原理的介绍,至于对DBS算法所做的实验,我就不详细介绍了,有兴趣大家可以搜索一下这篇论文进行阅读。从实验中可得到的结论是,DBS算法在image captioning、machine translation、conversation、visual question generation的表现都比BS算法优秀。


      关于本算法在image captioning的应用中有个demo,有兴趣大家可以去玩玩,还是蛮有趣的。


      网址:demo dbs.cloudcv.org


       

  

          





你可能感兴趣的:(论文阅读:Diverse Beam Search--Decoding Diverse Solutions from Neural Sequence Models)