当前位置: 代码迷 >> 综合 >> RASA NLU 模块 DEMO
  详细解决方案

RASA NLU 模块 DEMO

热度:22   发布时间:2024-02-21 06:12:52.0

文章目录

参考资料

一、版本

二、训练资料

1.MITIE模型

2.NLU训练资料

三、运行说明

四、结果呈现


参考资料

本文参考该程式码 https://github.com/zqhZY/_rasa_chatbot

配套对应的博客,自行百度(原始链接似乎被屏蔽了,但网上还是有转载):
基于rasa的对话系统搭建(上) 

基于rasa的对话系统搭建(下) 


一、版本

rasa core == 0.9.0

rasa-nlu == 0.12.3


二、训练资料

1.MITIE模型

git链接中的路径 /data/total_word_feature_extractor.dat

关于mitie模型可以用别人训练好的模型,自己专门从抓取的资料中取训练,对着两种解决方案请参考下文

MITIE模型训练与 内存溢出 bad allocation解决 (win10)

2.NLU训练资料

git链接中的路径 /data/mobile_nlu_data.json

这边重点解释训练资料的构建,提供一个思路是收集答案(意图)以及对应的语句,再用结巴分词分好后专成训练所需的json格式。

common_examples 这一项就是我们所需要构建的资料,text是收集的文本语句,intent是设置的意图,entities是分词结果以及对应的位置

{"rasa_nlu_data": {"common_examples":[{"text": "很快","intent": "Q2_A_0_15","entities": [{"start": 0,"end": 1,"value": "很快","entity": "item"}]},{"text": "一会吧","intent": "Q2_A_0_15","entities": [{"start": 0,"end": 1,"value": "一会","entity": "item"}]},{"text": "好几小时","intent": "Q2_D_60_up","entities": [{"start": 1,"end": 3,"value": "几小时","entity": "item"}]},{"text": "很久","intent": "Q2_D_60_up","entities": [{"start": 0,"end": 1,"value": "很久","entity": "item"}]}],"regex_features": [],"entity_synonyms": [{"value": "分钟","synonyms": ["分"]}]}
}

三、运行说明

进入根目录:

sh train.sh

其中train.sh文件:
 

# python -m rasa_nlu.train --data ./data/qa_nlu.json \ 训练资料的路径
#   --config ivr_chatbot.yml \ 配置的路径python -m rasa_nlu.train --data ./data/qa_nlu.json \--config ivr_chatbot.yml \--path projects \--fixed_model_name demo \--project qa_nlu

配置文件 ivr_chatbot.yml 

language: "zh"
project: "qa_nlu"
fixed_model_name: "demo"
path: "models"
pipeline:
- name: "nlp_mitie"model: "data/total_word_feature_extractor.dat" #MITIE提取出来的
- name: "tokenizer_jieba" 
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"
- name: "intent_classifier_sklearn"

四、结果呈现

简单免server调用结果,local_eval.py:

ivr_model = "projects/qa_nlu/demo"
ivr_config = "ivr_chatbot.yml" from rasa_nlu.model import Interpreter
interpreter = Interpreter.load(ivr_model) 
n = "要一分多钟吧"
pred = interpreter.parse(n)
print(n,pred)
n = "要八分钟吗"
pred = interpreter.parse(n)
print(n,pred)
n = "很快把"
pred = interpreter.parse(n)
print(n,pred)
n = "要差不多二十分钟吧"
pred = interpreter.parse(n)
print(n,pred)
n = "二十多分钟吧"
pred = interpreter.parse(n)
print(n,pred)n = "要一个多小时"
pred = interpreter.parse(n)
print(n,pred)
n = "要好几个小时吧"
pred = interpreter.parse(n)
print(n,pred)
n = "要很久"
pred = interpreter.parse(n)
print(n,pred)
n = "一会就睡着"
pred = interpreter.parse(n)
print(n,pred)

题目:你多久吃完饭?
A 小于15分钟 
B 15-30分钟
C 30-60分钟
D 一小时以上

可以看出回答还是蛮准的(红色错误)回答的质量与设计的json训练资料,还有回答者的回答是否匹配相关,可以将回答者后续的回答资料收集,进一步优化并提升回答质量.

  相关解决方案