LUIS.ai json迁移到Rasa格式json不返回实体但返回正确的意图

Bha*_*gav 1 python json rasa-nlu

我已经使用以下命令将从LUIS app下载的json迁移到RASA格式:python -m rasa_nlu.train -c config_spacy.json

我的配置文件如下所示:

{     
"path" : "./models",   
"data" : "./data/examples/rasa/BookACab.json",
"pipeline" : ["nlp_spacy", "tokenizer_spacy", "intent_featurizer_spacy", 
              "ner_crf", "ner_synonyms", "intent_classifier_sklearn", 
              "ner_duckling"] 
}
Run Code Online (Sandbox Code Playgroud)

使用RASA格式的json生成模型,如下所示.但是,当我使用查询此模型时

http:// localhost:5000/parse?q =稍后预订

与我输入的文本及其所有相关实体相关的正确的高分意图被返回.但当我尝试另一个文字时:

http:// localhost:5000/parse?q =我想今天下午5点去骑

返回的意图是正确的,但它的实体对象是空的.正如你在json下面看到的那样,这个话语也有映射到它的实体,类似于工作示例.

请帮助我知道这对每个有RASA的人来说是一个问题,还是我有任何错误?谢谢!

  {
  "rasa_nlu_data": {
    "common_examples": [
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "later",
            "start": 0,
            "end": 5
          }
        ],
        "intent": "None",
        "text": "later"
      },
      {
        "entities": [],
        "intent": "ServiceRequestEnquiry",
        "text": "wake up"
      },
      {
        "entities": [],
        "intent": "ConfirmationNo",
        "text": "no not now"
      },
      {
        "entities": [],
        "intent": "ConfirmationNo",
        "text": "not sure"
      },
      {
        "entities": [],
        "intent": "ConfirmationNo",
        "text": "no bot"
      },
      {
        "entities": [],
        "intent": "ConfirmationNo",
        "text": "no goride bot"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "later",
            "start": 12,
            "end": 17
          }
        ],
        "intent": "BookCab",
        "text": "book a ride later"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "now",
            "start": 21,
            "end": 24
          }
        ],
        "intent": "BookCab",
        "text": "i want go for a ride now"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "today",
            "start": 12,
            "end": 17
          }
        ],
        "intent": "BookCab",
        "text": "book a ride today"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "today 5pm",
            "start": 18,
            "end": 27
          }
        ],
        "intent": "BookCab",
        "text": "I want to go ride today 5pm"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "today",
            "start": 12,
            "end": 17
          }
        ],
        "intent": "BookCab",
        "text": "book a ride today 5pm"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "later",
            "start": 13,
            "end": 18
          }
        ],
        "intent": "BookCab",
        "text": "book shuttle later"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "now",
            "start": 15,
            "end": 18
          }
        ],
        "intent": "None",
        "text": "i want to book now"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "booknow",
            "start": 10,
            "end": 17
          }
        ],
        "intent": "None",
        "text": "i want to booknow"
      },
      {
        "entities": [
          {
            "entity": "RideTime",
            "value": "book later",
            "start": 10,
            "end": 20
          }
        ],
        "intent": "None",
        "text": "i want to book later"
      }
    ],
    "regex_features": []
  }
}
Run Code Online (Sandbox Code Playgroud)

Cal*_*ler 5

如果您可以包含与Rasa一起使用的管道,将会很有帮助.您可以在配置文件中找到它.假设您没有更改默认管道,config_spacy.json那么您将使用ner_crf进行实体识别.

由于库差异,Rasa很可能只需要比LUIS更多的训练数据.定性地,mitie管道通常需要较少的训练数据,但权衡是需要更多时间训练.

因此,您的问题的基本答案是:如果您想使用ner_crf,那么您需要增加为实体识别提供的培训数据量.

话虽如此:RideTime是您唯一的实体吗?如果是这样,你应该考虑将ner_duckling添加到你的管道,它可以识别日期.这比你自己训练日期的表现更好.

所以使用上面的训练数据和管道:

["nlp_spacy", "tokenizer_spacy", "intent_featurizer_spacy", "ner_crf", "ner_synonyms",  "intent_classifier_sklearn", "ner_duckling"]
Run Code Online (Sandbox Code Playgroud)

结果如下:

{
    "entities": [
        {
            "additional_info": {
                "grain": "hour",
                "others": [
                    {
                        "grain": "hour",
                        "value": "2017-07-26T17:00:00.000Z"
                    }
                ],
                "value": "2017-07-26T17:00:00.000Z"
            },
            "end": 27,
            "entity": "time",
            "extractor": "ner_duckling",
            "start": 18,
            "text": "today 5pm",
            "value": "2017-07-26T17:00:00.000Z"
        }
    ],
    "intent": {
        "confidence": 0.5469262356494486,
        "name": "BookCab"
    },
    "intent_ranking": [
        {
            "confidence": 0.5469262356494486,
            "name": "BookCab"
        },
        {
            "confidence": 0.2812606328712321,
            "name": "None"
        },
        {
            "confidence": 0.08727531874740564,
            "name": "ConfirmationNo"
        },
        {
            "confidence": 0.0845378127319134,
            "name": "ServiceRequestEnquiry"
        }
    ],
    "text": "I want to go ride today 5pm"
}
Run Code Online (Sandbox Code Playgroud)

这个完整的训练集对我来说非常好.这只是添加更多培训示例的问题.因此,当您测试更多时,如果您遇到一个无法按预期工作的示例,请将其添加到训练数据并重新训练.因此,教你的模型来处理更多变化的请求.

https://gist.github.com/wrathagom/7f05fbda75c785977bd07cd89e62ddd7