论文阅读 seq2seq模型的coverage机制

Get To The Point: Summarization with Pointer-Generator Networks

Abigail See, Peter J. Liu, Christopher D. Manning
Standford University & Google Brain, 2017

这是ACL2017上的一篇文章,提出了coverage机制,目的是为了解决seq2seq模型生成句子中经常有重复片段的现象。

之前Statistical Machine Translation就已经存在该机制了,NMT中也有人应用了。但是这篇率先用于生成式任务。
BTW这篇文章的结构图相当好看,似乎就是用ppt做的,code也开源了:
https://github.com/abisee/pointer-generator

先看看seq2seq的结构:
论文阅读 seq2seq模型的coverage机制
再看看加coverage机制的结构图:
论文阅读 seq2seq模型的coverage机制

图中的pgen机制就是pointer softmax,详细可以见另一篇介绍copy机制的文章:seq2seq模型中的copy机制

整体结构和pointer generator network是一样的,需要改动的是attention的部分:

eit=vTtanh(Whhi+Wsst+wccit+b)

这里的c指的不是语义向量,是新定义的一个参数:

ct=t=1t1at

ct就是一个长度为输入长度的向量,第一项是之前时刻输入第一个词attention权重的叠加和,第二项是之前时刻输入第二个词attention权重的叠加和,and so on。加这个参数的目的是为了给attention之前生成词的信息,如果之前生成过这些词那么后续要抑制。抑制通过loss函数加惩罚项实现:

losst=logP(ωt)+λimin(ait,cit)

原理很直观,如果之前该词出现过了,那么它的cit就很大,那么为了减少loss,就需要ait变小(因为loss是取两者较小值),ait小就代表着这个位置被注意的概率减少。

从结果上来看,在CNN/Daily Mail dataset上有一定的提升。
论文阅读 seq2seq模型的coverage机制