开源自然语言理解框架Rasa NLU

发布于 2017-07-03 08:36:11

Rasa NLU简介

Rasa NLU(自然语言理解)是意图分类和实体提取的工具。 您可以将Rasa NLU视为一组高级API,用于使用现有的NLP和ML库构建自己的语言解析器。

安装

我的系统是OS X,python 的版本是3.6.1

安装pip install rasa_nlu

后端有三种方案, 1.MITIE

2.spaCy + sklearn

3.sklearn + MITIE

这里我选择的是第二种,搜索了一下感觉spaCy也许更好,

pip install -U spacy
python -m spacy download en

目前spaCy支持英文等,但是不支持中文,但是中文已经在他们的Alpha List上了,相信不久就可以支持。

当然也可以自己训练语言模型,但是spaCy的文档讲的不是特别详细。

教程:一个简单的餐厅搜索机器人

主要分为四步,首先要准备好语料,在github上有这个教程的语料链接,然后是对语料进行标注,另外spcCy也开发了一个可视化的语料标注工具, 标注好的语料准备好了以后,就是训练模型了,编写配置文件config.py

{
  "pipeline": "spacy_sklearn",
  "path" : "./models",
  "data" : "./data/examples/rasa/demo-rasa.json"
}

然后就可以开始训练

python -m rasa_nlu.train -c config.json

训练好以后就可以使用训练的模型进行语义理解,

使用以下命令启动一个基于训练好的模型的NLU server

python -m rasa_nlu.server -c config_spacy.json --server_model_dirs=./model_YYYYMMDD-HHMMSS

然后验证一下

curl -XPOST localhost:5000/parse -d '{"q":"I am looking for Chinese food"}' | python -mjson.tool

最后返回如下数据

{
    "text": "I am looking for Chinese food",
    "entities": [
        {
          "start": 8,
          "end": 15,
          "value": "chinese",
          "entity": "cuisine",
          "extractor": "ner_spacy"
        }
    ],
    "intent": {
        "confidence": 0.6485910906220309,
        "name": "restaurant_search"
    },
    "intent_ranking": [
        {
            "confidence": 0.6485910906220309,
            "name": "restaurant_search"
        },
        {
            "confidence": 0.14161531595656784,
            "name": "affirm"
        }
    ]
}

总结

期待spaCy尽快支持中文,或者把如何训练语言模型的文档写的稍微详细一点。