调度CLI未从Luis App传递实体

时间:2019-02-28 16:20:03

标签: botframework luis dispatch qnamaker

使用CLI生成分派模型时,它不会传递Luis应用程序中的Entities作为参考。这将严重影响调度应用程序的准确性。

例如,对于发话“我的[iPhone]无法正常工作”,iPhone被附加到实体列表名称CellPhoneType。 iPhone,三星,智能手机列表中有三项。

在机器人仿真器中,使用Dispatch,如果我写“我的iPhone无法正常工作”,则调度模型将其按需传递给Luis。但是,如果我写“我的智能手机无法正常工作”,则分发工具会将其发送给QnA Maker。

我检查了模型,并且实体未通过引用传递。我还测试了简单的实体,它们不能很好地工作。

我安装了最新版本的CLI。

这正常吗,这是一个错误吗?是否可以解决此问题?

1 个答案:

答案 0 :(得分:0)

因此,在这里要解决的几件事是如何构建LUIS模型以及对调度的期望。 跳到2。)(如果您是正在阅读这篇文章的用户,并且已经拥有在LUIS子模型中很好地工作的实体。 @AlexandreViegas,请阅读第1点),以帮助正确地构建您的LUIS模型以正确检测调度中的意图。


1。使用简单实体+短语列表来利用LUIS的机器学习功能,而不是列表实体

现在看来,您选择使用列表实体并不是到达此处的最佳方法,而不是打算如何使用它。相反,列表实体用于可能具有多种引用同一事物的方式的术语。

何时需要使用列表实体的示例

例如,加利福尼亚州,卡利州,加利福尼亚州和黄金州都是指同一事物(州)的术语。您可以创建一个“州”列表实体,其中包括美国的全部50个州及其昵称。现在,由于这是一个封闭的显式列表,因此使用列表实体时没有没有机器学习-LUIS仅在存在完全匹配的文本时才检测“状态”列表实体。

关于何时要使用列表实体的另一个示例是在学校用“部门”表示。您可能具有“化学”,“ CHEM142”,“化学”等含义,都是指该特定部门,而与学校中的其他部门一样。

为什么要使用简单实体并添加短语列表

您可以参考我写的另一本StackOverflow answer,关于如何创建一个简单的实体并使用短语列表增强该实体的信号。

要完全复制上面链接中给出的答案,实质上,您希望使用一个简单的实体,因此即使您未明确将其包含在CellPhoneType实体中,LUIS仍可以正确地将其预测为模型。

例如,您可能有一个Phone意图,用语音将各种单词标记为CellPhoneIntent实体。 enter image description here

当我进入“测试”面板时,我输入“向日葵”和“月光石”作为手机(可能是将来的某些电话公司以这些名称作为型号来创建手机):

enter image description here

上面您可以看到LUIS正确地预测了Phone的意图并正确地提取了sunflowermoonstone作为CellPhoneType实体。

但是,如果我输入了英语中不存在的手机的品牌名称(例如Blackberry的“ Z3”或T-Mobile的“ G2X”),LUIS便无法立即使用我们的模型检测到它。 (请参阅2条最近的讲话)。 enter image description here

上面您可以看到发声“ i'd like to order a z3和“ my g2x is broken”不能正确预测为Phone的意图,也无法检测到z3g2x作为CellPhoneType实体。这就是短语列表的来源。如docs中所指定,短语列表可用于增强手机类型的信号,并添加您的LUIS模型专有的外来词,例如许多手机模型的“虚构”词。再次,如果需要有关如何创建短语列表的指导,请参考我链接到的StackOverflow答案。

将不同型号的手机型号添加到短语列表中 enter image description here enter image description here


2。查询直接由调度

创建的LUIS模型的端点

说明:

  • 在添加子LUIS模型以进行分派时,即使该子LUIS模型中包含实体,它也不会显示在由分派创建的父LUIS模型的模型中。
  • li>
  • 上述项目符号的例外情况是,如果您以模式标记了实体

  • 为什么在父LUIS模型中不需要对实体进行标记,是因为当您调用父LUIS模型的端点时,它在后台进行了某种共享调用,因此不需要必须两次对LUIS进行ping操作。

  • 您会在connectedServiceResult属性中看到从子LUIS模型标记的实体

如何使用父调度LUIS应用程序从子LUIS模型中提取实体

  1. 确保同时发布 子LUIS应用和父调度应用。

  2. 转到父分发创建的LUIS应用,转到管理>密钥和端点>单击“端点” ,打开浏览器标签,您可以在其中查询URL中的父应用在q=

  3. 之后
  4. q=之后的URL中键入您的话语,以查看在connectedServiceResult

  5. 下从子LUIS模型中提取的实体和意图。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?verbose=true&timezoneOffset=-360&subscription-key=b7xxxxxxxxxxxxxxxxxxxxxxxxxxxx67&q=my%20iphone%20is%20broken

{
  "query": "my iphone is broken",
  "topScoringIntent": {
    "intent": "l_Reminders",
    "score": 0.99594605
  },
  "intents": [
    {
      "intent": "l_Reminders",
      "score": 0.99594605
    },
    {
      "intent": "None",
      "score": 0.002990469
    }
  ],
  "entities": [],
  "connectedServiceResult": {
    "query": "my iphone is broken",
    "topScoringIntent": {
      "intent": "Phone",
      "score": 0.9658808
    },
    "intents": [
      {
        "intent": "Phone",
        "score": 0.9658808
      },
      {
        "intent": "Calendar.Add",
        "score": 0.0142210266
      },
      {
        "intent": "Calendar.Find",
        "score": 0.0112086516
      },
      {
        "intent": "None",
        "score": 0.009813501
      },
      {
        "intent": "Email",
        "score": 0.0025855056
      }
    ],
    "entities": [
      {
        "entity": "iphone",
        "type": "CellPhoneType",
        "startIndex": 3,
        "endIndex": 8,
        "score": 0.998970151
      }
    ]
  }
}

上面,您可以看到从分发创建的父LUIS应用正确地将发话iphone中的my iphone is broken标识为CellphoneType实体。

注意:您不会在父调度的“测试”面板中看到子LUIS模型的结果,因为UI不会显示connectedServiceResult