0、说明
对话系统大致可分为5个基本模块:语音识别(ASR)、自然语音理解(NLU)、对话管理(DM)、自然语言生成(NLG)、语音合成(TTS)。对话管理(Dialog Management,DM)就是人机对话中的CPU,控制着整个人机对话的过程。
对话管理的任务主要有下4点:
- 对话状态维护(dialog state tracing,DST)
- 生成系统决策(dialog policy)
- 作为接口与后端/任务模型进行交互
- 提供语义表达的期望值(expections for interpretation)
1、任务驱动型对话系统的组成
任务驱动型人机对话系统会根据当前状态(state)和相应动作(action)决定下一步的状态和反馈,即求状态转移概率P(r,s’|s,a),这其实是马尔科夫决策过程的思想。任务型人机对话系统包括以下几个部分:
- 获取用户query。
- 自然语言理解模块(Natural Language Understanding):主要是槽位识别和意图识别,并且这时候识别的意图有可能是有多个的,对应的槽位也会不 同,都会有个置信度 。
- 对话管理模块:包括Dialog State Tracking(DST)和Dialog Policy。DST就是根据前面的信息得到它的state,state其实就是slot的信息:得到了多少slot,还差什么slot,以及它们的得分等等。Dialog Policy就是根据state做出一个决策,叫action,如还需要什么slot,是否要确认等等。
- 自然语言生成模块(Natural Language Generation)
Dialog Policy就是根据state做一个决策,只要有了state,就比较容易了,所以 DST 就比较关键。目前 DST 主要有这么几种方法 :生成式模型(Generative Model)、判别式模型(Discrimitive Model)、规则系统。
2、闲聊型对话系统
闲聊型对话系统的设计方法主要有:规则方法、生成模型和检索方法。
- 规则方法:规则系统关键是如何写一堆规则和线上的快速匹配。目前没有哪个系统是纯规则的了,规则方法顶多只是在 一些其他方法处理不好的情况下的一个补充。
- 生成模型:举例:可以首先使用一个RNN模型把输入句子“ABC”表示成一个向量,然后把这个向量作为另一个RNN模型的输入,最后使用语言模型生成目标句子“WXYZ”。 这种方法的优点是省去了中间的模块,缺点是生成的大多是泛泛的无意义的回复、前后回复不一致,或者有句子不通顺的问题(一句话不通顺其实都很难解决)。好多人也在融合上下文、 Topic、互信息等来解决多样性问题,但遗憾的是,只使用这种方法效果并不尽人意(而且非常依赖于大量高质量的训练语料),它可以结合其他模型和策略来处理。
- 检索方法。