对话系统是自然语言处理的一个热门话题,而自然语言理解则是对话系统的关键组成部分,现有的很多自然语言理解工具往往以服务的方式获取(Google 的 API.ai, Facebook 的 Wit.ai 等),使用这些服务往往需要向服务提供商提供自己的数据,并且根据自己业务调试模型很不方便。本文为大家介绍了一种新方法,即如何基于 rasa 搭建一个中文对话系统。
在近期 AI 研习社举办的线上免费公开课上,来自北京邮电大学网络技术研究院的张庆恒分享了基于 rasa nlu 构建自己的自然语言理解工具,并结合 rasa core 搭建对话系统框架的一些经验,方便初学者入门,加深对对话系统的理解。本文根据分享者的直播视频内容整理而成。(推荐观看直播回放 http://www.mooc.ai/open/course/416 )
张庆恒,北京邮电大学网络技术研究院,网络与交换技术国家重点实验室硕士,主要研究方向为机器学习与自然语言处理。曾在百度实习且多次参加机器学习、深度学习比赛,获阿里云安全算法挑战赛获冠军,中文标注开源项目 Chinese-Annotator 主要开发成员。
分享主题
基于 rasa 搭建中文对话系统
分享提纲
2.1 rasa nlu 中文自然语言理解实现,及其背后的原理 2.2 rasa core 对话管理实现,结合源码介绍其实现方法
主要内容
大家好,今天的分享内容首先是为大家介绍基于任务型对话系统的主要概念和它的几个模块。第二部分是基于 Rasa 搭建电信领域任务型对话系统的实操训练。分别是基于 Rasa nlu 实现自然语言理解和基于 rasa core 实现对话管理。
自然语言理解(NLU)和对话管理是任务型对话的主要模块。自然语言理解是问答系统、聊天机器人等更高级应用的基石。下面列举三个典型的问答系统:
任务型对话系统示意图
任务型对话主要包括四部分 ,语音识别,自然语言理解,对话管理,最后是自然语言生成。
下面是一个订餐应用的例子。
接下来分别来看每个模块具体实现的方式
首先是自然语言理解。做自然语言理解首先要有一种表示自然语言含义的形式,一般用传统的三元组方式即:action, slot , value。action 就是意图,slot 是需要填充的槽值,value 是对应的值。
具体可以用哪些技术做这些事情呢?下面列出了三个方法。
第一个是语法分析,可以通过语法规则去分析一句话,得到这句活是疑问句还是肯定句,继而分析出用户意图。相应的也可以通过语法结构中找到对应的槽值。
第二种方法是生成模式,主要两个代表性的 HMM,CRF, 这样就需要标注数据。
第三种方法是分类思想,先对一句话提取特征,再根据有多少个槽值或意图训练多少个分类器,输入一句话分别给不同的分类器,最终得到包含槽值的概率有多大,最终得到这个槽值。
还有一种采用深度学习方式,使用 LSTM+CRF 两种组合的方式进行实体识别,现在也是首选的方法 ,但有一个问题是深度学习的速度比较慢 ,一般轻量型的对话系统还是通过语法分析或分类方式或序列标注来做。
对话状态应该包含持续对话所需要的各种信息。DST 的主要作用是记录当前对话状态,作为决策模块的训练数据。
系统如何做出反馈动作?
下面是自然语言生成部分。自然语言生成也有多种方法。这里举三个方法:基于模板,基于语法规则和基于生成模型方法; 具体可观看视频回放(http://www.mooc.ai/open/course/416 )。
任务型对话其他模块
第二部分是用 Rasa 实现任务型对话系统。Rasa nlu 是自然语言理解框架,主要实现实体识别,意图识别等。Rasa core 是对话管理框架,主要实现状态跟踪、policy 训练,在线学习等。
实操部分使用 rasa nlu 和 rasa core 实现一个电信领域对话系统 demo,实现简单的业务查询办理功能‘’具体代码实现过程推荐观看 AI 慕课学院提供的视频回放。