0

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

4

2 回答 2

1

如果您考虑BotFramework 的 C# 代码,您可以看到“最佳意图来自”函数的实现如下:

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

如果您想对此进行测试,您可以在 LuisDialog 中覆盖它,以查看其机制的详细信息(通过记录 intetnts 的分数)。如您所见,将在决策点选择最高分数。此外,您可以在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 响应。

于 2016-12-05T09:45:00.517 回答
0

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

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

于 2017-09-25T08:11:23.353 回答