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.

B.7 评估:准确率、精确率、召回率和 F 度量

为介绍文本分类的评估方法,先考虑一些简单的二元检测任务。例如,在垃圾邮件检测中,我们要把每篇文本标为垃圾邮件(“正类”)或非垃圾邮件(“负类”)。因此,对每个项目(电子邮件文档),既要知道系统是否把它判为垃圾邮件,也要知道它实际上是不是垃圾邮件,即我们试图匹配的人工定义标签。我们把这些人工标签称为金标准标签(gold labels)。

再设想你是 Delicious Pie Company 的 CEO,想知道人们在社交媒体上怎样评价你的馅饼,于是构建一个系统来检测与 Delicious Pie 有关的推文。正类是讨论 Delicious Pie 的推文,负类是其他所有推文。

在这两种情形下,都需要指标来衡量垃圾邮件检测器(或馅饼推文检测器)的效果。评估任何检测系统,首先要建立图 B.4 所示的混淆矩阵。混淆矩阵使用两个维度(系统输出和金标准标签)及标有各种可能结果的单元格,直观展示算法相对于人工金标准的表现。例如在垃圾邮件检测中,真正例是金标准确认确为垃圾邮件、而系统也正确判为垃圾邮件的文档;假负例则是确为垃圾邮件、但系统错误判为非垃圾邮件的文档。

金标准正类金标准负类
系统判为正类真正例(tp)假正例(fp)
系统判为负类假负例(fn)真负例(tn)
accuracy=tp+tntp+fp+tn+fn\text{accuracy}=\frac{tp+tn}{tp+fp+tn+fn}

图 B.4 用于观察二元分类系统相对于金标准标签表现的混淆矩阵。

准确率(accuracy)询问系统正确标注的观测占全部观测(例中即所有邮件或推文)的百分比。它看似自然,但文本分类一般不把它作为唯一指标,因为类别不平衡时它的效果很差;垃圾邮件占电子邮件的大多数,而推文中绝大多数都与馅饼无关。

具体来说,假设查看 100 万条推文,其中只有 100 条讨论喜欢或讨厌我们的馅饼,其余 999,900 条完全无关。再设想一个愚蠢地把每条推文都分类为“与馅饼无关”的简单分类器。它有 999,900 个真负例,只有 100 个假负例,准确率达到 999,900/1,000,000,即 99.99%。看起来惊人,但这个“绝无馅饼”分类器完全没用,因为它一条我们寻找的顾客评论也找不到。换言之,当目标是发现稀有事物,或类别频率至少不是完全平衡时,准确率并不是好指标,而现实中这种情形非常普遍。

因此,我们通常转向图 B.4 中另外两个指标:精确率(precision)和召回率(recall)。精确率衡量系统检测到的项目(系统判为正类)中,实际上为正类(按人工金标准)的百分比:

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

召回率衡量输入中实际存在的目标项目有多少被系统正确识别:

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

精确率和召回率可以揭示无用的“什么都不是馅饼”分类器的问题。尽管它的准确率高达 99.99%,召回率却糟糕地等于 0(没有真正例而有 100 个假负例,所以召回率为 0/100)。不难看出,它在寻找相关推文时的精确率也同样有问题。可见,与准确率不同,精确率和召回率强调真正例,即找到我们本应寻找的事物。

有许多办法可定义兼顾精确率和召回率的单一指标,其中最简单的是 F 度量(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(B.16)F_1=\frac{2PR}{P+R}\tag{B.16}

F 度量来自精确率和召回率的加权调和平均。若干数的调和平均是其倒数的算术平均的倒数:

HarmonicMean(a1,a2,,an)=n1a1+1a2++1an(B.17)\operatorname{HarmonicMean}(a_1,a_2,\ldots,a_n)=\frac{n}{\frac1{a_1}+\frac1{a_2}+\cdots+\frac1{a_n}}\tag{B.17}

因此,F 度量为:

F=1α1P+(1α)1R,(β2=1αα)F=(β2+1)PRβ2P+R(B.18)F=\frac{1}{\alpha\frac1P+(1-\alpha)\frac1R},\qquad \left(\beta^2=\frac{1-\alpha}{\alpha}\right)F=\frac{(\beta^2+1)PR}{\beta^2P+R}\tag{B.18}

之所以采用调和平均,是因为两个值的调和平均比算术平均更接近其中较小的值。因此,在这里它会给予较小值更大权重,是一种更保守的做法。

B.7.1 多类别评估

到目前为止,我们描述的文本分类任务都只有两个类别。但许多语言处理分类任务有两个以上类别:情感分析通常有正面、负面和中性 3 类;词性标注、词义消歧、语义角色标注、情绪检测等任务具有更多类别也很常见。好在朴素贝叶斯算法本来就是多类别分类算法。

系统输出金标准标签
urgentnormalspam
urgent8101
normal56050
spam330200

图 B.5 三类别分类任务的混淆矩阵。它显示每对类别 (c1,c2)(c_1,c_2) 中有多少来自 c1c_1 的文档被(正确或错误地)分配给 c2c_2

不过,精确率和召回率的定义需要略作修改。图 B.5 是一个假想的三选一邮件分类任务(紧急、普通、垃圾邮件)的混淆矩阵。例如,系统误把一篇垃圾邮件标成了紧急邮件;我们可以为每个类别分别计算精确率和召回率。

为了导出一个表示系统整体表现的单一指标,可以用两种方法合并这些值。宏平均(macroaveraging)先计算每个类别的性能,再对类别求平均;微平均(microaveraging)则把所有类别的决策汇入一个总混淆矩阵,再从该表计算精确率和召回率。图 B.6 展示了从上一图三个类别分别形成的混淆矩阵,以及合并后的矩阵和相应的微平均、宏平均精确率。对于图 B.5,三个类别的真正例总数为 8+60+200=2688+60+200=268,假正例总数为 99,所以微平均精确率为 268/(268+99)=.73268/(268+99)=.73;各类精确率为 8/(8+10+1)8/(8+10+1)60/(5+60+50)60/(5+60+50)200/(3+30+200)200/(3+30+200),其平均值给出宏平均精确率。

图 B.6 上图三个类别各自的混淆矩阵、汇总混淆矩阵,以及微平均和宏平均精确率。