Press "Enter" to skip to content

对话系统&聊天机器人的设计艺术(上)

前言

 

关于本文的阅读方式:

 

这不是一篇学术综述,也不是单纯的科普文,而是试图从目标出发来渐进式的思考对话系统的设计,顺便科普。因此本文不适合跳读,也不适合5分钟式浏览,而是适合在夜深人静的时候一个人…

 

我知道你们夜深人静的时候肯定不会看这个的 ( ̄∇ ̄)

 

言归正传,其实本文最主要的目的还是试图理清楚对话系统的若干概念,对话是一个很大的概念,有非常非常多的子问题,刚入坑的小伙伴很可能迷失在对话的一小块区域里无法自拔,本文就是为解决这一类问题的。 希望读者在看完本文后,可以理清楚对话的一些基本概念为什幺而存在,以及它在整个对话王国中的位置。

 

对话系统可以说是如今NLP领域热度上升最快的topic了。 热的太快就容易出现泡沫,比如市场上出现的一些基于人工的智能对话机器人真是让小夕无力吐槽╮( ̄▽ ̄””)╭本文不涉及这类机器人的讲解,请放心食用。

 

一种偷懒的介绍方法是说对话任务分为任务完成型和闲聊型,分别对应限定域对话和开放域对话。 其实这样是不准确的,属于过度简化了。 在用户实际的对话需求中,除了闲聊和完成特定任务,还有一大类知识获取(即问答)的需求。 而这一类问答型对话又可以分为基于知识图谱的对话(KG driven Dialogue)和检索式多轮问答等更细化的方向。 除此之外,闲聊、任务完成与问答三者之间也不是完全割裂的,还有一些类似于“任务完成型闲聊”的奇怪场景,使得闲聊也带有一定的目的性(比如撩妹)。 因此可以用一张图总结一下这三类对话需求,如图所示。

 

 

闲聊型和任务完成型对话本文接下来会展开讲,问答型对话可以参考CoQA[22] benchmark上的近期工作以及一些KG Dialogue的工作[27,28],限于篇幅以后再讲╮( ̄▽ ̄””)╭

 

同样的道理,它们与限定域和开放域的关系也不是绝对一一对应的,任务完成为导向的对话也不一定就是限定域的(比如已经登上全球第二宝座的万能助手小度[2]),闲聊也不一定是开放域的(比如给定一个topic或文章而展开的场景化闲聊[1])

 

不过我们还是回到主要问题上来。 对于右上角这类典型的闲聊任务,主流方法分为两类,基于检索的方法与基于生成的方法。 显然兵分两路的话就代表各自都有各自的优缺点,当然也有一些工作试图将两者进行结合,比如融合检索知识的生成式对话[3,4]以及工程视角下的简单结合[5]。

 

 

生成式对话

 

对于生成式对话,可以说一言难尽。 虽然看似可以将对话看作是seq2seq问题,然而我们知道在机器翻译问题上成功的seq2seq范式很大程度上是因为翻译的source和target有相对确定的token-level的对应关系,例如中英翻译任务上,输入为”I love Xiaoxi”,那幺对应的输出空间其实非常有限

 

source: 我爱小夕 target: I love Xiaoxi

 

然而在对话任务上,输入为”I love Xiaoxi”时对应的输出空间非常大

 

source: 我爱小夕 target1: 小夕是谁? target2: 她也爱你鸭 target3: 诶? 你不是有女朋友嘛! target4: 哦 ….

 

显然,如果同样建模成生成问题,机器翻译任务相当于每个输入问题都有一个差不多的标准答案,即属于“客观题”; 而对话生成任务则相当于一个“主观题”,只要不偏题就行,没有标准回答,好坏全看个人文采。 然而主观题的阅卷难度显然要比客观题的难度大得多啊(想象一下给作文打分的难度和给文言文翻译打分的难度差异),因此对生成式对话系统(开放域)的评估一直是一个很让人头疼的问题,需要高度依赖人工评定,当然啦也有一些对话自动评估相关的工作如ADEM[29],RUBER[30]等,感兴趣的小伙伴可以自行了解一下。

 

更加糟糕的是,将一句文言文翻译成白话文基本上不需要关心语境问题(一句文言文或一句英文的意思很少会因为语境变了而发生非常大的改变),然而,对话回复则是跟语境高度耦合的。 这里的“语境”包括显式的聊天历史以及隐式的说话人的属性、性格以及聊天发生时的场合和受众等。

 

想象一下,如果在之前显式的聊天历史中你已经说过了“今天生病了不想出门”,然后对于一个query,“你接下来想去干啥”,如果忽略语境的话,“我想去爬山”这个回复完全没毛病,但是考虑到语境的话,爬山这一类回复就完全不应该在输出空间中存在了。

 

同样的道理,说话人的性别、年龄以及聊天对象的身份、地位等隐式的“语境”也会对输出空间作出极大的限制。 因此可以说, 对话生成问题是一个条件非常非常多的条件生成问题(conditional generation) 。 由此,决定回复内容的“条件”到底有哪些? 应该怎幺建模? 这些条件给出来后,怎幺让这些条件有效的控制生成器的生成内容? 这类问题是对话生成相比机器翻译任务来说困难的多的另一大原因。 贴几篇对话生成的控制相关的paper[23,24,25,26],感兴趣的小伙伴自行去刷,后面小夕也会尽量放出生成式对话相关的文章,小伙伴们耐心等推啦~~~

 

那幺在对话问题上,有没有办法规避或者缓解生成式对话带来的上面这个 评估 以及 控制 这两大问题呢? 这就是工业界偏爱 检索式对话系统 的原因了。

 

检索式对话

 

检索式对话系统的一般框架如图所示。

 

 

如果不限定对话的范围(比如开放域闲聊),那幺存放query-response pairs(上图中的message-response pairs)的语料库必须要是非常大非常丰富的,否则难以应对用户千奇百怪的问题和回复,这时候语料库往往要从一些开放的社交网站上爬取,如Twitter、微博、贴吧等。

 

显然我们不可能让一个深度神经网络在每次寻找回复时遍历整个语料库(可能9102年的计算机可以做到),因此在用神经网络深度匹配合适的回复之前,一般要先经过一个“粗筛”的模块召回若干相关的回复,减少q-r匹配的工作量。 这个模块一般将用户当前轮的query与语料库里query进行快速匹配(当然你也可以加更多feature提高合适回复的召回率),得到几十上百个候选回复,完成第一轮的匹配。

 

显然这就要求q-q粗召模块非常轻量级且匹配的相关度可接受,因此一些常用的信息检索模型如BM25以及一些轻量级文本特征表示模型如bow就派上用场了。 小夕这里推荐一个专业的开源文本匹配工具 AnyQ [6],不仅将上面的常用模型集成进来,方便“一键调用”,而且部署阶段做了非常多的优化,所以想自己搭检索式对话/问答系统的小伙伴就不用在该模块上重复造轮子啦。

 

有了若干相关的候选回复后,我们假设其中一定至少存在一个合适的回复,那幺就需要一个非常精良的q-r精排模块来将这个合适的回复挑出来。 这部分也是学术界研究主要focus的点。 在多轮对话匹配这一方面百度的对话团队做了大量的工作,属于长期霸榜的状态,比如Multi-view[7]、DAM[8]以及DGU[9]。

 

从UDC数据集来看这一领域的进展,基本可以看到这就是百度对话团队与MSRA的游戏了╮( ̄▽ ̄””)╭不过最新战绩应该就是今年年初的百度对话团队release的DGU已经把UDC上的R1@10刷到了85.67,超过去年的DAM模型9个点,从小夕的case study来看,感觉这个数据集快被玩到头了。 。

 

对DGU之前的多轮对话匹配模型感兴趣的同学可以看我一年前写的这篇 《小哥哥,检索式chatbot了解一下》 ,详解了Multi-view、SMN、DUA以及当时最好的DAM模型。

 

如果说生成式对话是在茫茫实数语义空间中寻找那几个合适的回复,那幺检索式对话就是给你有限数量的选项,让你选出里面最合适作为回复的选项(有没有联想到 word2vec与语言模型的关系) 。 显然做选择题要比大海捞针容易多了。 而且生成式系统中,合适的回复是位于一个抽象、不可解释的实数语义空间,我们当然很难直接干预捞针范围,而在检索式系统中,合适的回复是在一堆干扰回复中,我们要滤掉那些干扰回复或者缩小搜索范围非常容易——给q-q粗召模块添油加醋甚至直接对语料库开刀就好啦╮(╯▽╰)╭

 

总之,将一个大海捞针问题转变成了一个在有限选项中做选择的问题 。 因此任务简单了,模型容易设计和训练,也很容易进行评估了。

 

然而,很多时候我们的对话是带有目的性的。 虽然检索式对话与生成式对话系统可以为每个query找到合适的回复,但是这些模型是在纯文本语料上训练的,无力建模对话过程中的意图或者发出一个结构化的动作,比如

 

“小夕你帮我看看现在几点啦” 小夕: “好呀好呀”

 

然后没了。。。显然用户期待的并不是“好呀好呀”就结束了,而是当前时刻具体的时间!而要想知道当前的时间,就必须要调用一些服务/API(不然你觉得对话语料库中会写着当前时刻幺)去查询一下,显然这些隐式的操作不可能出现在检索式对话或生成式对话模型的训练集中。

 

更不用说,如果对话开始之前你的目的就很明确——比如找到一家适合今晚约约约的餐厅并预定上座位,那幺整个对话的过程一定都是全程高能的(需要频繁的查询数据库,记录和更新前面对话的关键信息),任何一个检索式和生成式对话系统都会崩溃的。

 

路人: 小夕,帮我推荐一家餐厅吧~ 小夕: 好呀好呀,几个人呢~ 路人: 2个人哦 (小夕赶紧拿出本本记下) 小夕: 好的哦,今天中午吗? 路人: 不是呢,今天晚上~差不多6点左右到 (小夕赶紧记下) 小夕: 好滴,想吃中餐还是西餐呢? 路人: 想吃牛排! 算了算了都快200斤了,而且单位附近貌似没有,那就。 。 吃椰子鸡吧! (小夕努力理解了一下,然后打开百度地图APP开始寻找附近的椰子鸡) 小夕: 找到一家! 距离我们2.4km!

 

怎幺解决这类问题呢?显然这类对话问题已经远远超出了文本匹配和文本生成问题的范畴,于是就有了“任务完成型对话”这个重要分支。

 

任务完成型对话

 

显然要使用数据驱动的方式建模任务完成型对话的话,不仅要有文本,而且还要给每一轮对话标记好对话进行到此时的状态(对,就是小夕的小本本)以及可能需要发出的动作(比如小夕打开百度地图app去找椰子鸡),显然任务完成型对话的数据集要难做很多。 对做数据集这方面有兴趣的同学可以看小夕前不久写的这篇 《如何打造高质量的数据集》

 

下面来更精细的说一说任务完成型对话该怎幺建模。

 

显然对于任务完成型对话来说,直接目的是完成任务。 而要完成任务,在对话的过程中就很容易遇到需要查询甚至更新数据库等超出文本理解和生成范畴的操作,而这些“融会贯通”的操作在互联网上是很难自然产生的,自然也没地方可爬取。 这也是为什幺任务型对话的数据集大多是人工生成的(注意不仅仅是人工标注,而是样本本身都要比较刻意的人工撰写)。 当然了,为了降低造数据集的成本,也出现了一些人与机器协同造数据集[10],甚至让机器与机器对话[11,12],不过考虑到本文的长度,这里就不展开写了。

 

假如我们不用考虑数据集怎幺造的问题,那幺我们就可以考虑一下系统本身怎幺设计了。 很多文章开篇就会告诉你一个任务型对话系统包括NLU、DST、DP、NLG等模块。 而实际上,这里面的任何一个模块都可以隐式存在。

 

首先来考虑一下前面提到的寻找餐厅并预定餐位的例子。

 

显然这里作为系统的小夕寻找椰子鸡、拿小本本记下等操作并不是自然语言,我们将这一类操作称为“对话动作(dialogue action)“,由于这里的小夕是机器人,因此更细化的说法是系统动作system action。 同样,如果用户通过按钮或自然语言的方式发出了类似的指令,比如”小夕,帮我找下附近的椰子鸡“,那幺用户发出的这个蕴含在自然语言中的命令就称为用户动作user action。 当用户动作用自然语言描述时,我们也将这个用户动作称为是意图intent,而从自然语言中解析出具体用户动作的过程就称为意图识别。

 

显然,如果我们能事先把所有的用户动作都做成按钮,让用户戳戳戳,那这个“对话系统”就不需要NLP了╮( ̄▽ ̄””)╭不过这当然是不可能的,我们可以通过几个按钮预定义几个高频用户动作,节省用户口舌,不过大部分的用户动作还是需要从用户的自然语言输入中解析出来的。 所以从下一篇文章开始,就跟小夕一起看看如何理解用户的自然语言输入,进而完成整个对话任务吧~

 

参考文献

 

ps:列表里的本文没提到的文章会在下一篇讲哦

 

[1] Yan, Zhao, Nan Duan, Junwei Bao, Peng Chen, Ming Zhou, Zhoujun Li, and Jianshe Zhou. “Docchat: An information retrieval approach for chatbot engines using unstructured documents.” In  Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) , pp. 516-525. 2016.

 

[2] https://dueros.baidu.com/html/dueros/index.html

 

[3] Song, Yiping, Rui Yan, Cheng-Te Li, Jian-Yun Nie, Ming Zhang, and Dongyan Zhao. “An Ensemble of Retrieval-Based and Generation-Based Human-Computer Conversation Systems.” (2018).

 

[4] Pandey, Gaurav, Danish Contractor, Vineet Kumar, and Sachindra Joshi. “Exemplar encoder-decoder for neural conversation generation.” In  Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) , pp. 1329-1338. 2018.

 

[5] Qiu M, Li F L, Wang S, et al. Alime chat: A sequence to sequence and rerank based chatbot engine[C]//Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). 2017: 498-503.

 

[6] https://github.com/baidu/AnyQ

 

[7] Zhou, Xiangyang, Daxiang Dong, Hua Wu, Shiqi Zhao, Dianhai Yu, Hao Tian, Xuan Liu, and Rui Yan. “Multi-view response selection for human-computer conversation.” In Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing, pp. 372-381. 2016.

 

[8] Zhou, Xiangyang, Lu Li, Daxiang Dong, Yi Liu, Ying Chen, Wayne Xin Zhao, Dianhai Yu, and Hua Wu. “Multi-turn response selection for chatbots with deep attention matching network.” In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 1118-1127. 2018.

 

[9]  https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding#%E5%8F%82%E8%80%83%E8%AE%BA%E6%96%87

 

[10] Jason Williams, Antoine Raux, Deepak Ramachandran, and Alan Black. 2013. The dialog state tracking challenge. In Proceedings of the SIGDIAL 2013 Conference, pages 404–413.

 

[11] Bordes, Antoine, Y-Lan Boureau, and Jason Weston. “Learning end-to-end goal-oriented dialog.” arXiv preprint arXiv:160 5.07683 (2016).

 

[12] Shah, Pararth, Dilek Hakkani-Tür, Gokhan Tür, Abhinav Rastogi, Ankur Bapna, Neha Nayak, and Larry Heck. “Building a conversational agent overnight with dialogue self-play.”  arXiv preprint arXiv:1801.04871 (2018).

 

[13] https://coffee.pmcaff.com/article/971158746030208/pmcaff?utm_source=forum&from=related&pmc_param%5Bentry_id%5D=950709304427648

 

[14] Xu, Puyang, and Ruhi Sarikaya. “Convolutional neural network based triangular crf for joint intent detection and slot filling.” In  2013 IEEE Workshop on Automatic Speech Recognition and Understanding , pp. 78-83. IEEE, 2013.

 

[15] Wang, Yu, Yilin Shen, and Hongxia Jin. “A bi-model based rnn semantic frame parsing model for intent detection and slot filling.”  arXiv preprint arXiv:1812.10235 (2018).

 

[16] M. Henderson, B. Thomson, and J. Williams. 2014a.The second dialog state tracking challenge. In Proceedings of SIGdial.

 

[17] Matthew Henderson, Blaise Thomson, and Jason D Williams. 2014c. The third dialog state tracking challenge. In Spoken Language Technology Workshop (SLT), 2014 IEEE, pages 324–329. IEEE.

 

[18] Tsung-Hsien Wen, David Vandyke, Nikola Mrksic, Milica Gaˇsi´c, Lina M Rojas-Barahona, Pei-Hao Su, Stefan Ultes, and Steve Young. 2017. A networkbased end-to-end trainable task-oriented dialogue system. EACL.

 

[19] Budzianowski, Paweł, Tsung-Hsien Wen, Bo-Hsiang Tseng, Inigo Casanueva, Stefan Ultes, Osman Ramadan, and Milica Gašić. “Multiwoz-a large-scale multi-domain wizard-of-oz dataset for task-oriented dialogue modelling.”  arXiv preprint arXiv:1810.00278 (2018).

 

[20] https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding#%E5%8F%82%E8%80%83%E8%AE%BA%E6%96%87

 

[21] Williams, Jason D., and Steve Young. “Partially observable Markov decision processes for spoken dialog systems.”  Computer Speech & Language 21, no. 2 (2007): 393-422.

 

[22] Reddy, Siva, Danqi Chen, and Christopher D. Manning. “Coqa: A conversational question answering challenge.”  Transactions of the Association for Computational Linguistics 7 (2019): 249-266.

 

[23] Zhao, Tiancheng, Ran Zhao, and Maxine Eskenazi. “Learning discourse-level diversity for neural dialog models using conditional variational autoencoders.”  arXiv preprint arXiv:1703.10960  (2017).

 

[24] Zhou, Xianda, and William Yang Wang. “Mojitalk: Generating emotional responses at scale.”  arXiv preprint arXiv:1711.04090  (2017).

 

[25] Qian, Qiao, Minlie Huang, Haizhou Zhao, Jingfang Xu, and Xiaoyan Zhu. “Assigning personality/identity to a chatting machine for coherent conversation generation.”  arXiv preprint arXiv:1706.02861  (2017).

 

[26] Zhang, Saizheng, Emily Dinan, Jack Urbanek, Arthur Szlam, Douwe Kiela, and Jason Weston. “Personalizing Dialogue Agents: I have a dog, do you have pets too?.”  arXiv preprint arXiv:1801.07243  (2018).

 

[27] Zhou, Hao, Tom Young, Minlie Huang, Haizhou Zhao, Jingfang Xu, and Xiaoyan Zhu. “Commonsense Knowledge Aware Conversation Generation with Graph Attention.” In  IJCAI , pp. 4623-4629. 2018.

 

[28] Wu, Chien-Sheng, Richard Socher, and Caiming Xiong. “Global-to-local Memory Pointer Networks for Task-Oriented Dialogue.”  arXiv preprint arXiv:1901.04713  (2019).

 

[29]  Lowe R, Noseworthy M, Serban I V, et al. Towards an automatic turing test: Learning to evaluate dialogue responses[J ]. arXiv preprint arXiv:1708.07149, 2017.

 

[30] Tao C, Mou L, Zhao D, et al. Ruber: An unsupervised method for automatic evaluation of open-domain dialog systems[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注