这两天可以说是都用来调模型的error了,一波未平一波又起
原始的教程参考如下网站,但是确实还是有一些地方没有说清楚的(本篇和官方教程辅助使用更佳哦)。
http://www.crownpku.com/2017/07/27/%E7%94%A8Rasa_NLU%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E4%B8%AD%E6%96%87NLU%E7%B3%BB%E7%BB%9F.html
讲道理github上的README更良心
https://github.com/crownpku/rasa_nlu_chi
首先是安装结巴分词,这个没什么问题
$ pip install jieba
然后是安装MITIE,这个就比较坑了,需要提前安装一些东西,配一下环境才能安装成功,安装MITIE参考下面的博客(劝退没有安装vs的同志):
https://blog.csdn.net/caroline2222/article/details/88601373
好了,现在默认你的MITIE已经安装好了,接下来就是下载人家已经训练好的类似于embedding的数据:total_word_feature_extractor_chi.dat
链接:https://pan.baidu.com/s/1kNENvlHLYWZIddmtWJ7Pdg 密码:p4vx
好了,现在来说已经下好了两个比较主要的依赖包了,然后就是rasa_nlu_chi的安装:
先创建一个文件夹比如RasaProgram,然后在这个文件夹下:
$ git clone https://github.com/crownpku/rasa_nlu_chi.git
$ cd rasa_nlu_chi
$ python setup.py install
不出意外应该就可以安装好了
然后再让我们安装很多很多很多其他的依赖包(当然不能一个一个下)
运行(所有命令行操作默认都是在rasa_nlu_chi文件夹下进行的):
$ pip install -r requirements.txt
然后由于之前博客的教程是2017年的,而现在都已经9102年了,所以现在下的有些依赖包版本比较新,可能会出问题,具体的后面再说。
数据是现成的:
data/examples/rasa/demo-rasa_zh.json
然后再把之前给的那个类似于embedding的数据放到data文件夹下面。数据的准备就OK了
再然后就还要配置一下pipeline文件:
推荐使用下面的pipeline:
MITIE+Jieba+sklearn (sample_configs/config_jieba_mitie_sklearn.json):
[“nlp_mitie”, “tokenizer_jieba”, “ner_mitie”, “ner_synonyms”, “intent_featurizer_mitie”, “intent_classifier_sklearn”]
好了,现在准备工作都做好了,可以开始训练了(训练很快)
python -m rasa_nlu.train -c sample_configs/config_jieba_mitie_sklearn.yml --data data/examples/rasa/demo-rasa_zh.json --path models
这一步的话也可能会报错什么的,首先是要保证你的python之前就装好了rasa之类的,然后就是保证之前的依赖包都要装好。一定要注意!一定要注意!官方说"If you specify your project name in configure file, this will save your model at /models/your_project_name." 不要信!因为如果给project取了名字之后就会出现各种问题,还是老老实实不要加东西吧,就–path models就可以了。
如果报错显示utf-8编码有问题之类的就看报错信息,把相应.py文件里的utf-8全换成GBK就不会报错了(我就是瞎搞的)
搭建本地nlu服务:
$ python -m rasa_nlu.server -c sample_configs/config_jieba_mitie_sklearn.yml --path models
最后就是测试数据了
首先输入:
$ curl 'http://localhost:5000/status'
看一下自己的project名字,不出意外,project名字应该是“default”,再看一下模型的名字,后面要用:
最后就是这句终极的命令了(因为到这里会各种报错)
$ curl -XPOST localhost:5000/parse -d '{"q":"我发烧了该吃什么药?", "project": "rasa_nlu_test", "model": "model_20170921-170911"}' | python -mjson.tool
报错①:啥 rasa_nlu_test 项目不存在,那是因为你的project名字不叫这个,如果之前查看的project名字叫default的话,就可以把这个部分的参数删掉,后面"model":"model_********-****"是你自己的model的名字,其实就是你模型训练出来的时间,这个20170921-170911意思就是2017年9月21日17:09:11训练出来的。也就是这样
$ curl -XPOST localhost:5000/parse -d '{"q":"我发烧了该吃什么药?", "model": "model_20170921-170911"}' | python -mjson.tool
报错②:“error”: “unable to initialize persistor”
这个就是我之前说的给模型命名之后很可能会出的问题…这个就是"project":"***"这出的问题
报错③:“error”: “bad input shape (1, 5)”
这个就是没有把依赖包都安装完会出现的问题。什么?安完了还报错?那就对了。因为有一个包太新了…要降级一下。
$ pip uninstall scikit-learn
$ pip install scikit-learn==0.19.1
然后再把模型跑一遍,再搭建本地服务,再测试数据应该就没问题了
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 801 0 723 100 78 3089 333 --:--:-- --:--:-- --:--:-- 3423
{
"intent": {
"name": "medical",
"confidence": 0.5384021215134076
},
"entities": [
{
"entity": "disease",
"value": "\u9359\u6220\u5133",
"start": 1,
"end": 3,
"confidence": null,
"extractor": "ner_mitie"
}
],
"intent_ranking": [
{
"name": "medical",
"confidence": 0.5384021215134076
},
{
"name": "restaurant_search",
"confidence": 0.17691633513853464
},
{
"name": "goodbye",
"confidence": 0.10893018103433982
},
{
"name": "affirm",
"confidence": 0.10397459738906091
},
{
"name": "greet",
"confidence": 0.07177676492465727
}
],
"text": "\u93b4\u621d\u5f42\u9411\u0442\u7c21\u7487\u30e5\u6086\u6d60\udc80\u6d94\u5823\u5d42\u951b\udc9f"
}
至于中文为啥还乱码,正在解决当中…