答案 0 :(得分:1)
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名的表格,以满足您的要求。
如果这不是您要追求的,请告诉我,我会尝试进一步提供帮助。
答案 1 :(得分:1)
事实证明,LUIS实际上确实可以为您记录意图预测。只要您将log
参数设置为true
来调用预测端点,就会记录查询结果。 v2 API说log
默认为true,尽管我的测试表明您必须将v3 prediction endpoint 的log
显式设置为true。 / p>
您可以使用this v2 API或this 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 })));