码迷,mamicode.com
首页 > 其他好文 > 详细

NLP系列3:seq2seq-->pgn

时间:2020-02-20 22:28:37      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:net   追踪   不同   sig   最大的   技术   softmax   href   获得   

seq2seq

技术图片

每个词在编码器端,经过双向LSTM,在解码端编码层的隐藏状态和解码器的隐藏状态,做一个加法attention:
\[ e_i^t = v^Ttanh(W_hh_i+W_ss_t+b_{attn}) \]

\[ a^t = softmax(e^t) \]

其中:

  • \(h_i\) -> encoder hidden
  • \(s_t\) -> decoder state
  • \(b_{attn}\) -> 偏置向量

得到上下文向量\(h_t^*\)
\[ h_t^*=\sum_ia_i^th_i \]
其中:

  • \(h_t^*\) -> context vector

有上下文向量和解码的隐藏状态,经过两层线性层,得到最后的词表概率分布
\[ P_{vocab}=softmax(V^`(V[s_t,h_t^*]+b)+b^`) \]
在预测阶段选择概率最大的那个词,作为解码端的输出。在训练的时候,通过求负对数函数,得到损失函数,令损失函数最小:
\[ loss_t = -logP(w_t^*) \]
整个句子的损失为:
\[ loss = \frac{1}{T}\sum_{t=0}^{T}loss_t \]

  • 贡献

Seq2Seq的模型结构在摘要的生成方面提供了可能。

  • 缺点

    1、无法生成OOV,只能生成词汇表的词

    2、会产生错误的事实,比如姓名之间,Amy可能变成Bob;

    3、自我重复,如:贴膜,贴膜,质量比较高,贴膜,质量比较高,贴膜,质量比较高,贴膜,质量比较高,贴膜,质量比较高,贴膜,质量比较高,贴膜,质量

改进

指针生成网络 - > PGN

  • 一句话概括

    将decoder端的softmax加上源端的attention分布的混合概率,两部分的权重依赖\(p_{gen}\),该值在0~1,越大,表示越依赖生成部分。

文章思路

  • 首先使用了一种混合的指针生成网络,他能够从源端复制单词,也能够从词表冲生成词语。
  • 使用coverage,去追踪那些已经被总结的单词,保证不会重复生成。

pointer generator model

技术图片

指针生成网络是baseline和指针网络的混合,它可以通过指向去复制,也可以从固定的词表当中去生成词汇。注意力分布的计算和上下文向量的计算不变。

多增加了一个生成概率,属于0~1.对于每一个解码时刻,都存在这样的上下文向量,解码状态隐藏层和解码的输入共同计算概率:
\[ P_{gen}=sigmoid(W_{h^*}^Th_t^*+W_s^Ts_t+W_x^Tx_t+b_{ptr}) \]
其中:

  • \(t\) -> time step
  • \(h_t^*\) -> context vector
  • \(s_t\) -> decoder state
  • \(x_t\) -> decoder input

最后词\(w\)的概率由词表概率和源端(encoder的输入)的attention分布共同获得,如果\(w\)未在源端出现,则\(a\)为0。在预测阶段,输出一个概率分布,其维度是词表长度加上源端句子中未出现在词表冲的单词个数。
\[ P(w)=P_{gen}P_{vocab}(w) + (1-P_{gen})\sum_{i:w_i=w}a_i^t \]
其中:

  • \(a_i^t\) -> attention weight

因为指针网络控制输出是copy自原文还是从字典生成得到的,如果词w没有在源端,所以我们attention部分的权重应该为0;w若是属于oov,那么\(p_{gen}=0\) .


笔者极端理解情况:假设原始输入的是道奇........,预测是丰田,丰田是个oov词,\(p_{gen}=0\),丰田原文又没有出现,\(a_i^t=0\),那这样是不是就又出现的问题了?----> 极少会出现


优点-->解决了seq2seq的1、2两个问题

  • pointer-generator network能够很容易的复制输入的文本内容,可以通过\(P_{gen}\)来调节;
  • pointer-generator network能够从输入的文本内容中复制oov词汇,这是最大的优点,这个也可以采用更小的词汇表vocabulary,较少计算量和存储空间;
  • pointer-generator network训练会更快,在seq2seq训练过程中用更少的迭代次数就能取得一样的效果。

coverage mechanism

在序列到序列的模型中,重复问题是一个普遍问题,尤其长文本摘要生成任务中。在我们的coverage模型中,使用了一个\(c^t\),其代表了当前解码时刻,\(t\)之前的所有注意力分布的和。
\[ c^t=\sum_{t^`=0}^{t-1}a^{t^`} \]
\(c^0\)是个零向量,在计算attention得分的时候,我们将词向量作为新的输入.
\[ e_i^t=v^Ttanh(W_hh_i+W_ss_t+w_cc_i^t+b_{attn}) \]
也需要增加loss惩罚项:
\[ covloss_t=\sum_imin(a_i^t,c_i^t) \]

\[ loss_t = -logP(w_t^*)+\lambda\sum_imin(a_i^t,c_i^t) \]

以第一时刻为例,\(c_1\)表示的是\(a_0\),那么\(a_0\)\(a_1\)当中选择最小的作为loss.如果\(a_0\)\(a_1\)关注的都是同样的分布,那么loss就会比较大,如果他们关注的是不同的分布,因为选择的是两个中最小的一个,所以这样loss会比较小.目的就是想让他每一时刻关注的分布是不一样的,这样避免重复.

优点 --> 解决了seq2seq repeat问题

思考

  • 问答摘要是人为做出来的,具有主观性,有时候模型生成的是正确的,但是和参考摘要去匹配却只有很低的分.

  • 训练参数减少是因为有了copy功能,解决了oov问题,我们的vocab就会更小,所以较少了训练参数量.

参考

https://blog.csdn.net/ganxiwu9686/article/details/87521054

NLP系列3:seq2seq-->pgn

标签:net   追踪   不同   sig   最大的   技术   softmax   href   获得   

原文地址:https://www.cnblogs.com/monkeyT/p/12337556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!