一、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
项目创建后,会生成如下文件:
训练模型:
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
测试了一个简单的银行存取款问答数据,可以跑通项目,如下截图:
备注:
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,其处理与训练数据中直接指定的正则表达式模式相同。
四、参考文档:
Original: https://blog.csdn.net/u011590738/article/details/125497900
Author: MachineCYL
Title: 【RASA】安装与项目构建
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/746233/
转载文章受原作者版权保护。转载请注明原作者出处!