指针生成网络的简介
指针生成网络(Pointer-Generator Networks)是一个基于seq2seq+attention的生成模型,相比于seq2seq+attention的生成模型,它能够在一定的程度上解决oov(out of vocab)的问题。
回顾seq2seq+attenion
这一篇博客有比较详述的解析
对于seq2seq+attention,再decoder的每一个时间步的词,都是从词表(一共个)中选择概率最高的一个作为预测结果。
下面概述seq2seq+attenion的过程
encoder的输入:
decoder的输入:
(1) encoder在时间步
上,
是第
个词的词向量,
是
时刻的隐层,
是
时刻的隐层
(2) decoder在时间步t上,
是decoder在时间步
上预测的词的词向量,
是
时刻的隐层,
是当前时刻
的隐状态输出。
(3) ,
是decoder时间步骤为
时的词向量,
是encoder时间步为
的隐层;
是
的decoder时间步骤为
时的权重。
。
(4)
在decoder时间步骤为
时的权重
(5) ,
分别与
做运算,这里有多种计算方式,seq2seq+attention中有讲到。
(6)将context vec 和 当前隐层的信息结合起来,得到
(7)得到在
时刻的词的概率分布,
(8) 从
选取最大的一个值的索引,作为当前生成的词。
如上图的例子,输入Germany,目标生成beat,可以直观的看到,beat 的词分布(vocabulary distribution)由decoder的隐层和context vector共同得到,而context vector 是由 decoder当前输出和encoder每一个时间步的输出得到。
是decoder时间步为
时,对encoder时间步骤为
的关注度,
是decoder时间步为
的输出,
是encoder时间步为
的输出。
,
,
都是可以学习的参数。
是时间decoder时间步
对encoder每一个时间步的得分,进过