尽管输入了准确的话语,AWS Lex 还是匹配了错误的意图

AWS Lex matches the wrong intent despite entering exact utterance

我在各种不同的情况下都遇到过这个问题。

我将分享一个例子。

我有一些常见问题解答意图。 一个答案 "What is Named Entity Recognition" 这些是它的话语:

  1. 告诉我有关命名实体识别的信息
  2. 告诉我有关 NER 的信息
  3. 什么是 NER
  4. 命名实体识别是什么意思
  5. 什么是命名实体识别

和其他答案"What is Optical Character Recognition?" 这些是它的话语:

  1. OCR
  2. OCR 是什么意思
  3. 你能告诉我 OCR 是什么吗
  4. 说说 OCR
  5. 什么是光学字符识别
  6. 什么是 OCR

当我输入时,"What is ocr?" 它按预期工作并显示 OCR 答案。 但是,当我以完全相同的问题(什么是 OCR?)输入全部大写的 OCR 时。它切换到 NER 意图并向我显示 "What is NER?"

的答案

任何人都可以回答它为什么这样做吗?更重要的是,我该怎么做才能使其按预期工作。

请记住,这只是一个例子。我在许多其他类似情况下也遇到过这种情况。

还有一种情况是意图表达似乎根本不匹配。但是还是切换到了错误的意图。

根据 Lex 和 Alexa documentation,自定义广告位类型中的首字母缩略词应写为全部大写的单个单词 (OCR) 或由句点和空格分隔的小写字母 (o. c. r.)。

沿着 table 的底部,您可以看到 Fire HD7Fire h. d.Fire HDFire 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 中,我看到哪个同义词匹配并提供相应的答案。