万变不离其宗,从文本生成看Seq2Seq模型

更新于 2017年10月18日 机器学习
我来说两句
wx:让创新获得认可   网页版 2017-10-17 16:25
会议活动 深度学习 算法 应用 资源 自然语言处理 AAAI ICML 会议 机器人 李军毅 社交网络 神经网络 书籍 信息检索 语言学 主题模型
「盘点 | 万变不离其宗,从文本生成看Seq2Seq模型」 关文本生成的论文,更有OpenAI等新兴公司陆续踏足这一领域。本文将从一系列文本生成的论文展开,为大家介绍Seq2Seq模型及其变体在这一领域是如何应用的。其中,文中有部分内容不是原创,如有侵权,请及时联系作者。本文收录于RUC AI Box专栏 https://zhuanlan.zhihu.com/RucAIBox作者:李军毅 ,来自中国人民大学大数据管理与分析方法研究北京市重点实验室,目前研究方向为深度学习、文本生成。  论文列表:《Recent Advances on Neural Headline Generation》 JCST 2017《A Neural Conversational Model》 ICML 2015《Topic Aware Neural Response Generation》 AAAI 2017 《A persona-Based Neural Conversation Model》 ACL 2016《Incorporating Copying Mechanism in Sequence-to-Sequence Learning》 ACL 2016《Context-aware Natural Language Generation with Recurrent Neural Networks》 AAAI 2016《Learning to Generate Product Reviews from Attributes》 EACL 2017  研究综述 2017年发表在JCST的文章《Recent Advances on Neural Headline Generation》主要是对Neural Headline Generation 的最新研究进展做了综述。同时,详细介绍了 Generation Model中的各个环节,包括 encoder, decoder 以及 training strategy。 在 Neural Headline Generation 中,模型采用的都是一种 end-to-end encoder-decoder 的框架,end-to-end 的好处在于通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多的可以根据数据进行自动调节的空间,增加模型的整体契合度。在encoder 部分,介绍了 Bag-of-Words Encoder,Convolutional Encoder,RNN Encoder 和Bidirectional Encoder,其中 RNN Encoder 又分别介绍了 LSTM-RNN和GRU-RNN 两种变体。Bag-of-Words Encoder 是对 word embedding 求平均,忽略了词的顺序和词与词之间的联系,Convolutional Encoder 使用卷积神经网络中的时延神经网络进行编码,无法解决长期依赖的问题,ENN Encoder 会出现梯度消失和梯度爆炸的问题,Bidirectional Encoder 分别从前后两个方向学习 hidden state,具体的公式论文中已详细列出。在 decoder 部分,介绍了Neural Network Language Model,RNN Decoder 以及 Attention-Based RNN Decoder,Neural Network Language Model 没有考虑历史信息对生成文本的贡献,因此在后来加入了attention 的机制,具体的公式论文已详细列出。在 training strategy 部分,主要介绍了两种训练策略,一种是单词水平的最大似然估计法(Maximum Likelihood Estimation),另一种则是句子水平的最小风险训练法(Minimum Risk Training)。 下面是利用最小风险训练法进行训练的算法实现:   Seq2Seq基本模型的应用 本小节部分引用于文章“Datartisan 数据工匠 | 数据时代,匠心独运”。 2015年发表在ICML的《A Neural Conversational Model》是一篇利用seq2seq模型进行对话生成的论文。因为先前关于对话模型的研究局限于某些特定的领域,例如预定机票,点餐,并且还需要人工书写规则,所以此篇论文就利用已提出的 seq2seq 框架进行对话生成的工作。Seq2Seq 解决问题的主要思路是通过深度神经网络模型(常用的是LSTM,长短记忆网络,一种循环神经网络)将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节组成。如下图:  这与我们对话生成的工作是相似的,将输入的提问序列映射为输出的回答序列。比如说我们现在有提问序列“A B C EOS” (其中EOS=End of Sentence,句末标识符)作为输入,那么我们的目的就是将“A”,“B”,“C”,“EOS”依次传入模型后,把其映射为回答序列“W X Y Z EOS”作为输出。 在编码环节,各类长度不同的输入序列x将会经由循环神经网络构建的编码器编译为语境向量c。向量c通常为 RNN 中的最后一个隐节点,或是多个隐节点的加权总和。在解码环节,语境向量c将会进入一个 RNN 解码器中进行解译。简单来说,解译的过程可以被理解为运用贪心算法(一种局部最优解算法,即选取一种度量标准,默认在当前状态下进行最好的选择)来返回对应概率最大的词汇,或是通过集束搜索(Beam Search,一种启发式搜索算法,可以基于设备性能给予时间允许内的最优解)在序列输出前检索大量的词汇,从而得到最优的选择。在这篇论文中,attention 机制并没有运用到其中,但 attention 机制作为seq2seq模型的一个重要组成部分,最早由Bahdanau等人于2014年提出,该机制存在的目的是为了解决RNN中只支持固定长度输入的瓶颈。在该机制环境下,Seq2Seq 中的编码器被替换为一个双向循环网络(bidirectional RNN)。如下图所示: 在 attention 机制中,我们的源序列X=(x1,x2,…,xt)分别被正向与反向地输入了模型中,进而得到了正反两层隐节点,语境向量c则由RNN中的隐节点h通过不同的权重α加权而成,其公式如下: 其中,η为一个调整“注意回应强度”的函数。我们知道每一个隐节点 hi 都包含了对应的输入字符 xi 以及其对上下文的联系,这么做意义就在于现在模型可以突破固定长度输入的限制,根据不同的输入长度构建不同个数的隐节点,故不论我们输入的序列(比如待翻译的一段原文)长度如何,都可以得到模型输出结果。  Seq2Seq模型的变体及其应用 TA-Seq2Seq模型 本小节参考文章“如何生成主题相关的对话 | 每周一起读 #11”。 2017年发表在AAAI的《Topic Aware Neural Response Generation》是一篇通过在原有的 seq2seq 模型中加入输入语句的topic信息,从而对文本生成的表现进行优化的论文。文中模型的框架如下图: 1、在 Message Encoder 中,模型通过BGRU网络对输入信息做了编码,获得了在每一时刻的隐藏状态hidden state,图中的 hi; 2、在 Topic Words 中,模型运用了一个事先通过新浪微博语料训练好的TwitterLDA模型,其中算法是 collapsed Gibbs sampling。输入信息后,模型给出所有 topic,然后取前n(n=100)个最高概率的词作为 topic,同时去除通用词。最后将这些 topic words 转化为各自的向量表示 ki ,这些向量是通过计算每个 topic word 在所有 topic 下的归一化频率得到的,见文中Eq.(4); 3、在 Message Attention 中,这一部分和往常的 attention 机制的原理一样,得到了输入语句的 context vector 语境向量 ci ; 4、在 Topic Attention 中,这和现有的 attention 机制有点不同,它不仅考虑了每一个 ki 的作用,还加入了在第一步中得到的最后一个 hidden vector,这一做法目的是为了在计算最后的 topic vector 主题向量时,通过加入(总结了输入语句中的信息),增强 ki 中相关主题词的影响,提高其在输出中的出现概率,从而使得与输入语句的内容更贴合; 5、最后,构造由 message attention 和 topic attention 联合影响的解码概率,见文中 Eq.6,可以看到,最后的概率由两部分概率加和而成,该概率和强调了 topic words 的作用,基于这个概率可以进行解码。 总结:论文提出的 TA-Seq2Seq 模型的核心思想是,通过引入 LDA 模型获得文本主题,结合 Seq2Seq 模型来产生更有信息含量、更为多样性及更话题相关的对话回答。其思路是在现有的带attention机制的 Encoder-Decoder 模型架构上,通过结合输入信息的 message attention 和 topic attention 来共同影响对话的回答的生成。与标准的 seq2seq+attention 模型相比,TA-Seq2Seq 模型在对第一个单词解码时做了较好的处理。标准的 seq2seq+attention 模型在生成第一个单词时只取决于 c_0 ,而在 TA-Seq2Seq 模型中,加入了 o_0 先验信息的影响, 因此本文模型可以提高首次解码的质量,从而对整个解码结果的质量产生正向影响。 论文的整体思路比较简单直接,在阅读过程中,个人觉得有几点值得注意或借鉴的: 1、引入了 topic 的影响。在人们的实际对话过程中,在一定程度上,两者间的对话会基于某个话题来进行,引入 topic 的作用有一定的合理性; 2、 与传统的 attention 机制不同,topic attention 除了利用 topic words 的状态信息,还利用了 input message 的最终状态作为额外的输入来减弱不相关主题词并加强相关主题词的概率; 3、 在最后对话生成的过程中,采取了有偏于 topic words 的生成概率来增大 topic words 的出现几率; 4、不同于传统的 seq2seq 模型,在生成对话的第一个单词时,采用了 c0 和 o0 的组合,而不是只有 c0 ,这样的好处是可以产生更为准确的第一个词,来给后续的词及整个句子的产生带来了更好的效果,因为后续词的产生会依赖于前面生成的词。  Speaker 模型和 Speaker-Addressee 模型 2016年发表在 ACL 的《A persona-Based Neural Conversation Model》提出了两个模型:Speaker Model 和 Speaker-Addressee Model,分别对 respondent 和 respondent-addressee进行建模。模型在生成对话时考虑了 user identity 的影响,解决了在多轮对话时回答不一致的问题。下图是一个4层 seq2seq 模型在生成对话时前后回答不一致的例子,同样的问题,换一种问法就会得到不同的回答:  论文针对这个问题,将user identity(比如 background facts、user profile,age,country等信息)考虑到model中,构建出一个富含用户特色的 seq2seq 模型,为不同的 user,以及同一个user对不同的对象对话生成不同风格的response。 下图是 Speaker Model 的基本框架:  可以看出,这是一个典型的 seq2seq 模型,不同的地方在于在 decoding 部分增加了一个speaker embedding。因为无法对用户的信息显式地进行建模,所以用了一种 embedding 的方法,这个 embedding 中编码了 speaker 的信息,通过训练来得到 speaker 向量,下面左边的图是speaker向量在二维平面上的表示,具有相似背景信息的 user 在模型中会被聚集在一起,与下面右边二维图里的word embedding一个道理。 传统的利用 LSTM 的 Seq2Seq 模型在 decoding 时的公式如下图:  在 Speaker Model 中,公式做了小小的增加, vi 表示 speaker embedding:  第二个模型是 Speaker-Addressee Model,这个模型与上一个模型思想是一致的,在多人多轮对话中,每个人在面对不同的人说话时,他的说话方式是不同的,不能单单只对一个人进行建模,所以应该需要考虑说话的对象,用 V_{i,j} 来表示两个speaker i 和 j 之间的这种对话模式,decoding 部分计算如下式:  模型最后为了解决 Seq2Seq 模型容易出现 I don’t know 这些无意义的回答,采用了 Li et al.(2016) 中的方法,通过 beam search 生成一个 N-Best List,用一些规则来重新排序得到更好的结果。 总结:论文用了类似于word embedding的思路,对 user infomation 进行建模表示,同样的思路可以用于情绪、上下文信息中。 CopyNet 模型 本小节参考文章Incorporating Copying Mechanism in Sequence-to-Sequence Learning。   2016年发表在 ACL 的《Incorporating Copying Mechanism in Sequence-to-Sequence Learning》提出了一个 CopyNet 模型,此模型借鉴了人类在处理难理解的文字时采用的死记硬背的方法,将传统的生成模式与拷贝模式结合起来构建了新的模型。论文提出的 CopyNet 模型会定位输入序列中的某个片段,然后将此片段拷贝到输出序列中。例如下面的两个例子:  无论是传统的 encoder-decoder 还是加入了 attention 之后的模型,它们都严重依赖于语义的表示(representation),这导致系统在需要引用输入的某个子序列例如命名实体或日期时会出现非常不准确的情况。相反,这种拷贝机制更接近人类语言处理时的死记硬背模式。CopyNet 模型不仅具备常规的生成文本的能力,还可以从输入序列拷贝合适的片段到输出序列中。 下面是 CopyNet 模型的基本框架:  Encoder: 采用一个双向 RNN 模型,将源序列转换为一个隐藏层表示的矩阵作为decoder的输入。 Decoder: 与传统 RNN-decoder 有三个不同之处:预测:CopyNet 在预测下一个单词时,结合了两种模式下的概率,一种是生成模式generate-mode,一种是拷贝模式 copy-mode,生成模型是一个结合两种模式的概率模型。状态更新: CopyNet 不仅利用在 t-1 时刻生成的单词的词向量,而且利用其在M矩阵中对应位置的hidden state来更新 t 时刻的状态。读取M: CopyNet会利用 attentive-read 和 selective-read 两种方法来读取M矩阵,分别获取M中内容和位置的信息。 生成模式和拷贝模式: 首先,构造词汇表:表示高频词汇表,表示输入序列中只出现过一次的单词, UNK 表示超纲词 OOV 。最终,输入序列中的单词是这三个集合的并集。 给定了 decoder 在 t 时刻的状态和矩阵 M,生成下一个单词 yt 的概率为: 其中g表示生成模式,c表示拷贝模式,这两种模式的概率公式分别为:  状态更新:decoder 的状态更新公式为: 不同的是,这里 t-1 时刻的y是,后半部分是M矩阵中与t时刻y相关的状态权重之和,如下: M矩阵: M矩阵中既包含了内容信息,又包含了位置信息。CopyNet 在 attentive read 时由内容信息(语义)和语言模型来驱动,即生成模式;在拷贝模式时,selective read 由位置信息来控制。 位置信息的更新方式如下图所示: 总结:论文提出的 CopyNet 模型的核心思想是,通过引入拷贝机制,结合原有 Seq2Seq 模型中的生成机制来解决对话回答中出现的不一致问题。其思路是在现有的带attention机制的 Encoder-Decoder 模型架构上,在生成文本时加入一部分位置信息来共同影响对话的回答的生成。本篇论文的优势在于处理OVV问题时所提出的拷贝机制简单可行。 C2S 模型和 gC2S 模型 2016年发表在AAAI的《Context-aware Natural Language Generation with Recurrent Neural Networks》提出了两个模型:C2S 模型和 gC2S 模型。论文的主要工作是针对商品的描述生成评论,实验表明人工评判时有50%以上的生成评论都通过了,90%以上骗过了现有的识别算法。 传统的RNN模型进行文本建模的方式如下图:  论文中的 C2S: Contexts to Sequences 模型如下图,相比于传统方式,C2S 在开始翻译时多了一个表示上下文的向量。但是,当生成的序列太长时,context 中的信息很难传播,所以作者对此又进行了改进:  论文中的 gC2S: Gated Contexts to Sequences 模型如下图,作者在上下文信息和下一个单词之间建立了一个直接的联系,称为 gated mechanism,用于评价当前步骤与上下文之间的关系: Attention-Enhanced A2S 模型 2017年发表在 EACL 的《Learning to Generate Product Reviews from Attributes》提出了一个 attention-enhanced attribute-to-sequence模型,利用商品属性,例如 user,product,rating等信息,来生成商品评论。模型的基本框架如下图: 因为评论的多样性,在给定商品属性的同时生成评论是一项具有挑战性的工作。在本篇论文中使用的三个商品属性:user,product 和 rating 中,rating 是一个比较显式的线索,它可以直接决定评论中情绪词的使用,而 user 和 product 就是比较隐式的线索,同一个 user 对不同的 product 表现不一,反之同理。 模型分为三个部分:attribute encoder,sequence decoder 和 attention mechanism。Attribute encoder 是一个多层感知机,用于将 attribute 编码为 vector,sequence decoder 是一个 coarse-to-fine 的多层 RNN。 下图是没有 attention 机制下的模型: Attribute Encoder: 其中 e(αi) 是 one-hot 向量, g(αi) 是对应的 attribute vector,利用α来初始化 L-layer RNN。 Sequence Decoder: 在上图多层RNN中,横轴是时间,纵轴是层数。隐状态由下列公式更新:  最终,利用 softmax 函数预测下一个单词的概率为: Attention Mechanism: 总结:本文虽然是一个很简单的 attention-based encoder-decoder 模型的应用,但它加深了我对seq2seq 模型的理解和运用,是一篇很实用且易实现的例子。  全文总结 纵观所有论文,最基本的 seq2seq 模型框架就是 encoder-decoder,再加上 attention 机制,不管是往 decoder 里加入 topic 信息,还是 speaker 信息,亦或是 新增加 copy 机制,都万变不离其宗。 为了更好的理清这一系列seq2seq模型的思路,我对此次所讲的所有论文画了一个总结图如下,中间核心的黑色部分是最基本的 seq2seq 模型框架,其余浅灰色部分是上述论文做的一些创新性的工作,最开始是在 encoder 和 decoder 之间加入的 attention 机制,这里我称之为 message attention,然后2017年 AAAI 的《Topic Aware Neural Response Generation》类似地提出了一个 topic attention 机制,与原先的 attention 机制共同作用,之后在 decoder 部分创新最多,2016年 ACL 的《A persona-Based Neural Conversation Model》加入了 speaker vector 和 interaction vector 的影响因子,同年 ACL 大会的另一篇论文《Incorporating Copying Mechanism in Sequence-to-Sequence Learning》加入了 copying mechanism,2016年 AAAI 的《Context-aware Natural Language Generation with Recurrent Neural Networks》则加入的是 gating mechanism。  -END-现已涵盖CV、机器人、NLP、ML、IoT等多个当下火热的技术话题。我们每周邀请来自产学研的优秀技术人进行线上分享,目前群里已汇聚数千位上述领域的技术从业者。入群方式>>关注“将门创投”(id:thejiangmen)微信公众号,在后台回复关键词“技术社群”,提交入群申请表。通过审核后,我们会在第一时间发出邀请。    将门创投让创新获得认可!微信:thejiangmenservice@thejiangmen.com via: http://mp.weixin.qq.com/s?__biz=MzAxMzc2NDAxOQ==&mid=2650364322&idx=1&sn=61828cc328626779a65d57108ea0c35c&scene=0#wechat_redirect

 

回复