前言文本生成 , 旨在利用NLP技术 , 根据给定信息产生特定目标的文本序列 , 应用场景众多 , 并可以通过调整语料让相似的模型框架适应不同应用场景 。本文重点围绕Encoder-Decoder结构 , 列举一些以文本摘要生成或QA系统文本生成为实验场景的技术进展 。
Seq2seq框架2014年NLP界有两份重要的成果 , Learning Phrase Representations using RNN Encoder–Decoder for Statistical machine Translation和Sequence to Sequence Learning with Neural Networks 。虽然在Decoder的输入上有差别 , 但结构上两者都将Encoder-Decoder结构应用在翻译场景中 , 并由此开始 , seq2seq框架在机器翻译 , 对话生成等领域中占据重要位置 。另外 , 前者首次提出GRU结构 , 后者采用Beam Search改善预测结果 , 这些都成为如今seq2seq框架的基础技术元素 。
随后 , Bahdanau在Neural Machine Translation by Jointly Learning to Align and Translate中提出了融合attention和seq2seq结构的NMT模型结构 , 至此 , 由Encoder-Attention-Decoder组成的seq2seq框架正式形成 。
文章插图
atention-seq2seq如上图所示 , 红色部分为Encoder模块 , 用于编码输入文本 , 计算状态值作为黄色的Decoder模块的初始状态;蓝色部分是Attention机制 , 结合Encoder模块和Decoder输入计算Context向量;最终Decoder部分结合Encoder的输入状态 , Context向量 , 以及Decoder的历史输入 , 预测当前输出对应于词典的概率分布 。
融合关键输入信息了解机器翻译或生成任务的朋友都知道 , 无论Seq2seq模型多么复杂 , 最后都是用类似softmax的结构输出概率向量 , 然后映射到词典中某个词的的index , 所以词表中没有的oov是无法被预测的 。不同于机器翻译的是 , 摘要生成这类任务产生的摘要中很可能需要输入文本的信息 , 且通常会是某些关键词句 , 我们当然不希望因为词典中没有就丢失这些关键信息 , 因此需要想办法利用到输入文本中的信息 。
- Pointer Networks
作者的思路很简单 , 输出完全由输入决定 , 其实就是让输出指向某个输入 , 或者说就是预测输入的位置 , 这样最后预测概率向量的维数就是输入序列的长度 , 你再看attention的计算过程:
文章插图
第一行结合了输入和输出的编码信息 , 第二行计算了输入序列的权重 , 这个权重不就是输入序列的概率向量么?没错就这么简单!对于找凸包 , Delaunay三角剖分 , 旅行商问题等这类输出序列完全依赖输入序列的问题 , pointer-net可以给出很精巧的解决方案 。
此外 , 可以看到 , 虽然pointer-net没有直接解决OOV问题 , 但针对输出依赖输入的问题给出了一个很好的思路 , 下面的模型在考虑依赖输入OOV问题时多少都受到了pointer-net的启发 。
- Incorporating Copying Mechanism in Sequence-to-Sequence Learning
文章插图
上图展示了copy-net , 左边是传统的attention-seq2seq结构 , 右边包含了copy-net全部改进思路 。红框中展示了结合generate-mode和copy-mode的输出词预测 , 下面的蓝框包含了针对Decoder编码状态值的改进 。
推荐阅读
- 静下心来捧杯清茶,捧杯清茶
- 多场景下MySQL临时表有什么用?
- 前端技术框架选型,跨端框架盘点
- 极简主义下的茶艺美学,茶道与茶艺美学
- vivo|别不信 你的下一台平板电脑可能是手机
- 下肢血管解剖
- 立冬下雨好还是天晴好?
- 老曼峨古树茶口感特点,下关布朗返濮古树饼茶赏析
- 晋商与下梅村,灵与元居士青山潭饮茶饮茶诗歌作品
- 鬼压床很真实 鬼压床解释一下