如何从话语中删除 luis 实体标记
How to remove luis entity marker from utterance
我正在使用 LUIS 来确定客户居住在哪个州。我已经设置了一个名为 "state" 的列表实体,其中包含 50 个州及其两个字母的缩写作为文档中所述的同义词。 LUIS 返回某些两个字母的单词,例如 "hi" 或 "in" 作为状态实体。
我已经用"My state is Oregon"、"I am from WA"等短语设置了一个意图。在意图内部,如果话语中包含单词"in",例如在话语 "I live in Kentucky",单词 "in" 被 LUIS 自动标记为状态实体,我无法删除该标记。
下面是 LUIS json 对话语 "I live in Kentucky" 的响应的片段。如您所见,响应包括印第安纳州和肯塔基州作为实体,而实际上应该只有肯塔基州。
"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" 标记为状态?
在这种特殊情况下(使用状态 abbvreviations/names 填充列表实体),您最好使用 geographyV2 预建实体或 Places.AbsoluteLocation 预建域实体。 (请注意,在撰写本文时,geographyV2 预建实体存在一个小错误,因此使用预建域实体将是更好的选择)。
这样做的原因有两个:
第一,地理位置已经融入 LUIS,它们不会与 "in"、"hi" 或 "me" 等常规语法词冲突。我通过创建一个包含 "ct" 作为规范化值和 "ct scan" 作为同义词的 [Medical] 列表来反向测试它。当我输入 "get me a ct in CT" 时,结果是 "get me a [Medical] in [Medical]"。为了修复,我选择了第二个 "CT" 值并将其重新分配给 Places.AbsoluteLocation 实体。重新训练后,我测试了 "when in CT show me ct options",结果是 "when in [Places.AbsoluteLocation] show me [Medical] options"。进一步的示例和培训将改进结果。
第二,列表适用于具有可以引用一个的不同词的词。此 tutorial 显示了一个简单的示例,其中松散关联的词被指定为规范名称(规范化值)的同义词。
希望得到帮助!
@StevenKanberg 的回答非常有帮助,但不幸的是,对于我的情况来说还不够完整。我试图同时实现 geographyV2 和 Places.AbsoluteLocation (分别)。没有一个完全按照我需要的方式工作(以一种可以从响应中的实体查询的方式识别状态及其两个字母的缩写)。
所以我的选择是:
- 创建我自己的州列表,使用州名称和两个字母的缩写作为同义词,如列表描述本身所述。这适用于两个字母缩写除外,它们也是单词,例如 "in"、"hi" 和 "me"。
- 使用 geographyV2 prebuilt,它不允许同义词并且根本不识别两个字母的缩写,或者
- 使用Places.AbsoluteLocation,它可以识别国家的两个字母缩写,不会将它们与单词混淆,还会抓取所有位置,包括城市、国家和地址,并且不区分它们,所以我没办法解析哪个实体是像 "I live in Lake Stevens, Snohomish County, WA" 这样的话语中的状态。
解决方案:如果我将 1 与 3 组合,我可以查询同时具有这两种类型的实体。如果 LUIS 将单词 "in" 标记为州(印第安纳州),我可以检查该单词是否也被标记为 AbsoluteLocation。如果没有,那么我可以安全地丢弃该实体。这并不理想,但可以解决问题。
我正在使用 LUIS 来确定客户居住在哪个州。我已经设置了一个名为 "state" 的列表实体,其中包含 50 个州及其两个字母的缩写作为文档中所述的同义词。 LUIS 返回某些两个字母的单词,例如 "hi" 或 "in" 作为状态实体。
我已经用"My state is Oregon"、"I am from WA"等短语设置了一个意图。在意图内部,如果话语中包含单词"in",例如在话语 "I live in Kentucky",单词 "in" 被 LUIS 自动标记为状态实体,我无法删除该标记。
下面是 LUIS json 对话语 "I live in Kentucky" 的响应的片段。如您所见,响应包括印第安纳州和肯塔基州作为实体,而实际上应该只有肯塔基州。
"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" 标记为状态?
在这种特殊情况下(使用状态 abbvreviations/names 填充列表实体),您最好使用 geographyV2 预建实体或 Places.AbsoluteLocation 预建域实体。 (请注意,在撰写本文时,geographyV2 预建实体存在一个小错误,因此使用预建域实体将是更好的选择)。
这样做的原因有两个:
第一,地理位置已经融入 LUIS,它们不会与 "in"、"hi" 或 "me" 等常规语法词冲突。我通过创建一个包含 "ct" 作为规范化值和 "ct scan" 作为同义词的 [Medical] 列表来反向测试它。当我输入 "get me a ct in CT" 时,结果是 "get me a [Medical] in [Medical]"。为了修复,我选择了第二个 "CT" 值并将其重新分配给 Places.AbsoluteLocation 实体。重新训练后,我测试了 "when in CT show me ct options",结果是 "when in [Places.AbsoluteLocation] show me [Medical] options"。进一步的示例和培训将改进结果。
第二,列表适用于具有可以引用一个的不同词的词。此 tutorial 显示了一个简单的示例,其中松散关联的词被指定为规范名称(规范化值)的同义词。
希望得到帮助!
@StevenKanberg 的回答非常有帮助,但不幸的是,对于我的情况来说还不够完整。我试图同时实现 geographyV2 和 Places.AbsoluteLocation (分别)。没有一个完全按照我需要的方式工作(以一种可以从响应中的实体查询的方式识别状态及其两个字母的缩写)。
所以我的选择是:
- 创建我自己的州列表,使用州名称和两个字母的缩写作为同义词,如列表描述本身所述。这适用于两个字母缩写除外,它们也是单词,例如 "in"、"hi" 和 "me"。
- 使用 geographyV2 prebuilt,它不允许同义词并且根本不识别两个字母的缩写,或者
- 使用Places.AbsoluteLocation,它可以识别国家的两个字母缩写,不会将它们与单词混淆,还会抓取所有位置,包括城市、国家和地址,并且不区分它们,所以我没办法解析哪个实体是像 "I live in Lake Stevens, Snohomish County, WA" 这样的话语中的状态。
解决方案:如果我将 1 与 3 组合,我可以查询同时具有这两种类型的实体。如果 LUIS 将单词 "in" 标记为州(印第安纳州),我可以检查该单词是否也被标记为 AbsoluteLocation。如果没有,那么我可以安全地丢弃该实体。这并不理想,但可以解决问题。