【问题标题】:LUIS Intent not returning the entire value of the entity with spaceLUIS Intent 不返回带有空格的实体的全部值
【发布时间】:2018-10-04 15:07:21
【问题描述】:

我创建了一个这样的 LUIS 话语,其中包含一个简单的实体: 正在为客户 abc 处理订单

将 abc 替换为简单实体 vf_NARCName

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

这里的客户名称是 Animal Dermatology Hospital,它由空格分隔,然后当我通过 LUIS Rest API 获取数据时,我将 Animal 作为实体值而不是 Animal Dermatology Hospital,有时也没有返回实体值

 {
      "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": []
}

但如果我只用 Animal 查询它,那么会返回正确的数据

返回数据

{
      "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
        }
      ]
    }

【问题讨论】:

    标签: .net json botframework azure-language-understanding


    【解决方案1】:

    您的 LUIS 应用本质上需要更多关于该实体如何发生的表述。

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


    1. 使用 vf_NARCName 实体的有价值的变体添加更多话语

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

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

    您应该注意包含的变体是:

    • 词序差异(在哪里实体可以在话语中出现)
    • 时态(如“was”、“is”、“will be”,如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 来做到这一点。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我也面临同样的问题。如何使用大量训练数据进行训练。如果我们使用短语列表,它会起作用吗?因为我有成千上万的客户,我无法为他们定义短语列表
      • @ManishaBiswas 短语列表无疑是帮助您进行实体检测的一种方式,是的。 (请参阅我之前的回答以了解其他策略,以帮助提高实体检测的准确性)。 “由于我有成千上万的客户,我无法为他们定义短语列表”- 在您选择的任何策略中,都无法解决:LUIS 需要以某种方式获得更多数据才能更好地检测实体
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多