LUIS Intent不返回带空格的实体的整个值

时间:2018-10-04 15:07:22

标签: .net json botframework luis

我用一个简单的实体创建了这样的LUIS话语: 客户abc的订单处理中

其中abc替换为简单实体vf_NARCName

在机器人中,当我输入类似问题时: 客户动物皮肤病医院的订单正在处理

这里的客户名称是动物皮肤病医院,之间用空格隔开,那么当我通过LUIS Rest API获取数据时,我得到的是Animal作为实体值,而不是动物皮肤病医院,有时也没有实体值返回

 {
      "query": " orders in process for customer Animal Dermatology Service",
      "topScoringIntent": {
        "intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
        "score": 0.7547371
      },

返回数据

{
  "query": "how many orders are currently in process for customer Animal Dermatology Service",
  "topScoringIntent": {
    "intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
    "score": 0.6452578
  },
  "entities": []
}

但是,如果我只查询动物,则返回正确的数据

返回数据

{
      "query": "how many orders are currently in process for customer Animal",
      "topScoringIntent": {
        "intent": "OrderDetails_2a598c9b-7cb5-4113-9aca-435b55bbe19e",
        "score": 0.8928922
      },
      "entities": [
        {
          "entity": "animal",
          "type": "vf_NARCName",
          "startIndex": 54,
          "endIndex": 59,
          "score": 0.500023663
        }
      ]
    }

2 个答案:

答案 0 :(得分:6)

您的LUIS应用本质上需要更多关于实体发生方式的说明。

我要说,策略1.)可能是最有用的,但是请列出您可能会包括的其他选项,以帮助您进行实体检测。


  1. 使用vf_NARCName实体的重要变体添加更多语音

First Tutorial in the documentation“构建应用程序”部分下所述,请确保您包括:

  • 每个意图至少 15个言语,其中包括实体显示方式的不同方式

和您应该注意的变体

  • 单词顺序上的差异(其中可以在语音中出现的实体)
  • 时态(如“是”,“是”,“将是”,如this tutorial所示)
  • 语法正确性
  • 话语和实体本身的
  • 长度(字数)

最后一点可能是您应该包括的更多示例。因此,请检查您包含vf_NARCName实体的语音,这些实体的长度不仅是1个单词,而且可能是2或3个甚至更长,如果在您的应用中是可能的。


  1. 添加词组列表

docs describing what Phrase Lists are状态下,

  

短语列表包括一组值(单词或短语),它们   属于同一类,必须得到类似的对待

这是您可以帮助向LUIS发送另一个信号以帮助检测您的vf_NARCName实体的另一种方式。

有关如何添加词组列表here的教程。


  1. 最后,您可能想使用使用Pattern.any

此处为Pattern.any docs状态,

  

使用pattern.any实体从话语中提取数据,其中   话语格式正确,数据的结尾可能在哪里   容易与话语中的其余单词混淆

因此,如果您知道潜在的vf_NARCName实体的实体字数非常长,则可以从使用Pattern.any实体中受益。

例如,也许您将“ The Department of People Who like Really Long Names, But Hate Novels”作为vf_NARCName实体。 LUIS可能很难确定该实体的确切位置,但是可以使用Pattern.any来完成。

答案 1 :(得分:0)

训练数据的数量和类型似乎有问题。您必须为LUIS提供足够的样本,以便能够了解vf_NARCName的值可以由一个单词或一系列单词组成。

在这种情况下,我建议您尝试建立一个短语列表,例如“ CompanyNames”,并提供一些多样化的示例,例如“ Animal Dermatology Service”,“ Animal Dermatology”以及其他可能涉及客户名称的真实示例提交给生产中的机器人。

您可以在此处阅读有关词组列表的更多信息: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-add-features

过去我也遇到过同样的问题,有两件事可以帮助您,很多训练数据和短语列表。