面向回复生成的Seq2Seq模型概述

近年来随着深度学习技术的兴起,越来越多深度学习模型被应用到各种自然语言处理任务中。Sequence to sequence是一种建模两个序列间关系的通用深度学习模型,这种高度抽象的特性,使得其可以应用到多种序列化的自然语言处理任务中,如问答系统(Yin J etal. 2015),机器翻译(Cho Ket al. 2014)等。本文将简要说明Sequence to sequence模型的基础结构及其上的一些改进等相关知识,并重点介绍一下其在对话系统中的应用。

模型结构

我们将Sequence to sequence 模型的输入和输出分别称为输入序列和输出序列。一个标准的Sequence to sequence 模型通常由两部分组成:Encoder和Decoder(如图1)。Encoder部分负责依次读入输入序列的每个单位,将其编码成一个模型的中间表示(一般为一个向量),在这里我们将其称为上下文向量c。Decoder部分负责在给定上下文向量c的情况下预测出输出序列。

在自然语言处理应用中,Encoder和Decoder部分通常选择用Recurrent Neural Network(RNN)来实现。这样做的原因基于以下几点:首先,RNN作为一种循环结构可以方便地处理可变长序列的数据。其次,由于RNN中的隐层状态随着按时序读取的输入单元而不断发生变化,因此它具有对序列顺序的建模的能力,体现在自然语言处理任务中,即为对词序的建模能力。而词序也恰恰是自然语言处理任务中需要建模的重点。最后,RNN可以作为一个语言模型来预测出给定前文的基础上下一个字符出现的概率,这个特性使得其可以应用在各种文本生成任务中预测出语法正确的输出序列,从而实现Decoder的功能。

             图1  Sequenceto sequence模型结构

模型的改进

在基本Sequence to sequence 模型基础上,我们还可以结合一些其他结构来提升其在某些任务中的效果。在机器翻译任务上,Cho等人在Decoder部分进行了改进,为Decoder RNN的每个结点添加了由Encoder端得到的上下文向量作为输入,使得解码过程中的每个时刻都有能力获取到上下文信息,从而加强了输出序列和输入序列的相关性(Cho Ket al. 2014)。在此基础上,Bahdanau 等人做了进一步的改进(如图2),Encoder部分使用双向RNN,使得Encoder的每个隐层结点同时包含来自该位置之前和之后两个方向的信息,而不仅仅只能总结历史上下文信息。在Decoder部分,他们提出,原有模型依靠一个定长的上下文向量c来表示输入序列的信息,但一个向量可能并不足以编码整个输入序列的所有信息,从而形成了系统的瓶颈。基于以上假设,他们加入了Attention机制,在解码输出序列的每个单位时动态计算出Encoder所有隐层状态对当前解码过程的重要性,然后按重要性大小对隐层状态赋权,进一步计算出Encoder隐层状态的加权和作为动态的上下文向量。这个过程类似于统计机器翻译中的对齐过程(Bahdanau D et al. 2014)。

       

        图2带Attention的双向RNN结构

在回复生成(Response Generation)任务中,Shang等人针对单轮对话任务提出了一种混合模型,使用基础模型的上下文向量建模输入序列的整体信息,使用Attention的加权和动态捕捉每次解码所需的局部信息,将两者拼接作为新的上下文向量进行解码(Shang L et al. 2015)。此外,Serban等人提出了多层次的RNN模型来完成多轮对话任务。其中底层Encoder负责句子级的编码,高层Encoder读取底层Encoder对所有历史句子的编码作为输入从而对上下文进行编码,最后由Decoder根据上下文编码解码出输出序列(Serban I Vet al. 2016a)。

值得一提的是,用于回复生成的Sequence to sequence模型所产生的回复,存在一个较为普遍的问题:回复内容的相关性问题。通过实验结果的观察,大家发现模型总是倾向于生成一般性的万能回复,如“我不知道”,“我也是”等。很多人针对这个问题对Sequence to sequence模型进行了相应的改进。Li等人提出可以使用最大互信息目标函数来训练模型,将输入输出序列的互信息视为相关性的参考指标,使模型预测出和输入序列具有最大互信息的输出序列,从而获得相关性更好的回复(LiJ etal. 2015)。Serban等人提出了在生成阶段引入一个随机的隐变量来增强回复的多样性(Serban I V et al. 2016b),之后又提出了在基本结构上加入一个主题词Encoder以加强回复和输入序列相关性的方法(Serban I V et al. 2016c)。此外,Mou等人也基于这种利用主题词的方法来解决万能回复的问题,他们首先使用统计的方式计算出一个应该在回复中出现的主题词,然后由这个主题词开始使用Sequence to sequence模型先逆向生成回复的前半句,然后再正向生成回复的后半句,两者拼接形成最终的回复(Mou L et al. 2016)。我们近期的一个工作也尝试解决这个问题。我们认为模型中所有回复均由开始字符开始生成,可能是导致万能回复的一个问题,进而将生成阶段分成了两部分进行,在不使用开始字符的条件下生成第一个回复的字符。我们将Encoder的最后一个隐层状态向量c看做当前时刻的上下文,使用一个相似度矩阵来计算c与所有候选词Embedding向量的相似性,进而在所有候选词中选取相似性最大者作为第一个字符。其中相似度矩阵作为模型的参数在训练过程中和其他参数共同学习得到。获取第一个字符后,使用这个字符由Decoder继续后续的生成(如图3)(Zhu Q et al. 2016)。

图3 LTS模型结构

另外,和一般的机器学习模型相比,Sequence to sequence 模型的训练和预测过程存在着一些差异。作为一种有监督算法,Sequence to sequence 模型的训练过程中的训练数据存在标准答案,即对应每一个输入序列存在着期望的标准答案输出序列,我们将一对训练样本记为(x,y),其中,x为输入序列,y为期望的标准答案输出序列。同时,将x输入模型中,模型会给出一个预测输出序列,记为z。那么模型的训练过程即为调整模型的参数使得z逐渐趋近于y的过程。需要注意的是,根据前文所述,负责输出的Decoder部分相当于一个语言模型,因此,序列z并不是一次性整体生成,而是按照先后顺序逐个单元依次生成,生成第i个位置的输出时要考虑到第i-1个位置的输出。这使得我们在生成zi的时候拥有两个选择,是利用上一步预测出的输出zi-1,还是利用标准答案中的第i-1个位置的yi-1?假设当前的训练样本为(x:“今天天气 怎么样”,y:“今天 天气 不错”),且模型已经预测出了第一个单位(第一个词)。如果第一次预测正确,即y1和z1相同,此时选择任何一个对生成第二字符“天气”来说都是相同的。但如果训练过程中,第一次预测发生错误,预测出的是“我”,即z1=“我”,y1仍是标准答案序列的第一个字符,y1=“今天”,此时如果选择使用z1来预测第二个字符,模型将会认为在给定字符“我”的条件下,下一步的期望输出是“天气”,并按照这个方向去调整参数,从语言模型的角度来看这并不合理。相反,如果我们使用y1,则即使在第一个词预测错误的条件下,我们依然可以让模型下一步在给定正确的前一个词的条件下按照期望调整参数,即给定“今天”的条件下去预测出“天气”,相比较之下,这种方式在训练阶段对模型参数的调整更有帮助。

因此,Sequence to sequence 模型在训练和预测过程中存在着一定的差异,Bengio等人认为这种差距会影响到模型最终预测的效果并针对这点进行了改进(Bengio S et al. 2015)。他们采用了如下的策略,在训练过程中,预测zi时按照一定的概率值p选择使用yi-1,1-p的概率选择使用zi-1,同时概率值p的大小随着训练时间的增加而逐渐衰减,即训练的初期阶段,模型训练不充分,预测能力较差,因此以较大的概率选择使用标准答案来更新模型参数,加快模型的学习过程;随着训练时间的延长,模型的预测能力增强,以较大的概率使用上一步预测出的字符预测当前字符,模拟真实的预测阶段使模型适应该模式。

总结与展望

作为一种建模序列间关系的通用深度学习模型,Sequence to sequence模型成功应用到了自然语言处理的多个领域。在机器翻译任务中,带有Attention机制的双向RNN模型取得了和传统短语级统计机器翻译模型可比的效果。在回复生成任务中,Sequence to sequence模型可以成功地生成语句通顺内容相关的回复,在一定程度的改进后更是成功地从单轮回复生成推广到了多轮。同时,在该任务中出现的万能回复的问题,已有工作从不同角度上提出了多种解决方案,相信在接下来的一段时间内,如何更好的解决万能回复的问题仍将是一个重要的研究点。另外,如何更好地利用外部统计信息(如主题词信息)及如何将这些信息与现有模型相结合也会是Sequence to sequence模型未来发展可以考虑的方向。

作者: 哈工大SCIR博士生 朱庆福

参考文献

[1].Sutskever I, Vinyals O, Le QV. Sequence to sequence learning with neuralnetworks[C]//Advances in neuralinformation processing systems. 2014: 3104-3112.[2].Bahdanau D, Cho K, Bengio Y.Neural machine translation by jointly learning to align and translate[J]. arXivpreprint arXiv:1409.0473, 2014.[3].Cho K, Van Merriënboer B,Gulcehre C, et al. Learning phrase representations using RNN Encoder-Decoderfor statistical machine translation[J]. arXiv preprint arXiv:1406.1078, 2014.[4].Shang L, Lu Z, Li H. Neuralresponding machine for short-text conversation[J]. arXiv preprintarXiv:1503.02364, 2015.[5].Yin J, Jiang X, Lu Z, et al.Neural generative question answering[J]. arXiv preprint arXiv:1512.01337, 2015.[6].Bengio S, Vinyals O, JaitlyN, et al. Scheduled sampling for sequence prediction with recurrent neuralnetworks[C]//Advances in Neural Information Processing Systems. 2015:1171-1179.[7].Serban I V, Sordoni A, BengioY, et al. Building end-to-end dialogue systems using generative hierarchicalneural network models[C]//Proceedings of the 30th AAAI Conference on ArtificialIntelligence (AAAI-16). 2016a.[8].Serban I V, Sordoni A, LoweR, et al. A Hierarchical Latent Variable Encoder-Decoder Model for GeneratingDialogues[J]. arXiv preprint arXiv:1605.06069, 2016b.[9].Serban I V, Klinger T,Tesauro G, et al. Multiresolution Recurrent Neural Networks: An Application toDialogue Response generation[J]. arXiv preprint arXiv:1606.00776, 2016c.[10].Li J, Galley M, Brockett C,et al. A diversity-promoting objective function for neural conversationmodels[J]. arXiv preprint arXiv:1510.03055, 2015.[11].Mou L, Song Y, Yan R, et al.Sequence to Backward and Forward Sequences: A Content-Introducing Approach to GenerativeShort-Text Conversation[J]. arXiv preprint arXiv:1607.00970, 2016.[12].Zhu Q, Zhang W, Zhou L, etal. Learning to Start for Sequence to sequence Architecture[J]. arXiv preprintarXiv:1608.05554, 2016.


本文来源于哈工大SCIR

原文链接点击即可跳转

哈尔滨工业大学社会计算与信息检索研究中心

入门理论综述NLP深度学习Seq2Seq对话系统