Get to the pointer:Abstractvie summarization with pointer-generator networks(指向生成器网络)---2017ACL
上个礼拜做了实验室的小组论文分享,选择了这篇生成摘要领域高引的一篇经典论文给大家分享。所以重新梳理了一下论文的主要内容,方便日后回顾。没有把论文的全部内容翻译出来,只是按照自己对论文的理解做了一个概述性的总结。
b站有一个论文原作者的论文分享视频,感兴趣的可以去看一下Pointer-Generator Networks.
目录
2.1 Sequence-to-sequence attentional model
1. Introduction
生成式摘要领域目前面临的两个问题:1)生成的内容会出现与细节事实不符合的内容,错误还原细节信息,离线词(OOV:Out-Of-Vocabulary)也是属于这个问题中的一种;2)重复生成相同的内容(这是RNN网络的遗留或者说常见问题)。本文的相关研究工作就是在此背景基础之上展开的。
引言部分还介绍了目前摘要的通用的方法:提取式摘要(extractive)和生成式摘要(abstractive),目前来说(截止2017年)生成式摘要模型多是基于注意力机制的seq2seq结构,并且多采用了循环神经网络来实现。
2. Our models
紧接着第二部分作者对本文提出来的一系列模型展开了详细的介绍。下面按照文章顺序依次分析。
2.1 Sequence-to-sequence attentional model
模型的第一部分内容我更愿意把它称作baseline模型,作者首先提出了一个baseline模型,这个模型结构图先放出来(图片来源于论文原文)
图1 Baseline模型
对文本摘要或者说文本生成有一定了解就知道这个基线模型是一个典型的seq2seq的结构,输如序列是原始数据集里面的文章序列,输出是模型生成的摘要结果序列。先不看上面的attention distribution部分,左边红色部分为模型的encoder,黄色部分为decoder部分。encoder采取的是一个双向的LSTM(biLSTM)结构,decoder采取的是一个单向的LSTM结构。(备注:在自然语言处理中,经常用到的网络结构都是循环神经网络,包括RNN、LSTM、GRU等,原因是循环神经网络可以保留输入序列的顺序,文本的输入序列对文本的理解是至关重要的,RNN可以从序列顺序里面获取到上下文信息)。
通常来说,在seq2seq模型中,encoder部分的LSTM最终有两个输出:一个是网络的output,另外一个是隐藏层状态h的输出,在最后一个单元我们丢掉output的信息,只保留状态信息,并将encoder的状态信息作为decoder的状态向量的初始化(这里相关的知识需要大家首先对LSTM有了解,简单的来说LSTM网络本身就有两个输入和两个输出,输入包括:初始化隐藏层状态向量c0和输入序列x1,x2,...,xt,输出也有两个,如上述所说),decoder从encoder获取到了初始化的状态信息,这个内容就表示了模型从encoder部分的输入序列获取到的序列信息,就可以用来指导或者说辅助decoder产生最后的输出内容。
以上是模型的下半部分内容。在理解了以上内容再来结合上面的attention部分来看。什么是注意力分布?这里的注意力分布计算的其实就是输入序列中每个单词当前时刻所占的权重的大小。我们先不看数学公式,作者提出来的计算本文的注意力分布是通过输入序列和decoder的一个输出内容两部分来共同确定了每一时刻t每个位置i的注意力得分。我们要明白注意力机制其实是一种广泛的概念,并不一定都是transformer结构里面那种计算方式,注意力机制计算的结果其实就是当前时刻每个位置所占的权重大小。计算公式如下:
hi是第i个位置encoder的隐藏层状态向量,st是t时刻decoder输出的状态向量,Wh,Ws,batten都是模型学习的参数。最后把计算的结果进行了一次softmax操作,将得分压缩到[0,1]之间。
得到注意力得分之后,紧接着计算了输入序列的内容向量(就是输入序列的加权和),公式如下:
计算内容向量是为了下面计算词汇表的分布做铺垫,得到内容向量,再结合decoder的输出的状态向量st,进行相关的计算就有了vocabulary distribution:
有了Pvocab就大功告成了,因为我们就有了每个时刻词汇表中单词的概率分布,decoder就知道下一次应该生成哪一个单词了。
baseline模型可以生成一定的内容,但是效果并不太好,作者实验发现,OOV问题没有解决,因此提出了下面的指向-生成器网络。
2.2 Pointer-generator network
先直接看模型图:
图2 pointer-generator networks
这个模型图和2.1中的图结构很类似对不对,其实差别真的不太大,我觉得就是真的很巧妙。其实pointer这个概念不是本文第一次提出来的,具体我也没去溯源。本文提出来的pointer-generator网络就是在baseline模型上引入了Pgen这个指标(图中的橙色小圆圈的位置)。这个Pgen看上去不太起眼,其实仔细观察可以发现,这个小圆圈连接了模型的的attention distribution和vocabulary distribution(粗略看来就是将输入序列和词汇表进行了连接)。Pgen右边连接了vocabulary表示目前的模型具备了baseline模型中的生成单词的能力。左边(1-Pgen)连接了注意力分布,其实就是让模型同时具备了从原文中复制内容的能力,作者的观点就是复制的内容总是正确的,所以这么做可以提升生成的内容的准确性。不过我觉得最妙的地方在于在很大程度上解决了OOV问题。得到的final distribution里面将原始文本中的离线单词追加到了原始单词的末尾,并且根据注意力得分也分配了一个概率。具体的计算公式如下:
Pgen的计算:
final distribution:
第一个问题解决了。但是还是会重复生成相同内容,作者又提出了覆盖率机制Coverage。
2.3 Coverage mechanism
覆盖率机制。解决重复生成相同内容,首先我们了解到为何会一直生成重复的内容,对注意力机制有较深刻理解的朋友应该也猜测到了,就是因为模型会对注意力得分高的地方有持续的关注,每次生成的时候就倾向于生成注意力得分高的内容。因此我们要对过去受到关注的地方做记录,同时要对这些位置进行惩罚。先来看下coverage计算的是什么:
覆盖率计算的是前t-1时刻每个位置受到的关注度总和。根据它的值,进行相关的惩罚。
覆盖率在全文中共有两个地方使用到了,第一,ct作为额外的输入,用来计算t时刻的注意力得分,就是上面的公式(1)部分做了改动:
变相的是对注意力得分高的地方进行惩罚,目的是希望注意力过去得分高的地方不要再继续得到高的注意力得分。
然后第二个地方,就是模型的损失函数里面:
在损失函数里面对高c(i,t)的位置进行惩罚,这样的操作之后就减少了重复内容的生成。
3 Related work
本小节介绍了一些相关研究工作:神经生成摘要模型相关工作,指向生成器相关工作,还有覆盖率相关的工作,感兴趣的话再仔细阅读论文这部分内容吧。
4 Dataset
本文的数据集是CNN/Daily Mail英文数据集。
5 Experiments
实验部分把实验截图列举一下即可,相关结论:在CNN/DM数据集上达到了2017年的SOTA的效果(表1);解决了离线词问题(图3);从实例以及从实际实验数据的角度给我们展示了最终的模型也减少了重复内容的生成(图3&图4),证明本文提出的模型确实有效。
表1 ROUGE得分对比
图3 生成结果举例
图4 不同模型的重复内容比例
最后的最后,生成式摘要这个任务其实还面临着很多的问题,当然应用前景也比较广泛,在信息检索,网页检索,包括新闻摘要生成等诸多领域都有着一定的用武之地,希望有更多的研究人员可以加入到这个领域来,我们一起攻克这个难关。