Nlp 阻止Luis.ai识别';a';或';';作为实体

Nlp 阻止Luis.ai识别';a';或';';作为实体,nlp,azure-language-understanding,nlu,Nlp,Azure Language Understanding,Nlu,我创建了一个模式。任何与此类似的实体和意图: I want to run [salesforce] bot I want to run [facebook] bot 我将我的实体称为“BotName”,意图称为“BotRun” 这很好,但是,当用户输入“a”或“the”时会混淆实体,例如: I want to run a bot I want to run the bot 在这种情况下,路易斯仍然承认他们是实体 我是否可以“排除”某些单词,如“a”或“the”?或者有其他方法解决这个问题吗?

我创建了一个模式。任何与此类似的实体和意图:

I want to run [salesforce] bot
I want to run [facebook] bot
我将我的实体称为“BotName”,意图称为“BotRun”

这很好,但是,当用户输入“a”或“the”时会混淆实体,例如:

I want to run a bot
I want to run the bot
在这种情况下,路易斯仍然承认他们是实体


我是否可以“排除”某些单词,如“a”或“the”?或者有其他方法解决这个问题吗?

不,你不能这样做。我曾多次尝试创建您想要的排除类型。但是这些方法不起作用。你可以用括号[]告诉路易斯忽略单词,但这并不像你想象的那样有效。比如说,

    `run [a] [the] {BotName} bot`
理论上应该忽略这些词,但实际上“a”和“the”仍将被视为实体

如果您可以对所需的话语格式更严格一些,您可以使用

    `run (a|the) {BotName} bot`
这将需要在bot名称前加上“a”或“the”。LUIS patterns在这方面做得更好。在这种情况下,它不会将“a”或“the”识别为“runthebot”等短语的实体,但也不会识别其意图(除非您将“runthebot”单独添加到非模式话语列表中)。此外,“运行facebook机器人”也没有得到认可,这并不理想。然而,我认为需要一个更完整的短语是可以的,特别是如果您依赖于这个实体提取的话。“运行facebook机器人”要自然得多。顺便说一句,这种模式也能正确识别较长的短语,如“我想运行facebook机器人”或“你能运行facebook机器人吗?”

您可以添加其他短语来处理其他情况,但不能使用细节较少的相同短语。例如,如果您保持简单的
run{BotName}bot
模式,这将覆盖更具体的模式,您将返回选择“a”和“the”作为bot名称(这些模式独立工作)

您可以对实体进行检查,如果它是“a”或“the”,则忽略它,但考虑用户可能使用的所有随机词的情况可能与考虑bot名称本身一样手动


我所决定的是使用非常特定的模式,其中包含额外单词的可能性非常低。我直接在意图中添加了更一般的表述。我几乎总是在做对话,所以我只是检查是否找到了话语,如果没有,我会提示输入。如果用户键入诸如“运行我的facebook bot”之类的内容而无法识别实体,则可能会让用户感到沮丧,但实际上,另一种选择是,您使用的列表实体可能不可行,具体取决于实体的可能值的数量。

很遗憾,但感谢您的详细解释。