【问题标题】:How to set confidence score threshold to 50% in azure bot (webchat)?如何在 azure bot(网络聊天)中将置信度分数阈值设置为 50%?
【发布时间】:2019-09-20 06:14:15
【问题描述】:

我正在使用带有 azure bot 的 QnAmker bot。我没有编写任何代码,我只是在线使用它。 现在我想将置信度分数阈值设置为 50% 。我正在使用在线编辑器编辑机器人代码并使用 KUDU 控制台进行部署。 我可以在哪里编辑或编码置信度分数阈值? 我的机器人平台是 C#。

【问题讨论】:

    标签: c# botframework azure-language-understanding azure-bot-service qnamaker


    【解决方案1】:

    要将阈值更改为其他值,请将阈值分数设置为 GenerateAnswer API JSON 主体的属性。这意味着您为每次调用 GenerateAnswer 设置它。

    如果您在 Azure 上使用机器人,则必须编辑 BotServices.cs 文件以说明在调用 GenerateAnswer 时返回的 QnAMaker 元数据。特别是,您将不得不添加以下内容:

    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 上的代码中。

    【讨论】:

    • 你知道现在几点了吗?
    • 对不起,如果那里是晚上!我通过构建打开了我的机器人代码>>打开在线代码编辑器,其中没有像服务这样的文件夹,也没有像 BotServices.cs 这样的文件
    • 别担心! Tdurnford 是我的一个朋友。 :D 你将不得不下载天蓝色的代码。 C# bots 是 azure 编译的,代码不好弄。我建议您下载它,然后进行更改、测试,然后重新部署备份。
    • @JJ_Wailes 我研究并发现将scoreThreshold: 50 添加到 generateAnswer api 效果很好,所以我将它添加到 QnABot.cs 文件中。现在信心得分低于 50 时返回此 Sorry, it looks like something went wrongTo run this sample make sure you have the QnA model deployed.我的代码QnABot.cs 中的行是 var checkFollowUpJsonResponse = await followUpCheckHttpClient.PostAsync(url, new StringContent("{\"question\":\"" + turnContext.Activity.Text + "\", \"scoreThreshold\":50}", Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync();
    【解决方案2】:

    我使用的是 nodejs 而不是 C#,但实现应该类似。我尝试了提到的方法来设置调用 generateanswer 中的阈值,但这只会在未达到阈值时成功为您提供默认答案,例如“未找到该查询的答案”。在大多数情况下,您不希望用户得到该响应,我发现在您收到答案之后检查置信度分数会更有用。

    我正在检查实际对话框并从那里设置 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 调用到 Enterprise Social Talk KB。如果该调用也不符合我的阈值,我已经设置了一个自定义的 defaultAnswer 来使用。请注意,MINUMUM_SCORE 超出 100,而不是 1.0(例如,50% 的置信度是 50,而不是 0.5)。

    不确定您使用的是哪个示例。我的回答是基于“实验”版本,但无论如何,您应该从 QnA Maker 获得相同的对象,而这只是您如何处理它的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多