Pointer-generator network和Coverage mechanism机制详解

针对本文的翻译和解释有很多,具体的内容不在此处细说。我们这里主要讨论论文中的两个技术,分别是Pointer-generator network和Coverage mechanism。大多数博客对这两个技术进行了描述,但是为什么该技术可以解决论文中提出的问题,并没人进行过说明。我们详细的研究讨论了这两个技术,下面将进一步阐明。

Pointer-generator network:

如文中所述,该网络允许decoder在第t步的输出来自于encoder的输入或一个固定的decoder词典。使用一个生成概率控制输出来自于哪个源。生成概率写作:

                                                                    e^t_i = v^T tanh(W_hh_i+W_ss_t+b_{attn})

                                                                                        a^t_i = \frac{e^t_i}{\sum_j e^t_j}

                                                                                       h^*_t=\sum_i a^t_ih_i                                                           (1)                     

                                                                     

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  p_{gen} = \sigma(w^T_{h^*}h^*_t + w^T_{s}s_t + w^T_xx_t + b_{ptr})                                 

 h_i为encoder的第i步的输出,s_t为decoder第t步的输出,a^t_i是decoder输出对encoder输出的attention向量。decoder的t的输出单词概率分布描述为:

                                                                 P(w_t) = p_{gen}P_{vocab}(w_t) + (1-p_{gen})\sum_{i:w_i=w_t}a^t_i                           (2)

此处我的理解是生成一个针对动态词典的输出,如果encoder的输入的词包含在固定的词典中,则取二者的一个加权和,如果只存在固定词典不存在在encoder的输入词中则只使用固定词典的logits加权值,否则只使用encoder输入词的加权值。这里就构造了一个包含固定词典和encoder输入的一个动态词典,decoder的输出依据上述加权值做softmax实现。

Coverage mechanism:

Coverage mechanism主要是为了解决重复attention问题,强化每一步的attention的对象为没有被强attention的词。

                                                                                           c^t_i= \sum_{t'=0}^{t-1}a^{t'}_i

                                                               e^t_i = v^T tanh(W_hh_i+W_ss_t+w_cc^t_i + b_{attn})

                                                                                          a^t_i = \frac{e^t_i}{\sum_j e^t_j}

                                                                                covloss_t=\sum_{i}min(a^t_i, c^t_i)                                            (3)

                                                                     loss_t = -logP(w^*_t)+\lambda \sum_imin(a^t_i, c^t_i)

下面用一个例子展示:

encoder的输入w_1w_2w_3
a^10.80.10.1
c^1000
covloss_1000
a^20.20.60.2
c^20.80.10.1
covloss_20.20.10.1
a^30.10.30.6
c^31.00.70.3
covloss_30.10.30.3
......

从公式(3)中我们看出我们将对encoder第i单词的(0,..., t-1)步的attention权重作为一个输入去计算对第i单词的第t步的attention值,这样可以让第t步感知之前的attention结果,论文又设计了一个covloss,从描述中我们可以看出这个这个损失函数的取值是之前(0,..., t-1)步attention值的和与第t步attention值之间的最小值,我们以表格中的covloss_3为例,实际计算时covloss_3=a^3_1 + a^3_2 + c^t_3,这里最小化covloss_3就是最小化这三项,a^3_1表示第3步对encoder第1个单词的attention值相对于之前步的attention值的和较小,也就是encoder第1个单词之前被attention的比较多,那当前就应该少attention这个位置,最小化a^3_1就是让当前attention对encoder第1个单词关注最低,a^3_2a^3_1相似不作解释,对于c^3_3表示当前的attention值大于之前的所有时间步对encoder第3个单词的attention值的和,可以理解为之前的时间步对encoder第3个单词的attention比较少,因此我们要强化该时间步对encoder第3个单词的attention,反过来就是最小化之前的attention和。

通过上述解释我们就可以搞清楚Coverage mechanism为何可以解决重复attention问题了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值