我正在将QnAmker bot与azure bot一起使用。我没有对它进行任何编码,我只是在线使用它。 现在,我要将置信度得分阈值设置为50%。我正在使用在线编辑器编辑机器人代码,并使用KUDU控制台进行部署。 我在哪里可以编辑或编码置信度分数阈值? 我的机器人平台是C#。
答案 0 :(得分:2)
要将阈值更改为其他值,请将阈值得分设置为GenerateAnswer API JSON主体的属性。这意味着您为每次对GenerateAnswer的调用进行设置。
如果您在Azure上使用漫游器,则必须编辑BotServices.cs文件以说明QnAMaker元数据,该元数据在对GenerateAnswer的调用中返回。特别是,您将必须添加以下内容:
var qnaOptions = new QnAMakerOptions();
var metadata = new Microsoft.Bot.Builder.AI.QnA.Metadata();
metadata.Name = Constants.MetadataName.Intent;
metadata.Value = topIntent;
qnaOptions.StrictFilters = new Microsoft.Bot.Builder.AI.QnA.Metadata[] { metadata };
qnaOptions.Top = Constants.DefaultTop;
qnaOptions.ScoreThreshold = 0.5F;
重要的位是var metadata...
和qnaOptions.ScoreThreshold = 0.5F;
,唯一显示实际作用的样本是Botbuilder-Samples回购中的以下样本:Support Bot in QnA Maker。
但是,如果您决定使用此示例进行练习,请记住两点: 1)它位于样本回购的实验分支中,这意味着无法保证功能完善。 2)该示例显示了多个不同的QnAMaker功能。我建议您克隆代码并仔细检查,然后再将其放入Azure中。
答案 1 :(得分:0)
我使用的是nodejs而不是C#,但是实现方式应该相似。我尝试了上述方法来设置调用中生成阈值的阈值,但这仅在未达到阈值的情况下才能为您提供默认答案,例如“找不到该查询的答案”。在大多数情况下,您不会希望用户收到该答复,并且我发现在之后您会收到更有用的答案。
我正在实际对话框中进行检查并从那里设置outputActivity。同样,这是nodejs,但是您应该能够在C#中执行相同的操作。这是我的实现方式。
// Apply confidence filter
if (qnaResult[0].score > MINIMUM_SCORE) {
outputActivity = MessageFactory.text(qnaAnswer);
}
else {
// If low confidence, send to social talk
var socialResult = await SocialTalkHelper.queryQnAService(query, oldState);
if (socialResult[0].score > MINIMUM_SCORE) {
outputActivity = MessageFactory.text(socialResult[0].answer);
}
else {
// If low confidence for social talk, use default answer
outputActivity = MessageFactory.text(defaultAnswer);
}
}
如果没有达到我的最低分数,我实际上已经将此串联起来,可以使用第二次QnA Maker呼叫企业社交对话KB。我已经设置了一个自定义的defaultAnswer,如果该调用也不符合我的阈值。请注意,MINUMUM_SCORE是 100 ,而不是1.0(例如50%置信度是 50 ,而不是0.5)。
不确定所用的样品。我的答案基于“实验”版本,但无论如何,您都应该从QnA Maker取回同一对象,而这仅取决于您如何处理它。