【RASA】安装与项目构建

一、rasa安装

首先安装rasa,目前rasa版本支持多种语言,可以直接通过下面指令来安装:

pip install rasa

由于要安装很多依赖包,所以此步骤所需时间比较长。(也可以加个清华源来安装)

目前安装的是rasa-1.3.0,依赖的tensorflow版本为1.15.0,rasa版本更新较快,后续版本依赖的tensorflow为2.0版本。但不同的rasa对后续的开发影响不大。

安装好rasa之后,就可以构建rasa项目去训练自己的chatbot。

二、新建rasa项目

rasa init --no-prompt

项目创建后,会生成如下文件:

【RASA】安装与项目构建

训练模型:

python -m rasa train --config config.yml --domain domain.yml --data data/

运行rasa服务:

python -m rasa run --port 5005 --endpoints endpoints.yml --credentials credentials.yml --debug

启动action服务:

Python -m rasa run actions --port 5055 --actions actions --debug

启动flask交互界面:

python server.py

代码结构:
|– init.py # 帮助python查找操作的空文件
|– config.yml # 配置nlu和core模型
|– domain.yml # 配置意图和对应的action执行文件
|– endpoints.yml # 输出地址和端口配置
|– credentials.yml # 开放的端口类型
|– action.py # action文件
|– data
| |– nlu.md # nlu训练数据
| |– stories.md # 故事数据

|– word
| |– dict.txt #jieba分词用户自定义字典

|– model # 模型保存地址
|– web # flask前端配置文件
| |– init.py
| |– server.py
| | — static
| |– templates

测试了一个简单的银行存取款问答数据,可以跑通项目,如下截图:

【RASA】安装与项目构建

备注:
1、nlu模块添加自定义组件
目前添加自定义模块是在源码中添加的,以bilstm-crf用于实体识别为例:
(1)、首先将bilstm_crf_entity_extractor.py添加到site-package/rasa/nlu/extractor中;
(2)、在site-package/rasa/nlu/registry.py中将自定义模块加入进来:
1)from rasa.nlu.extractors.bilstm_crf_entity_extractor import BilstmCRFEntityExtractor
2)component_classes中添加 BilstmCRFEntityExtractor,
3)registered_pipeline_templates中添加”ner_bilstm_crf”: [“BilstmCRFEntityExtractor”],
(3)、在config.yml文件中加入自定义组件配置,- name: “BilstmCRFEntityExtractor”

三、rasa数据格式说明

(1)rasa_nlu数据格式:

rasa_nlu提供了两种训练样本的数据格式——Markdown和json。通常我们会使用Markdown来存储训练数据。同时Markdown和json之间可以互相转换,通过运行rasa data convert nlu即可。下面将介绍Markdown数据格式。

rasa_nlu数据可以形式化为4个部分:

a. common example(必须)

comment examples是必须要有的,它由intent、text和entities三部分组成。其中,text表示用户自然语言文本,即用户Message;intent表示某个意图,它应于某些text相对应; entities表示将要被提取的目标实体,我们需要在text文本中标出(如果该text存在实体的话)。Common Examples一般格式如下:

intent:你的意图名称

  • text

注:text中可以不包括实体,但如果包含需要用entityText进行标志

b. synonyms(同义词)

对于同义词,在实体提取的时候会被统一解析成同一个意思。举例来说:

synonym:余额

  • 余额

  • 话费

  • 话费余额

  • 账户余额

在我们说账户余额、话费等词语时,NLU在提取实体时会能够成功被捕获,并被统一解析成余额。需要注意的是,为了在训练数据中使用同义词,需要pipeline中包含EntitySynonmMapper组件。

c. regular expression features

正则表达式有助于意图分类和实体抽取,但它不参与实体和意图的定义,仅仅是提供规则来协助意图分类和实体抽取。因此,在训练文本text中,该添加的实体和意图样本需要照样添加。比如当需要用户输入的手机号实体时,我们可以再nlu.md文件中添加正则表达式特征支持,当用户输入的Message包含符合手机号正则表达式规则的内容时,Rasa可以更加容易地将其提取出来。Regular Expression Features一般格式如下:

regex:phone_number

  • ((\d{3,4}-)?\d{7,8})|(((+86)|(86))?(1)\d{10})

注意:phone_number表示的既不是实体名也不是意图名,它只是一个便于我们阅读的标志而已。除了实体识别,我们还可以编写符合意图分类的正则表达式。另外,需要注意的是,对于实体提取来说,目前只有CRFEntityExtractor 实体提取器支持正则特征,MitieEntityExtractor和SpacyEntityExtractor目前还不支持;对于意图分类器,目前均已支持正则特征。最后,为了使用正则特性,我们需要在pipline中添加RegexFeaturizer组件。

d. lookup tables

查找表有利于在加载训练数据时,生成与Regular Expression Features相同的正则特征。当在训练数据中提供查找表时,内容被组合成一个大型、不区分大小写的regex模式,该模式在训练示例中查找精确匹配。这些正则表达式匹配多个token,其处理与训练数据中直接指定的正则表达式模式相同。

四、参考文档:

  1. http://rasachatbot.com/ (rasa中文文档)
  2. Rasa中文聊天机器人开发指南(2):NLU篇_无名之辈FTER的博客-CSDN博客

Original: https://blog.csdn.net/u011590738/article/details/125497900
Author: MachineCYL
Title: 【RASA】安装与项目构建

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/746233/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球