我在多种不同情况下都遇到了这个问题。
我将分享一个例子。
我有几个FAQ意图。其中一个回答“What is Named Entity Recognition?”以下是它的语句:
- Tell me about Named Entity Recognition
- Tell me about NER
- What is NER
- What do you mean by Named Entity Recognition
- What is Named Entity Recognition
另一个回答“What is Optical Character Recognition?”以下是它的语句:
- OCR
- What do you mean by OCR
- Can you tell me what OCR is
- Tell about OCR
- What is optical character recognition
- What is OCR
当我输入“What is ocr?”时,它按预期工作并显示OCR的答案。但当我改为输入全大写的OCR,并使用完全相同的问题(What is OCR?)时,它却切换到了NER意图并显示“What is NER?”的答案。
有人能回答为什么会这样吗?更重要的是,我该怎么做才能让它按预期工作?
请记住,这只是一个例子。我在许多其他类似场景中也遇到了这个问题。
还有一个案例中,意图语句看起来根本不匹配,但它仍然切换到了错误的意图。
回答:
最后我没有找到合适的解决方案,而是使用了一些非常不雅的变通方法,但只要能用就行: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”或类似格式的问题都直接进入该意图。
然后在我的代码钩子中,我会查看匹配了哪个同义词,并相应地提供答案。