示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }