摘要,Pointer-Generator Networks

参考论文:Get To The Point: Summarization with Pointer-Generator Networks
参考代码:atulkum/pointer_summarizer

  1. 使用的模型是seq2seq + attention,也就是前面有提到的做翻译的模型,之前写的有些问题,也是由于自己不太理解吧;现在结合这个代码,再来重新梳理一遍。
    baseline model(不加attention 和 Pointer-Generator Networks)介绍:
  • encoder是双向单层的LSTM,将数据输入到网络之后,可以得到encoder_out(batch_size, seq_len, 2 * enc_hidden_size),encoder_hidden(元组(h,c),每个size都是(2, batch_size, enc_hidden_size))。encoder_hidden应用于后续decoder_input。
  • decoder是单向单层的LSTM,起始的hidden使用encoder_hidden(需要进行size的转化)。
  1. 然后加上attetion的操作,attention的分数计算采用如下公式:
  • e i t = V a T tanh ⁡ ( W h h i + W s s t + b ) ; e_i^t=V_a^T\tanh(W_hh_i+W_ss_t+b); eit=VaTtanh(Whhi+Wsst+b); \quad h i h_i hi表示encoder_state, 使用encoder_out, s t s_t st表示decoder_hidden,使用decoder_hidden。计算后size为(batch_size, seq_len)
  • a t = s o f t m a x ( e t ) ; a^t=softmax(e^t); at=softmax(et); a t \quad a_t at表示每一个输入的注意力分数,size为(batch_size, seq_len)
  • cv = ∑ α i h i \sum\alpha_{i}h_i αihi表示context_vector向量 计算后的size为 (batch_size, 1, enc_hidden_size)
  • y ^ = s o f t m a x ( t a n h [ s t ; c v ] ) \hat{y} =softmax(tanh[s_t;cv]) y^=softmax(tanh[st;cv]) 通过映射得到最终的输出,计算后的size为(batch_size, vocab_size)。
  1. 由于在完成摘要模型中,会出现很多oov的词语,为了解决这个问题,可以根据PGN计算一下跟输入相关的词语,此时变化如下:
  • 计算一个 p g e n p_{gen} pgen的值,用于计算vocab与句中oov词语的分布概率, p g e n p_{gen} pgen的计算公式如下:
    p g e n = σ ( W h ∗ h ∗ + W s s t + W x x t + b ) ; p_{gen}=\sigma(W_{h^*}h^*+W_ss_t+W_xx_t+b); pgen=σ(Whh+Wsst+Wxxt+b); \quad h ∗ h^* h对应上一步提到的cv, s t s_t st对应为decoder_output,x_t对应为decoder_input,此时计算的size为(batch_size, 1)
  • 利用下面的公式求对应的输出:
    y = p g e n y ^ + ( 1 − p g e n ) ∑ i : w i = w α ; y=p_{gen} \hat {y} + (1 - p_{gen})\sum_{i:w_i=w}\alpha; \quad y=pgeny^+(1pgen)i:wi=wα; α \alpha α表示上面提到的,即注意力分数。
  1. 由于1-3构成的摘要模型中会出现词语大量重复的情况,现在使用coverage机制,对重复的词语进行惩罚的机制,进行如下改动:
  • c i = ∑ t = 0 t = i − 1 α i c_i=\sum_{t=0}^{t=i-1}\alpha^i \quad ci=t=0t=i1αi表示i时刻的c函数, α \alpha α为2中计算的注意力分布值;
  • 第2步中的 e i t e_{i}^{t} eit修改为 e i t = V a T tanh ⁡ ( W h h i + W s s t + W c c i + b ) ; e_i^t=V_a^T\tanh(W_hh_i+W_ss_t+W_cc_i+b); eit=VaTtanh(Whhi+Wsst+Wcci+b);
  • 将损失函数增加一项+ λ ∑ min ⁡ ( α i , c i ) \lambda\sum \min(\alpha^i,c^i) λmin(αi,ci)

另外关于LayerNormalization之类的,暂时没有介绍。

至此,全部介绍完成,如果有疑问和我说的不到位的地方欢迎大家指出,一起学习进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值