如何在rasa-core框架下使用第三方nlu服务
现阶段我们rasa-core都是配合rasa-nlu使用的,但也会有配合使用第三方或者已有的nlu模型的情况,所以这篇分享下如何在rasa-core的框架下使用nlp-architect。具体的代码参见rasa-nlp-architect,这个repo一个月前写的了,只不过弄完之后一直没有用起来,这次就做个总结,不然我估计会忘了。
nlp-architect
nlp-architect是英特尔推出的自然语言开源库,这个库支持很多自然语言处理相关的问题。如下图:
这里我使用了其中的Intent Extraction的功能,nlp-architect库中意图抽取提供了两种模型,分别是mtl和seq2seq。对应的模型如下图:
简而言之,mtl模型用的是双向LSTM + CRF实现slot filling,双向LSTM + FC + Softmax实现intent extraction。而seq2seq其实是在提取特征这块进行了替换,将mtl的双向LSTM替换成了seq2seq,其中也加入了attention机制。比较基础就不再赘述。
rasa-nlp-architect
rasa-nlp-architect这个repo是我在nlp-architect基础上改的,为了能够实现提供rasa-core支持的nlu格式数据。
rasa_data文件夹下存放的是训练和测试数据,且都是rasa_nlu格式的训练数据。在rasa_nlu_data.py这段代码中,对rasa_nlu的json格式数据进行了处理。模型训练的代码分别是train_mtl_model.py和train_seq2seq_model.py。查看README可以了解如何训练。
-
Train the mtl model
python train_mtl_model.py --dataset_path rasa_data/rasa_nlu_data/ -b 100 -e 10
-
Train the seq2seq model
python train_seq2seq_model.py --dataset_path rasa_data/rasa_nlu_data/ -b 100 -e 10
interactive.py是进行交互式测试的,server.py是提供了一个server让rasa-core进行调用。拿mtl模型举个例子:
-
Interactive
python interactive.py --model_path models/mtl/model.h5 --dataset_path rasa_data/rasa_nlu_data/
-
Provide a server
python server.py -m models/mtl/model.h5 -i models/mtl/model_info.dat
当你起了一个server后,就可以用rasa-core进行调用。在实现rasa-nlp-architect中,有一个功能点还没做,就是intent ranking,没有给每个intent算概率,现有代码是返回confidence: 1
,这个后续需要完善和优化。
rasa-core调用rasa-nlp-architect的server
上面步骤中已经实现了提供nlu的server,接下来就是使用rasa-core进行调用。其实很简单,只需要在endpoints.yml中设置nlu的服务配置,比如:
nlu:
url: "http:localhost:5000"
token: 'colin_gao'
token_name: 'token'
这样rasa-core就可以顺利地调用第三方nlu服务了。如果你用的不是nlp-architect,用的其他也是相同的思路。最终希望的结果是能够提供rasa-core支持的数据格式即可。原创文章,转载请说明出处