xiaoxiong74 / rasa_chatbot

基于rasa_nlu,rasa_core,rasa_core_sdk构建的聊天机器人
141 stars 45 forks source link
bot chatbot-framework rasa-chatbot rasa-core rasa-nlu

Rasa Core and Rasa NLU

Introduction

这个聊天机器人demo是用开源NLU框架rasa-nlu完成意图识别与实体识别,用rasa-core完成对话管理和与对话生成。

test nlu model 测试NLU模型,主要是看意图是否识别准确,是否抽取到实体

python -m rasa_nlu.server --path models/nlu   启动NUL模型服务

curl -XPOST 192.168.109.232:5000/parse -d '{"q":"我要查昨天下午的抢劫案", "project": "default", "model": "current"}'   

train dialogue 训练会话流程(可选择其他的,如train-nlu-transformer)

python bot.py train-dialogue-keras

test dialogue -client端测试对话流程(开启core client服务)

python -m rasa_core_sdk.endpoint --actions actions &

python -m rasa_core.run --nlu default/current --core models/dialogue_keras --endpoints endpoints.yml     

dialogue 交互式训练生成新的story(相当于自己构造对话场景数据。新的story可以append到之前训练使用的story中重新训练,重复此过程)

python -m rasa_core.train interactive -o models/dialogue_keras -d mobile_domain.yml -s data/mobile_edit_story.md --endpoints endpoints.yml  重头开始训练story,零启动
python -m rasa_core.train interactive --core models/dialogue_keras  --nlu default/current --endpoints endpoints.yml  通过已有story模型训练(构造更多的story,一般用这种方法)

provide dialogue service -Service端:提供对话服务接口(channel(如web)接入时开启此服务)

python -m rasa_core_sdk.endpoint --actions actions &

python -m rasa_core.run --nlu default/current --core models/dialogue_keras --credentials credentials.yml --endpoints endpoints.yml  开启core服务(Service) 

compare policy

python -m rasa_core.train compare -c keras_policy.yml embed_policy.yml -d mobile_domain.yml -s data/mobile_edit_story.md -o comparison_models/ --runs 3 --percentages 0 25 50 70

evaluate policy

python -m rasa_core.evaluate compare -s data/mobile_edit_story.md --core comparison_models/ -o comparison_results/

Some tips

批量生产nlu训练数据

训练数据的构造是非常费时的一件事,本demo data/rasa_dataset_training.json 是通过一些规则自动生成的,节省很多人力。

UI界面接入

UI界面接入可参考 https://github.com/howl-anderson/WeatherBot_UI 直接更改相应的端口或ip即可使用。

多看官方文档 rasa_nlurasa_core

其中也有些坑,使用期间有任何问题,欢迎随时issue!

Q&A

ner_duckling 无法使用

从rasa_nlu=0.14.0 开始就不使用ner_duckling,详见changelog,仅保留ner_duckling_http。因自己启动ner_duckling_http 报错,故自己把ner_duckling的模块又重新添加到了rasa_nlu中。添加方法如下:

  • 1、找到rasa_nul包的位置,我的是/root/anaconda3/envs/rasa/lib/python3.6/site-packages/rasa_nlu
  • 2、在rasa_nlu/extractors(前置路径省略) 中添加duckling_extractor.py文件 直接复制粘贴:https://github.com/RasaHQ/rasa_nlu/blob/0.13.x/rasa_nlu/extractors/duckling_extractor.py
  • 3、在rasa_nlu/registry.py 中注册duckling_extractor组件
    • 导入方法: from rasa_nlu.extractors.duckling_extractor import DucklingExtractor
    • 添加组件: 在组件列表component_classes 中加入 DucklingExtractor

train_dialogue_transformer训练报维度不匹配错误

在policy/attention_keras 中要求输入的特征是偶数个,即mobile_domain.yml的特征数据量,若报错删除一个或增加一个特征即可

train_nlu_wordvector报编码错误

因为rasa_nlu_gao中的word2vec模型使用的txt文本模型,我这里用的bin二进制模型,所以如果使用bin的二进制模型需要更改 rasa_nlu_gao中的源码。修改方法:

  • 1、定位到site-packages/rasa_nlu_gao/featurizers/intent_featurizer_wordvector.py
  • 2、定位到两处模型加载的地方 model = gensim.models.KeyedVectors.load_word2vec_format 将里面的binary 改为True即可

Some magical functions

rasa-nlu-gao新增了N多个个自定义组件,具体用法和说明请参考该作者的 rasa对话系统踩坑记,个人觉得对新入坑聊天机器人的童鞋很有帮助,感谢作者的贡献。简单使用方法如下:

首先需要下载rasa-nlu-gao

pip install rasa-nlu-gao

训练模型

python bot.py train-nlu-gao

测试使用模型

python -m rasa_nlu_gao.server -c config_embedding_bilstm.yml --path models/nlu_gao/