github代码rasa_nlp
典型的对话系统
1.IR-Bot:检索型问答系统(用户输入问题,系统返回一个答案,不带对话流程,不带上下文)
2.Task-Bot:任务型对话系统(eg:买票、订票、订餐任务型的对话)
3.Chitchat-Bot:闲聊系统(微软小冰,陪人聊天,闲扯型)
用户输入:语音/文本 ----> 自然语言理解NLU:领域识别/用户意图识别/填槽(关键信息) ----> 对话管理DM:对话状态跟踪(填槽的状态、历史对话记录)/对话策略,产生action ----> 自然语言生成NLU:生成回答。[图片上传失败...(image-1f7e04-1559211731947)]
](https://upload-images.jianshu.io/upload_images/6102062-a9ebe45dadc78563.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
一、首先根据github代码rasa_nlp,先安装rasa。
pip install rasa_core==0.9.0 (其他版本也行)
pip install rasa_nlu==0.9.0 (其他版本也行)
pip install -U scikit-learn sklearn-crfsuite
pip install git+https://github.com/mit-nlp/MITIE.git
二、自然语言理解NLU模块的训练
1.文件train.sh
python -m rasa_nlu.train \
--data ./data/mobile_nlu_data.json \
--config ivr_chatbot.yml \
--path projects \
--fixed_model_name demo \
--project ivr_nlu
独自运行python -m rasa_nlu.train会提示必须有配置文件--config
注: python -m rasa_nlu.train是训练自然语言理解模块
注: python -m rasa_nlu.server是启动自然语言理解模块服务
仔细分析文件train.sh 分析自然语言理解NLU模型训练过程中需要的数据参数信息等
-
查看该python -m rasa_nlu.train的--data ./data/mobile_nlu_data.json内容
自然语言理解模块训练的数据集样例 查看该python -m rasa_nlu.train的--config ivr_chatbot.yml内容
通过以下分析,得知:python -m rasa_nlu.train的时候需要准备训练数据(json格式,文本,意图,实体标注,同义词标注等),因此--data必须自己准备一份自己领域的数据,必须制定自己训练数据的位置;python -m rasa_nlu.train的时候也需要制定模型的一些参数,若每次运行时手动指定不方便,则需要自己设计一个xxxx.yml配置文件,作为--config的值。其他信息可以写在xxxx.yml文件内。
python -m rasa_nlu.train --data your_data.json --config your_model_peizhi.yml
#注:该yml文件是rasa_nlu.train训练时候的默认配置信息,
#注:在train.sh文件中,新指定了 path:projects ; fixed_model_name:demo ; project:ivr_nlu
#注:训练生成的内容存储位置按照train.sh里指定的信息来存储,该文件中的默认设置会被替代
language: "zh" ###处理中文
project: "ivr_nlu" ###项目名
fixed_model_name: "demo" ###修正的模型名
path: "models" ###项目存放的位置
pipeline: ###管道,训练NLU需要的内容
- name: "nlp_mitie"
model: "data/total_word_feature_extractor.dat"
- name: "tokenizer_jieba"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"
- name: "intent_classifier_sklearn"
- 查看python -m rasa_nlu.train的--path模型存放位置;--fixed_model_name重新训练修正后的模型名;--project重新训练修正后的模型存放的位置
2.再重点分析一下,rasa_nlu.train --config xxx.yml配置文件
对于中文对话的rasa管道有两种设置方案
1.使用 MITIE+Jieba:
["nlp_mitie", "tokenizer_jieba", "ner_mitie", "ner_synonyms", "intent_classifier_mitie"]
2.使用MITIE+Jieba+sklearn(config_jieba_mitie_sklearn.json):
["nlp_mitie", "tokenizer_jieba", "ner_mitie", "ner_synonyms", "intent_featurizer_mitie", "intent_classifier_sklearn"]
"nlp_mitie"初始化MITIE
"tokenizer_jieba"用jieba来做分词
"ner_mitie"实体识别
"ner_synonyms"实体识别
"intent_featurizer_mitie"为意图识别做特征提取
"intent_classifier_sklearn"使用sklearn做意图识别的分类
language: "zh" ###处理中文
project: "ivr_nlu" ###项目名
fixed_model_name: "demo" ###修正的模型名
path: "models" ###项目存放的位置
pipeline: ###管道,训练NLU需要的内容
- name: "nlp_mitie"
model: "data/total_word_feature_extractor.dat"
- name: "tokenizer_jieba"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"
- name: "intent_classifier_sklearn"
3.运行模型 sh train.sh