如何从话语中删除路易斯实体标记

时间:2019-01-16 22:45:57

标签: luis

我正在使用LUIS来确定客户所处的州。我已经建立了一个名为“州”的列表实体,该实体具有50个州及其两个字母的缩写,如文档中所述。 LUIS返回两个字母词,例如“ hi”或“ in”作为状态实体。

我用诸如“我的州在俄勒冈州”,“我来自西澳州”之类的短语建立了意图。在意图内,如果在言语中(例如,在言语中)包含“ in”一词“我住在肯塔基州”,LUIS自动将“ in”一词标记为州实体,因此我无法删除该标记。

下面是LUIS json响应的片段,内容是“我住在肯塔基州”。如您所见,当只应有肯塔基州时,响应将印第安纳州和肯塔基州都包括在内。

 "query": "I live in Kentucky",
  "topScoringIntent": {
    "intent": "STATE_INQUIRY",
    "score": 0.9338141
  },
....
    "entities": [
....
    {
      "entity": "in",
      "type": "state",
      "startIndex": 7,
      "endIndex": 8,
      "resolution": {
        "values": [
          "indiana"
        ]
      }
    },
    {
      "entity": "kentucky",
      "type": "state",
      "startIndex": 10,
      "endIndex": 17,
      "resolution": {
        "values": [
          "kentucky"
        ]
      }
    }
  ], ....

如果不能从话语中删除意图标记,如何训练LUIS在这种情况下不要将单词“ in”和“ hi”标记为状态?

2 个答案:

答案 0 :(得分:3)

在这种特殊情况下(使用状态abbvreviations /名称填充列表实体),最好使用geographyV2预置实体或Places.AbsoluteLocation预置域实体。 (请注意,在撰写本文时,geographyV2的预建实体有一个小错误,因此使用预建的域实体将是更好的选择。)

其原因有两个:

一个,地理位置已经被纳入LUIS,并且它们不会与“ in”,“ hi”或“ me”之类的常规语法单词发生冲突。我通过创建一个包含“ ct”作为归一化值和“ ct scan”作为同义词的[医疗]列表进行了反向测试。当我键入“在CT中给我一个CT”时,结果是“在[医学]中给我一个[医学]”。要修复,我选择了第二个“ CT”值,并将其重新分配给Places.AbsoluteLocation实体。重新训练后,我测试了“何时在CT中显示ct选项”,正确地得出“何时在[Places.AbsoluteLocation]中显示我[医疗]选项”。进一步的示例和培训将改善结果。

二,对于具有可以引用一个的不同单词的单词,列表非常适用。 tutorial显示了一个简单的示例,其中将松散相关联的单词作为同义词分配给规范名称(规范化值)。

希望有帮助!

答案 1 :(得分:3)

@StevenKanberg的回答非常有帮助,但不幸的是我的情况还不完整。我尝试同时实现geographyV2和Places.AbsoluteLocation。没有人能完全按照我需要的方式工作(以可以从响应中的实体查询的方式来识别状态及其两个字母的缩写)。

所以我的选择是:

  1. 使用状态名称和两个字母的缩写作为同义词创建我自己的状态列表,如列表描述本身所述。除了两个字母缩写(也就是单词)(例如“ in”,“ hi”和“ me”)外,此方法均有效。
  2. 使用预先构建的geographyV2,它不允许使用同义词并且根本无法识别两个字母的缩写,或者
  3. 使用Places.AbsoluteLocation可以识别州的两个字母的缩写,不会将其与单词混淆,但还会获取包括城市,国家和地址在内的所有位置,并且不区分它们,因此我无法解析哪个实体就像“我住在华盛顿州斯诺霍米什县史蒂文斯湖”这样的话。

解决方案:如果将1与3结合使用,则可以查询具有这两种类型的实体。如果LUIS将单词“ in”标记为州(印第安纳州),则可以检查该单词是否也已标记为AbsoluteLocation。如果没有,我可以放心地丢弃该实体。这不是理想的方法,但是可以解决该问题。