最近在思考对话系统的方向,想选择一个方向做深入的研究,所以找了这篇综述性的文章阅读一下。对文章中提到的感兴趣的文章做一个记录,方便后面研究的开展。
文章将对话系统分为任务导向模型和非任务导向的模型。
任务导向模型主要用来完成某项特定的任务,比如订票系统。这种应用的场景就决定了任务导向的模型往往是特殊定制的,泛化性和鲁棒性都不会太好,我们不太可能要求一个任务导向的模型既能帮助我们定机票又能辅导孩子学习。另外,任务导向的模型通常需要对外部知识库进行查询,以满足对于信息的需求。所以,传统的任务导向的系统是pipeline方式的,需要多个步骤完成整个任务,每个任务对于我们是可见的,涉及到人工特征和人为设定规则,昂贵其耗时,限制应用领域的扩展。不过现在也有方法使用端到端的方式实现任务导向的模型,后面会介绍相应的论文。
非任务导向性的模型最典型的就是闲聊机器人了。微软的小冰就是一个闲聊性质的机器人。非任务导向的模型主要有两种实现方式,生成方法和检索方法,生成方法就是seq2seq了,也是一个研究的热点方向(关于seq2seq在对话系统的应用和论文,可以看下我的这篇文章)。基于检索的方法是从现有的知识库中选择最佳的回答作为回复输出。
说一点个人的想法。虽然这篇文章将对话系统分成了两种模型,但是我感觉两者的结合是未来对话系统的发展方向。首先,任务导向的系统又是一个刚需,可以大大节省人力物力成本,所以无论是单独做任务导向的系统还是与非任务导向系统结合,都会一直做下去。同时,任务导向系统是一个相对严肃的事情,系统的设计需要考虑到完成一个任务的严谨性,也就是说对于大部分的回复需要是确定正确的并且是可控的,这实际上是在限制生成模型在任务导向系统上的使用。非任务导向的系统就轻松一点,可以适度的产生一些不那么正确的回复,更需要产生类人的回复,生成模型是使用的一个热点。现在对其与生成模型的结合的研究也是很火的。相对于其他方法,生成模型更有前瞻性,感觉是未来发展的方向。
那么为什么说任务导向和非任务导向的结合是未来的方向,因为现在各大厂都在竞相做这方面的事情,像小米的小爱同学,百度的度秘,苹果的Siri,他们都可以与对话者进行闲聊式的对话,可能他们偏重的方向不同,但目标都是可以帮助我们完成一件事情,交互追求的是活泼的闲聊式对话。特别是物联网的快速发展,对于这种对话系统的需求会越来越大。过去互联网交互更多的体现在搜索上,感觉未来的这个角色应该是对话系统来扮演的。
好了,说了一点自己的想法,下面回到论文上来。因为我更关注的是端到端的方式,生成模型和检索模型,所以下面就挑选这几个方面的内容做笔记。
pipeline方面的东西不写上来了。
任务导向端到端的方法:1和2介绍了基于网路的端到端的对话系统,学习的是历史对话到系统输出的映射。encoder-decoder监督学习。3应用了端到端的强化学习,系统鲁棒性更强,对话中agent会想用户询问是否问题来找到正确答案,比较适合应用在任务导向的对话。
任务导向对话系统通常需要查询外界的知识库。首先语义理解,然后基于此查询但是有缺点。4用了rnn和attention解决问题
非任务导向的系统,我们有时候也叫他chatbot,是一种开放域的应用。
通常有两种方法:生成方法和基于检索的方法。生成方法可以产生语料库中没有的回复,检索的方法优势在于正确性和流畅的回复
生成模型最常见的就是seq2seq了,其原理和相关的论文之前写过相关的文章基于深度学习的对话系统—论文简介篇和对话系统-----seq2seq基本模型,这里就不在赘述了。
接下来几个章节讲了生成模型面临的几个问题
就是说在产生一个回复的时候,如果只考虑当前的问句,很可能是不完善的,因为通常的一个问题的意思会根据不同的语境有不同的意思,或者不同的语境下对回复的要求不一样。所以将上下文context考虑进生成环节是提升模型效果的一个手段。5考虑了整个对话历史,生成使用了RNN,6使用分层模型,7加入了attention,8对这些方法进行了补充,提出了变体,更好的效果。
因为生成模型的目标函数多使用的是极大似然估计,这就导致出现频率较高的回复比兔Im ok, I dont know这种经常出现,也就是常说的dull response。
第一种方法就是解决目标函数的问题,这里,李纪为博士的一篇论文提出了使用MMI代替MLE,这篇文章之前看过,阅读笔记后面我会放上来。先挖一个坑##
9这篇文章则使用了IDF解决这个问题,这个我后面也会放上来。
另外一种方法是从decode过程考虑的,很多文章都是使用了beamsearch的方法代替了传统的贪婪方式。但是略有不同,10用了一种随机的beamsearch。其余的文章我没有看,感兴趣的同学可以看一下。
个性化这个问题是指的产生的回复是不是有一致性,就是说系统产生的回复会不会让人觉得好像不是一个人说的。个人感觉这个问题实际上和训练的语料库有很大关系,虽然生成模型不像检索模型哪样依赖语料库,但毕竟是由预料库训练得来的。话说回来,有想法就会有办法,来看看研究者都是怎么做的吧。
11使用了Twitter的LDA模型得到输入的主题topic,然后将主题信息和输入放到一个attention模型里进而产生一个主题相关的回复。12加入了一个情感embeddings,在困惑度上有较好的额表现。13用了三种方法来让模型产生情感更加丰富的回复,embeddings,损失函数和目标函数,以及beamsearch。14模型在产生回复的时候还会进行微调,实际上是分为了线上和线下。15则用了强化学习。
文章对这部分内容的介绍很少,只有两段,我也不太了解这方面的东西,只是知道memory network是解决这个问题的经典方法。后面对这个有了解了,再来补充。
这里李纪为大神又出现了,使用强化学习的方式,16。后面看了这篇文章再来补充。
对话系统的评价指标有很多,但是他们的完整性不是很好,问题就是在于语言这种确实是很难评估的。人力的评价又不好量化。但是为了研究,还是会用这些评价指标的。后面单独写一篇文章总结一下常用的评价指标。
检索模型在预测时是从已有的数据库中选择候选回复的方法,不像生成模型那样可以自己产生数据库中没有的回复。有缺点是很明显的,优点是回复准确,缺点是严重依赖数据库。那么检索模型最关键的问题就是提问和回复的匹配问题。
单轮回复的匹配思想很简单,就是用神经网络或者其他的方法将句子表示成为一个向量,然后计算向量之间的匹配得分,描述回复和提问的相似度。其中,17使用了Twitter的LDA模型产生主题向量。
多轮的方法会将提问的上下文连同提问一起放入模型中,因此RNN就是一个多用的选择。
检索模型有一个很经典的实现,使用Ubuntu对话数据集完成一个检索模型。打算后面有时间复现一下。
混合模型就是结合了生成模型和检索模型作为两个term,融合了两者的优势。这个国内阿里的小蜜就是一个典型的代表。AliMe Chat: A Sequence to Sequence and Rerank based Chatbot Engine是其介绍的论文。其模型的流程图如下面: