读懂智能对话系统(2)聊天机器人
京东数据团队曾经出了一片关于对话系统的论文《A Survey on Dialogue Systems:Recent Advances and New Frontiers(智能对话系统调查:前沿与进展)》,全文引用了124篇论文,是一篇综合全面的介绍对话系统的文章。
论文原文地址:
https://www.kdd.org/exploration_files/19-2-Article3.pdf
公众号“机器学习算法全栈工程师”对这篇论文的内容进行了解读,主要概述了对话系统,尤其是对话系统在深度学习方面的进展,还讨论了可能的研究方向。以下是主要架构:
奇点机智对这篇文章进行了进一步的拆解,分成四篇文章来介绍智能对话系统。
读懂智能对话系统(1)任务导向型对话系统
读懂智能对话系统(2)聊天机器人
读懂智能对话系统(3)对话系统的未来发展
非任务导向系统(chatbot,聊天机器人)
不同于任务导向型对话系统,它的目标是为用户完成特定的任务,而非任务导向的对话系统(也称为聊天机器人)专注于在开放的领域与人交谈。一般来说,聊天机器人是通过生成方法或基于检索的方法实现的。
生成模型能够生成更合适的回复,而这些回复可能从来没有出现在语料库中,而基于检索的模型则具有信息充裕和响应流畅的优势。
1. 神经生成模型(Neural Generative Models)
深度学习在机器翻译中的成功应用,即神经机器翻译,激发了人们对神经生成对话研究的热情。目前神经生成模型的热门研究课题大概有如下几个方面。
1.1 Sequence-to-Sequence Models
给定包含 个词语的输入序列(message)
和长度为T的目标序列(response)
模型最大化Y在X下的条件概率:
具体来说,Seq2Seq模型是在encoder-decoder结构中,下图是这种结构的示意:
编码器将X逐字读入,并通过递归神经网络(RNN)将其表示为上下文向量c, 然后解码器将c 作为输入估计Y 的生成概率。
Encoder :
Encoder过程很简单,直接使用RNN(一般用LSTM)进行语义向量生成:
其中f 是非线性函数,例如LSTM,GRU,是上一隐节点输出,
是当前时刻的输入。向量c 通常为RNN中的最后一个隐节点
(h, Hidden state),或者是多个隐节点的加权和。
Decoder :模型的decoder过程是使用另一个RNN通过当前隐状态来预测当前的输出符号,这里的和都与其前一个隐状态和输出有关,Seq2Seq的目标函数定义为:
1.2. 对话上下文(Dialogue Context)
考虑对话的上下文信息的是构建对话系统的关键所在,它可以使对话保持连贯和增进用户体验。使用层次化的RNN模型,捕捉个体语句的意义,然后将其整合为完整的对话。
同时,分别用字级别和句子级别的注意力方法扩展层次化的结构。
试验证明:
-
层次化 RNNs的表现通常优于非层次化的RNNs;
-
在考虑上下文相关的信息后,神经网络趋向于产生更长的、更有意义和多样性的回复。
在上图中,作者通过代表整个对话历史(包括当前的信息),用连续的表示或嵌入单词和短语来解决上下文敏感回复生成的这一难题。
640?wx_fmt=png在上图的结构中作者引入两个层次的Attention机制,让模型能够自动的学到词语与句子级别的重要度信息,从而更好的生成新一轮的对话。
作者在句子级别的信息中,是反向学习的,即认为下一句的信息中更能够包含上一句的信息,所以从总体上来看,其对于对话的学习是逆向使用每一轮对话的内容的。
1.3 回复多样性(Response Diversity)
在当前Seq2Seq对话系统中,一个具有挑战性的问题是,它们倾向于产生无关紧要的或不明确的、普通的、几乎没有意义的回复,而这些回复常常涉及到一些诸如“I don't know”,“I am OK”这样的无意义回复。
解决这类问题的一个很有效的方法是找到并设置一个更好的目标函数。除此之外,解决此类问题的一个方法是增加模型的复杂度。下图这篇论文《Building End-To-End Dialogue Systems
Using Generative Hierarchical Neural Network Models》使用了 latent variable 来解决无意义回复这个问题。
1.4 主题和个性化(Topic and Personality)
明确对话的内在属性是提高对话多样性和保证一致性的另一种方法。在不同的属性中,主题和个性被广泛地进行研究探讨。
在下图的模型中,作者注意到人们经常把他们的对话与主题相关的概念联系起来,并根据这些概念做出他们的回复。他们使用Twitter LDA模型来获取输入的主题,将主题信息和输入表示输入到一个联合注意模块中,并生成与主题相关的响应。
下图的模型提出了一种两阶段的训练方法,使用大规模数据对模型进行初始化,然后对模型进行微调,生成个性化响应。
640?wx_fmt=png1.5 外部知识库(Outside Knowledge Base)
人类对话与对话系统之间的一个重要区别是它是否与现实相结合。结合外部知识库(KB)是一种很有前途的方法,可以弥补背景知识之间的差距,即对话系统和人之间的差距。
记忆网络(Memory Network)是一种以知识库处理问题的经典方法。因此,它非常直接的别用于在对话生成中。实际研究表明,所提出的模型能够通过参考知识库中的事实来生成对问题的自然和正确答案。
640?wx_fmt=png上图是作者提出的完全数据驱动的带有知识的对话模型。其中的 World Facts是一个集合,收集一些经过权威认证过的句子或者不准确的句子,作为知识库。
当个定一个输入S和历史,需要在 Fact 集合里面检索相关的facts,这里采用的IR引擎进行检索,然后经过 Fact Encoder 进行 fact injection。
上图的模型提出了一种全新的、完全由数据驱动的、基于知识的神经对话模型,目的是在没有槽位的情况下产生更多的内容。作者归纳了广泛使用的SEQ2SEQ方法,通过对会话历史和外部“事实”的响应
1.6 评价 **评价生成回复的质量是对话系统的一个重要方面。任务导向型的对话系统可以基于人工生成的监督信号进行评估,例如任务完成测试或用户满意度评分等,
然而,由于高回复的多样性,自动评估非任务导向的对话系统所产生的响应的质量仍然是一个悬而未决的问题。目前的方法有以下几种:
-
计算 BLEU 值,也就是直接计算 word overlap、ground truth和你生成的回复。由于一句话可能存在多种回复,因此从某些方面来看,BLEU 可能不太适用于对话评测。
-
计算 embedding的距离,这类方法分三种情况:直接相加求平均、先取绝对值再求平均和贪婪匹配。
-
衡量多样性,主要取决于 distinct-ngram 的数量和 entropy 值的大小。
-
进行图灵测试,用 retrieval 的 discriminator 来评价回复生成。
2. 基于检索的方法
基于检索的方法从候选回复中选择回复。检索方法的关键是消息-回复匹配,匹配算法必须克服消息和回复之间的语义鸿沟。
2.1 单轮回复匹配
检索聊天机器人的早期研究主要集中在反应选择单轮的谈话,只有消息用于选择一个合适的回复。
目前比较新的方法如下图,利用深度卷积神经网络体系结构改进模型,学习消息和响应的表示,或直接学习两个句子的相互作用表示,然后用多层感知器来计算匹配的分数。
2.2 多轮回复匹配 **近年来,基于检索的多轮会话越来越受到人们的关注,在多轮回答选择中,将当前的消息和先前的话语作为输入。
模型选择一个自然的、与整个上下文相关的响应。重要的是要在之前的话语中找出重要的信息,并恰当地模仿话语的关系,以确保谈话的连贯性。
多轮对话的难点在于不仅要考虑当前的问题,也要考虑前几轮的对话情景。多轮对话的难点主要有两点:
-
如何明确上下文的关键信息(关键词,关键短语或关键句);
-
在上下文中如何模拟多轮对话间的关系。
现有检索模型的缺陷:在上下文中容易丢失重要信息,因为它们首先将整个上下文表示为向量,然后将该上下文向量与响应sentence向量进行匹配。
下图的方法通过RNN/LSTM的结构将上下文(所有之前的话语和当前消息的连接)和候选响应分别编码到上下文向量和回复向量中,然后根据这两个向量计算出匹配度分数。
640?wx_fmt=png目前关于检索模型的闲聊还停留在单轮对话中,下面这篇论文提出了基于检索的多轮对话闲聊。论文提出了一个基于检索的多轮闲聊架构,进一步改进了话语关系和上下文信息的利用,通过将上下文中的语句与卷积神经网络的不同层级进行匹配,然后通过一个递归的神经网络在时间序列中堆积这些向量,以建立对话之间的关系。
640?wx_fmt=png2.3 混合的方法(Hybrid Methods)
将生成和检索方法结合起来能对系统性能起到显著的提升作用。基于检索的系统通常给出精确但是较为生硬的答案,而基于生成的系统则倾向于给出流畅但却是毫无意义的回答。
将生成和检索方法结合起来能对系统性能起到显著的提升作用。基于检索的系统通常给出精确但是较为生硬的答案,而基于生成的系统则倾向于给出流畅但却是毫无意义的回答。
在集成模型中,被抽取的候选对象和原始消息一起被输入到基于RNN的回复生成器中。这种方法结合了检索和生成模型的优点,这在性能上具备很大的优势。