尽管输入了准确的话语,AWS Lex 还是匹配了错误的意图
AWS Lex matches the wrong intent despite entering exact utterance
我在各种不同的情况下都遇到过这个问题。
我将分享一个例子。
我有一些常见问题解答意图。
一个答案 "What is Named Entity Recognition"
这些是它的话语:
- 告诉我有关命名实体识别的信息
- 告诉我有关 NER 的信息
- 什么是 NER
- 命名实体识别是什么意思
- 什么是命名实体识别
和其他答案"What is Optical Character Recognition?"
这些是它的话语:
- OCR
- OCR 是什么意思
- 你能告诉我 OCR 是什么吗
- 说说 OCR
- 什么是光学字符识别
- 什么是 OCR
当我输入时,"What is ocr?" 它按预期工作并显示 OCR 答案。
但是,当我以完全相同的问题(什么是 OCR?)输入全部大写的 OCR 时。它切换到 NER 意图并向我显示 "What is NER?"
的答案
任何人都可以回答它为什么这样做吗?更重要的是,我该怎么做才能使其按预期工作。
请记住,这只是一个例子。我在许多其他类似情况下也遇到过这种情况。
还有一种情况是意图表达似乎根本不匹配。但是还是切换到了错误的意图。
根据 Lex 和 Alexa documentation,自定义广告位类型中的首字母缩略词应写为全部大写的单个单词 (OCR) 或由句点和空格分隔的小写字母 (o. c. r.)。
沿着 table 的底部,您可以看到 Fire HD7
、Fire h. d.
、Fire HD
和 Fire HD 7
的示例,它们证明了这一点 - - 两个有效选项将解析为相同的插槽值输出。
假设话语是根据最佳实践设置的,如果您提供语音输入,请务必注意话语对声音变化、pacing/space 单词之间、口音等因素敏感, 等等。
至于提高准确性的直接步骤,您始终可以尝试进一步分解您的意图,而不是有两个意图,您有一个用于自定义插槽值的每个排列(NER、命名实体识别、OCR 和光学字符识别)。人类很容易理解短语的第一个字母映射到首字母缩写词中的字母,但要教聊天机器人理解这些短语是同义词,那就有点难了。
最后我没有找到合适的解决方案,而是使用了一些非常不优雅的解决方法,但嘿,只要它有效:D
我使用的解决方法是制作 "what" 意图、"how" 意图等。保持句子结构完整:
例如:
IntentName => "Bot_HowTo"
Utterances =>
"What is {slotName}"
"What are {slotName}"
"Meaning of {slotName}"
Slots =>
name : "slotName"
values (using synonyms) :
{OCR => "ocr", Optical Character recognition"}
{NER=> "ner", Named Entity Recognition"}
这大大减少了所需的意图数量,也消除了很多歧义。所有具有 "what" 或类似格式的问题都直接指向该意图。
然后在我的 codehook 中,我看到哪个同义词匹配并提供相应的答案。
我在各种不同的情况下都遇到过这个问题。
我将分享一个例子。
我有一些常见问题解答意图。 一个答案 "What is Named Entity Recognition" 这些是它的话语:
- 告诉我有关命名实体识别的信息
- 告诉我有关 NER 的信息
- 什么是 NER
- 命名实体识别是什么意思
- 什么是命名实体识别
和其他答案"What is Optical Character Recognition?" 这些是它的话语:
- OCR
- OCR 是什么意思
- 你能告诉我 OCR 是什么吗
- 说说 OCR
- 什么是光学字符识别
- 什么是 OCR
当我输入时,"What is ocr?" 它按预期工作并显示 OCR 答案。 但是,当我以完全相同的问题(什么是 OCR?)输入全部大写的 OCR 时。它切换到 NER 意图并向我显示 "What is NER?"
的答案任何人都可以回答它为什么这样做吗?更重要的是,我该怎么做才能使其按预期工作。
请记住,这只是一个例子。我在许多其他类似情况下也遇到过这种情况。
还有一种情况是意图表达似乎根本不匹配。但是还是切换到了错误的意图。
根据 Lex 和 Alexa documentation,自定义广告位类型中的首字母缩略词应写为全部大写的单个单词 (OCR) 或由句点和空格分隔的小写字母 (o. c. r.)。
沿着 table 的底部,您可以看到 Fire HD7
、Fire h. d.
、Fire HD
和 Fire HD 7
的示例,它们证明了这一点 - - 两个有效选项将解析为相同的插槽值输出。
假设话语是根据最佳实践设置的,如果您提供语音输入,请务必注意话语对声音变化、pacing/space 单词之间、口音等因素敏感, 等等。
至于提高准确性的直接步骤,您始终可以尝试进一步分解您的意图,而不是有两个意图,您有一个用于自定义插槽值的每个排列(NER、命名实体识别、OCR 和光学字符识别)。人类很容易理解短语的第一个字母映射到首字母缩写词中的字母,但要教聊天机器人理解这些短语是同义词,那就有点难了。
最后我没有找到合适的解决方案,而是使用了一些非常不优雅的解决方法,但嘿,只要它有效:D
我使用的解决方法是制作 "what" 意图、"how" 意图等。保持句子结构完整:
例如:
IntentName => "Bot_HowTo"
Utterances =>
"What is {slotName}"
"What are {slotName}"
"Meaning of {slotName}"
Slots =>
name : "slotName"
values (using synonyms) :
{OCR => "ocr", Optical Character recognition"}
{NER=> "ner", Named Entity Recognition"}
这大大减少了所需的意图数量,也消除了很多歧义。所有具有 "what" 或类似格式的问题都直接指向该意图。
然后在我的 codehook 中,我看到哪个同义词匹配并提供相应的答案。