开发者学堂课程【达摩院智能语音交互 - 人机对话技术浅析:任务驱动型人机对话】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/42/detail/959
任务驱动型人机对话
内容介绍:
一、任务驱动型人机对话
二、自然语言理解(NLU )
三、NLU 常用神经网络方法
四、BERT 联合建模意图分类和槽填充
一、任务驱动型人机对话
一般沿用如上的流程框图。用户给出一条智能语言的指令,例如例子中的找一部电影,通过语言给出,人机系统在入口前会接入一个ASR的语音识别系统来将语音转为文字。
文字会通过自然语言理解模块即NLU模块,功能识别输入块的语义和意图,获得任务相关的语义信息。例如上图中NLU模块识别出电影领域,意图为寻找电影,其中的演员为bill murry。(NLU模块在日后会详细介绍。)接着信息流会进入到对话管理模块,其中包括对话状态追踪和对话决策模块。
对话管理DM控制着人机对话的过程。DM会根据对话的历史信息来决定对用户的反应。其中对话状态追踪主要为回复和更新对话的状态例如NLU模块的一些输出,用户的特征等。对话决策模块基于当前的对话状态选择接下来的合适的动作。
对话管理常会涉及到与领域相关的知识库的交互,例如在该地址中,机器会在知识库中查找bill murray电影,并发现bill murray出现过很多部电影。因此对话管理模块会做出一个请求电影发行年份的动作。对话管理模块主流的方法一般是基于启发式的方式,当前正在探索,技术并不够成熟。
接着请求电影的动作通过自然语言NLG模块生成自然语言的语句:是什么时候发行的,NLG方法有基于神经网络的方法,但报告中不会具体描述。
NLG后一般也会接TTS的语音合成系统,TTS会将文字转为语音和人类进行交互。最后从NLU到DM再到NLG形成了一个完整的任务型驱动型的人机对话流程。
二、自然语言理解(NLU )
领域分类 Domain Classification(就是将用户输入进的自然语言语句划分到某个特定的领域,例如电影领域、餐馆领域、航班领域等。一般不同的领域后会对接不同的知识库。例如电影领域后会接一个与电影相关的知识库)
电影,餐馆,航班,..
意图分类 Intent Classification(例如在航班领域,常用的意图有航班时间、机票费用、地面服务等。意图分类模块就是将用户的语句分类到某个意图上)
航班时间,机票费用,地面服务...
槽填充 Slot Filling(就是将某些槽填上对应的槽值。一般用key value形式来表示。例如在航班领域,出发城市为一个槽,当前语句对应的一个槽值为杭州,出发月份为另一个槽,对应的槽值为四月。)
出发城市=“杭州”,出发月份=“四月”,...
例子:
杭州机场有什么地面交通?(用户的自然语言输入)
领域:航班(NLU模块划分到一个航班领域)
意图分类和槽填充:地面服务(城市名=“杭州”)
三、NLU 常用神经网络方法
领域分类
CNN,LSTM,Transformer
意图分类
CNN,LSTM,Transformer
槽填充(一般会当成一个序列标注的问题来解,给输入的领域打上标签,例如哪些属于城市名)
Sequence labeling approaches
BiLSTM+CRF,Transformer(常用的方法)
流水线pipeline:领域分类->意图分类->槽填充
为什么不联合意图分类和槽填充?(近年来业界关注到了该问题,2016年 Sequence-based 与 Parallel 方法都尝试将意图分类和槽填充联合起来。而不是使用一个 pipeline 流水线的模式。)
Sequence-based (Hakkani-Tur et al, 2016),Parallel (Liu and Lane, 2016)
四、BERT 联合建模意图分类和槽填充
BERT for Joint Intent Classification andSlot Filling (Chen et al., 2019)(具体细节可参考公开论文)
优点:
预训练 BERT 缓解对话标注数据稀少造成的泛化能力较弱问题
巧妙地利用 BERT 结构联合建模意图分类和槽填充
在两个 benchmark 获得 SOTA
方法原理图如下:
BERT 模型和一个特殊的 talker CLS 会被用来做 Intent 分类。其它的会被用来做 Slot Filling。