美文网首页
初探rasa

初探rasa

作者: 还闹不闹 | 来源:发表于2020-05-11 18:22 被阅读0次

    0、rasa框架简介

    Rasa是一个开源机器学习框架,用于构建上下文AI助手和聊天机器人。

    Rasa有两个主要模块:
    Rasa NLU :用于理解用户消息,包括意图识别和实体识别,它会把用户的输入转换为结构化的数据。
    Rasa Core:是一个对话管理平台,用于举行对话和决定下一步做什么。

    Rasa X是一个工具,可帮助您构建、改进和部署由Rasa框架提供支持的AI Assistants。 Rasa X包括用户界面和REST API。

    1、环境准备

    pip install cmake
    
    • 安装boost
      boost没有编译好的安装程序之类的东西,需要将下载回来的压缩包解压后,再编译。编译过程对VS2015有依赖,之前装了,可以放心运行。
      我本机boost的解压目录为:G:\App\boost\boost_1_73_0
      安装步骤:
      先打开命令行工具,并切换工作目录。执行bootstrap.bat命令后,会生b2.exe bjam.exe。最后再执b2, --prefix指定安装的目录。
    cd G:\App\boost\boost_1_73_0
    bootstrap.bat
    b2 --prefix=G:\boost\bin install
    

    • jieba
    pip install jieba
    
    • 安装rasa_nlu和rasa_core
    pip install rasa_nlu
    pip install rasa_core[tensorflow]
    
    • 再来一个
    pip install rasa
    
    • Rasa_NLU_Chi
      Rasa_NLU_Chi 作为 Rasa_NLU 的一个 fork 版本,加入了jieba 作为中文的 tokenizer,实现了中文支持。
    git clone https://github.com/crownpku/rasa_nlu_chi.git
    cd rasa_nlu_chi
    python setup.py install
    
    • 安装MITIE
    pip install git+https://github.com/mit-nlp/MITIE.git
    

    2、构建项目

    2.1 准备语料

    {
      "rasa_nlu_data": {
    
        "common_examples": [
    
          {
            "text": "你好",
            "intent": "greet",
            "entities": []
          },
    
          {
            "text": "最近好吗",
            "intent": "greet",
            "entities": []
          },
    
          {
            "text": "我想找地方吃饭",
            "intent": "restaurant_search",
            "entities": []
          },
    
          {
            "text": "我想吃火锅啊",
            "intent": "restaurant_search",
            "entities": [
              {
                "start": 2,
                "end": 5,
                "value": "火锅",
                "entity": "food"
              }
            ]
          },
    
          {
            "text": "我想吃雪糕啊",
            "intent": "restaurant_search",
            "entities": [
              {
                "start": 2,
                "end": 5,
                "value": "雪糕",
                "entity": "food"
              }
            ]
          },
    
          {
            "text": "明天天气预报",
            "intent": "search_weather",
            "entities": [
              {
                "start": 0,
                "end": 2,
                "value": "明天",
                "entity": "datatime"
              }
            ]
          },
    
          {
            "text": "下午会下雨吗",
            "intent": "search_weather",
            "entities": [
              {
                "start": 0,
                "end": 2,
                "value": "下午",
                "entity": "datatime"
              }
            ]
          }
    
        ]
    
      }
    } 
    

    2.2 训练的配置文件

    config_jieba_mitie_sklearn.yml

    language: "zh"
    
    pipeline:
    - name: "MitieNLP"
      model: "total_word_feature_extractor_zh.dat"//加载MITIE模型
    - name: "JiebaTokenizer"//使用jieba进行分词
    - name: "MitieEntityExtractor"//MITIE的命名实体识别
    - name: "EntitySynonymMapper"
    - name: "RegexFeaturizer"
    - name: "MitieFeaturizer"//特征提取
    - name: "SklearnIntentClassifier"//sklearn的意图分类模型
    

    运行的时候可能会报错,把注释删掉即可。

    2.3 语言模型

    由于在pipeline中使用了MITIE,所以需要一个训练好的MITIE模型(先进行中文分词)。MITIE模型是非监督训练得到的,类似于word2vec中的word embedding,需要大量中文语料,训练该模型对内存要求较高,并且非常耗时,直接使用网友分享的中文的维基百科和百度百科语料生成的模型文件。
    https://github.com/howl-anderson/MITIE_Chinese_Wikipedia_corpus/releases

    2.4 整体项目结构

    |---yuliao                                  //语料
    |   |---zh_yuliao.json
    |---total_word_feature_extractor_zh.dat     //MITIE模型
    |---total_word_feature_extractor.dat
    |---conf                                    //训练的配置文件
    |   |---config_jieba_mitie_sklearn.yml
    |---result_models                           //存储训练结果文件
    |   |---nlu_1_demo_v11
    |   |   |---nlu_1_demo_v11
    
    __init__.py                 空文件
    actions.py                  可以自定义 actions 的代码文件
    config.yml                  Rasa NLU 和 Rasa Core 的配置文件
    credentials.yml             定义和其他服务连接的一些细节,例如rasa api接口
    data/nlu.md                 Rasa NLU 的训练数据
    data/stories.md             Rasa stories 数据
    domain.yml                  Rasa domain 文件
    endpoints.yml               和外部消息服务对接的 endpoins 细则,例如 fb messenger
    models/<timestamp>.tar.gz   初始训练的模型数据
    

    3、训练rasa_nlu模型

    在根目录下,打开CMD,输入以下命令进行训练。

    python -m rasa_nlu.train -c conf\config_jieba_mitie_sklearn.yml --data yuliao\zh_yuliao.json --path result_models --project nlu_1_demo_v11
    
    • 参数:
      训练配置文件:-c
      训练语料:--data
      模型保存路径:--path
      项目名称:--project

    模型训练完成后,会在--path指定的路径下保存训练好的模型文件,如果训练时指定了模型名称(即--project),模型就会存储在result_models/project_name/model_**目录中,如result_models/nlu_1_demo_v11/model_20200511-155530

    4、启动服务

    python -m rasa_nlu.server -c conf\config_jieba_mitie_sklearn.yml --path result_models
    

    5、测试

    • 方法一
      使用浏览器,输入以下url进行访问。
      http://localhost:5000/parse?q=明天天气预报&project=nlu_1_demo_v11&model=model_20200511-155530
    • 方法二
      打开一个新的终端,使用curl命令获取结果
    curl -XPOST localhost:5000/parse -d '{"q":"明天天气预报", "project":"nlu_1_demo_v11", "model":"model_20200511-155530"}'
    

    相关文章

      网友评论

          本文标题:初探rasa

          本文链接:https://www.haomeiwen.com/subject/irtpnhtx.html