F1 分数(F1 score)是什么?精确率与召回率的折中
F1 分数是分类和信息检索里常用的评价指标,它用精确率和召回率的调和平均数,把“找得准”和“找得全”压成 0 到 1 之间的一个数。想象你拿渔网去池塘里捞指定品种的鱼:网里的鱼有多少是对的品种,说的是准;池塘里该捞的鱼你捞到了多少,说的是全。网眼开得大,捞得全,杂鱼也多;网眼开得小,捞上来的都对,可漏掉一大半。F1 就是给这张网打的综合分,两头只要有一头很差,分数就上不去。
它是怎么算出来的
先把预测结果分成三类:真阳性(TP,该捞的捞到了),假阳性(FP,捞错了),假阴性(FN,该捞的漏了)。精确率等于 TP 除以 TP 加 FP,召回率等于 TP 除以 TP 加 FN。F1 就是 2 × 精确率 × 召回率 ÷ (精确率 + 召回率)。
拿鱼塘算一遍:池塘里有 10 条目标鱼,网里捞上来 8 条,其中 6 条是对的。精确率是 0.75,召回率是 0.6,F1 约 0.667。换成计数写法是 2TP ÷ (2TP + FP + FN),这里就是 12 ÷ 18,结果一样。
为什么不直接取平均?因为调和平均会被较小的那个数拽着走。一个模型精确率 1.0、召回率 0,算术平均是 0.5,F1 却是 0。只挑最有把握的一条交上去的模型,在 F1 面前拿不到高分。
如果你更在乎其中一头,可以用更一般的 Fβ,它让召回率的重要性是精确率的 β 倍,F1 就是 β 等于 1 的特例。遇到多分类任务,常见做法是宏平均(每个类别各算 F1 再取平均)或微平均(先把所有类别的计数汇总再算)。两种结果在类别大小悬殊时可能差得很远,所以报成绩时要写明用的是哪一种。
名字从哪来的
F-measure 这个名字据信取自 van Rijsbergen 的信息检索著作里另一个叫 F 的函数,1992 年在第四届消息理解会议(MUC-4)上被引入评测。早期的工作主要用 F1。后来搜索引擎规模越做越大,大家开始更看重精确率或者更看重召回率,Fβ 才被用得多起来。顺带一提,F1 在数学上等于“检索到的集合”和“相关集合”的 Dice 系数,做集合重合度的人会觉得眼熟。
在大模型评测里怎么用
落到大模型上,F1 有两种用法,名字一样,算法不一样。
第一种是把模型当分类器,用的就是上面的标准 F1。Vellum 有一篇对比文章,拿客服工单“是否已解决”的二分类,比较了 GPT-4o、GPT-4 Turbo、GPT-4 和 Claude 3 Opus 的准确率、召回率和 F1。其中 GPT-4 的召回率是 87.50%,精确率是 76.56%,F1 是 81.67%。召回最高的那个,精确率反而偏低,只看一个 F1 是看不出来的。
第二种是问答基准里的词级 F1。SQuAD(Rajpurkar 等人,EMNLP 2016)同时报两个指标:完全匹配(EM)和 F1。它的 F1 把预测答案和标准答案各看成一袋词,算词的重合程度,有多个标准答案时取最高的那个,再对所有题目取平均。举个例子:标准答案是 Eiffel Tower in Paris,模型只答 Eiffel Tower。精确率是 1,召回率是 0.5,F1 约 0.667,而完全匹配是 0。原论文测得的人类答题者 F1 是 86.8,并不是满分。Hugging Face 的 evaluate 库里,squad 指标返回的就是 exact_match 和 f1 两项。
DROP(Dua 等人,2019,arXiv:1903.00161)是考多步离散推理的阅读理解基准,它的 F1 沿用了 SQuAD 的实现。GPT-4 技术报告在 DROP 上用的就是 F1,GPT-4 三样本设置下是 80.9,GPT-3.5 是 64.1。DeepSeek-V3 的技术报告和 DeepSeek-R1 的论文,也在 DROP 上汇报 F1。所以你在新模型发布页看到的 F1,多半是这一种词级 F1。
容易混的地方
先说它和准确率的区别。准确率数的是“全部判对的比例”,类别不平衡时很容易好看:一个几乎什么都不报的模型,在稀有类上漏得一塌糊涂,准确率照样很高。F1 只盯着正类,这种偏科会直接暴露。
再说词级 F1 和分类 F1 的区别。词级 F1 数的是词面重合,意思对、措辞不同的答案会被扣分。拿它给开放式回答打分,要记得它量的是“说得像不像”,不是“说得对不对”。
评测设置也会影响结果。GPT-Fathom 的测试里,同一个 gpt-3.5-turbo-0613,只换了一组示例的选法,DROP 的 F1 就从 53.4 变成了 46.4。所以把别家技术报告里的 F1 和自己跑出来的 F1 直接比,很容易比出假差距。我们 AI主线 的建议是:看到一个 F1,先弄清它是词级还是分类 F1,几样本,示例怎么选的,再决定能不能横向比。
F1 本身也有局限。David Hand 等人批评它对精确率和召回率一视同仁,而现实里两种错误的代价往往不同。它还依赖正负样本的比例,类别比例不同的任务之间直接比 F1 并不可靠:一个永远预测“是”的分类器,F1 等于 2p ÷ (1 + p),p 是正类占比,正类越多这个数越好看。Chicco 和 Jurman 还认为,二分类评估里 Matthews 相关系数(MCC)比 F1 更诚实、信息量更大。
给使用者的实际建议很简单。自己拿大模型做分类或信息抽取时,先想清楚漏掉贵还是误报贵。漏掉更贵就盯召回率,必要时用 β 大于 1 的 Fβ;多分类要写明宏平均还是微平均。F1 适合当一个汇总数字,真正决定选哪个模型的,还是拆开后的精确率和召回率。