【问题标题】:Dispatch CLI not passing Entities from Luis AppDispatch CLI 未从 Luis App 传递实体
【发布时间】:2019-02-28 16:20:02
【问题描述】:

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

例如,对于“我的 [iPhone] 不工作”这句话,iPhone 附加到实体列表名称 CellPhoneType。列表中有 iPhone、Samsung、Smartphone 三个项目。

在机器人模拟器中,使用 Dispatch,如果我写“我的 iPhone 不工作”,则调度模型将它传递给 Luis,这是应该的。但是,如果我写“我的智能手机不工作”,调度工具会将其发送到 QnA Maker。

我检查了模型,实体没有传入引用。我还用简单的实体进行了测试,它们也不能正常工作。

我安装了最新版本的 CLI。

这是正常的,这是一个错误吗?有没有办法解决这个问题?

【问题讨论】:

标签: botframework azure-language-understanding dispatch qnamaker


【解决方案1】:

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


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

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

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

例如,California、Cali、CA 和 The Golden State 都是指同一事物(州)的术语。您可以创建一个“州”列表实体,包括美国所有 50 个州及其昵称。现在,由于这是一个封闭的显式列表,当您使用列表实体时,没有机器学习 - LUIS 只会在文本完全匹配时检测“状态”列表实体。

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

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

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

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

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

当我进入“测试”面板时,我输入“sunflower”和“moonstone”作为手机(也许将来某些电话公司会使用这些名称作为手机型号):

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

但是,如果我输入英语中不存在的手机品牌名称(例如 Blackberry 的“Z3”或 T-Mobile 的“G2X”),LUIS 无法使用我们的模型检测到这一点。 (见 2 最近的话语)。

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

在词组列表中添加不同的手机型号名称后


2。 直接

查询由dispatch创建的LUIS模型的端点

澄清:

  • 当您添加要调度的子 LUIS 模型时,即使该子 LUIS 模型中有实体,它也不会显示在调度创建的父 LUIS 模型的模型中。李>
  • 上述项目符号的例外情况是,如果您以模式标记实体

  • 为什么不需要在父 LUIS 模型中标记实体,是因为当您调用父 LUIS 模型的端点时,它确实是一种共享调用,在后台,所以它不会必须 ping LUIS 两次。

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

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

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

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

  3. 之后
  4. 在 URL 中的 q= 之后输入您的话语,以查看从 connectedServiceResult 下的子 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

【讨论】:

  • 非常感谢,这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2019-03-16
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多