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