对话系统rasa学习及使用

最近要做一个简单金融场景的对话问答系统,由于一开始没有业务数据,首先想到的就是话术模版问答,在调研了一些技术文章和系统后,发现比较常用的就是rasa,比较适合单一业务场景的对话,大厂的开放式问答可能是很多人自主研发的一套框架,对于很多中小厂则主流使用的是rasa,可以减少一部分基建的时间。

一个完整的对话系统流程图如下所示:

对话系统rasa学习及使用

Rasa的框架涵盖了上图右边虚线框的部分。

rasa简介

网上资料很多,直接贴github上的描述:Rasa is an open source machine learning framework to automate text-and voice-based conversations. 

主要意思就是它是一个机器学习的框架,能够自动进行文本和语音的对话。

Rasa的核心模块是NLU和对话管理

NLU:利用规则、机器学习,统计学习,深度学习等方法,对一条人类语言进行文本分析,分析得到的主要结果为意图intent以及实体entity信息。其中,意图对应task-orient对话系统中的intent。而实体信息则用于对话系统中的槽填充。

对话管理:在rasa中,对话管理的主要职责是通过NLU的分析得到的意图和实体信息,进行槽位填充,然后结合前几轮对话的状态,根据某种策略(策略可以是人工规则,或者机器学习,深度学习,强化学习训练得到的策略模型),决定应当如何对当前用户的对话进行回应。因此rasa的对话管理是包括槽填充的。

除了上述两个核心内容外,rasa当然还提供其他功能,如response生成,与其他对话系统前端平台对接的接口,以及不同类型的对话模拟接口(包括shell命令行模式,restful api调用模式等),对于从头开发一个对话系统来说,这个框架还是省去了不少基建的工作。

rasa使用

根据github的安装步骤,用pip命令安装rasa和rasa-sdk这两个包。安装完之后,使用命令行进行使用。

首先使用rasa init命令,它会生成一个最原始的文件夹,包含了基础的配置文件以及简单的example。

然后开始根据自己业务场景修改代码和配置文件,主要流程如下:

1. 编写配置domain.yml文件,配置内容包括:设计的槽位,NLU需要识别的实体列表、意图列表,bot回复用户的模板,配置可在story中直接引用的action,配置自定义的form。

2. 编写配置config.yml文件,配置内容包括:使用的NLU模块类(实体抽取、意图识别等),使用的策略列表。

3. 编写stories.md文件,设计话术流程模板。

4. 开发自定义的NLU模块,根据实际需要添加所需的模块。一般来说需要加入extractor和classifier模块,分别对应实体抽取和意图识别两个模块,可以结合人工规则和机器学习模型。也可以直接配置nlu.md模块,使用规则进行意图匹配。

5. 开发自定的form action模块,在validate中定义自己的处理逻辑。当然也可以重写action的run方法,在其中添加自己的逻辑。根据文档指导如何在action中添加一些函数。

6. 配置endpoints.yml文件,这个文件是用于配置action服务地址的。因为之前说过action是一个独立于主流程的服务,因此需要配置其服务接口。

7. 配置credentials.yml文件,rasa支持将对话系统封装成一个restful_api服务。另外提一句,rasa使用的是sanic的异步web框架。因为对话系统是一个多用户的异步服务,所以需要支持多个用户的同时使用。在文档的描述中restful接口不需要修改任何参数,只需要执行rasa run命令,然后用post命令,并且url后缀要加上/webhooks/rest/webhook 

一些需要注意的地方:

我主要关注的模块是form action这个动作,但是在文档中的描述没有提到要继承FormAction这个父类,我直接继承了action这个父类,导致一直报错,进入不了form流程中。

formaction也是custom action的一种,所以在调试的时候需要启动action服务,否则会报错。

各个种类的action命名规则需要按文档来,formaction命名比较特殊,按form的规则命名。

比较好用的方法:

在测试的时候用rasa run —debug 和rasa run actions —debug可以比较方便的定位问题的产生原因。

在测试自定义逻辑时可以使用rasa shell —debug进行逻辑调整和测试。

参考文献:

  1. https://legacy-docs-v1.rasa.com/1.10.18/core
  2. https://zhuanlan.zhihu.com/p/75517803
  3. https://www.jianshu.com/p/4ecd09be4419
  4. https://github.com/charlesXu86/Chatbot_RASA

 

上一篇:cpu利用率提高


下一篇:NLU -- 基于信息架构的新的NLU理论及研究方法 -- 2.2 结构块