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的结构:
再看看加coverage机制的结构图:
图中的 机制就是pointer softmax,详细可以见另一篇介绍copy机制的文章:seq2seq模型中的copy机制
整体结构和pointer generator network是一样的,需要改动的是attention的部分:
这里的c指的不是语义向量,是新定义的一个参数:
就是一个长度为输入长度的向量,第一项是之前时刻输入第一个词attention权重的叠加和,第二项是之前时刻输入第二个词attention权重的叠加和,and so on。加这个参数的目的是为了给attention之前生成词的信息,如果之前生成过这些词那么后续要抑制。抑制通过loss函数加惩罚项实现:
原理很直观,如果之前该词出现过了,那么它的 就很大,那么为了减少loss,就需要 变小(因为loss是取两者较小值), 小就代表着这个位置被注意的概率减少。
从结果上来看,在CNN/Daily Mail dataset上有一定的提升。