Dispatch CLI 不从 Luis App 传递实体

Dispatch CLI not passing Entities from Luis App

使用 CLI 生成 Dispatch 模型时,它不会在引用中传递来自 Luis 应用程序的实体。这极大地影响了调度应用程序的准确性。

例如,对于语句 "My [iPhone] isn't working",iPhone 附加到实体列表名称 CellPhoneType。列表中有三项 iPhone,Samsung,Smartphone。

在 bot 模拟器中,使用 Dispatch,如果我写 "my iPhone isn't working",调度模型会将其传递给 Luis,这是应该的。但是,如果我写 "my smartphone isn't working",调度工具会将其发送给 QnA Maker。

我检查了模型,实体没有在引用中传递。我还用简单的实体进行了测试,但它们效果不佳。

我安装了最新版本的 CLI。

这正常吗,这是一个错误吗?是否有解决此问题的方法?

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


1.使用 简单实体 + 短语列表 来利用 LUIS 的机器学习——而不是列表实体

现在看来,您选择使用 列表实体 并不是最好的选择,也不是它的用途。相反,列表实体用于可能有多种方式引用同一事物的术语。

您希望何时使用列表实体的示例

例如,California、Cali、CA 和 The Golden State 都是指代同一事物(州)的术语。您可以创建一个 "States" 列表实体,包括所有 50 U.S。州和他们的昵称。现在因为这是一个封闭的、明确的列表,所以当你使用列表实体时 no 机器学习——LUIS 只会检测 "States" 列表实体如果有完全匹配的文本。

另一个您想要使用列表实体的例子是 "Departments" 用于学校。您可以使用 "chemistry"、"CHEM142"、"chem" 等来指代该特定部门,并与学校的其他部门一起使用。

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

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

为了不完全重复上面 link 中给出的答案,本质上,您想使用一个简单的实体,因此 LUIS 可以正确预测术语 CellPhoneType实体,即使您没有明确将其包含在您的模型中。

例如,您可以有一个 Phone 意图,其中包含将各种单词标记为 CellPhoneIntent 实体的话语。

当我进入测试面板时,我输入 "sunflower" 和 "moonstone" 作为移动 phone 的组成部分(也许某些 phone 公司将来会创建phones 以这些名字作为他们的模型):

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

但是,如果我输入没有英文版本的手机品牌名称——例如黑莓 "Z3" 或 T-Mobile 的 "G2X",LUIS无法像现在这样用我们的模型检测到这一点。 (见 2 个最近的话语)。

您可以在上面看到话语“i'd like to order a z3”和“my g2x is broken”没有正确预测为 Phone 意图,z3g2x 也没有正确预测被检测为 CellPhoneType 个实体。这就是 短语列表 的用武之地。正如 docs 中所指定的那样,短语列表有助于增强单元格 phone 类型的信号,以及将专有外来词添加到您的LUIS模型中,例如许多词的"made-up"细胞 phone 个模型。如果您需要有关如何创建短语列表的指导,请再次参考我 link 提供的 Whosebug 答案。

将不同名称的单元格phone模型添加到短语列表后


2。直接查询dispatch创建的LUIS模型的端点

澄清:

  • 当您添加一个子 LUIS 模型进行调度时,即使该子 LUIS 模型中有实体,它也不会 出现在 dispatch 创建的父模型 LUIS 模型中。
  • 上述要点的例外情况是,如果您在模式中标记实体

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

  • 您在 connectedServiceResult 属性[= 中看到从子 LUIS 模型标记的实体40=]

如何从子 LUIS 模型中提取实体,使用您的父分派 LUIS app

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

  2. 转到您的父派遣创建的 LUIS 应用程序,转到 管理 > 密钥和端点 > 单击 "Endpoint"打开浏览器选项卡,您可以在 q=

  3. 之后的 URL 中查询父应用程序
  4. 在 URL 中输入您的话语,在 q= 之后查看从 [=24] 下的子 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
      }
    ]
  }
}

在上面您可以看到从 dispatch 创建的父 LUIS 应用正确地将话语 my iphone is broken 中的 iphone 识别为 CellphoneType 实体。

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