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