Pointer Generator Network 和 PEGASUS

初次接触文本摘要是在接触Pointer Network和copyNet,前者是抽取式摘要,后者通过decoder对已有词表的概率预测和OOV词的copy预测两者,解决了生成式摘要中无法生成OOV词的问题。

Pointer Generator Network

这个模型是在seq2seq+ATT的基础上加上了pointer network的工作。

seq2seq有两个缺点:
  1. 无法对OOV词进行摘要.
  2. 容易重复自己,即已经生成过的内容容易再生成一遍。
PGN为了解决这两个问题,做了以下工作。
  1. 将pointer引入网络,以复制原文OOV内容。
    原版seq2seq在decoder中的每个unit结合attention给出一个已有词表的概率分布,输出概率最大的。pointer除此之外,还需要加上网络对已有词出现概率的预测,所以通过attention加和获得的context embedding和decoder前一时刻的状态embedding和单词embedding,获得一个评分P,P代表了生成式分布的占比。而另一部分(1-P)则由attention在各个encoder层的占比获得,attention的占比将代表它所在位置的单词的增益,加入生成式分布中。
  2. Coverage Mechanism,是对pointer机制的改良,以抑制出现过的内容。
    为了抑制生成过的内容,把decoder所有t时刻以前的attention权重做相应encoder位置的加和,获得总权重c,因为在过往attention里占比高的语义肯定早就被表达完了,所以占比高的单词应该被打压。我们根据decoder前一时刻的状态embedding和输出embedding,加之c的计算,获得一个对每个encoder位置的attention权重。将权重与(1-P)相乘,再与decoder的预测分布相加,就是最后的分布结果。
    注意,因为引入的coverage机制,我们希望c高的位置,a要尽量小,这样才能尽可能让decoder的预测分布在该词上尽量小,反之a要尽量大。所以有必要添加一个coverage loss:
    C o v e r a g e L o s s = ∑ i min ⁡ ( a i t , c i t ) CoverageLoss = \sum_i \min(a_i^t, c_i^t) CoverageLoss=imin(ait,cit)

PEGASUS (ICML 2020)

PEGASUS(天马)(from Google)(ICML2020)
这是一个基于bert的生成式改进,当前做到了12个主流数据集的文档摘要任务的SOTA。
论文在2019年底发出。

BERT是很成功的预训练模型,它只采用了transformer的encoder层进行训练,下游任务可以承接encoder来设计后续网络。

所以PEGASUS直接使用transformer结构,但同时保留BERT的预训练任务MLM。

接下来介绍PEGASUS的预训练方法,即两个任务:

GSG(Gap Sentences Generation).

这里的gap指的是,将输入的文章中的一句mask掉,使前后产生语义gap。在这样的数据下,需要decoder正确输出被mask掉的句子。
当然,我们自然想选些文章里重要度比较高的句子来生成。我们利用rouge score来评测每句话的重要性得分.

Rouge score N

N代表将句子用n-gram表示。一般取1和2一起。
它是用来对生成摘要和参考摘要的相似度计算公式。
公式: R o u g e S c o r e = 待 评 测 摘 要 与 参 考 摘 要 的 n g r a m 相 同 的 g r a m 数 参 考 摘 要 的 n g r a m 个 数 Rouge Score = \frac {待评测摘要与参考摘要的ngram相同的gram数}{参考摘要的ngram个数 } RougeScore=ngramngramgram

我们可以用它来计算文章中句子的重要程度,因为重要的东西肯定会在文章中反复提及,所以重要的句子必定有比较高的rouge score。其中,句子i替代生成摘要的位置,整篇文章替代参考摘要的位置。
这个评判标准必然不严谨,但它的作用肯定比随机选择的效果好,就像attention一样,只是一些基于先验知识的纠偏。大方向上肯定是有益的。

MLM

这个就是bert的传统艺能了。

总结

这篇文章唯一的创新就是GSG任务了。既然mask的词可以根据上下文推测出来,那mask的句子自然也可以根据上下文推测出来。再加上它自监督的学习方法,就很容易达到这个效果。
GSG明明是句子生成预测任务,为什么可以做关系抽取?
因为之前说过用rough score选择信息最多的句子们mask,也就相当于认为它是该文章的文本摘要。而测试时,因为没有mask,就相当于默认文章中缺少摘要句,也可以说我们把摘要句放在了首位然后mask掉了。

更多

总结中提到测试时相当于把摘要放在首位然后mask掉,这里的首位mask在训练集中很少出现,而句中mask产生的语义gap在训练时肯定是会对结果产生影响的,所以理所当然地想到,能否mask首个句子来避免mask位置引发的语义gap?
但结果肯定不理想,因为这种方法相当于模糊了文本摘要的预训练目标,首位句子还是有很大概率占有较低的文章级语义的。所以rouge score选句子虽然有gap,但在自监督的庞大数据下,模型总是会跨越这道gap,得到更好的结果。

你可能感兴趣的:(Pointer Generator Network 和 PEGASUS)