指针生成网络(Pointer-Generator Networks)的实现

 

 

指针生成网络的简介

指针生成网络(Pointer-Generator Networks)是一个基于seq2seq+attention的生成模型,相比于seq2seq+attention的生成模型,它能够在一定的程度上解决oov(out of vocab)的问题。

回顾seq2seq+attenion

        这一篇博客有比较详述的解析

对于seq2seq+attention,再decoder的每一个时间步的词,都是从词表(一共\large v个)中选择概率最高的一个作为预测结果。

下面概述seq2seq+attenion的过程

encoder的输入:\large x=(x_{1},\cdots ,x_{T_{x}})

decoder的输入: \large y=(y_{1}, \ddots ,y_{T_{y}})

(1) \large h_{t} = LSTM_{enc}(E(x_{t}),h_{t-1}) encoder在时间步\large t上,\large E(x_{t})是第\large x_{t}个词的词向量,\large h_{t-1}\large t-1时刻的隐层,\large h_{t}\large t时刻的隐层

(2)\large s_{t}=LSTM_{dec}(E(\hat{y}_{t-1}),s_{t-1}) decoder在时间步t上,\large E(\hat{y}_{t-1})是decoder在时间步\large t-1上预测的词的词向量,\large s_{t-1}\large t-1时刻的隐层,\large s_t是当前时刻\large t的隐状态输出。

(3) c_{i}=\sum_{j=1}^{T_{x}}\alpha_{ij}h_{j}c_{i}decoder时间步骤为i时的词向量,h_{j}是encoder时间步为j的隐层;\alpha_{ij}h_{j}decoder时间步骤为i时的权重。\small \alpha _{i} =\sum _{j=1}^{T_{x}}\alpha _{ij}=1

(4) \small \alpha _{ij}=\frac{exp(e_{ij})}{\sum_{k=1}^{T_{x}}exp(e_{ik})}     h_{j}decoder时间步骤为i时的权重

(5) \small e_{ij}=score(s_{i},h_{j}),\small s_{i}分别与\small h_{j}做运算,这里有多种计算方式,seq2seq+attention中有讲到。

(6)\small \hat{s}_{t}=tanh(W_{c}[c_{t};s_{t}])将context vec 和 当前隐层的信息结合起来,得到\small \hat{s}_{t}

(7)\small p(y_{t}|y_{<t},x_{1:T_{x}})=softmax(W_{s}\hat{s}_{t})得到在\small t时刻的词的概率分布, \small p(y_{t}|y_{<t},x_{1:T_{x}})\subset \mathbb{R}^{v}

(8) \small word_{t}=argmax(p(y_{t}|y_{<t},x_{1:T_{x}}))\small p(y_{t}|y_{<t},x_{1:T_{x}})选取最大的一个值的索引,作为当前生成的词。

如上图的例子,输入Germany,目标生成beat,可以直观的看到,beat 的词分布(vocabulary distribution)由decoder的隐层和context vector共同得到,而context vector 是由 decoder当前输出和encoder每一个时间步的输出得到。

                                                                     \small e_{i}^{t}=V^{T}tanh(W_{h}h_{i}+W_{s}s_{t})\cdots \cdots \cdots \cdots \cdots \cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots (1)

\small e_{i}^{t}decoder时间步为\small t时,对encoder时间步骤为\small i的关注度,\small s_{t}decoder时间步为\small t的输出,\small h_{i}encoder时间步为\small i的输出。\small V\small W_{h}\small W_{s}都是可以学习的参数。

                                                                       \small a^{t}=softmax(e^{t})\cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots\cdots\cdots \cdots\cdots\cdots\cdots \cdots \cdots (2)

\small e^{t}=[e_{1}^{t},\cdots ,e_{T_{x}}^{t}]是时间decoder时间步\small t对encoder每一个时间步的得分,进过

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值