点击上方,选择星标或置顶,每天给你送干货!
阅读大概需要11分钟
跟随小博主,每天进步一丢丢
来自:AINLP
作者:邱震宇(华泰证券股份有限公司 算法工程师)
知乎专栏:我的ai之路
原文链接,点击"阅读原文"直达:
https://zhuanlan.zhihu.com/p/83596443
本次解读论文:BottleSum: Unsupervised and Self-supervised Sentence Summarization using the Information Bottleneck Principle
最近,看到了一些尝试用不同于深度学习模型的思想和方法去做文本摘要。在ACL2019上就有利用信息论的基本思想来做摘要的论文,之前已经对其做过解读,感兴趣的同学可以移步:A Theoretical Model of Importance for Summarization。本次要解读的论文同样是尝试利用一些基本的信息学思想,结合当下大热的预训练language model来做文本摘要。另外还有一点相似的地方在于用本方法做摘要不需要真实摘要的训练数据,属于无监督或者自监督的方法。
本篇的论文的核心要点如下:
1、摘要抽取过程分为两个阶段:extractive阶段和abstractive阶段。第一个阶段生成的摘要可以单独作为摘要输出,也可以作为第二阶段摘要抽取过程的输入数据。整个摘要生成过程不需要额外的真实摘要作为训练的target,属于无监督或者自监督的方法。
2、extractive阶段的摘要抽取基于Information Bottleneck的思想。从方法本质来说,相当于是对文章原句进行压缩。
3、abstractive阶段的摘要生成主要是使用了当前比较热门的GPT-2的预训练语言模型,基于extractive阶段得到的摘要句,做文本生成任务。
下面,将分别对上述三个核心要点做详细的解读。
首先,详细解读一下整个摘要生成的第一阶段。该阶段基于Information Bottleneck思想(下面简称IB)。因此,需要先对IB进行一个大致的了解。
IB其实也是属于信息学思想的范畴。简单描述一下它的主要目的。假设当前存在一个随机变量X和随机变量Y,X称为原始的输入信号,Y为可观察到的一个相关性变量。用当前机器学习或者深度学习中的模式来类比,可以将X作为训练数据的特征输入数据,Y为预测的目标label,那么我们此时可以使用一个模型通过输入X,来预测Y。我们的目标是当压缩X得到压缩后的变量 时,我们用来预测Y仍然能够得到近似于X的效果。
IB同时关注信息压缩率和压缩后相关信息保留率,它被用来作为输入X中提取输出Y的相关信息的准则。最优的输入可以捕获到所有和输出相关的信息,同时舍弃掉所有与输出不相关的部分。IB的核心要点之一在于“丢掉信息”。
下面给出IB的数学化方法。首先我们希望 能够尽可能多地抓取Y的信息。我们可以用正互信息 来衡量中包含多少Y的信息。那么有:
压缩后的包含的Y信息肯定不会比X的多。我们需要设计一个函数同时最大化压缩率和最大化相关信息保留率。然而现实条件下,是无法同时满足这两个条件的。因此可以将相关信息保留率固定,转而去优化最大压缩率这个变量。因此我们可以借用拉格朗日乘子法的思想,得到一个优化目标函数:
其中, 是拉格朗日乘子。而 我们设定它是一个等式限定条件,保持相关信息保留率在一个定值上。我们的目标就是去最小化上述的函数。
下面解析一下该论文是如何利用IB思想做摘要抽取。
先声明一下,这篇论文中的摘要抽取不同于传统意义上的抽取式摘要,即从原文取原句。这里更像是输入一个句子,然后取句子的一些词构成一个摘要句。
过去用深度无监督网络做摘要抽取,一般是使用auto-encoder结构,构造一个reconstruction loss函数。以原文为输入,原文为输出,我们需要学习一个压缩模型,来间接学习一个压缩式摘要抽取模型。这种方法存在局限性,如它会倾向于保留所有与原文相关的信息,但并不会去“主动”去丢掉那些冗余的信息,这与摘要任务的目标并不符合。因此,用auto-encoder做摘要压缩时,在原始的reconstruction loss基础上,还需要增加一些限制摘要信息量的loss,例如长度限制、话题限制等等。
相对于AE模式,IB同时考虑了压缩率和相关信息保留率(就是我前几篇文章提到的相关性和冗余度),因此不需要去设计多个维度的loss组合。接下来的工作就是如何将摘要要素结合到IB的优化目标函数中。我们设定原始文本为S,目标生成摘要为 ,则有如下公式:
等式右边第一项表示摘要相对于原文的压缩率,在论文中称为剪枝项,鼓励模型尽可能多舍弃无关冗余的信息。而第二项表示相关项,鼓励摘要尽可能多的包含Y相关的信息。为了指导后续的摘要抽取,从IB中总结了摘要抽取的三大准则:
1、用相关项来鼓励模型保留相关信息。(摘要的相关性)
2、用剪枝项来鼓励模型丢弃无关冗余信息。(摘要的冗余度)
3、必须是原文的摘要,即摘要篇幅必须小于原文。
对于公式中的Y,是如何定义的呢?论文中使用了一个简单的方法,即将原文输入句的下一句作为Y。这个方法的思想也很直观,论文中提到是基于语言学中的聚合思想,两个连续的句子能够共享更多的相关语言信息。另外,当前做language model的预训练模型时,通常会用当前词预测下一个词,两种模式思想应该是类似的。
下面解析一下如何去优化上述的目标函数。假设当前输入句为s,下一句为 。首先要明确第一阶段的摘要抽取是一个确定性的函数计算,即s如果给定的话,每一次生成的摘要 都是确定的。因此我们不需要直接去学习摘要的概率分布,而是设定当生成摘要时,条件概率 。进而,我们可以通过一条一条读数据去根据IB函数去选择最优函数对应的摘要句,而不是去一次性处理输入的数据分布。下面简单解读上述优化函数如何推导转化为逐条语句的目标函数。
首先有:
其中, 表示PMI值(有关PMI可以参考以前写的CMU的NLP课程解析)。公式中的期望可以转化为所有语句数据的求和模式,同时因为前面设定生成特定摘要时,,否则 ,因此可以将所有概率分布进行拆分折叠。如下:
其中,任何以s和y为变量的项集都作为常量,因此可以与 合并。因此上述公式可以得到:
其中, 。而 则是直接使用GPT-2或者其他可选的预训练language model来做inference得到。前者来衡量一个摘要在language model上的语言概率,而后者则通过摘要文本,计算下一句文本的生成概率。
上面的整个过程遵循了IB的准则1和准则2,但是对准则3并没有做严格的建模。论文中表示在语法通顺的基础上,摘要文本长度要比原文短。然而语法通顺这个东西无法量化,因此做了一个折中办法:首先保证摘要长度短于原文,至于语法通顺则是尽量达到。
论文给出了优化算法的具体流程。因为没有训练集合验证集,因此无法直接去用训练的方式优化该函数。最直接的办法是,迭代生成摘要时时,保证剪枝项 减小,相关项 增大。
具体做法是处理原文语句s和下一句 时,设定生成的可选摘要集合candidate_list。假设我们生成的摘要最小长度为1,最大长度为len(s)。对部分符合长度要求的语句(原始文本或者中间生成的候选摘要句),我们每次迭代时,删除文本中的一段连续词或者短语,使得优化目标函数中的剪枝项(即 项)要比之前迭代的值小,同时这个过程也可以使得摘要的长度小于原文,满足了准则3。每一轮迭代得到所有符合要求的长度为l的摘要后,对所有候选摘要,计算其 ,并选择 最大的那个摘要句。具体算法流程如下:
从图上可以看出,这个算法中有两个超参数m和k。其中,m是每次可删除的连续词组的最大长度。而k表示每个长度下,候选摘要句数量。
通过上述方法,可以生成一系列压缩式的摘要。这些摘要其实已经可以作为摘要输出了。但是,为了生成完全的生成式摘要,则需要进行下一阶段的工作。
在这一阶段,我们以上一阶段生成的摘要句为target,做自监督的训练。当然,为了提升最后模型的效果,论文使用了目前文本生成中比较火热的预训练模型GPT-2。
GPT-2是openAI提出的基于transformer的大规模预训练语言模型,不同于BERT,它是一个自回归模型,即训练时并没有采用mlm,而是采用语言生成时,最直观的从做左到右的方式。因此,它在NLG任务中的效果是非常好的,因此常被用来做文本续写等工作。
本文中,作者先用GPT-2模型在第一阶段中得到一些不错的摘要句。在第二阶段,作者直接使用GPT-2做finetune,输入使用原文语句,训练的目标则是第一阶段的摘要句。
通过第二阶段的训练和生成,我们能够得到更加贴近自然语言的摘要,同时也满足摘要的相关性和冗余度要求。
在inference阶段,作者使用的是beam search方法。个人觉得可以尝试使用top-k,或者top-p等新的decoding方式,或许还会有一些提升。
论文使用了ROUGE来做评测。大致情况是相比于一些有监督学习方式(经典的seq2seq),论文的效果还是比不上的。但是,相对于其他无监督的方式,本文的方法还是有提升的。
总的来说,本篇论文还是提出了一个比较新颖的无监督+自监督的摘要抽取和生成方式。虽然效果比不上监督式的深度学习模型,但是它的优势在于不需要训练数据,且基于信息学中的IB思想,非常直观,也非常简单,尤其是第一阶段的摘要抽取,不需要训练,只需要迭代式的选择最优的摘要句就可完成。至于第二阶段做的生成式摘要,则是有借了GPT-2东风的嫌疑,也许模型本身的效果大部分来自于GPT-2的效果吧。