1

我创建了一个类似于此的 pattern.any 实体和意图:

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”?或者有其他方法可以解决这个问题吗?

4

1 回答 1

1

不,你不能这样做。我曾多次尝试创建您想要的排除类型。但这些方法不起作用。您可以使用方括号 [] 告诉 LUIS 忽略单词,但它不会像您期望的那样工作。例如,

    `run [a] [the] {BotName} bot`

理论上应该忽略这些词,但实际上“a”和“the”仍将被识别为实体。

如果您可以对所需的话语格式更加严格,您可以使用类似的东西

    `run (a|the) {BotName} bot`

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

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

您可以检查实体并忽略它,如果它是“a”或“the”,但考虑用户可能使用的所有随机词的情况可能就像考虑机器人名称本身一样手动。

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

于 2020-04-20T17:35:12.537 回答