注:如上面所示,作为基线的seq2seq+Attention这样的纯粹的生成式模型存在1.无法生成OOV词汇;2.歪曲事实两个问题。Pointer Generator 存在重复内容的问题。在引入Coverage mechanism之后的Pointer-Gen+Coverage模型能够解决上面的三个问题。
文本摘要使用抽取和生成两种方法:抽取式和生成式。抽取式是从文章中选择关键的词句拼接而成,这种方式能够保证生成句子语法和准确性的下限。然而高质量的摘要往往需要分段、泛化或者结合知识,这种类型的摘要只能使用生成式方法。seq2seq模型有三个问题:不准确的再现事实,无法处理词汇表外的(OOV)的单词,重复自己。论文提出的模型可以在多句子的文本摘要中解决这三个问题。混合指针-生成器网络便于通过指向从源文本复制单词,这提高了OOV单词的准确性和处理能力,同时保留了生成新单词的能力。可以看作是提取和抽象方法之间的平衡。在消除重复方面,论文提出了覆盖向量(coverage vector)来跟踪和控制对源文本的覆盖。
1.标准的seq2seq模型使用BiLSTM对源文本进行编码,然后使用Encoder hidden state和Decoder hidden state计算新的时间步的Attention分布,进而得到新的上下文向量context vector,使用softmax层对上下文变量解码得到新时间步的词汇分布。
e i t = v T t a n h ( W h h i + W s s t + b a t t ) e_i^t = v^T tanh(W_hh_i+W_ss_t+b_{att}) eit=vTtanh(Whhi+Wsst+batt)
a t = s o f t m a x ( e t ) a^t = softmax(e^t) at=softmax(et)
h t ∗ = ∑ i a i t h i h_t^* = \sum _i a_i^t h_i ht∗=i∑aithi
P v o c a b = s o f t m a x ( V ′ ( V [ s t , h t ∗ ] + b ) + b ′ ) P_{vocab} = softmax(V^{'}(V[s_t, h_t^*]+b)+b^{'}) Pvocab=softmax(V′(V[st,ht∗]+b)+b′)
1.pointer-generator网络的关键之处在于使用一个 p g e n p_{gen} pgen来表征从词汇表中生成当前时间步词汇的概率, ( 1 − p g e n ) (1-p_{gen}) (1−pgen)表示从源文本中拷贝词汇的概率。
2. P v o c a b ( w ) P_{vocab}(w) Pvocab(w)表示使用标准seq2seq网络生成词汇的分布,$\sum_{i:w_i=w}a_i^t $表示上下文中所有当前词汇出现是其atttention的和。
P g e n = σ ( w h ∗ T h t ∗ + w s T s t + w x T x t + b p t r ) P_{gen} = \sigma(w_{h^*}^Th_t^*+ w_s^Ts_t+ w_x^Tx_t+b_{ptr}) Pgen=σ(wh∗Tht∗+wsTst+wxTxt+bptr)
P ( w ) = P g e n P v o c a b ( w ) + ( 1 − p g e n ) ∑ i : w i = w a i t P(w) = P_{gen}P_{vocab}(w)+(1-p_{gen}) \sum _{i:w_i =w}a_i^t P(w)=PgenPvocab(w)+(1−pgen)i:wi=w∑ait
注:以上图为例,decoder已经输出了Germany beat两个词汇,这时候希望生成下一个时间步的词汇,如果目标词汇 w w w未出现在原文中则 ∑ i : w i = w a i t = 0 \sum _ {i:w_i=w} a_i^t=0 ∑i:wi=wait=0, 如果目标词汇 w w w不在词典中则 P v o c a b ( w ) = 0 P_{vocab}(w)=0 Pvocab(w)=0
1.重复的问题在多句摘要中经常出现,论文中引入覆盖(coverage)机制来监控摘要中生成的词对源文本的覆盖情况,以减少重复关注一部分源文本进而生成重复内容的情况出现。
2.coverage vector c t = ∑ t ′ = 0 t − 1 a t ′ c_t= \sum_{t'=0}^{t-1} a^{t'} ct=∑t′=0t−1at′等于历史time step的attention之和来表示decoder生成过的词汇的attention覆盖的情况。 c t c_t ct作为下一个时间步计算attention的一个输入,所以pointer-gen网络计算attention那个步骤的公式变为:
e i t = v T t a n h ( W h h i + W s s t + w c c i t + b a t t ) e_i^t = v^T tanh(W_hh_i+W_ss_t+ w_cc_i^t + b_{att}) eit=vTtanh(Whhi+Wsst+wccit+batt)
3.论文引入coverage损失对重复关注同一个位置进行的惩罚,公式为:
c o v l o s s t = ∑ i m i n ( a i t , c i t ) covloss _t = \sum _i min(a_i^t, c_i^t) covlosst=i∑min(ait,cit)
4.最终的loss是 P ( w ) P(w) P(w)与covLoss之和:
l o s s t = − l o g P ( w t ∗ ) + λ ∑ i m i n ( a i t , c i t loss_t = -logP(w_t^*)+\lambda \sum _i min(a_i^t, c_i^t losst=−logP(wt∗)+λi∑min(ait,cit