先说我自己的一个习惯:每次新模型发布,我第一眼看的不是发布会上的演示视频,而是它跑出来的那排 Benchmark 分数。MMLU 涨了几个点、HumanEval 有没有过 90、GSM8K 是不是又刷上限了——几乎成了圈子里约定俗成的“开箱验货”方式。但这几年跟很多朋友聊下来,我发现一个挺普遍的问题:大家看分数看得很起劲,真要问一句“这个分数是怎么算出来的?数据集里装的是什么题?评分规则是谁定的?”,能讲清楚的人其实不多。
这篇文章就想把这件事彻底讲透。我会从 Dataset、Rubric 到 Metric 这条完整链路出发,带你把大模型评测这整套“考试系统”拆开看一遍。读完你应该能回答三个问题:模型到底在被什么题“考”?评分标准是怎么定的?最终那个数字有几分可信?
1. Benchmark 是什么:一场为了“看得见进步”而发明的标准化考试
1.1 一个类比:AI 界的高考是怎么来的
如果把大模型比作学生,那 Benchmark 就是高考。你不可能让每个学生都去做一套完全不同的卷子,然后拿着分数互相比较——题都不同,分数怎么比?所以必须有一套统一的考题、统一的评分标准、统一的计分方式,大家在同一张卷子上较量,排名才有意义。
Benchmark 这个词本身来自计算机体系结构领域,原本是用来测试硬件性能的标准程序集合。后来 NLP 圈把它借了过来,意思变成了“用一组固定的任务、数据集和指标,来评估模型能力的标准流程”。它的核心价值就两个:横向可比、纵向可追踪。横向是同一个 Benchmark 上不同模型之间的对比,纵向是同一个模型在不同版本之间的进步幅度。
这里有个容易混淆的点:Benchmark 不是单一的东西。一个完整的 Benchmark 至少包含三个层次——Dataset(考卷本身)、Rubric(评分标准)、Metric(计分公式)。很多人在讨论时把这三个词混在一起说,比如“MMLU 这个数据集如何如何”,但实际上 MMLU 既包含那 57 个学科的题目,也包含一套固定的答题与计分方式,是一个整体的 Benchmark 体系。
1.2 为什么大模型时代“考试”变得这么难
传统机器学习时代,评估相对简单。你做一个图像分类任务,数据集是固定的,标注是明确的,跑一个准确率 Acc 就行。但大模型时代麻烦多了:任务从分类变成了生成,答案不再是一个标签,而是一整段文本;能力从单一变成了通用,一个模型要同时考数学、编程、常识、推理、指令跟随。你怎么给一段生成文本打分?怎么判断一个模型“更聪明”?这些问题直接催生了新一代 Benchmark 的复杂设计。
也正是因为难,所以现在评测圈形成了一个共识:单靠一个 Benchmark 分数没法评判模型好坏,必须看一组覆盖不同能力的 Benchmark,配合人类评测兜底。这就像高考不能只看一科总分,还要看各科均衡度一样。
2. Dataset:考题是怎么“出”的,决定了考的是谁的水平
2.1 数据来源与构造方式:好题不是天上掉下来的
先说数据集。以最有名的 MMLU 为例,它收集了数学、历史、法律、计算机科学等 57 个学科的多项选择题,总量约 15000 道。题目来源很多来自网上公开的考试题、教材内容、知识库条目,然后人工清洗、筛选、整理成统一的格式——每道题是一个问题加四个选项,只有一个正确选项。
这里有个关键的工程细节:为什么 MMLU 要限定成四选一?因为这样评分最简单、最客观,模型只要输出 A/B/C/D 就能比对。多选题天然适合做大规模自动评测,这也是为什么早期大模型评测几乎全用选择题——成本低、可复现、无歧义。
但选择题也有致命伤,后面我会专门说。先记住一个结论:数据集的格式设计,本质上是在“评测成本”和“评测深度”之间做取舍。
另外一类常见的数据集是“问答式”,比如 GSM8K,是小学数学应用题,要求模型给出解题步骤和最终数字答案。这类题不给你选项,模型要自己生成完整答案,评分就必须引入更复杂的机制——这就牵扯出后面的 Rubric 和 Metric。
2.2 防数据泄漏:出题人最大的噩梦
构造数据集时有一个红线问题:数据污染。大模型是在海量互联网文本上训练的,如果训练数据里包含了测试集的题目,那评测分数就是假的。模型不是“会做这道题”,而是“背过这道题”,这就像考试前拿到了真题答案,考了满分也没参考价值。
实际操作中,正规 Benchmark 团队会做两件事:
- 数据集发布之前,会和主流训练语料做 n-gram 重叠检测,尽量排查可能已经被抓取的题目。
- 数据集做成动态版本,定期更新题目,比如 MMLU-Pro、FreshQA 这类较新的 Benchmark,强调题目时效性,降低被提前“背下来”的风险。
但我必须坦白说,这个猫鼠游戏现在越来越难。很多闭源模型训练数据到底含有什么,外部根本不知道,数据污染检测只能做到“明显的”,做不到“彻底的”。所以行业中出现了越来越多拼“推理新题”的 Benchmark,比如 AIME 数学竞赛题、LiveCodeBench 这种定期更新的代码题,核心思路就是“我保证这套卷子你之前没见过”。
3. Rubric:评分标准是模型的“答题卡”和“阅卷规则”
3.1 客观题看选项,主观题看什么
Rubric 这个词在教育学里是“评分细则表”的意思,放在 Benchmark 语境下,就是:模型输出什么形式的结果、用什么标准来判定对错。
客观题(选择题)的 Rubric 最简单:模型输出一个字母,比对是否匹配正确答案。但哪怕这么简单,实践里也有细节——模型的输出往往是一整段话,比如“答案是 A,因为……”,所以评测工具要设计一个答案抽取器,从自由文本里提取出那个关键字母。传统做法是正则匹配,现在很多评测框架用 LLM 自己来抽,但抽错的情况还是时有发生。
主观题就复杂了。以 GSM8K 为例,模型需要输出求解过程和一个最终数字。评分 Rubric 规定:只看最终答案数字是否等于标准答案,过程不参与评分。这就是一个典型的“宽松器”——你过程写错了但答案对了,这题算你对。
但到了 HumanEval(代码生成),Rubric 又不一样了。它不看文本相似度,而是把模型生成的代码放进单元测试里实际跑一遍,跑通了算对。这算是最硬核的评分标准:你是骡子是马,拉出来跑测试就知道了。
3.2 从 Rubric 到 Prompt:模型是怎么“答题”的
Rubric 不只是定“怎么判分”,它还决定了“模型怎么被提问”。同一个数据集,用不同的提问模板,模型表现可以天差地别。业界把这个叫 Prompt Sensitivity(提示敏感性)。
比如 MMLU 的经典提问方式有:
- 直接问:“以下是关于某学科的多选题,请回答正确答案。”
- few-shot:给几道示例题再问。
- CoT(思维链):要求“请一步一步思考,再给出答案”。
同一个模型在这些不同的提问方式下,分数能差好几分。所以一个负责任的 Benchmark 报告必须写清楚:评测时用的什么模板、几样本提示、有没有开思维链。否则分数根本没法复现。
这里我插一个实操经验:我自己跑评测时,会固定一套 Prompt 模板,绝不随意改动。哪怕只是加了一句“请直接输出答案”,都可能干扰结果。评测环境里,控制变量比什么都重要。
4. Metric:那个亮眼的数字,到底是怎么蹦出来的
4.1 准确率、Pass@k 与 F1:不同题型的计分哲学
Metric 是终点站,把所有题目的对错汇总成一个数字。不同类型的题,汇总方式完全不同。
- 选择题/分类题:准确率(Accuracy),答对的题数除以总题数。简单粗暴。
- 生成式问答:可以用 ROUGE、BLEU 这类文本重叠指标来量相似度;但大模型时代越来越倾向于用 LLM-as-a-Judge,让一个强模型来打主观分。
- 代码生成:Pass@1 表示“一次生成就通过单测”的比例;Pass@k 表示“生成 k 个候选,至少有 1 个通过单测”的比例。因为代码生成有随机性,通常采样多次去估算概率。
- 开放对话/指令跟随:参考 Rubric 打分,人工或 LLM 打 1-5 分,最后汇总平均分。
这里有个关键概念:不同 Metric 之间不能直接对比。一个模型的 MMLU 准确率是 85%,另一个模型的 AlpacaEval 胜率是 70%,两者说的根本不是一回事。很多自媒体把它们混在一起做成“能力雷达图”,其实只有“同一套题、同一评分标准”的分数才有可比性。
4.2 选择题“乱蒙陷阱”:为什么 60% 不等于及格
大多数人对准确率有个直觉:50% 以下说明很差,60% 以上就是及格水平。但在四选一选择题里,这个直觉是错的。
因为纯随机乱猜,四选一的期望正确率是 25%。如果某学科题目特别难,模型只拿到 40%,看起来挺低,但已经显著高于随机水平,说明它确实掌握了一些知识。反之,如果模型在某个数据集上拿到 80%,但答题时输出了“以上都对”这种作弊答案,那这个分数也要打问号。
所以现在很多 Benchmark 会额外报告一个 Baseline 分数,比如“人类专家得分”“随机猜测得分”。你看结果时,一定要把模型的分数和这两个参照物放在一起看,否则容易被绝对数字误导。
5. 主流 Benchmark 盘点:从知识问答到工程实战
5.1 知识类与推理类:MMLU、GPQA、AIME
| Benchmark | 题型 | 考什么 | 特点与坑 |
|---|---|---|---|
| MMLU | 四选一,57 学科 | 广谱知识记忆 | 数据非常容易被污染,高分不代表会推理 |
| MMLU-Pro | 四选一+多选,更难 | 更强推理与排除干扰 | 增加了“以上都不对”类选项,蒙对概率降低 |
| GPQA | 四选一,博士级科学题 | 专业科学推理 | 人类专家也只有 65% 左右,区分度很高 |
| GSM8K | 小学数学应用题 | 数值推理与多步计算 | 评分只看最终数字,不看过程 |
| AIME | 竞赛数学解答题 | 复杂数学推理 | 答案必须精确,对格式要求严苛 |
看这个表你会发现一个趋势:早期 Benchmark 全靠 MMLU 一肩挑,现在逐渐细分,专攻推理、专攻代码、专攻数学。原因是 2023 年之后 MMLU 普遍接近天花板,模型之间分数差距缩小到一两个点,根本拉不开差距,急需更难的新卷子。
AIME 是近两年评测圈的心头好,因为它是美国数学邀请赛真题,题目不会提前被大模型训练语料收录太多,而且每道题的结果是一个整数,判定标准绝对客观。OpenAI、Anthropic、DeepSeek 发布新模型时几乎都会跑一遍 AIME 分数,它已经成为衡量“深度推理”能力的事实标准之一。
5.2 代码与 Agent 类:HumanEval、SWE-bench、LiveCodeBench
代码生成是另一个评测重镇。HumanEval 是 164 道 Python 函数补全题,规模不大但非常经典。它用单元测试判定对错,Pass@1 是各家的核心比拼点。但 HumanEval 的题目相对简单,且公开太久,现在也面临饱和问题。
SWE-bench 是更大的挑战:它从 GitHub 的真实 Issue 里取样,要求模型对真实代码仓库进行修改,让测试用例从 fail 变成 pass。这考的不是“写一个函数”,而是“读懂一个项目、定位问题、完成修复”的工程能力。这类 Benchmark 的评分流程极其复杂,要搭环境、跑测试、判超时,复现成本很高。
LiveCodeBench 的思路不一样:它持续从各类编程竞赛平台上收集新题目,每隔一段时间发布一批新数据,目的就是对抗数据污染。你可以理解成“永不重复的题库”,每次考的都是新鲜题。
6. Benchmark 的坑:我帮你踩过的,就别再踩了
6.1 数据污染:刷分技巧背后,其实是“透明度”危机
前文提过数据污染,这里展开讲。业内有一个测试数据污染的经典方法:把测试题与训练数据做文本重叠分析。但问题是,闭源模型的训练数据是保密的,你没法亲自验证,只能靠外部研究机构的抽测。
比如斯坦福大学之前做过一个研究,用 GPT-4 训练数据可能包含 MMLU 的测试题,导致 MMLU 分数虚高。这直接推动了后来“难新题”Benchmark 的风潮。现在如果你看一份技术报告,里面只报了 MMLU 和 HumanEval,没有 AIME、没有 LiveCodeBench,我建议你心里默默打个折。
实际操作中怎么判断一个数据集的污染程度?我的经验是看“发布时间的倒推”——如果 Benchmark 的题目发布在大模型核心训练数据截断日期之前,那污染风险就高;反之,如果是发布截断日期之后的新题,风险就低。这是最朴素、也相对有效的判断方式。
6.2 分数通胀与评测内卷:榜单越来越不可信了吗
过去两年,各家的分数涨得比财报还快。一个重要原因是 Benchmark 题目被反复“喂”给模型,也就是前面说的污染;还有一个原因是模型厂商会在评测框架上做边际优化——调 Prompt、调采样温度、调答题格式,专门去适配已知的评分逻辑。
这就引出一个讨论:大模型是否在“针对考试而学习”?我认为某种程度上是的。这不是说模型没有真实进步,但分数的提升确实有一部分来自“应试技巧”而非“能力增强”。行业里对抗这种内卷的方式,是不断提高题目的难度、新鲜度,让模型没法靠背题库来拿分。
另外一个不太被关注的坑是Metric 操纵。比如 Pass@k 这个指标,k 越大、分数越高,有些报告就写 Pass@32 甚至 Pass@100,看起来分数惊人,但实际使用中根本不会让模型生成 32 次再挑一个。所以看代码生成分数时,认准 Pass@1 才有实际参考价值,Pass@k 只能当辅助参考。
7. 怎么挑一套适合自己的评测组合
7.1 按场景选:你是打榜还是做产品
评测 Benchmark 之前先问自己一个问题:我要的是什么?如果是要横向对比各家大模型能力,那直接跑一套公开主流组合就行;如果是给自己业务选模型,那得往垂直场景倾斜。
我的建议是分成三层:
- 基础层:MMLU-Pro(知识面)+ AIME(推理)+ LiveCodeBench(代码),这三样覆盖通用能力的基本盘。
- 专业层:如果你是做法律、医疗、金融的,找对应的垂直 Benchmark,比如 LegalBench、MedQA、FinBen;如果没有专门 Benchmark,就用自己业务里的真实问题和标注做一套小评测集。
- 实战层:最终必须要有人测。拉一批有代表性的业务问题,让模型真实跑一遍流程,看输出质量、看延迟、看失败模式。
提示:永远不要只看一个 Benchmark 的分数就拍板选型。分数只能排除明显不行的模型,不能证明谁一定更好。最终判断一定要结合主观看效果。
7.2 实操配置:一套可复现的本地评测流程
很多朋友问我自己怎么搭一套快速评测流程,我分享一个低成本方案:
- 选定 2-3 个核心 Benchmark(建议 MMLU-Pro + AIME + 一个领域集)。
- 用 Hugging Face 的
lm-evaluation-harness这个开源框架来跑,它自带大量任务模板,省的自己写 Prompt 和解析逻辑。 - 固定模型推理参数:
temperature=0(贪心解码)、max_new_tokens设置足够大(比如 2048),保证输出不全。 - 跑完之后,除了看总准确率,一定要单独看每个子学科的分数,观察模型的薄弱项。
这里分享一个自己踩过的坑:刚开始用 lm-evaluation-harness 跑 MMLU 时,发现分数比官方报告低很多。排查下来是我用的 Prompt 模板让它直接输出选项而不是完整句子,结果出题格式不匹配。后面我把模板改成官方一致的 few-shot 格式,分数才对得上。评测这种东西,差之毫厘谬以千里,模板、批次大小、随机种子都会影响结果,必须逐一固定。
8. 写在评测之外的一点个人体会
研究 Benchmark 这几年,我最大的体会是:评测这件事,本质是在跟模型的“应试能力”赛跑。模型越强,考题就得越难;考题越难,评测成本就越高;成本越高,各家就越不愿意透明地晒出完整评测细节。这个循环短期内无解。
但反过来说,这也是大模型领域最有魅力的地方之一。正因为没有一个完美的考试,所以每个阶段都会涌现新的 Benchmark、新的评测思路,从纯选择题到代码实测、从单轮问答到多轮 Agent 任务、从静态题库到动态更新。这个领域还在快速演进,现在你觉得权威的 MMLU,可能过两年就跟当年的 ImageNet 一样,变成一个仅供回忆的里程碑。
我的个人建议是:看评测分数时保持一点“新闻素养”。先问这套题新不新、评分规则靠不靠谱、分数跟谁比、有没有人类基线,然后再决定要不要为那个数字激动。比追逐排名更重要的是理解模型能力的真实边界——而这恰恰需要回到 Dataset、Rubric 和 Metric 这三个基础零件上,把每一层都拆明白,你才能真正读懂任何一个 Benchmark 报告背后的信息量。
最后再分享一个实操小技巧:如果你也经常需要复现论文或开源模型报告的分数,建议从一开始就用脚本化管理评测环境——把数据集版本、模型版本、Prompt 模板、推理参数、评测工具版本全记录下来。我自己就是靠这份评测日志,避免了好几次“分数对不上”的尴尬,也让我能在模型更新后快速定位能力变化到底来自哪里。