本文主要参考论文 A Survey on Dialogue Systems: Recent Advances and New Frontiers,相当于读书笔记或者简要翻译吧,点击下载原文。若对本文中提及的参考文献内容感性趣,请下载原文查看参考文献名。
概述
目前,从应用的角度看,对话系统大致可以分为两类:(1)task-oriented systems(任务型);(2)non-task-oriented systems(聊天型)。
任务型系统主要帮助人们完成确定的任务(例如,订票)。之前广泛应用的方法流程如Figure 1。系统先理解用户的话(NLU),将其表示成系统可以理解的状态,然后根据策略采取一些action,最后根据这些action转换成自然语言(NLG)回复。这里的NLU是用统计模型来处理。可靠的对话系统仍使用人工特征和规则来表示状态和策略、检测意图等,使得实际使用中的对话系统成本很高,而且很难被用于其他领域。
最近,很多深度学习算法通过学习高维的分布式特征表示来解决这些问题。
聊天型对话系统主要使用了这两种模型:(1)generative methods,例如:Seq2Seq model;(2)retrieval-based methods,学习从已有库中选择当前对话对应的回答。
任务型对话系统
主要从两类来看,pipeline型和端到端(end-to-end)型。
Pipeline Methods
主要包含四个部分:NLU,dialogue state tracking,policy learning,NLG。
NLU:将自然语言映进行识别意图和信息抽取(语义槽,semantic slots)。识别意图就是将用户的话分类到预定义好的类别中。[15,84,112]使用了深度学习进行意图识别。[25,29,74]使用了CNN进行分类。类似的方法同样适用于类别和领域的分类。槽填充(slot filling)是将用户的话中的词打上语义标签(例如,日期、地点等):[15,17]使用了深度信念网络(DBNs),[51,66,115,113]使用了RNN。NLU的结果(intent和slot)会进一步被对话管理器(dialogue management component)进行处理,主要包括dialogue state tracking和policy learning。
Dialogue state tracking:在每一轮对话中估计用户的目标。常用的state结构是slot filling或semantic frame。传统方法是使用人工定义的规则来选择最有可能的结果[23]。最近,[26]提出了单领域的,基于深度学习的belief tracking;[58]提出了基于RNN,多领域的tracking模型;[59]提出了neural belief tracker(NBT)来检测slot-value pairs。
Policy learning:基于状态的表示,policy learning用来生成系统的下一步action。可以使用监督学习和强化学习。[14]使用了深度强化学习,得到了很好的表现。
NLG: 根据action生成自然语言。[83,94,95,123]使用了基于LSTM的神经网络模型。[20]提出了基于Seq2Seq方法的NLG,[19]扩展了[20],使得模型能适应用户说话的方式,作出合适的回应。
End-to-End Methods
基于Pipeline方法的系统,有很多在具体领域的人工设计,难以应用到其他领域,并且还有两点局限:一是用户的反馈难以传给模型,二是各个模块间相互依赖(一个模块的输出是另一个模块的输入),适应新环境时修改起来需要很多人力。[7,97]提出了基于神经网络的、端到端的、可训练的任务型对话系统,将对话系统的学习看作是一个从历史对话记录的匹配过程的学习,使用Encoder-Decoder模型来训练整个网络,缺点是监督学习需要大量数据,并且不够健壮。[120]首先提出了端到端的强化学习方法来训练DM(包括dialogue state tracking和policy learning),优化系统的鲁棒性(系统问用户一系列Yes/No问题来确定答案)。[45]将端到端系统训练为task completion neural dialogue,最终目的是完成一项任务,例如,订电影票。
任务型对话系统通常需要查询外部的知识库。先前的系统一般会发出一次符号查询来获得结果[97,103,45]。[21]使用基于attention、键值对的检索机制来增强现有循环网络架构。[18]提出了在知识库上的“soft”posterior distribution来推断用户的兴趣点,取代了符号查询。[102]结合了RNN与领域知识的软件和系统action模版。
网友评论