具有较低分数的意图的 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 中都正确发布了所有内容。
我有一个机器人,它使用两个 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 中都正确发布了所有内容。