Seq2seq框架下的文本生成( 二 )


首先 , generate-mode和copy-mode的输出概率如下:

Seq2seq框架下的文本生成

文章插图
 
V就是传统seq2seq的词汇表 , X在这里是用于预测copy词的词典 , 可以看到无论P_c还是P_g , 和传统seq2seq的形式都是一样的 。区别在于词典 , X上针对输入文本构造的 , 因此其中可能包含V中没有的词 , 所以copy-net解决上面提到的OOV问题的关键就是用这个词典预测copy词 。
此外 , 蓝框中包含了复杂的状态更新机制 。可以看到 , S4的输入不仅包含Tony的词向量 , 还有一个Selective Read向量 , 这个是State Update机制计算得到的 , 这个状态更新机制对encoder后的输入矩阵M进行加权求和 , 意图是定位M中的某个位置 , 即输入序列中某个位置的元素 , 如下图公式所示 。
Seq2seq框架下的文本生成

文章插图
 
完成状态更新后输入给generate-mode和copy-mode分别计算两个打分函数 。
Seq2seq框架下的文本生成

文章插图
 
简单来说 , copy-net的核心思路就是根据输入语料扩展原有词汇表 , 这样也就扩展了输出的概率向量的维数 。不过要特别注意结合预测mode的实现 , 本质上最后仍然是预测一个维数更高的概率向量 , 所以最后需要合并两个维数不同的概率向量 , 即针对词典重合的部分的对齐处理 , 还是有点麻烦的 , 相比之下 , 下面介绍的pointer-generator模型就要简明许多 。
  • Get To The Point-Summarization with Pointer-Generator Networks
本文与copy-net的思路有诸多重合 , 但设计上比copy-net简单许多 。核心同样是想办法让最终预测的概率向量涵盖输入文本中出现的OOV 。
Seq2seq框架下的文本生成

文章插图
 
上图简单明了 , 以传统生成的绿色概率分布占P_gen的权重 , 与输入有关的蓝色概率分布占(1-P_gen) 。与copy-net不同 , 这里直接用了pointer-net的思路 , 与输入有关的概率分布由attention直接生成 。实现上 , 由于这个概率分布与输入序列直接相关 , 需要对每次feed的batch都扩展词汇表 , 其实就是在原有词汇表之后追加OOV对应的index , 追加的部分 , 用于在最终合并概率分布时提供index , 具体可参照作者提供的源码 。
此外 , 本文还提出了一个特殊的coverage机制 , 用来处理生成词重复问题 。
Seq2seq框架下的文本生成

文章插图
 
基本思路是 , 用之前attention矩阵的叠加作为覆盖向量c_t , 参与当前attention的计算 , 从而让当前的attention尽量避免出现重复的位置 。此外可以在计算损失函数时也加入覆盖向量c_t缓解重复问题 。
Seq2seq框架下的文本生成

文章插图
 
融合知识特征关于融合输入元素的尝试进一步启发了NLPer , 对于这类学习文本向量表示的模型 , 利用实体特征和外部知识图谱直觉上就有点靠谱 , 既然输入序列中的词可以利用 , 那么充分利用实体信息知识图谱等 , 为文本添加额外的知识特征自然也是可能的 。
  • Generating Natural Answers by Incorporating Copying and Retrieving Mechanisms in Sequence-to-Sequence Learning
本文来自阿里团队 , 以问答系统为实验场景 , 在copynet的基础上加入知识检索模块共同配合回复生成 。模型结构图如下:
Seq2seq框架下的文本生成

文章插图
 
其实无论模型结构还是文章结构 , 本文和那篇copynet都非常相近 , 相当于增加了预测知识的copy-mode机制 , 因此这里不再介绍本文的细节 。不过从文中与copynet对比的实验结果来看 , 引入知识检索带来的提升非常可观 , 虽然实验仅用在对话生成领域 , 不过在其他文本生成领域引入知识特征也同样值得尝试 , 下一篇同样来自阿里团队的工作 , 将融合了知识特征的seq2seq结构用于网购商品的摘要生成 。


推荐阅读