搭建一个中文rasa-nlu踩过的坑

这两天可以说是都用来调模型的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"
}

至于中文为啥还乱码,正在解决当中…

你可能感兴趣的:(搭建一个中文rasa-nlu踩过的坑)