LUIS App-通过端点命中数获取受欢迎的意图

让我们假设LUIS应用程序具有100个意图。如何检索流行的前十名意图名称(预测为得分最高的意图)以及端点命中数?

我想在UI上显示类似的内容。

LUIS App-通过端点命中数获取受欢迎的意图

zhenguofen 回答:LUIS App-通过端点命中数获取受欢迎的意图

Microsoft有一个add LUIS data to Application Insights的教程(nodejs,但是我确定如果使用C#,您可以找到/做类似的事情)。从那里,您可以使用日志(分析)来识别每种话语的意图并对其进行计数/绘制。就我而言,我删除了None和NULL意图,因为我只想细分已识别的意图,但是如果您想查看所有内容,则可以省略这些行。 “ take”运算符为您提供前n行。确保您排在第一位,否则不一定是前n位。

requests
| where url endswith "messages"
| where timestamp > ago(30d)
| project timestamp,duration,performanceBucket,resultCode,url,id
| parse kind = regex url with *"(?i)http://"botName".azurewebsites.net/api/messages"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| where message == "LUIS"
| extend topIntent = tostring(customDimensions.LUIS_luisResponse_luisResult_topScoringIntent_intent)
| where topIntent != "None"
| where topIntent != ""
| summarize count() by topIntent
| order by count_ desc
| take 10

这是结果表。我实际上很喜欢为我绘制饼图,但是我将它做成了前10名的表格,以满足您的要求。

enter image description here

如果这不是您要追求的,请告诉我,我会尝试进一步提供帮助。

,

事实证明,LUIS实际上确实可以为您记录意图预测。只要您将log参数设置为true来调用预测端点,就会记录查询结果。 v2 APIlog默认为true,尽管我的测试表明您必须将v3 prediction endpoint log显式设置为true。 / p>

您可以使用this v2 APIthis v3 API检索这些日志,然后可以从那里查询数据。这是一个C#8.0示例,其中某些代码是从this answer借来的:

// Get LUIS logs
using var luis = new LUISAuthoringClient(new Microsoft.Azure.CognitiveServices
    .Language.LUIS.Authoring.ApiKeyServiceClientCredentials(YOUR_AUTHORING_KEY))
{
    Endpoint = $"https://{YOUR_AUTHORING_REGION}.api.cognitive.microsoft.com"
};

using var stream = await luis.Apps.DownloadQueryLogsAsync(new Guid(YOUR_LUIS_APP_ID));
using var parser = new TextFieldParser(stream);

parser.SetDelimiters(",");

// The first row should be something like:
// Query,UTC DateTime,Response,SecondaryId,Region
var csvHeaders = parser.ReadFields();
var responseColumn = Array.IndexOf(csvHeaders,"Response");
var intentCount = new Dictionary<string,int>();

while (!parser.EndOfData)
{
    // Process row
    var fields = parser.ReadFields();
    var responseObject = JObject.Parse(fields[responseColumn]);
    var topIntent = responseObject["prediction"]["topIntent"].ToString();

    if (!intentCount.TryGetValue(topIntent,out var count))
    {
        count = 0;
    }

    intentCount[topIntent] = ++count;
}

// Query processed logs
var top10 = intentCount.OrderByDescending(kvp => kvp.Value).Take(10);

// Example output: [["Greeting",5],["None",3],["Cancel",1],["Help",1]]
Console.WriteLine(JsonConvert.SerializeObject(top10
    .Select(kvp => new object[] { kvp.Key,kvp.Value })));
本文链接:https://www.f2er.com/3068282.html

大家都在问