雷锋网AI研习社按:对话系统是自然语言处理的一个热门话题,而自然语言理解则是对话系统的关键组成部分,现有的很多自然语言理解工具往往以服务的方式获取(Google 的 API.ai, Facebook 的 Wit.ai 等),使用这些服务往往需要向服务提供商提供自己的数据,并且根据自己业务调试模型很不方便。本文为大家介绍了一种新方法,即如何基于 rasa 搭建一个中文对话系统。
在近期雷锋网AI研习社举办的线上免费公开课上,来自北京邮电大学网络技术研究院的张庆恒分享了基于 rasa nlu 构建自己的自然语言理解工具,并结合 rasa core 搭建对话系统框架的一些经验,方便初学者入门,加深对对话系统的理解。本文根据分享者的直播视频内容整理而成。(推荐观看直播回放)
张庆恒,北京邮电大学网络技术研究院,网络与交换技术国家重点实验室硕士,主要研究方向为机器学习与自然语言处理。曾在百度实习且多次参加机器学习、深度学习比赛,获阿里云安全算法挑战赛获冠军,中文标注开源项目Chinese-Annotator主要开发成员。
分享主题:基于 rasa 搭建中文对话系统
分享提纲:
1. 对话系统的分类和关键技术介绍
2. 结合电信业务查询办理场景,借助开源框架 rasa 实现任务导向型聊天机器人 demo。
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的主要作用是记录当前对话状态,作为决策模块的训练数据。
系统如何做出反馈动作?
下面是自然语言生成部分。自然语言生成也有多种方法。这里举三个方法:基于模板,基于语法规则和基于生成模型方法; 具体可观看视频回放。
任务型对话其他模块
第二部分是用Rasa实现任务型对话系统。Rasa nlu是自然语言理解框架,主要实现实体识别,意图识别等。Rasa core是对话管理框架,主要实现状态跟踪、policy训练,在线学习等。
实操部分使用rasa nlu和 rasa core 实现一个电信领域对话系统demo,实现简单的业务查询办理功能‘’具体代码实现过程推荐观看AI慕课学院提供的视频回放。
雷锋网更多公开课直播预告敬请关注微信公众号【AI研习社】)。如果错过了直播课程,还可到AI慕课学院查找该期的视频回放。