论文:https://arxiv.org/pdf/1711.01731.pdf
该论文对对话系统进行了综述,并讨论了今后可能的研究方向。
目前的对话系统大致被分成两类:
任务为导向的对话系统是帮助用户去完成特定任务,比如找商品,订住宿,订餐厅等。实现任务为导向的对话系统,主要有两类方式:
通过4个步骤去完成对话任务
端到端地完成对话任务
非任务导向的对话系统是与用户进行互动并提供回答,简单的说,就是在开放领域的闲聊。实现非任务导向对话系统也主要可分为两类:
生成式对话
答案选择式对话
文章就以上两类对话系统,以及各自的实现方法进行详细综述与讲解。
Pipeline method的步骤可以分为4个,过程如下图所示,分别是自然语言理解–>对话状态跟踪–>策略学习–>自然语言生成
目标:将用户的输入语句转化为预先设定好的语义槽(semantic slot)
先来个例子:
在任务型对话系统中用户想要查酒店信息,于是说出一个句子:“show restaurant at New York tomorrow.”
理解这个句子需要两个步骤:
(1)首先要判断用户是需要订酒店,而不是订机票,买东西,查快递,那么这属于一个分类问题,即识别用户意图类别
(2)查酒店类别会有与之相对应的预先设定好语义槽(semantic slot),如New York是location的slot value.填充槽值的过程即在句中做词信息的抽取。
以上两步也可分别称作意图识别(intent detection)与槽填充(slot filling):
意图识别: 是分类问题,将用户发出的语句分类到预先设定好的意图类别中。简而言之,其实就是短文本的分类,最近一般都使用深度学习来做分类。
**槽填充:**是序列标注问题,为句子中的每个词打上语义标签。输入是由一组序列的词组成的句子,输出是该组序列的词及词对应的语义类别(slot/concept ID)。可以类比中文分词,词性标注等问题。因此传统的做法有HMM,CRF等。最近效果较好的是DBN,RNN去做序列标注
使用了deep belief networ(DBNs),取得优于CRF baseline的效果:
“Use of kernel deep convex networks and end-to-end learning for spoken language understanding.(2012)”
“Deep belief network based semantic taggers for spoken language understanding.(2013)”
[17]和[15]使用了deep belief networ(DBNs),
使用了RNN
“Investigation of recurrent-neural-network architectures and learning methods for spoken language understanding.(2013)”
“Recurrent neural networks for language understanding.(2013)”
“Spoken language understanding using long short-term memory neural networks.(2014)”
根据对话历史管理每一轮对话的输入,并且预测当前对话的状态。对话状态Ht表示到时间t为止对话的表征(也叫做slot或semantic frame)。对话状态的跟踪主要有3个方面:the user’s goal, the user’s action, the dialogue history.
传统的方式:是使用手工做的规则来选择最可能的结果。但是错误率高。
基于统计的方式:
基于深度学习:
根据当前对话状态做出下一步的反应。举个例子,在线上购物的场景中,若上一步识别出来的对话状态是“Recommendation",那么这一步骤就会给出对应推荐的action,即从数据库中获取商品。
将Policy learning给出的反应转换成相应的自然语言形式的回答提供给用户。一个好的回答生成器应具备4个特点:adequacy, fluent,readability and variation[78].
传统的方法[90;79]:使用sentence planning,将输入的语义特征转换成中间形式(比如树状或模版形式),然后再通过surface realization将中间形式转换成最终的回答。
深度学习的方法:[94;95]介绍了NN于LSTM结合的结构,类似于RNNLM;[94]使用前向RNN生成器,以及CNN和backwards RNN的reranker,所有子模型进行联合优化;[95;83]新增一个control celll来gate the dialogue act;[96]将前者在multiple-domain上改进于应用;[123]使用encode-decode LSTM-based,并结合了attention machanism;[20]使用sequence-to-sequence 方法。
特点:使用单个模型;可于外部的结构数据库进行交互
使用基于网络的端到端的可训练的对话系统。将对话系统的问题转换为学习一个映射(从历史对话–>回答)。但是,其需要大量训练数据并且缺少鲁棒性。
使用end-to-end 强化学习方法,联合训练对话跟踪于策略学习,但是也存在缺陷:不可微+无法获取语义不确定性。
基于memory network,使用RNN+可微分attention
“Key-value retrieval networks for task-oriented dialogue(2017)”
非任务型对话主流有两类:生成式对话和抽取式对话。
Neural generative models主要是依赖于sequence to sequence的模型。但光建立一个序列模型还远远不够,一个好的对话系统还需要考虑:
(1)历史对话对当前对话的影响
(2)回答的多样性
(3)针对不同领域与用户个性提供不同的回答
(4)基于外部的知识库去做回答
(5)内部学习与评估(两个对话机器人互相对话作为训练)
如何评价产生对话的好坏呢?
Retrieval-based method是从候选答案中选出一个答案作为回答。主要有两个应用领域:
(1)单轮对话
(2)多轮对话
将以上生成式对话和抽取式对话结合起来,先从通过抽取模型抽取出答案,再将答案放到RNN中去生成回答。
其他很赞的博文: https://blog.csdn.net/Irving_zhang/article/details/78865708
对话系统是一个很大的领域,涉及了不限于NLP的方方面面,让机器拥有人类的对话能力姑且任重道远,探索之路也辛且艰,因此这方面的学习也需要从面到点,单个击破,之后我会将对话系统的学习和实践做好博客的记录,欢迎大家一起讨论。