对话系统分析与展望
规则模型与生成式模型
在做对话系统或者问答系统的过程中,他们采用的是混合模型,包括Deep Learning以及检索系统,首先要说一说各种模型的优缺点,见下表:
表1. 两种对话模型的比较表
前者回复答案可控但无法处理长尾问题,后者则难以保证一致性和合理性。以下采用混合模型,即首先采用检索模型从 QA 知识库中找出候选答案集合,然后利用带注意力的 Seq2Seq 模型对候选答案进行排序,如果第一候选的得分超过某个阈值,则作为最终答案输出,否则利用生成模型生成答案。
- 规则模型,就是按照某种规则去做字符串匹配。基于检索的问答系统就是规则算法的一种,检索问答系统需要事先穷举可能出现的问答对,这样,一旦新出现相似的问题,根据模糊匹配算法去回答库中检索匹配回答语句。在智能电视的应用场景之中,对话基本上限定在一个特定领域,所以基于规则的对话模型无论是准确度还是效率都优于基于深度学习的模型。
- 任何一个有效的对话系统都不仅仅某一个单独的系统组成,而是二者的混合模型。首先,对话会经过检索系统,经过模糊匹配得到一个答案,一旦这个答案的置信率过小,那么将该问题送到深度神经网络,生成其对话
- 现实的处理情况,特定领域的对话,通过这样的混合模型,100句中仅3句是通过生成模型得到
-
自动评估非任务导向的对话系统所产生的响应的质量的方法:
Retrieval-based Methods
基于检索的方法从候选回复中选择回复。检索方法的关键是消息-回复匹配,匹配算法必须克服消息和回复之间的语义鸿沟。
-
Single-turn Response Matching
检索聊天机器人的早期研究主要集中在反应选择单轮的谈话,只有消息用于选择一个合适的回复。
目前比较新的方法是利用深度卷积神经网络体系结构改进模型,学习消息和响应的表示,或直接学习两个句子的相互作用表示,然后用多层感知器来计算匹配的分数。
-
Multi-turn Response Matching
近年来,基于检索的多轮会话越来越受到人们的关注,在多轮回答选择中,将当前的消息和先前的话语作为输入。模型选择一个自然的、与整个上下文相关的响应。重要的是要在之前的话语中找出重要的信息,并恰当地模仿话语的关系,以确保谈话的连贯性。
多轮对话,就是考虑上下文的对话,
比如:甲:你吃饭了么?
乙:吃了,你呢?
在乙回答的语句之中,的“你呢?”,脱离上下文单独处理的话,不知道什么意思,而回看上文就知道该语句同样问的是“你吃饭了么?”,所以需要对原句进行改(rewrite),“吃了,你吃饭了么?”,这样在后续处理中,就能知道这句话的完整意思。因为,上下文对话,要改写当前语句,涉及到回溯几句的问题,回溯太多的话,计算量大,问题复杂,一般回溯3-6句。句子改写,依据是句子主、谓、宾,成分做改写。
多轮对话的难点在于不仅要考虑当前的问题,也要考虑前几轮的对话情景。多轮对话的难点主要有两点:
- 如何明确上下文的关键信息(关键词,关键短语或关键句)
- 在上下文中如何模拟多轮对话间的关系。
Hybrid Methods
将生成和检索方法结合起来能对系统性能起到显著的提升作用。基于检索的系统通常给出精确但是较为生硬的答案,而基于生成的系统则倾向于给出流畅但却是毫无意义的回答。在集成模型中,被抽取的候选对象和原始消息一起被输入到基于RNN的回复生成器中。这种方法结合了检索和生成模型的优点,这在性能上具备很大的优势。
讨论
深度学习能够利用大量的数据,从而模糊了任务导向型对话系统和非任务导向型对话系统之间的界限。值得注意的是,目前的端到端模型仍然远非完美。尽管取得了上述成就,但这些问题仍然具有挑战性。接下来,我们将讨论一些可能的研究方向。
-
Swift Warm-Up
快速适应。虽然端到端模型越来越引起研究者的重视,我们仍然需要在实际工程中依靠传统的管道(pipeline)方法,特别是在一些新的领域,特定领域对话数据的收集和对话系统的构建是比较困难的。未来的趋势是对话模型有能力从与人的交互中主动去学习。
-
Deep Understanding
深度理解。现阶段基于神经网络的对话系统极大地依赖于大量标注好的数据,结构化的知识库以及对话语料数据。在某种意义上产生的回复仍然缺乏多样性,有时并没有太多的意义,因此对话系统必须能够更加有效地深度理解语言和真实世界。
-
Privacy Protection
隐私保护。目前广泛应用的对话系统服务于越来越多的人。很有必要注意到的事实是我们使用的是同一个对话助手。通过互动、理解和推理的学习能力,对话助手可以无意中隐蔽地存储一些较为敏感的信息。因此,在构建更好的对话机制时,保护用户的隐私是非常重要的。
下边通过阿里小蜜探讨混合模型的优劣,
目前商用的 Chatbot 正在大量兴起,这种可以自然语言对话的方式来帮助用户解答问题比传统死板的用户界面要更友好。通常 Chatbot 包括两个部分:IR 模块和生成模块。针对用户的问题,IR 模块从 QA 知识库中检索到对应的答案,生成模块再用预训练好的 Seq2Seq 模型生成最终的答案。
但是已有的系统面临的问题是,对于一些长问句或复杂问句往往无法在 QA 知识库中检索到匹配的条目,并且生成模块也经常生成不匹配或无意义的答案。
本文给出的方法将 IR 和生成模块聚合在一起,用一个 Seq2Seq 模型来对搜索结果做评估,从而达到优化的效果。
整个方案如图所示:
首先利用 IR 模型从知识库中检索到 k 个候选 QA 对,再利用 rerank 模型的打分机制计算出每个候选答案和问题的匹配程度。如果得分最高的那个大于预设好的阈值,就将其当作答案,如果小于阈值,就用生成模型生成答案。
整个系统是从单词层面上去分析的。
1. QA知识库
本文从在线的真人用户服务 log 里提取问答对作为 QA 知识库。过滤掉不包含相关关键词的 QA,最后得到 9164834 个问答对。
2. IR模块
利用倒排索引的方法将每个单词隐射到包含这个单词的一组问句中,并且对这些单词的同义词也做了索引,然后利用 BM25 算法来计算搜索到的问句和输入问句的相似度,取最相似问句的答案。
3. 生成模型
生成模型是一个 attentive seq2seq 的结构,如图所示:
采用了一个 GRU,由 question 生成 answer,计算生成单词的概率:
其中加了 context 向量,他是由图中的 α 求得的,α 表示的是当前步的输入单词,和上一步的生成单词之间的匹配度,用了一个 alignment 模型计算。
要注意,对于各个 QA 长度不等的情况,采用了 bucketing 和 padding 机制。另外用了 softmax 来随机采样词汇表中的单词,而不使用整个词汇表,从而加速了训练过程。还是用了 beam search decoder,每次维护 top-k 个输出,来取代一次一个输出的贪心搜索。
4. rerank 模块
使用的模型和上面是一样的,根据输入问题来为候选答案打分,使用平均概率作为评分函数:
实验结果
本文对结果做了详细的评估,首先评估了 rerank 模块平均概率的结果。然后分别对 IR,生成,IR+rerank,IR+rerank+ 生成这些不同组合的系统做了性能评测。并对该系统和 baseline 的 Chatbot 做了在线 A/B 测试。最后比较了这个系统和已经上市的 Chatbot 之间的差别。
不同 rerank 模型的效果:
不同模块组合的结果:
和 baseline 对比的结果:
-
评价
- 计算 BLEU 值,也就是直接计算 word overlap、ground truth和你生成的回复。由于一句话可能存在多种回复,因此从某些方面来看,BLEU 可能不太适用于对话评测。
- 计算 embedding的距离,这类方法分三种情况:直接相加求平均、先取绝对值再求平均和贪婪匹配。
- 衡量多样性,主要取决于 distinct-ngram 的数量和 entropy 值的大小。
- 进行图灵测试,用 retrieval 的 discriminator 来评价回复生成
-
评估生成的响应的质量是对话响应生成系统的一个重要方面。任务导向的对话系统可以基于人为生成的监督信号进行评估。然而,由于响应的多样性,自动评估非任务导向对话系统产生的响应质量仍然是一个悬而未决的问题。
文章评价
本文给出了一种 attentive Seq2Seq 的模型来结合 IR 和生成模块,从而对原结果进行 rerank 优化。阿里已经把这个投入了阿里小蜜的商用。
总的系统还是比较简单的,符合商用的需求。但由于函数设计过于简单,不排除是靠数据堆起来的系统,毕竟阿里有大量的真实用户数据,所以算法价值层面比较一般,没有合适的数据恐怕很难达到预期的效果,所以说对于小公司并不实用。
基于深度学习的自然语言对话系统
华为诺亚方舟实验室是最早用深度学习技术开发自然语言对话系统的研究机构之一,提出了若干个具有代表性的模型,这里做一简单介绍。我们开发了基于检索的单轮对话系统和基于生成的对话系统。
如图1所示,基于检索的方式将对话看作搜索问题。系统索引大量对话数据,每一个实例由单轮对话中的一对信息与回复组成。给定一个信息,系统从索引中找出相关的信息与回复对,计算输入信息与检索到的回复之间的匹配度,基于匹配度对回复进行排序,并将排在最前的回复返回。输入信息与每一个回复之间的匹配度计算,由事先学好的多个匹配模型完成。回复的排序由事先学好的排序模型决定。这里的关键问题是如何实现不同的匹配模型。我们提出了两个基于深度学习的匹配模型。
图7 匹配模型Deep Match CNN
第一个匹配模型称为Deep Match CNN [5],如图7所示。这个模型可以判断给定的两句话和是否可以成为一次单轮对话中的信息和回复。将两句话输入到CNN模型,可以得到它们的语义表示(实数值向量)和。之后,再将这两个语义表示输入到一个多层神经网络,判断两句话语义的匹配程度。这就是Deep Match CNN模型的基本想法。如果有大量的信息和回复对的数据,那么就可以训练这个模型。这里介绍的是最基本的模型,还可以对它进行扩展,这里不予介绍,详见[5]。
图8 匹配模型Deep Match Tree
第二个匹配模型称为Deep Match Tree [8],如图8所示。这个模型,基于句法分析结果,判断两句话是不是可以形成一轮对话中的信息和回复。先对两句话和进行句法分析,得到两个句法树和,再看两个句法树的子树是否满足各种匹配模式。比如“how do you think about *”与“the food in * is great”就满足匹配模式“how do you think about X”与“the Y in X is great”。之后将匹配结果输入到一个多层的神经网络,这个神经网络的输入层的每个神经元对应一个匹配模式。匹配模式事先从数据中挖掘出来,有上百万个。如果输入的两句话能够满足某一模式,其对应的神经元取值为一,否则取值为零。神经网络最后判断两句话的匹配程度。如果两句话能够满足许多配模模式,那么这两句话最终形成一轮对话的可能性就会很高。Deep Match Tree模型也可以通过大量信息与回复对的数据训练得到。
如图2所示,基于生成的方式将对话看作基于信息产生回复的问题。系统利用大量对话数据构建生成模型,给定一个信息,系统自动生成一个回复。这里的关键问题是如何实现这个生成模型。我们提出了一个基于深度学习的生成模型。
图9 生成模型Neural Responding Machine
这个生成模型称为Neural Responding Machine(NRM)[9],如图9所示。NRM的基本想法是这样的。将输入的一句话看作一个单词表示的序列,通过编码器,是一个RNN模型,将转换成一个中间表示的序列,再通过解码器,是另一个RNN模型,将转换成一个单词的系列,作为一句话输出。NRM模型也可以通过大量信息与回复对的数据训练得到。
基于检索的对话系统和基于生成的对话系统各有其特色。生成系统比检索系统的准确率会高一些,在一个标准数据集上,检索系统的准确率是70%,生成系统的准确率是76%。但检索系统比生成系统会更安全一些,不会返回语法不通的句子。这里的准确率的定义是,人对返回结果做评价,如果回复可以成为一轮对话,就认为是正确,否则是错误。如何对自然语言对话系统进行客观评价,仍然是一个需要进一步深入研究的课题。
同时指出,基于深度学习的生成模型比传统的基于机器翻译的模型在准确率上有大幅度的提升,从26%提高到76%[9]。深度学习在图像处理、语音处理等领域有许多大幅度提升性能的实例,在自然语言处理领域这样的事例还不多,在机器翻译等任务上的提升往往没有这么高。
令人惊讶的是,基于生成的对话系统可以返回许多有趣的回复,超出想象。表1给出一些系统生成的例子。可以看出,在大部分情况下,系统能够生成比较“自然”的句子,构成一个自然的对话。
生成系统产生的回复例如下:
输入信息 | 系统回复 |
持续面试是必须的习惯。 | 必须来支持!加油! |
每天最重要的是就是思考用哪姿势睡觉…… | 每天都在思考这个问题 |
看韩寒的*经验与惊艳alink | 支持一下感觉挺不错的 |
今晚又可以在海边发呆了,舒畅啊。 | 好美的蓝天,我喜欢 |
女人的名字决定性格!你的准吗? | 准,准,准,准,准 |
22岁上非诚勿扰是什么心态? | 挺好的,支持一下感觉挺不错的 |