对话系统领域研究综述(2018)

Abstract:对话系统领域研究综述,2018.

1.相关概念术语及解释

  1. 深度学习(Deep Learning ):机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。含多隐层的多层感知器就是一种深度学习结构。

  2. 人工神经网络(Neural Network):是一种模仿生物神经网络的结构和概念的数学模型,用于对函数进行估计和近似。

  3. 对话系统:即使得人与机器可以通过自然语言进行对话交互的系统。

  4. 问答系统(Question Answering System):信息检索系统的一种高级形式,能用准确、简洁的自然语言回答用户用自然语言提出的问题。

  5. RNN(Recurrent Neural Network):递归神经网络是两种人工神经网络的总称,分别是时间递归神经网络和结构递归神经网络,RNN一般指代时间递归神经网络。时间递归神经网络可以描述动态时间行为,因为和前馈神经网络(Feedforward Neural Network)接受较特定结构的输入不同,RNN将状态在自身网络中循环传递,故可接受更广泛的时间序列结构输入。RNN模型如下图:

    RNN

  6. Seq2Seq(Sequence to Sequence)模型:近几年比较热门的一个基于RNN的模型,主要应用在机器翻译、自动问答系统等领域,并且效果不错。seq2seq 模型利用 RNN 对时序序列天然的处理能力,试图建立一个能直接处理变长输入与变长输出的模型。

  7. LSTM(Long Short-Term Memory)模型:一种时间递归神经网络,适合处理和预测时间序列中间隔和延迟非常长的重要事件。LSTM模型如下图:

LSTM

  1. Beam Search(集束搜索):一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。这样减少了空间消耗,并提高了时间效率,但缺点就是有可能存在潜在的最佳方案被丢弃,因此Beam Search算法是不完全的,一般用于解空间较大的系统中。

2.国际对话系统领域分析

2.1 对话系统类型及方法

对话系统按应用场景类型可分为两类:

1.任务导向型(task-oriented)对话系统

A. 作用:帮助用户完成实际具体的任务,如电商智能客服、酒店智能客服等。

B. 方法:

(1)管道(Pipeline)方法

将对话响应视为一条管道(pipeline),系统首先理解人类所传达的信息,将其作为一种内部状态,然后根据对话状态的策略采取一系列相应的行为,最后将动作转化为自然语言的表现形式。如下图所示:

任务导向

(2)端到端(end-to-end)方法

端到端神经生成模型为面向任务的对话系统构建了端到端的可训练框架。与传统的管道模型不同,端到端模型使用一个模块,并与结构化的外部数据库交互

如下图的模型是一种基于网络的端到端可训练任务导向型对话系统,将对话系统的学习作为学习从对话历史到系统回复的映射问题,并应用encoder-decoder模型来训练

端到端

2.非任务导向型(non-task-oriented)对话系统(又可称为聊天机器人)

A. 作用:专注于在开放的领域与人交谈,提供合理的回复和娱乐消遣功能。

B. 主要有3种实现方法:

(1)基于检索的方法:从事先定义好的索引中进行搜索,学习从当前对话中选择回复。关键是消息—回复匹配,匹配算法必须克服消息和回复之间的语义鸿沟。缺点在于过于依赖数据质量,如果选用的数据质量欠佳,那就很有可能前功尽弃。

(2)生成方法:比如使用端到端的Seq2Seq模型,可在对话过程中产生合适的全新的回复,因此相对更为灵活,但有一些弊端,比如有时候会出现语法错误,或者生成一些没有意义的回复

(3)集成方法:基于检索的系统通常给出精确但是较为生硬的答案,基于生成的系统则倾向于给出流畅但却是毫无意义的回答。而将生成和检索方法结合起来能对系统性能起到显著的提升作用。在集成模型中,被抽取的候选对象和原始消息一起被输入到基于RNN的回复生成器中。这种方法结合了检索和生成模型的优点,这在性能上具备很大的优势。

2.2 非任务导向型对话系统——基于检索的方法

1.单轮回复匹配

检索聊天机器人的早期研究主要集中在反应选择单轮的谈话,只有消息用于选择一个合适的回复。

目前比较新的方法如下图,利用深度卷积神经网络体系结构改进模型,学习消息和响应的表示,或直接学习两个句子的相互作用表示,然后用多层感知器来计算匹配的分数。

CNN-对话模型

2.多轮回复匹配

基于检索的多轮对话,即在多轮回答选择中,将当前的消息和先前的话语作为输入。

模型选择一个自然的、与整个上下文相关的响应。重要的是要在之前的话语中找出重要的信息,并恰当地模仿话语的关系,以确保谈话的连贯性。

多轮对话的难点在于不仅要考虑当前的问题,也要考虑前几轮的对话情景。多轮对话的难点主要有两点:

  • 1.如何明确上下文的关键信息(关键词,关键短语或关键句)。
  • 2.在上下文中如何模拟多轮对话间的关系。

现有检索模型的缺陷:在上下文中容易丢失重要信息,因为它们首先将整个上下文表示为向量,然后将该上下文向量与响应 sentence 向量进行匹配。

下图是一个基于检索的多轮对话模型架构。此模型改进了话语关系和上下文信息的利用,通过将上下文中的语句与卷积神经网络的不同层级进行匹配,然后通过一个递归的神经网络在时间序列中堆积这些向量,以建立对话之间的关系。

基于检索的多轮对话模型架构

2.3 非任务导向型对话系统——神经生成模型Neural Generative Models)

1.Sequence-to-Sequence Model

给定包含个词语的输入序列(message)和长度为T的目标序列(response),模型最大化YX下的条件概率:

Seq2Seq模型的encoder-decoder结构:

encoder-decoder结构

编码器将X逐字读入,并通过递归神经网络(RNN)将其表示为上下文向量c, 然后解码器将 c 作为输入估计Y 的生成概率。

(1)Encoder

Encoder过程很简单,一般直接使用RNN(一般用LSTM)进行语义向量生成:

其中f 是非线性函数,例如LSTM,GRU是上一隐节点输出,是当前时刻的输入。向量c 通常为RNN中的最后一个隐节点(h, Hidden state),或者是多个隐节点的加权和。

(2)Decoder

模型的decoder过程是使用另一个RNN通过当前隐状态来预测当前的输出符号,这里的和都与其前一个隐状态和输出有关,Seq2Seq的目标函数定义为:

2.对话上下文(Dialogue Context)

考虑对话的上下文信息的是构建对话系统的关键所在,它可以使对话保持连贯和增进用户体验。使用层次化的RNN模型,捕捉个体语句的意义,然后将其整合为完整的对话。同时,分别用字级别和句子级别的注意力方法扩展层次化的结构。

通常,层次化 RNNs的表现通常优于非层次化的RNNs;在考虑上下文相关的信息后,神经网络趋向于产生更长的、更有意义和多样性的回复;引入Attention机制,能够让模型能够自动的学到词语与句子级别的重要度信息,从而更好的生成新一轮的对话。

3.回复多样性(Response Diverisity)

在当前的Seq2Seq对话系统中,一个具有挑战性的问题是,它们倾向于产生无关紧要的或不明确的、普通的、几乎没有意义的回复,比如“I don’t know”,“I am OK”。解决这类问题的一个很有效的方法是找到并设置一个更好的目标函数,或者增加模型的复杂度。

4.主题和个性化(Topic and Personality)

明确对话的内在属性是提高对话多样性和保证一致性的另一种方法。

5.外部知识库(Outside Knowledge Base)

人类对话与对话系统之间的一个重要区别是它是否与现实相结合。结合外部知识库(KB)是一种很有前途的方法,可以弥补背景知识之间的差距,即对话系统和人之间的差距。记忆网络(Memory Network)是一种以知识库处理问题的经典方法。因此,它非常直接的别用于在对话生成中。

6.对话系统性能评价

评价生成回复的质量是对话系统的一个重要方面。任务导向型的对话系统可以基于人工生成的监督信号进行评估,例如任务完成测试或用户满意度评分等。然而,由于高回复的多样性,自动评估非任务导向的对话系统所产生的响应的质量仍然是一个悬而未决的问题。目前的方法有以下几种:

(1)计算 BLEU 值,即直接计算 word overlap、ground truth和你生成的回复。由于一句话可能存在多种回复,因此从某些方面来看,BLEU 可能不太适用于对话评测。

(2)计算 embedding的距离,这类方法分三种情况:直接相加求平均、先取绝对值再求平均和贪婪匹配。

(3)衡量多样性,主要取决于 distinct-ngram 的数量和 entropy 值的大小。

(4)进行图灵测试,用 retrieval 的 discriminator 来评价回复生成。

3. 国际 Seq2Seq 框架学术进展分析

1.Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

(1)论文信息:

  • 发表时间:2014年6月
  • 作者:Cho、Bahdanau、Bengio
  • 引用量:2250(目前为止)

(2)论文特色:该论文提出一种RNN Encoder-Decoder的网络结构;可以看作是Seq-to-Seq的前身,因为它并未实现end-to-end训练,而是作为SMT翻译框架中的一部分进行训练。

图:RNN Encoder-Decoder网络结构

seq2seq

由上图可看出,这个 RNN Encoder-Decoder 网络结构的逻辑流程是:

  • 1.先使用一个RNN模型将输入序列进行编码得到最终的隐藏层状态向量$C$作为输入序列的向量表示;
  • 2.再使用另一个RNN模型对向量$C$进行解码,解码过程中每一步的输入是上一步的输出$y{t-1}$、上一时刻隐层状态$h{t-1}$和向量$C$,公式如下:
  • 3.将所有输出$y_t$的概率相乘即是该序列的概率;
  • 4.计算loss、反向传播即可完成对模型的训练。

(3)论文应用:该论文的应用场景是翻译系统,即将源语言翻译成另一目标语言,如“我爱你”—>“I Love You”,这恰好是Seq-to-Seq的使用场景。在一开始的时候Seq-to-Seq也是用于翻译模型才慢慢被大家所重视,后来被应用到对话等领域中。

2.Sequence to Sequence Learning with Neural Networks

(1)论文信息:

  • 发表时间:2014年9月
  • 作者:Ilya Sutskever
  • 引用量:3293(目前为止)

(2)论文特色:第一篇提出 Seq2Seq模型 的论文,实现了端到端的训练,使得模型更加简单且不需要特定领域知识和人工提取特征;同样适用于翻译模型,摈弃SMT框架,极大促进了翻译模型的发展。

图:Seq2Seq模型

3

  • 此模型里$Deocoder$部分的输入是前一时刻的目标值,而不是上一时刻的输出和向量$C$,优点是正确的输入能够指导模型快速收敛并产生正确的输出。当模型输出\时,表示翻译结束。模型的输入包括3个:encoder_input:”ABC\“,”encoder_input: “WXYZ”,decoder_label: “WXYZ\“。并使用目标函数进行训练,目标函数公式如下:
  • 深层LSTM模型:该论文使用4层LSTM神经网络作为encoder和decoder模型,且实验结果表明深层模型比浅层模型的效果更好;
  • 反序输入source:输入时将“ABC”变成“CBA”,如此可解决长序列的long-term依赖,使模型可学习到更多对应关系,从而得到较好的效果;
  • Beam Search:这是一种测试技巧,在training过程中不会使用。通常会采用greedy贪婪式的序列生成方法,即每一步都取最大概率的元素作为当前output,但此法弊端在于“一步错步步错”(一旦某一步输出选错,可能会导致最终结果出错),故使用beam search的方法可改善这种弊端,即每一步都取概率最大的k个序列(beam size)并作为下一次的input。

图:深层模型示例

深层模型示例

(3)论文应用:主要应用于翻译领域,目前Google翻译系统就是采用这种结构。

3.Neural Machine Translation by Jointly Learning to Align and Translate

(1)论文信息:

  • 发表时间:2014年9月
  • 作者:Dzmitry Bahdanau
  • 引用量:2450(目前为止)

(2)论文特色:提出Seq2Seq模型,最大亮点是融入了Attention机制,可很好地解决long-term长序列依赖问题,同样应用于翻译系统 ,可较大提高模型的准确度。

对于长序列而言,传统Seq2Seq模型是将source序列通过一个RNN模型encode为一个固定维度的向量,但这是远远不够解决long-term依赖问题的,因为一个向量无法编码该序列包含的所有信息。故该论文提出将encoder RNN的每个隐藏状态都保存在一个list中,在每次decode时都取计算st-1与所有隐藏向量之间的相关程度,并对其进行家全球和得到ci向量,即ci每次解码使都是不一样的,它会自动寻找最相关的hi向量,计算公式如下图:

图:Seq2Seq模型架构

Seq2Seq模型架构

4.本项目与上述3个论文的对比分析:

上述三篇论文是学界Seq2Seq模型的开山之作,而本项目的最大特色是“举一反三”,即将学界前沿的 RNN Seq2Seq 模型从机器翻译领域推广应用到问答系统领域,用Seq2Seq进行对话生成任务

4. 国内外对话系统行业产品分析

对话相关技术的逐步成熟引发了工业界研发对话产品的热潮。苹果公司率先发布了智能助理软件 Siri,用户可以通过自然语言完成搜索、信息查询、日历和闹铃设置等任务。百度于2015年推出的对话式智能秘书度秘,以索引真实世界的服务和信息为基础,为用户提供信息的同事也提供诸如叫车、订外卖、订票等服务,并满足用户的聊天需求。其他类似的系统还有 Google Assistant、微软 Cortana等。

同时聊天类对话系统也得到快速发展。微软于2014年发布的智能伴侣机器人小冰,可以借助情感计算基数和用户进行情感交流。类似的对话系统还有 SimSimi(小黄鸡)和小影机器人等。

随着智能硬件技术的兴趣,以 Amazon Alexa为代表的对话系统与硬件相结合的智能设备也日益增多。此外,问答类对话机器人也在近年得到飞速发展,IBM 的深度问答系统——Watson在电视节目中打败了人类选手,其技术潜力正在逐步转化为应用,推动行业转型。

以下将分别分析微软小冰、百度度秘、阿里小蜜三款不同的对话系统。

4.1 微软小冰对话系统:数据驱动的对话系统

传统对话系统基于规则,而随着处理大数据的深度学习平台和方法的成熟,对话系统构建的焦点转移到了数据驱动的方法,其中检索模型和生成模型是两种主流方法。

1.单轮回复生成模型

单轮回复生成模型

此模型借鉴了机器翻译中的编码-解码模型,在此基础上将对话的话题信息引入到回复生成中。其工作原理是:首先利用一个 RNN(循环神经网络)将输入信息编码成向量,同时利用一个话题模型估计出回复可能用到的话题关键词。解码器是一个以编码向量和话题关键词为条件的通过 RNN 实现的语言模型。在生成回复中每一个词时,解码器都通过注意力机制对编码器中的每个向量和话题关键词进行加权处理。

2.生成式多轮对话模型

生成式多轮对话模型

此模型通过两层 RNN 编码器来刻画词与词、句与句的关系,并在两层网络之间 搭载了两层的注意力模型,一个突出重要词对生成的影响,一个关注句子的重要性。通过量程编码器和两层注意力模型,一段对话上下文最终被表示为一个向量,用来作为生成回复中当前词的条件。

3.模型应用

模型应用在微软的对话系统架构中,比如微软小冰(微软开发的聊天机器人),它的任务是给用户陪聊,具体衡量指标是多轮对话的平均轮数,小冰现在可完成平均23轮对话,最长对话超过7000轮。

4.2 百度开放域对话系统:基于多视角的回复选取模型

1.模型介绍

百度提出一种基于多视角的回复选取模型,多视角包括词序列视角(Word-level)与话语序列视角(utterance-level),如下图所示:

基于多视角的回复选取模型

该方案基于以下假设:每个视角从特定角度表达了\与候选回复之间的语义关系,并且基于不同视角构建的模型相互之间具有互补性,且基于两个具有互补性的模型的打分可得到更好的回复排序结果。

使用 GRU(Gated Recurrent Unit Neural Network)为 Query 与候选回复构建次预计分布式向量表示,然后才有CNN(卷积模型)和 GRU 结合的方式构建话语级向量表示,以捕捉话语级别的语义和篇章信息。通过同时最小化以下两个因子来优化模型和参数:1.每个视角下打分模型的预测错误;2.两个视角下打分模型预测结果的不一致性。在训练过程中,两个视角下模型或向量表示网络的互补信息通过共享的词向量表进行互换。

2.模型应用

该模型应用在百度 NLP 对话系统的聊天服务中,完成与用户的开放域聊天任务。

4.3 阿里小蜜:基于检索模型和深度学习模型相结合的智能对话系统

通常chatbot包括2个部分:IR 模块和生成模块。针对用户的问题,IR 模块从 QA 知识库中检索到对应的答案,生成模块再用预训练好的 Seq2Seq 模型生成最终的答案。

但是已有的系统面临的问题是,对于一些长问句或复杂问句往往无法在 QA 知识库中检索到匹配的条目,并且生成模块也经常生成不匹配或无意义的答案。

阿里小蜜的方法是将 IR 和生成模块聚合在一起,用一个 Seq2Seq 模型来对搜索结果做评估,从而达到优化的效果

1.模型介绍

整个模型方案如下图:

模型

(1)技术原理:阿里小蜜首先采用检索模型从 QA 知识库中找出候选答案集合,然后利用带注意力的 Seq2Seq 模型对候选答案进行排序,如果第一候选的得分超过某个阈值,则作为最终答案输出,否则利用生成模型生成答案。

(2)QA知识库

(3)IR 模块:利用倒排索引的方法将每个单词隐射到包含这个单词的一组问句中,并且对这些单词的同义词也做了索引,然后利用 BM25 算法来计算搜索到的问句和输入问句的相似度,取最相似问句的答案。

(4)生成模型:生成模型是一个 attentive seq2seq 的结构,如下图:

生成模型

采用了一个 GRU(Gated Recurrent Unit Neural Network),由 question 生成 answer,计算生成单词的概率:

其中加了 context 向量,它是由图中的 α 求得的,α 表示的是当前步的输入单词,和上一步的生成单词之间的匹配度,用了一个 alignment 模型计算。

对于各个 QA 长度不等的情况,采用了 bucketing 和 padding 机制。另外用了 softmax 来随机采样词汇表中的单词,而不使用整个词汇表,从而加速了训练过程。还是用了 beam search decoder,每次维护 top-k 个输出,来取代一次一个输出的贪心搜索。

(5)Rerank模块

使用的模型和上面的一样,根据输入问题来为候选答案打分,使用平均概率作为评分函数:

Thanks!