我创建了一个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在这种情况下,Luis仍然会将它们识别为实体。
有没有什么办法可以“排除”某些单词,比如“a”或“the”?或者,有没有其他方法来解决这个问题?
发布于 2020-04-21 01:35:13
不,您不能这样做。我已经多次尝试创建您想要的排除类型。但是这些方法不起作用。您可以使用方括号[]告诉LUIS忽略单词,但它并不像您预期的那样工作。例如,
`run [a] [the] {BotName} bot`理论上应该忽略这些词,但实际上"a“和" the”仍将被认为是实体。
如果您可以在所需的发声格式上更严格一点,您可以使用以下内容
`run (a|the) {BotName} bot`这将要求在机器人名称之前使用"a“或" the”。LUIS patterns在这方面做得更好。在这种情况下,它不会将"a“或" the”标识为"Run the bot“之类短语的实体,但它也不会识别意图(除非您将"run the bot”单独添加到您的非模式发声列表中)。此外,“运行facebook机器人”也不被识别,这是不理想的。然而,我认为需要更多的完整短语是可以的,特别是如果你依赖于这个实体提取。“运行facebook机器人”要自然得多。顺便说一句,这个模式还可以正确识别更长的短语,比如“我想运行facebook机器人”或“你能运行facebook机器人吗?”
您可以添加其他短语来处理其他情况,但不能使用细节较少的相同短语。例如,如果您保留简单的run {BotName} bot模式,它将覆盖更具体的模式,并且您将返回以"a“和" the”作为机器人名称(这些模式独立工作)。
您可以检查实体,如果它是"a“或" the ",则忽略它,但考虑用户可能使用的所有随机单词的情况可能与考虑机器人名称本身一样手动。
我选择的是使用非常具体的模式,其中包含额外单词的可能性非常低。我直接在意图中添加了更多的一般性表达。我几乎总是在做对话,所以我只是检查并查看是否找到了发声,如果没有,我就提示它。如果用户输入"Run my facebook bot“之类的内容而无法识别实体,那么您可能会遇到令用户沮丧的风险,但实际上,另一种选择是您使用的列表实体可能不可行,这取决于该实体的可能值的数量。
https://stackoverflow.com/questions/61327062
复制相似问题