Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

4.9 评估:准确率、召回率与 F 度量

为介绍文本分类的评估方法,先考虑简单的二元检测任务。例如,在垃圾邮件检测中,要把每段文本标为垃圾邮件(“正类”)或非垃圾邮件(“负类”)。对每封邮件,我们既要知道系统是否将它判断为垃圾邮件,也要知道它实际上是否为垃圾邮件,即人工给出的、系统试图匹配的标签。我们把这些人工标签称为金标准标签(gold labels)。

再假设你是 Delicious Pie Company 的 CEO,想了解社交媒体上人们对公司馅饼的评价,于是构建了一个检测相关推文的系统。这里,正类是关于 Delicious Pie 的推文,负类是其他所有推文。

两种情形都需要度量检测器表现的方法。评估任何检测系统时,可以先构造图 4.7 所示的混淆矩阵(confusion matrix)。它以系统输出和金标准标签为两个维度,用表格展示算法相对于人工标签的表现,每个单元格对应一类可能结果。例如,垃圾邮件检测中的真正例(true positive)是确实为垃圾邮件且被系统正确判断为垃圾邮件的文档;假负例(false negative)则是确为垃圾邮件却被系统错误标为非垃圾邮件的文档。

表格右下给出了准确率(accuracy):系统正确标注的观测占全部观测的比例。准确率看似自然,但一般不适合类别不平衡的文本分类任务,例如垃圾邮件占邮件的大多数,或绝大多数推文都与馅饼无关。

金标准标签
金标准正类金标准负类
系统输出系统正类真正例(tp)假正例(fp)准确率 = tp/(tp+fp)
系统负类假负例(fn)真负例(tn)
召回率 = tp/(tp+fn)正确率 = (tp+tn)/(tp+fp+tn+fn)

图 4.7 用于展示二元分类系统相对于金标准标签表现的混淆矩阵。

假设检查了 100 万条推文,其中只有 100 条讨论我们的馅饼,其余 999,900 条完全无关。一个把所有推文都判为“与馅饼无关”的简单分类器会有 999,900 个真负例、100 个假负例,准确率高达 99.99%。但它一条目标顾客评论也找不到,完全没有用。因此,当目标是发现罕见或频率不均衡的事物时,准确率并不是好指标,而现实中这种情形非常普遍。

所以通常改用图 4.7 中另外两个指标:准确率(precision)和召回率(recall)。准确率衡量系统检测出的项目(标为正类)中,实际确为正类的比例:

Precision=true positivestrue positives+false positives\text{Precision}=\frac{\text{true positives}}{\text{true positives}+\text{false positives}}

召回率衡量输入中实际存在的目标项目里,被系统正确识别出来的比例:

Recall=true positivestrue positives+false negatives\text{Recall}=\frac{\text{true positives}}{\text{true positives}+\text{false negatives}}

前面那个“什么都不是馅饼”的分类器虽然准确率为 99.99%,召回率却为 0:它没有真正例,却有 100 个假负例,因此召回率为 0/1000/100。它在寻找相关推文时的准确率也同样成问题。与正确率不同,准确率和召回率强调真正例,即找到本应寻找的目标。

有多种方法可将准确率和召回率合并为一个指标,其中最简单的是 F 度量(F-measure;van Rijsbergen, 1975):

Fβ=(β2+1)PRβ2P+RF_\beta=\frac{(\beta^2+1)PR}{\beta^2P+R}

参数 β\beta 可根据应用需求调整召回率与准确率的重要程度。β>1\beta>1 偏重召回率,β<1\beta<1 偏重准确率;β=1\beta=1 时二者同等重要,这是最常用的指标,称为 Fβ=1F_{\beta=1},简称 F1F_1

F1=2PRP+R(4.42)F_1=\frac{2PR}{P+R}\tag{4.42}

F 度量来自准确率和召回率的加权调和平均。若一组数的调和平均为其倒数算术平均的倒数,则:

HarmonicMean(a1,,an)=n1a1++1an(4.43)\operatorname{HarmonicMean}(a_1,\ldots,a_n)=\frac n{\frac1{a_1}+\cdots+\frac1{a_n}}\tag{4.43}

因此:

F=1α1P+(1α)1R(β2=1αα)F=(β2+1)PRβ2P+R(4.44)F=\frac1{\alpha\frac1P+(1-\alpha)\frac1R}\quad\text{或}\quad\left(\beta^2=\frac{1-\alpha}{\alpha}\right)\quad F=\frac{(\beta^2+1)PR}{\beta^2P+R}\tag{4.44}

采用调和平均,是因为两个值的调和平均比算术平均更接近较小者,因此会更重视二者中较低的指标,在这里更为保守。

4.9.1 两个以上类别的评估

上面定义准确率和召回率时只涉及两个类别,但许多 NLP 分类任务有更多类别。即使情感分析也常包含正面、负面、中性三类,文本分类、情绪检测等任务的类别还可能更多。

这时需稍微修改准确率和召回率的定义。图 4.8 是一个假想的三分类邮件任务(紧急、普通、垃圾邮件)的混淆矩阵。例如,系统把一封垃圾邮件误标为紧急邮件;还可为每个类别分别计算准确率和召回率。要得到反映系统整体表现的单一指标,可以用两种合并方式:宏平均(macroaveraging)先计算每个类别的表现,再对类别取平均;微平均(microaveraging)把所有类别的判断合入一个混淆矩阵,再从中计算准确率和召回率。图 4.9 展示了各类别的独立混淆矩阵,以及微平均和宏平均准确率的计算。

金标准标签
紧急普通垃圾邮件
系统输出紧急8101
普通56050
垃圾邮件330200
recallu=8/(8+5+3)recalln=60/(10+60+30)recalls=200/(1+50+200)

图 4.8 三分类任务的混淆矩阵,展示每一对类别 (c1,c2)(c_1,c_2) 中,来自 c1c_1 的文档有多少被正确或错误地分到 c2c_2

类别 1:紧急

类别 2:普通

类别 3:垃圾邮件

合并

真实紧急

真实非紧急

真实普通

真实非普通

真实垃圾邮件

真实非垃圾邮件

真实是

真实否

系统紧急

8

11

系统普通

60

55

系统垃圾邮件

200

33

系统是

268

99

系统非紧急

8

340

系统非普通

40

212

系统非垃圾邮件

51

83

系统否

99

635

precision=8/(8+11)=.428/(8+11)=.42

precision=60/(60+55)=.5260/(60+55)=.52

precision=200/(200+33)=.86200/(200+33)=.86

微平均 precision=268/(268+99)=.73268/(268+99)=.73

宏平均 precision

=(.42+.52+.86)/3=.60=(.42+.52+.86)/3=.60

图 4.9 图 4.8 三个类别各自的混淆矩阵,以及合并混淆矩阵、微平均准确率和宏平均准确率。

由于计数被合并,微平均会由频率较高的类别(这里是垃圾邮件)主导。宏平均更能反映较小类别的统计特征,因此当所有类别的表现同等重要时更合适。