/// <summary> /// Prints to the console the intents, entities performance results /// and a confusion table for intents /// </summary> /// <param name="compareResults"> The comparison results for intents and entities</param> public static void PrintResults(this NLUCompareResults compareResults) { var intentAverageResults = compareResults.Statistics.Intent.CalcAccuracy(); Console.WriteLine("== Intents results == "); var intentTable = new ConsoleTable("Intent", "Precision", "Recall", "F1"); intentTable.AddRow("*", intentAverageResults[0], intentAverageResults[1], intentAverageResults[2]); compareResults.Statistics.ByIntent.ToList().ForEach(kvp => { // Calculating accuracy numbers and rounding up the result values for each intent var results = kvp.Value.CalcAccuracy(); intentTable.AddRow(kvp.Key, results[0], results[1], results[2]); }); intentTable.Write(); var entityAverageResults = compareResults.Statistics.Entity.CalcAccuracy(); Console.WriteLine("== Entity results == "); var entityTable = new ConsoleTable("Entity", "Precision", "Recall", "F1"); entityTable.AddRow("*", entityAverageResults[0], entityAverageResults[1], entityAverageResults[2]); compareResults.Statistics.ByEntityType.ToList().ForEach(kvp => { // Calculating accuracy numbers and rounding up the result values for each entity var entityResults = kvp.Value.CalcAccuracy().ToList(); entityTable.AddRow(kvp.Key, entityResults[0], entityResults[1], entityResults[2]); }); entityTable.Write(); PrintIntentConfusionTable(compareResults.TestCases); }
/// <summary> /// Prints to the console the intents, entities performance results /// and a confusion table for intents /// </summary> /// <param name="compareResults"> The comparison results for intents and entities</param> /// <param name="baseline">The baseline results the results are benchmarked against.</param> public static void PrintResults(this NLUCompareResults compareResults, NLUStatistics baseline) { var allIntentsPrecision = Print(compareResults.Statistics.Intent.Precision(), baseline?.Intent.Precision()); var allIntentsRecall = Print(compareResults.Statistics.Intent.Recall(), baseline?.Intent.Recall()); var allIntentsF1 = Print(compareResults.Statistics.Intent.F1(), baseline?.Intent.F1()); var allIntentsTotal = Print(compareResults.Statistics.Intent.Total(), baseline?.Intent.Total(), 0); var allIntentsFP = Print(compareResults.Statistics.Intent.FalsePositive, baseline?.Intent.FalsePositive, 0); Console.WriteLine("## Intents Results"); var intentTable = new ConsoleTable("Intent", "Precision", "Recall", "F1", "Total", "FP"); intentTable.AddRow("*", allIntentsPrecision, allIntentsRecall, allIntentsF1, allIntentsTotal, allIntentsFP); compareResults.Statistics.ByIntent .OrderBy(intentItem => intentItem.Key) .ToList() .ForEach(intentItem => { var intentBaseline = default(ConfusionMatrix); if (baseline != null && !baseline.ByIntent.TryGetValue(intentItem.Key, out intentBaseline)) { intentBaseline = ConfusionMatrix.Default; } var intentPrecision = Print(intentItem.Value.Precision(), intentBaseline?.Precision()); var intentRecall = Print(intentItem.Value.Recall(), intentBaseline?.Recall()); var intentF1 = Print(intentItem.Value.F1(), intentBaseline?.F1()); var intentTotal = Print(intentItem.Value.Total(), intentBaseline?.Total(), 0); var intentFP = Print(intentItem.Value.FalsePositive, intentBaseline?.FalsePositive, 0); intentTable.AddRow(intentItem.Key, intentPrecision, intentRecall, intentF1, intentTotal, intentFP); }); intentTable.Write(Format.MarkDown); var allEntitiesPrecision = Print(compareResults.Statistics.Entity.Precision(), baseline?.Entity.Precision()); var allEntitiesRecall = Print(compareResults.Statistics.Entity.Recall(), baseline?.Entity.Recall()); var allEntitiesF1 = Print(compareResults.Statistics.Entity.F1(), baseline?.Entity.F1()); var allEntitiesTotal = Print(compareResults.Statistics.Entity.Total(), baseline?.Entity.Total(), 0); var allEntitiesFP = Print(compareResults.Statistics.Entity.FalsePositive, baseline?.Entity.FalsePositive, 0); Console.WriteLine("## Entity Results"); var entityTable = new ConsoleTable("Entity", "Precision", "Recall", "F1", "Total", "FP"); entityTable.AddRow("*", allEntitiesPrecision, allEntitiesRecall, allEntitiesF1, allEntitiesTotal, allEntitiesFP); compareResults.Statistics.ByEntityType .OrderBy(entityItem => entityItem.Key) .ToList() .ForEach(entityItem => { var entityBaseline = default(ConfusionMatrix); if (baseline != null && !baseline.ByEntityType.TryGetValue(entityItem.Key, out entityBaseline)) { entityBaseline = ConfusionMatrix.Default; } var entityPrecision = Print(entityItem.Value.Precision(), entityBaseline?.Precision()); var entityRecall = Print(entityItem.Value.Recall(), entityBaseline?.Recall()); var entityF1 = Print(entityItem.Value.F1(), entityBaseline?.F1()); var entityTotal = Print(entityItem.Value.Total(), entityBaseline?.Total(), 0); var entityFP = Print(entityItem.Value.FalsePositive, entityBaseline?.FalsePositive, 0); entityTable.AddRow(entityItem.Key, entityPrecision, entityRecall, entityF1, entityTotal, entityFP); }); entityTable.Write(Format.MarkDown); PrintIntentConfusionTable(compareResults.TestCases); }