github代碼rasa_nlp
典型的對話系統(tǒng)
1.IR-Bot:檢索型問答系統(tǒng)(用戶輸入問題,系統(tǒng)返回一個答案反番,不帶對話流程朝卒,不帶上下文)
2.Task-Bot:任務型對話系統(tǒng)(eg:買票耍群、訂票、訂餐任務型的對話)
3.Chitchat-Bot:閑聊系統(tǒng)(微軟小冰畴栖,陪人聊天随静,閑扯型)
用戶輸入:語音/文本 ----> 自然語言理解NLU:領域識別/用戶意圖識別/填槽(關鍵信息) ----> 對話管理DM:對話狀態(tài)跟蹤(填槽的狀態(tài)、歷史對話記錄)/對話策略吗讶,產(chǎn)生action ----> 自然語言生成NLU:生成回答燎猛。[圖片上傳失敗...(image-1f7e04-1559211731947)]
](https://upload-images.jianshu.io/upload_images/6102062-a9ebe45dadc78563.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
一、首先根據(jù)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模型訓練過程中需要的數(shù)據(jù)參數(shù)信息等
-
查看該python -m rasa_nlu.train的--data ./data/mobile_nlu_data.json內(nèi)容
查看該python -m rasa_nlu.train的--config ivr_chatbot.yml內(nèi)容
通過以下分析纵寝,得知:python -m rasa_nlu.train的時候需要準備訓練數(shù)據(jù)(json格式论寨,文本星立,意圖,實體標注葬凳,同義詞標注等)绰垂,因此--data必須自己準備一份自己領域的數(shù)據(jù),必須制定自己訓練數(shù)據(jù)的位置火焰;python -m rasa_nlu.train的時候也需要制定模型的一些參數(shù)劲装,若每次運行時手動指定不方便,則需要自己設計一個xxxx.yml配置文件昌简,作為--config的值占业。其他信息可以寫在xxxx.yml文件內(nèi)。
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
#注:訓練生成的內(nèi)容存儲位置按照train.sh里指定的信息來存儲,該文件中的默認設置會被替代
language: "zh" ###處理中文
project: "ivr_nlu" ###項目名
fixed_model_name: "demo" ###修正的模型名
path: "models" ###項目存放的位置
pipeline: ###管道犬金,訓練NLU需要的內(nèi)容
- 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需要的內(nèi)容
- 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