具有较低分数的意图的 Botframework 响应

Botframework responses with intent with lower score

我有一个机器人,它使用两个 LUIS 应用程序作为 LuisRecognizers 来猜测客户端意图。我的问题是为什么机器人会响应得分最低的意图?我仔细检查了这一点,如果我通过 Luis dashbord 手动检查分数,那么我会收到类似这样的信息:IntentA 的分数为 0.92,IntentB 的分数为 1。如果我通过 botframework 传递相同的输入,它会以分数较低的 IntentA 进行响应。我错过了什么吗? 我尝试使用文档中提到的 intentThreshold、recognizeMode 或 recognizeOrder,但没有收到更好的结果。

如果考虑 C# code of BotFramework,您可以看到 "the best intent from" 函数的实现方式如下:

protected virtual IntentRecommendation BestIntentFrom(LuisResult result)
{
    return result.Intents.MaxBy(i => i.Score ?? 0d);
}

如果您想对此进行测试,可以在您的 LuisDialog 中重写它,以查看其机制的详细信息(通过记录分数)。 如您所见,将在决策点选择最高分数。 此外,您可以在 NodeJs:

中找到 Luis 识别器
LuisRecognizer.recognize(utterance, model, (err, intents, entities) => {
                if (!err) {
                    result.intents = intents;
                    result.entities = entities;

                    // Return top intent
                    var top: IIntent;
                    intents.forEach((intent) => {
                        if (top) {
                            if (intent.score > top.score) {
                                top = intent;
                            }
                        } else {
                            top = intent;
                        }
                    });
                    if (top) {
                        result.score = top.score;
                        result.intent = top.intent;

                        // Correct score for 'none' intent
                        // - The 'none' intent often has a score of 1.0 which
                        //   causes issues when trying to recognize over multiple
                        //   model. Setting to 0.1 lets the intent still be 
                        //   triggered but keeps it from trompling other models.
                        switch (top.intent.toLowerCase()) {
                            case 'builtin.intent.none':
                            case 'none':
                                result.score = 0.1;
                                break;
                        }
                    }
                    cb(null, result);
                } else {
                    cb(err, null);
                }
            });

同样与C#代码相同,如果Luis中存在应用程序模型,识别器会选择最高分数。 因此,这个问题不是来自客户端。 因此,建议可以考虑接收到您的客户端的 LUIS 的 JSON 响应。

您是否从 LUIS 仪表板尝试过您的已发布模型?我遇到了同样的问题,因为 LUIS 目前没有正确发布我的模型并且它没有捕捉到我所做的更改,所以经过训练的模型在仪表板中完美运行但发布的模型没有。

我第二天尝试了,它在仪表板和 botframework 中都正确发布了所有内容。