你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

评估指标

数据集分为两部分:一组用于训练,一组用于测试。 训练集用于训练模型,而测试集用作训练后的模型测试,以计算模型性能和评估。 测试集不会通过训练过程引入到模型中,以确保模型在新数据上进行测试。

成功完成训练后,将自动触发模型评估。 评估过程首先使用经过训练的模型预测测试集中文档的用户定义类,并将其与提供的数据标记进行比较(这将建立真实的基线)。 返回结果后,可以查看模型的性能。 对于评估,自定义文本分类使用以下指标:

  • 精准率:度量模型的精确度/准确度。 它是正确识别的正值(真正)与所有识别出的正值之间的比率。 精准率指标显示正确标记的预测类的数量。

    Precision = #True_Positive / (#True_Positive + #False_Positive)

  • 召回率:度量模型预测实际正类的能力。 这是预测的真正值与实际标记的结果之间的比率。 召回率指标显示正确的预测类的数量。

    Recall = #True_Positive / (#True_Positive + #False_Negatives)

  • F1 分数:F1 分数是精准率和召回率的函数。 在精准率和召回率之间进行平衡时,需要用到它。

    F1 Score = 2 * Precision * Recall / (Precision + Recall)

注意

分别为每个类(类级评估)和模型共同计算(模型级评估)的精准率、召回率和 F1 分数。

模型级和类级的评估指标

对于类级和模型级评估,精准率、召回率和计算的定义是相同的。 但是,真正、假正和假负的计数不同,如下例所示。

下列部分使用以下示例数据集:

文档 实际类 预测类
1 action、comedy comedy
2 action action
3 romance romance
4 romance、comedy romance
5 comedy action

action 类的类级评估

计数 说明
真正 1 文档 2 已正确分类为 action。
假正 1 文档 5 已错误分类为 action。
假负 1 尽管文档 1 应分类为 Action,但它并没有。

精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5

召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5

F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5

comedy 类的类级评估

计数 说明
真正 1 文档 1 已正确分类为 comedy。
假正 0 未将任何文档错误地分类为 comedy。
假负 2 尽管文档 5 和 4 应分类为 comedy,但它们没有。

精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1

召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 2) = 0.33

F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 0.67) / (1 + 0.67) = 0.80

对整体模型进行模型级评估

计数 说明
真正 4 文档 1、2、3 和 4 在预测中获得正确的类。
假正 1 在预测中,为文档 5 提供了错误的类。
假负 2 在预测中,未向文档 1 和 4 提供所有正确类。

精准率 = #True_Positive / (#True_Positive + #False_Positive) = 4 / (4 + 1) = 0.8

召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 4 / (4 + 2) = 0.67

F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.8 * 0.67) / (0.8 + 0.67) = 0.73

注意

对于单标签分类模型,假负和假正的计数始终相等。 自定义单标签分类模型始终预测每个文档的一个类。 如果预测不正确,预测类的假正计数增加 1,实际类的假负增加 1,模型的假正和假负的总计数将始终相等。 对于多标签分类,这种情况并非如此,因为未能预测某个文档的类将被计为假负。

解释类级评估指标

那么,对于某个类来说,具有高精准率或高召回率实际上意味着什么?

Recall Precision 解释
此类完全由模型进行处理。
模型不能始终预测此类,但在执行此类时,它会具有高置信度。 这可能是因为此类在数据集中未被充分代表,因此请考虑平衡数据分布。
该模型可以很好地预测此类,但是它具有低置信度。 这可能是因为此类在数据集中被过度代表,因此请考虑平衡数据分布。
此类在通常无法预测的情况下被模型处理得很差,并且当它被预测时,也不会有很高的置信度。

自定义文本分类模型预计会同时遇到假负和假正。 需要考虑每一个将如何影响整个系统,并仔细考虑模型将忽略正确预测并识别错误预测的情况。 根据你的方案,精准率或召回率可能更适合评估模型的性能。

例如,如果你的方案涉及处理技术支持票,则预测错误类可能会导致将其转发给错误的部门/团队。 在此示例中,应考虑让你的系统对假正更敏感,并且精准率将是一个更相关的评估指标。

作为另一个示例,如果你的方案涉及将电子邮件分类为“重要”或“垃圾邮件”,则不正确的预测可能会导致你丢失有用的电子邮件(如果它标记为“垃圾邮件”)。 但是,如果垃圾邮件标为“重要”,则可以忽略它。 在此示例中,应考虑让你的系统对假负更敏感,召回率将是一个更相关的评估指标。

如果要针对常规用途方案进行优化,或者当精准率和召回率都很重要时,可以使用 F1 分数。 评估分数是主观的,具体取决于你的场景和验收条件。 没有适用于每个方案的绝对指标。

指南

训练模型后,你将看到一些关于如何改进模型的指导和建议。 建议使用一个涵盖指南部分中所有要点的模型。

  • 训练集有足够的数据:类类型在训练数据中的标记实例少于 15 个时,由于没有针对这些事例对模型进行充分训练,可能会导致准确性降低。

  • 所有类类型都存在于测试集中:测试数据缺少类类型的标记实例时,由于存在未经测试的方案,模型的测试性能可能会变得不太全面。

  • 类类型在训练集和测试集中是平衡的:采样偏差导致类类型频率的表示形式不准确时,由于模型预期类类型出现的频率太高或太低,可能导致准确性降低。

  • 类类型在训练集和测试集之间均匀分布:混合类类型在训练集和测试集之间不匹配时,由于模型的训练方式与测试方式不同,可能导致准确性降低。

  • 训练集中的类类型明显不同:多个类类型的训练数据相似时,由于类类型可能经常被错误分类为彼此,可能会导致准确性降低。

混淆矩阵

重要

混淆矩阵不适用于多标签分类项目。 混淆矩阵是用于模型性能评估的 N x N 矩阵,其中 N 是类数目。 该矩阵将预期标签与模型预测的标签进行比较。 这为模型的性能以及它所犯的错误类型提供了整体视图。

可以使用混淆矩阵来识别彼此之间过于接近且经常被弄错(歧义)的类。 在这种情况下,请考虑将这些类合并在一起。 如果无法做到这一点,请考虑使用这两个类标记更多文档,以帮助模型区分它们。

所有正确的预测都位于表的对角线上,因此可以非常直观地检查表中是否有预测误差,因为它们将由对角线之外的值表示。

混淆矩阵示例的屏幕截图。

可以根据混淆矩阵计算类级别和模型级别的评估指标:

  • 对角线的值是每个类的真正值。
  • 类行中值的总和(不包括对角线)是模型的假正值。
  • 类列中值的总和(不包括对角线)是模型的假负值。

同样,

  • 模型的真正值是所有类的真正值的总和。
  • 模型的假正值是所有类的假正值的总和。
  • 模型的假负值是所有类的假负值的总和。

后续步骤