LECTURE 12

评测:把「好」变成一个数字

给定一个模型,它到底有多「好」?这一讲讲清楚:困惑度为什么既是全部又不够、多选题基准怎么被刷爆、开放生成怎么评、人类偏好怎么拟合成 Elo、Agent 任务怎么打分,以及为什么「训练集里混进了测试集」正在腐蚀整个领域的可信度。

讲师:Percy Liang 日期:2026-05-06 原始材料:lecture_12.py

0. 本讲导读

到上一讲为止,这门课已经把训练一个语言模型所需要的一切讲完了:分词与架构(Lecture 2–4)、训练与优化(Lecture 5)、GPU 与内核(Lecture 6)、并行化(Lecture 7–8)、推理(Lecture 9)、缩放定律(Lecture 10–11)。

还缺一块拼图:你到底拿什么数据去训练?

数据决定模型的行为——喂代码它就会写代码,喂多语言它就会翻译,喂 DNA 序列它就会建模基因组。但 Percy 在开场特意把数据这一讲往后推了一节,先讲评测,理由很直接:

为什么先讲评测再讲数据

在讨论「训练什么数据」之前,你必须先说清楚「你想要模型具备什么行为」。数据是手段,行为是目的,而评测就是把「想要的行为」写成可测量形式的那一步。没有评测,「数据配比调优」这句话本身就没有意义——你连往哪个方向调都不知道。

于是本讲的核心问题只有一句话:

给定一个模型,它有多「好」(good)?

表面上,评测像一套机械流程:

  1. 定义一批提示(prompts);
  2. 把提示喂给模型,拿回响应(responses);
  3. 算准确率。

但 Percy 的判断是:评测是一个远比它看起来更深、也更重要的话题——因为评测塑造了整个 AI 领域的发展方向。你度量什么,研究者就优化什么;你度量错了,整个领域就会花几年时间往错误的方向狂奔。在一个每年烧掉几百亿美元算力的领域里,评测是那个决定这些算力往哪儿流的方向盘。

核心结论(本讲的三条 takeaway)
  • 不存在唯一正确的评测(there is no one true evaluation)。选哪个评测,取决于你想回答什么问题——是要做采购决策、要测原始智能、要评估风险,还是要给模型开发做反馈信号。
  • 必须明确游戏规则:你是在评方法(method,固定数据比算法)、评模型(model,随便你怎么训)、还是评agent(模型 + 脚手架)?三者不可混为一谈。
  • 三个横切维度贯穿所有评测:难度(difficulty)、真实性(realism / 生态效度)、有效性(validity,尤其是训练-测试重叠)。

本讲的结构是:先用六类基准把「评什么」的地图铺开(困惑度 → 考试题 → 对话 → Agent → 纯推理 → 安全),再回过头用真实性和有效性两把尺子去审视它们,最后回答「评测究竟是为了回答什么问题」。

1. 「好」到底是什么:抽象构念 → 具体指标

整个评测领域的根本困难,Percy 用一行字概括:

抽象构念(abstract construct)  →  具体指标(concrete metric)

这是从心理测量学(psychometrics)借来的术语。「智力」「健康」「经济繁荣」都是构念:它们在概念上真实存在、我们都知道自己在说什么,但都无法直接观测。你只能设计一个可观测的代理量:IQ 测验、血压计读数、GDP。而构念与指标之间永远有缝隙——GDP 不等于繁荣,IQ 不等于智力。评测研究做的事,就是不断缩小这条缝、并且诚实地报告缝还有多大。

「模型好不好」正是这样一个构念。Percy 依次给出四种把它落成指标的方式,每一种都对应现实中一个真实存在的排行榜。

1.1 好 = 在基准上分数高

Artificial Analysis 网站的模型智能排行榜,把多个基准聚合成一个 Intelligence Index 分数,各家前沿模型按分数排序。
Artificial Analysis 的做法:把 MMLU-Pro、GPQA、HLE、AIME、SWE-Bench 等一堆基准的分数加权平均成一个「智能指数」,再把所有模型排成一列。这是今天最主流的「好」的操作化定义——它的好处是可复现、可自动化;代价是把多维能力压成一个标量,且完全依赖于所选基准集合的代表性。

1.2 好 = 分数高而且便宜

以每百万 token 价格为横轴、智能指数为纵轴的散点图,前沿模型形成一条帕累托前沿,右上角是最强最贵的模型,左上角是性价比最优的模型。
把成本作为第二个轴,问题立刻从「谁最强」变成「帕累托前沿(Pareto frontier)上有谁」。对真正要把模型放进产品里的人来说,这张图比上一张有用得多:一个便宜 20 倍、分数低 3 分的模型,在客服场景里往往是更优解。注意这条前沿一直在向左上方移动——同等能力的价格大约每年降一个数量级。

1.3 好 = 人们更喜欢它的回答

Arena(原 Chatbot Arena)排行榜截图,按 Elo 分数从高到低排列各家模型,并给出置信区间和投票数。
Arena AI(原 Chatbot Arena):不定义任何正确答案,直接让真人在两个匿名模型的回答之间二选一,再把成千上万次两两比较拟合成 Elo 分数。这条路线放弃了「客观正确」,换来了「真实偏好」——第 6 节会把它的数学完整推一遍。

1.4 好 = 人们真的选它、并且愿意付钱

OpenRouter 的模型使用量排行,按各模型在平台上被消耗的 token 数排序,反映真实付费流量的分布。
OpenRouter 直接统计平台上真实消耗的 token 份额。这是用脚投票:没有人在这里为了刷榜而调用 API,每一个 token 都是有人付了钱的。它的缺陷同样明显——严重受价格、可用性、生态惯性、默认配置影响,而且完全无法告诉你模型在某个具体能力上强弱。
常见误区

「哪个指标是对的?」——这个问题本身问错了。上面四个指标度量的是四个不同的构念:基准分数 ≈ 受控条件下的能力上限;分数/成本 ≈ 工程经济性;人类偏好 ≈ 交互体验(含风格);使用量 ≈ 市场结果。它们互相之间会给出不同的排序,而且这不是 bug。正确的做法是先问「我要做什么决策」,再挑指标。

2. 评测的坐标系:六类基准 + 三把尺子

在钻进具体基准之前,先把整张地图摆出来。Percy 这一讲的主体是六类评测,它们大致按照「离真实使用有多远」排列——同时也大致是这个领域历史演进的顺序。

类别评什么代表基准打分方式主要弱点
困惑度
perplexity
模型对真实文本分配概率的能力PTB、WikiText-103、1BW$\left(1/p(D)\right)^{1/|D|}$依赖 tokenizer,跨模型不可比;与下游能力不是一一对应
考试题
exams
知识 + 受控难度的推理MMLU、MMLU-Pro、GPQA、HLE多选/短答,精确匹配与真实使用相去甚远;容易饱和;容易被污染
对话
chat
开放式响应的质量与有用性Chatbot Arena、AlpacaEval、WildBench人类或 LLM 做两两比较没有标准答案;风格与正确性混淆;评委有偏
Agent
agentic
模型做成了什么(工具使用、多轮迭代)SWE-Bench、Terminal-Bench、Cybench、MLE-Bench单元测试 / 环境自动判定评的是「脚手架 + 模型」的组合;环境搭建昂贵
纯推理
pure reasoning
剥离知识后的抽象推理ARC-AGI-1/2/3网格输出精确匹配 / 交互得分「剥离知识」极难做到;只覆盖人类式推理
安全
safety
有害行为、越狱鲁棒性、合规HarmBench、AIR-Bench、GCG分类器判定是否越界强烈依赖语境(法律、政治、社会规范因国而异)

然后是三把横切的尺子。它们不是基准类别,而是审视任何一个基准时都要问的问题:

  • 难度(difficulty):题目够不够难?模型一旦刷到 90%+,这个基准就饱和(saturated)了,再也无法区分前沿模型——这直接解释了 MMLU → MMLU-Pro → GPQA → HLE 这条不断加难的演化链。
  • 真实性(realism / ecological validity):这个评测和人们真实使用模型的方式有多接近?GPQA 的博士级化学题很难,但没有任何用户会那样提问。见第 11 节。
  • 有效性(validity):这个分数可信吗?如果测试题早就出现在预训练语料里,分数只是在度量记忆。见第 7 节。
注意:难度 ≠ 有价值

把题目做难是最容易的一件事——你总能找到人类专家都答不上来的题。但难度只解决「区分度」问题,不解决「相关性」问题。一个 100% 无法被当前模型解决、同时也和任何人的实际需求无关的基准,是没有价值的。难度、真实性、有效性必须同时成立,而这三者往往互相拉扯:越真实的任务越难自动打分,越难自动打分的任务越难保证有效性。

最后还有一个常被忽略、但 Percy 在结尾专门强调的维度:游戏规则。同一个基准,在「固定训练数据、只比算法」和「随便你用什么数据训、只比最终模型」两种规则下,含义完全不同。这个问题留到第 12 节。

3. 困惑度:既是全部,又不够

回忆最基本的定义:语言模型就是 token 序列上的一个概率分布 $p(x)$。困惑度(perplexity)度量的是 $p$ 有没有给某个数据集 $D$ 分配高概率:

$$ \text{ppl}(D) \;=\; \left(\frac{1}{p(D)}\right)^{1/|D|} \;=\; \left(\prod_{i=1}^{|D|}\frac{1}{p(x_i \mid x_{<i})}\right)^{1/|D|} \;=\; \exp\!\left(-\frac{1}{|D|}\sum_{i=1}^{|D|}\log p(x_i \mid x_{<i})\right) $$

也就是「平均负对数似然」取指数。它有一个非常干净的直觉解释:困惑度 = 模型在每一步平均感到「有多少个等可能的选项」。ppl = 1 表示完全确定;ppl = 50000 表示模型等于在整个词表上瞎猜。

预训练时你最小化的就是训练集上的困惑度(等价地,交叉熵损失)。那么最自然的评测就是:在测试集上测困惑度。传统语言建模研究几十年来做的就是这件事。

3.1 经典范式:分布内评测

标准数据集有三个:

  • Penn Treebank(PTB)——《华尔街日报》语料,约 100 万词,小到今天看来像玩具;
  • WikiText-103——维基百科,约 1 亿词;
  • One Billion Word Benchmark(1BW)——来自机器翻译评测 WMT11 的语料(EuroParl、联合国文件、新闻)。

经典范式是分布内评测(in-distribution evaluation):在某个数据集的 train split 上训练,在同一数据集的 test split 上评测。在这个范式下,纯 CNN+LSTM 的模型把 1BW 的困惑度从 51.3 推到了 30.0(Jozefowicz et al., 2016)——这是 Transformer 之前语言建模的最高水位线。

3.2 GPT-2 的范式转换:分布外零样本

GPT-2 做了一件当时很反直觉的事:它在 WebText(40GB 文本,来自 Reddit 上被链接过的网页)上训练,然后不做任何微调,直接在上面那些标准数据集上测困惑度——这是分布外(out-of-distribution)零样本评测。

GPT-2 论文的表格:四种规模的 GPT-2 在 LAMBADA、CBT、WikiText-2、PTB、enwik8、text8、WikiText-103、1BW 上的零样本结果,多数数据集上刷新了 SOTA,但 1BW 上明显落后。
GPT-2 的零样本困惑度结果。随参数量增大(117M → 1.5B),几乎所有数据集上的困惑度单调下降,并在 PTB、WikiText、enwik8 等多个数据集上超过了专门在这些数据上训练的模型。唯一的例外是 1BW——那里的 SOTA 仍然遥遥领先。

Percy 点出了这个例外的原因:在小数据集(PTB)上,从大规模网页语料迁移过来的知识很有帮助;但在大数据集(1BW)上就不行了——1BW 本身的训练集已经足够大,专门训练的模型能直接拟合它的分布(新闻体裁、句子被打散且独立同分布),而 GPT-2 的通用先验反而是负担。这是「预训练迁移」价值随目标数据量增大而衰减的一个早期实证。

3.3 「困惑度就是你需要的一切」——信仰多于科学

推导:为什么有人相信压困惑度就能通向 AGI

设真实分布为 $t$,模型为 $p$。测试集困惑度的期望是

$$ \E_{x\sim t}\left[-\log p(x)\right] \;=\; H(t) + \KL(t \,\|\, p) \;\ge\; H(t), $$

等号当且仅当 $p = t$。也就是说,最优可达困惑度是真实分布的熵 $H(t)$,且唯一的达成方式是模型完全等于真实分布。

而如果 $p = t$,那么对任何任务,你都可以直接读出答案:

$$ p(\text{solution} \mid \text{problem}) = t(\text{solution}\mid \text{problem}). $$

问题和解答都是文本,条件概率就在模型里。所以——只要不断把困惑度往下压,我们最终就会「到达 AGI」。

Percy 对这个论证的评价是:more faith than science(信仰多于科学)。逻辑本身没错,但它是一个极限陈述,对「还差多远」「下降 0.01 nats 换来多少下游能力」一言不发。而实践中我们永远达不到 $p=t$。

3.4 困惑度可能比你需要的更多

反方向的问题同样存在。看这个句子:

Stanford was founded in 1885.

困惑度会惩罚每一个 token 的预测,包括 founded 这个词。但你真正关心的是模型知不知道 1885——至于这句话用 founded、established 还是 created,纯属文体选择,预测不准并不代表模型无知。困惑度把「知识」和「文体」混在同一个数里。

补救办法是改测条件困惑度,只在响应上求平均:

$$ \text{ppl}(\text{response} \mid \text{prompt}) \;=\; p(\text{response}\mid\text{prompt})^{-1/|\text{response}|} $$

这样 prompt 部分的 token 只作为条件、不计入损失。这也是所有指令微调训练里的标准做法(loss masking)。

3.5 致命问题:困惑度依赖 tokenizer,跨模型不可比

注意

公式里的 $|D|$ 是 token 数。同一段文本,用不同 tokenizer 切出来的 token 数不同,困惑度的分母就不同——两个用不同 tokenizer 的模型,困惑度数值根本不能直接比较。

而且方向是反直觉的:tokenizer 压缩率越高(每个 token 覆盖越多字节),困惑度看起来越差,因为每个 token 携带的信息更多、更难预测。一个把整个句子当作一个 token 的极端 tokenizer 会有天文数字的困惑度,但它并不比别人差。

标准解法是换成一个与分词无关的量:bits-per-byte(BPB)。把总的负对数似然换算成比特,再除以原始文本的字节数而不是 token 数:

$$ \text{BPB}(D) \;=\; \frac{1}{N_{\text{bytes}}}\sum_{i=1}^{N_{\text{tok}}} -\log_2 p(x_i\mid x_{<i}) \;=\; \frac{N_{\text{tok}}}{N_{\text{bytes}}}\cdot \log_2 \text{ppl}(D) $$

分子是「模型编码这段文本需要多少比特」,分母是文本的物理长度——两者都与分词方案无关,于是 BPB 是可比的。它同时也是一个无损压缩率:BPB = 0.8 意味着这个模型作为算术编码器能把文本压到原大小的 10%($0.8/8$)。

数值例子

模型 A 的 tokenizer 平均 4.0 bytes/token,测得 ppl = 10.0:

$$\text{BPB}_A = \frac{1}{4.0}\log_2 10.0 = \frac{3.32}{4.0} = 0.83$$

模型 B 的 tokenizer 更「碎」,平均 3.0 bytes/token,测得 ppl = 6.5:

$$\text{BPB}_B = \frac{1}{3.0}\log_2 6.5 = \frac{2.70}{3.0} = 0.90$$

光看困惑度,B(6.5)「远好于」A(10.0);换成 BPB,A 反而更好。这就是为什么现代的预训练缩放定律工作(如 Chinchilla 之后的复现、DCLM 的数据评测)几乎都报告 BPB 而不是 perplexity。

3.6 有些基准其实是伪装的困惑度

很多看起来是「任务」的基准,本质上只是在算条件概率并取 argmax,模型一个字都不用生成:

LAMBADA 数据集的样例:一段几句话的叙事文本,最后一句缺最后一个词,只有读懂整段上下文才能填出来。
完形填空(cloze)任务:LAMBADA。刻意构造成「只看最后一句话猜不出、必须读完整段才能填对」的形式,用来测长程上下文理解。评分就是看模型给正确词的概率是否最高——纯粹的条件困惑度。
HellaSwag 的样例:给出一个情境描述的开头,四个候选续写,其中一个是真实续写,其余三个由语言模型生成并经过对抗筛选,读起来都通顺但常识上荒谬。
多选句子补全:HellaSwag。四个续写候选里选一个,评分方式是比较 $\log p(\text{候选}\mid\text{上文})$。它的干扰项由语言模型生成再经过对抗过滤(adversarial filtering)——专门保留那些当时的模型分不清、但人类一眼看出荒谬的选项,所以人类准确率 95%+ 而早期模型只有 50% 左右。

3.7 如果你要办一个困惑度排行榜

常见误区:概率可以作弊

困惑度排行榜的运作方式是:参赛者提交一个 LM,你运行 log_prob = LM(test_data) 拿到分数。这里有一个隐含的信任假设:你必须相信这些概率是合法的(在整个 token 空间上求和为 1)。如果参赛者返回的是未归一化的分数、或者对测试集里出现的 token 偷偷加权,困惑度可以被任意压低而无法从外部检测。

相比之下,下游任务评测的接口是 response = LM(prompt),然后对 response 算准确率——只依赖模型的输出行为,不依赖模型自报的概率,因此天然更难作弊。这是一个被低估的、支持下游基准的理由。

小结:困惑度在语言模型开发中仍然被大量使用,核心原因是它平滑——缩放定律(Lecture 10–11)之所以能画出漂亮的直线,靠的正是困惑度这种连续、无阈值、低方差的指标;而准确率是阶跃的、噪声大的,小模型上常年贴着随机基线,根本拟合不出趋势。但对于「不信教的人」,你仍然需要能反映真实场景的基准。

4. 考试型基准:MMLU 到 HLE 的军备竞赛

考试是测试语言模型的一种有用方式,原因和它对人类有用是同一个:

  • 你能控制学科和难度——想测化学就出化学题,想加难就出研究生题;
  • 可以设计成有唯一正确答案,因此容易打分——不需要人来判卷,字符串比对就行。

4.1 MMLU:知识的广度测验

Massive Multitask Language Understanding(MMLU)(Hendrycks et al., 2021)是这一类基准的奠基者:

  • 57 个学科:数学、美国历史、法律、道德、临床医学、计算机安全……全部为四选一的多选题;
  • 题目「由研究生和本科生从网上免费可得的来源收集」——注意这句话,它在第 7 节讲数据污染时会变成一颗定时炸弹:题目本来就来自公开网页;
  • 原论文用 GPT-3 以 few-shot 提示(标准是 5-shot)评测。
直觉:MMLU 其实名不副实

Percy 特别指出:尽管名字里写着 "Language Understanding",MMLU 真正测的是知识,不是语言理解。一道「以下哪种抗生素抑制细胞壁合成」的题,语言部分毫无难度,难的是你记不记得。这解释了为什么 MMLU 分数和预训练数据量/质量高度相关,而和架构改进关系不大——它基本是一个记忆容量的探针。

MMLU 论文中的示例题目:涵盖抽象代数、解剖学、天文学、商业伦理等学科的四选一题,展示了从高中到专业级的难度跨度。
MMLU 的题目样例,覆盖从高中到专业执照考试的难度跨度。可在 HELM 的 MMLU 页面逐题查看模型的实际预测——这一点很重要,「只看聚合分数不看具体预测」是评测中最常见的失职。当前各模型分数见 llm-stats。

4.2 打分方式:一个被严重低估的自由度

「四选一,算准确率」听起来毫无歧义。实际上至少有四种打分方式,它们在同一个模型上能差出十几个百分点,甚至会改变排行榜的顺序。

打分方式怎么算问题
① 选项文本对数概率$\argmax_c \log p(\text{text}_c \mid \text{question})$长度偏置:短选项天然概率高
② 长度归一化$\argmax_c \frac{1}{|c|}\log p(\text{text}_c\mid\text{question})$过度补偿,偏向长而平庸的选项
③ 无条件归一化(PMI)$\argmax_c \log \frac{p(\text{text}_c\mid \text{question})}{p(\text{text}_c\mid \text{"Answer:"})}$需要两次前向;对 prompt 模板敏感
④ 字母 / 自由生成比较 $p(\texttt{"A"}),\dots,p(\texttt{"D"})$,或直接生成后解析要求模型会「按格式回答」,小模型/基座模型会崩
import torch

def score_choice(model, tok, question, choice, normalize="none"):
    """返回一个候选选项的得分。不同 normalize 会给出不同的排名。"""
    prompt_ids = tok(question, return_tensors="pt").input_ids
    full_ids   = tok(question + choice, return_tensors="pt").input_ids
    n_prompt   = prompt_ids.shape[1]

    logits = model(full_ids).logits[:, :-1]            # 预测下一个 token
    logp   = torch.log_softmax(logits, dim=-1)
    tgt    = full_ids[:, 1:]
    tok_lp = logp.gather(-1, tgt.unsqueeze(-1)).squeeze(-1)   # [1, L-1]

    ans_lp = tok_lp[:, n_prompt - 1:]                  # 只保留选项部分
    total  = ans_lp.sum().item()
    if normalize == "none":
        return total                                   # ① 有长度偏置
    if normalize == "token":
        return total / ans_lp.shape[1]                 # ② 按 token 数归一化
    if normalize == "unconditional":
        base = score_choice(model, tok, "Answer:", choice)
        return total - base                            # ③ PMI 风格
常见误区:把不同 harness 的分数放在一张表里比

你在论文 A 里看到的 68.2 和论文 B 里看到的 71.5,很可能用的不是同一种打分方式,甚至不是同一套 prompt 模板、不是同样的 few-shot 例子数量、不是同样的选项排列顺序。已知的敏感性来源包括:

  • 选项顺序:把正确答案从 A 换到 D,分数会变——模型对字母位置有先验偏好;
  • few-shot 数量与示例选择:0-shot 与 5-shot 差距可以很大,尤其对未做指令微调的基座模型;
  • 模板细节:有没有 Answer:、有没有学科名前缀、换行符怎么打。

这正是 HELM 之类工作坚持「统一 prompt 模板、统一打分方式、公开每一条预测」的原因(第 10 节)。你自己复现一个基准时,务必对齐 harness,否则你会花一周时间调试一个根本不存在的性能差距。

4.3 MMLU-Pro:把饱和的基准修好

到 2024 年,前沿模型在 MMLU 上都挤在 86–90% 这个区间,噪声和真实差距同量级——基准饱和(saturated)了。MMLU-Pro 做了三处改动:

  1. 删掉噪声题和 trivial 题(MMLU 里确实存在标注错误和答案自明的题);
  2. 把 4 个选项扩到 10 个选项——随机基线从 25% 降到 10%,同时大幅降低「猜对」的贡献;
  3. 用思维链(chain-of-thought)评测,给模型更多发挥空间(这是有意为之:目的是测能力上限,而不是测模型能不能一步猜出来)。

结果是模型准确率下降了 16 到 33 个百分点,基准重新获得了区分度。

MMLU-Pro 论文的结果表:各模型在 MMLU 与 MMLU-Pro 上的准确率对比,MMLU 上分数密集聚集在高位,MMLU-Pro 上分数显著下降且拉开差距。
同一批模型在 MMLU 与 MMLU-Pro 上的对比。左边一列挤在一起、右边一列拉开——这就是「修复饱和」的直观效果。HELM 上可以逐题查看预测。

4.4 GPQA:Google 都搜不到的研究生题

GPQA(Graduate-Level Google-Proof Q&A)换了一条路:不靠数量,靠题目本身的稀缺性。题目由 61 位在 Upwork 上雇来的 PhD 撰写(生物、物理、化学),并且经过一套精心设计的验证流程。

GPQA 的三个基线数字(记住它们)
  • 同领域 PhD 专家:65% —— 这是「人类专家水平」的锚点;
  • 非专家 + 30 分钟不限次 Google 搜索:34% —— 这就是 "Google-Proof" 的操作化定义:能搜到就不算好题;
  • GPT-4(论文发表时):39% —— 略高于会上网的外行,远低于专家。

「非专家 34%」这个设计非常聪明:它把「难度」这个模糊概念变成了一个可测量的、有对照组的量。此后所有严肃的难基准都会报告类似的人类基线。

GPQA 的样例题目:一道有机化学题,题干包含反应条件与中间体,四个选项都是结构相近的化合物名称,需要专业训练才能判断。
GPQA 的典型题目。注意干扰项都是「看起来很合理」的同类物——这类题无法靠关键词匹配蒙对,必须真的走一遍推理链。HELM 版本可查看逐题预测,llm-stats 有最新排名。

4.5 Humanity's Last Exam:出到没题可出

当 GPQA 也被推理模型刷到 80%+ 之后,Humanity's Last Exam(HLE)把这条路线推到了极致:2500 道题,多模态,覆盖极多学科,多选题 + 简答题混合。

HLE 的样例题:包含古希腊铭文释读、蜂鸟解剖学、复杂组合数学证明等极端专业的问题,部分题目附带图像。
HLE 的题目样例。难度已经到了「每道题只有全球少数几十人能答」的程度:古典学铭文、蜂鸟骨骼计数、抽象代数构造。这类题目的存在本身回答了一个问题——多选/简答这种格式,其难度上限几乎没有天花板。

更有意思的是它的数据采集机制设计,这是评测工程里少见的、把激励机制做对了的案例:

  • 50 万美元奖金池 + 论文共同作者身份发给出题人——用真金白银和学术信用去买稀缺的专家时间;
  • 用前沿 LLM 做第一道过滤:如果当时最强的几个模型都能答对,这道题直接淘汰。这保证了基准在发布当天就是「未饱和」的;
  • 随后是多阶段人工评审,剔除有歧义、答案有争议、或者其实能搜到的题。
HLE 的数据构建流水线示意:专家投稿 → 前沿模型自动过滤(模型答对则淘汰)→ 多轮人工同行评审 → 入库,附带公开集与私有集的划分。
HLE 的构建流水线。「用模型过滤题目」这一步是把双刃剑:它保证了初始难度,但也意味着基准被系统性地塑造成了当前模型的弱点集合——它测的是「当前模型不会什么」,未必等于「什么最重要」。
HLE 的模型结果柱状图:主流前沿模型准确率普遍在个位数到十几个百分点,同时校准误差很高,说明模型对错误答案也很自信。
HLE 发布时的模型成绩:准确率普遍是个位数。论文同时报告了校准误差(calibration error)——模型不仅答不对,还对自己的错误答案高度自信,这在实际应用中比单纯答错更危险。最新排名见 llm-stats。
这一节的小结
  • 趋势是题目越来越难:模型不断进步、把已有基准刷饱和,逼着评测方不断加码(MMLU → MMLU-Pro → GPQA → HLE)。
  • 多选格式的难度可以任意高——它不是「简单题专用格式」,HLE 证明了这一点。
  • 但它捕捉不到真实使用:真实的提问是开放式的,而且往往根本不存在唯一正确答案。下一节就从这里开始。

5. 开放生成怎么评:从 n-gram 指标到 LLM-as-a-judge

到目前为止我们评的都是定义良好的多选任务。但 Percy 提醒:大多数人不会拿多选题去问自己的 AI 助手。真实的对话长这样:

Prompt:I would like to make a beet salad with goat cheese. What kind of herbs would work well and what would not work well?(我想做一道甜菜根配山羊奶酪的沙拉。哪些香草搭配得好,哪些不好?)

Response:Here's a breakdown of herbs that work well (and some that don't) in a beet + goat cheese salad, based on how their flavors interact with the sweet-earthiness of beets and the tangy creaminess of goat cheese...

这里没有标准答案。挑战:如何评价一个开放式响应?

5.1 为什么 n-gram 重叠指标彻底失效

机器翻译和摘要领域的传统答案是 BLEU / ROUGE:准备一份参考答案,计算模型输出与它的 n-gram 重叠。这套方法在开放生成上崩得很彻底,原因有三层:

  1. 好答案的空间是无穷的。「莳萝、薄荷、龙蒿都不错,迷迭香会盖过味道」和「避免使用木质香草如迷迭香,选择清爽的莳萝或薄荷」是同一个答案,n-gram 重叠却接近零。参考答案数量再多也覆盖不了。
  2. 词面重叠与质量无关。一个把参考答案打乱重组的胡言乱语可以拿到很高的 BLEU;一个更好的、结构不同的答案可以拿到很低的 BLEU。
  3. 维度太多。用户关心的是正确性、有用性、组织结构、语气、长度是否合适——这些没有任何一个能被 n-gram 覆盖。

于是这个领域走向了两条路:让人来评(第 6 节的 Chatbot Arena),和让另一个语言模型来评(LLM-as-a-judge)。后者的动机很实际:人类评测每条几美元、几天出结果,而模型开发需要每天迭代。

5.2 AlpacaEval:把「好」定义成对基线的胜率

AlpacaEval(2023,来自本课另一位讲师 Tatsu 的组)的设计非常精简:

  • 805 条指令,来自多个来源,覆盖典型的助手使用场景;
  • 指标是「对基线模型的胜率(win rate)」:基线固定为 GPT-4 preview,评委也是 GPT-4 preview;
  • 对每条指令,把待测模型和基线的两个回答给评委,问哪个更好;胜率就是最终分数。
注意:评委就是基线,这本身是个偏差源

用 GPT-4 去评判「GPT-4 的回答 vs 你的回答」,存在明显的自我偏好(self-preference)风险:LLM 评委倾向于偏好和自己风格相近的输出。这在实践中会系统性地压低风格迥异的模型的分数。

5.3 长度偏置与「刷榜」

AlpacaEval 暴露出的最著名问题是:LLM 评委偏好更长的回答。这直接导致了排行榜被博弈——你只要让模型多写几段、多加几个 bullet、多来一句总结,胜率就能上去,而实际有用性并没有提升。

AlpacaEval 2.0 的解法是用回归把长度这个混淆变量除掉,得到「长度受控胜率(length-controlled win rate)」。思路是拟合一个广义线性模型,把「模型身份」和「长度差」分开:

$$ \mathrm{logit}\;\Pr(\text{模型 } m \text{ 胜}) \;=\; \underbrace{\theta_m}_{\text{模型本身的质量}} \;+\; \underbrace{\gamma_m \cdot \phi(\Delta \text{len})}_{\text{长度带来的加成}} \;+\; \underbrace{\psi_m \cdot \delta_{\text{instr}}}_{\text{指令难度}} $$

其中 $\phi(\Delta\text{len})$ 是对「待测回答与基线回答的长度差」做的一个有界变换(论文用 $\tanh$ 之类的压缩,避免极端值主导)。拟合完之后,把长度项强行置零再算胜率——相当于问「如果两个回答一样长,你还会赢吗」。

直觉:这是因果推断里的「控制混淆变量」

长度既影响评委判断,也和模型身份相关,是典型的混淆变量(confounder)。你不能简单地把长回答删短(那会破坏内容),但你可以在统计模型里把它的贡献分离出来再剔除。同样的技巧后来被 Chatbot Arena 采纳,用来做「风格控制(style control)」——除了长度,还控制 markdown 标题数、列表数、加粗数量。

5.4 除了长度,还有位置偏置

另一个必须处理的系统性偏差是位置偏置(position bias):把同样两个回答交换 A/B 顺序,LLM 评委相当一部分情况下会改变判断——它对「第一个出现的」或「第二个出现的」有偏好。标准补救是双向评测:

def judge_pair(judge, prompt, resp_a, resp_b):
    """两个方向各评一次,消掉位置偏置。返回 A 的得分 in {0, 0.5, 1}。"""
    v1 = judge(prompt, first=resp_a, second=resp_b)   # 返回 "first" / "second"
    v2 = judge(prompt, first=resp_b, second=resp_a)   # 顺序反过来

    a_wins = (v1 == "first") + (v2 == "second")
    b_wins = (v1 == "second") + (v2 == "first")
    if a_wins == b_wins:
        return 0.5          # 两次判断不一致 -> 记平局(这本身是有用的信号)
    return 1.0 if a_wins > b_wins else 0.0

顺带一提,「两个方向判断不一致的比例」是一个很好的评委可靠性诊断量:如果它超过 20–30%,说明你的评委在这类任务上基本是在掷硬币。

5.5 怎么评价一个评测指标?

Percy 在这里抛出一个关键的元问题:How do we evaluate the metric?(我们怎么评价这个指标本身?)

答案是:看它和人类判断的相关性。AlpacaEval 论文报告的正是它与 Chatbot Arena(真人投票)的排名相关性——而且相关性很高。这确立了一个此后被广泛沿用的范式:

AlpacaEval 排行榜截图:各模型按长度受控胜率排序,同时显示原始胜率和平均输出长度。
AlpacaEval 排行榜。同时展示长度受控胜率与原始胜率和平均输出长度——把去偏前后的数字并排放出来,让读者自己看到长度的影响有多大,这是一种值得学习的报告规范。
自动评测的验证链条

人类偏好(Chatbot Arena)→ 作为「金标准」→ 用来验证自动评委(AlpacaEval / WildBench)→ 自动评委因为便宜快速而被用于日常迭代。

注意这条链条的脆弱之处:金标准本身有偏(第 6 节会讲 Arena 的问题),而自动评委被优化去拟合这个有偏的金标准,于是偏差被固化并放大。这也是为什么 Percy 反复强调「没有唯一正确的评测」——你必须知道自己站在哪条验证链上。

5.6 WildBench:真实分布 + 检查清单

WildBench 在两个方向上做了改进:

  • 更真实的 prompt 分布:从 100 万条真实人机对话中筛出 1024 个样例,而不是人工编写指令。这直接提升了生态效度(第 11 节);
  • 带检查清单的评判:用 GPT-4-turbo 作评委,但先为每道题生成一份checklist(这道题的好答案应该满足哪几条),再逐条核对。这相当于评判版的思维链——先把评价标准显式写出来,再打分,而不是让评委凭「感觉」直接给一个数。
WildBench 的流程与结果示意:从百万级真实对话中采样任务,为每个任务生成检查清单,用 GPT-4-turbo 按清单逐条评判,并给出与 Chatbot Arena 的相关性。
WildBench 的评判流程。它与 Chatbot Arena 的相关性很好——「与 Arena 的相关性」已经成了这个领域事实上的 sanity check:任何新的自动评测发布时,几乎都要报告这个数字。HELM 版本可查看逐条评判。
这一节的小结
  • 开放式响应的评测核心难题:没有唯一正确答案,词面匹配类指标全部失效。
  • 两两比较(pairwise comparison)比绝对打分提供更高的信号——尤其当两个回答质量接近时,人和模型都更擅长说「哪个更好」而不是「打几分」。
  • 当心偏差:长度偏置、位置偏置、自我偏好、讨好倾向——人类评委和 LLM 评委都有。
  • 检查清单 / 评分细则(rubric)能显著提升可靠性,无论评委是人还是模型。这是本节最可迁移的实践建议。

6. 人类偏好:Chatbot Arena 与 Bradley–Terry / Elo

Chatbot Arena(现在叫 Arena AI)是目前影响力最大的人类偏好评测。它的数据采集流程简单到可以用三句话说完:

  1. 互联网上一个随机的人,输入一个 prompt;
  2. 他拿到两个随机的、匿名化的模型给出的回答;
  3. 他给出评价:哪个更好(或平局 / 都很差)。
Chatbot Arena 界面截图:用户输入甜菜根山羊奶酪沙拉的香草搭配问题,左右两栏分别是 Model A 和 Model B 的匿名回答,下方是「A 更好 / B 更好 / 平局 / 都很差」四个投票按钮。
Arena 的实际界面,用的正是前面那道甜菜根沙拉的题。模型名字被隐藏直到投票之后——这是防止品牌偏见的关键设计。用户免费获得两次高质量回答,作为交换提供一次偏好标注,激励结构自洽。

6.1 从两两比较到一个分数

现在你手上有几百万条形如「在 prompt $x$ 上,模型 $A$ 胜过模型 $B$」的记录。怎么变成一个排行榜?Percy 给出的模型是:

$$ \Pr(A \text{ beats } B) \;=\; \frac{1}{1 + 10^{(\mathrm{ELO}_B - \mathrm{ELO}_A)/400}} $$

然后拟合这个模型,使得观测到的两两比较结果的概率最大。这就是全部——但值得把它拆开看,因为这个公式的每一部分都有来历。

推导:Elo 就是 Bradley–Terry 换了个坐标

Bradley–Terry 模型假设每个选手 $i$ 有一个正的「强度」 $\pi_i > 0$,则

$$ \Pr(i \text{ beats } j) = \frac{\pi_i}{\pi_i + \pi_j}. $$

令 $\pi_i = e^{\beta_i}$,分子分母同除 $e^{\beta_j}$:

$$ \Pr(i \succ j) = \frac{e^{\beta_i}}{e^{\beta_i}+e^{\beta_j}} = \frac{1}{1+e^{-(\beta_i - \beta_j)}} = \sigma(\beta_i - \beta_j). $$

也就是说,胜率只依赖于两个隐含分数之差,且通过 logistic 函数联系。

Elo 公式只是把底数从 $e$ 换成 10、并把尺度乘上 400:

$$ \sigma\!\left(\frac{\ln 10}{400}(R_i - R_j)\right) = \frac{1}{1+10^{-(R_i-R_j)/400}}. $$

对照可得 $\beta = \dfrac{\ln 10}{400} R$,即 $R = \dfrac{400}{\ln 10}\beta \approx 173.7\,\beta$。400 分的差距对应 10 倍的胜率比(约 91% 胜率),这就是 Elo 那个魔法数字 400 的全部含义。

6.2 拟合:这其实是一个逻辑回归

给定 $N$ 条比较记录 $\{(w_n, l_n)\}$($w$ 胜 $l$ 败),最大似然等价于最小化

$$ \mathcal{L}(\beta) = -\sum_{n=1}^{N} \log \sigma\!\left(\beta_{w_n} - \beta_{l_n}\right) \;+\; \lambda\|\beta\|^2 $$

这是凸问题,而且形式上就是一个特征为「one-hot 差向量」的逻辑回归:第 $n$ 条样本的特征向量 $z_n \in \R^{M}$($M$ 为模型数)满足 $z_n[w_n]=1,\; z_n[l_n]=-1$,其余为 0,标签恒为 1。于是可以直接调库:

import numpy as np
from sklearn.linear_model import LogisticRegression

def fit_bt(battles, models):
    """battles: [(winner, loser), ...]  ->  {model: elo}"""
    idx = {m: i for i, m in enumerate(models)}
    X = np.zeros((len(battles), len(models)))
    for n, (w, l) in enumerate(battles):
        X[n, idx[w]] = +1.0
        X[n, idx[l]] = -1.0
    y = np.ones(len(battles))          # 每条样本都是「第一个赢」

    lr = LogisticRegression(fit_intercept=False, C=1.0)
    lr.fit(np.vstack([X, -X]), np.concatenate([y, 1 - y]))   # 加负样本保证可辨识
    beta = lr.coef_[0]
    beta -= beta.mean()                # 只有差有意义,固定一个零点
    elo = 400.0 / np.log(10) * beta + 1000.0
    return dict(zip(models, elo))
直觉:为什么不用经典的在线 Elo 更新

国际象棋里的 Elo 是在线增量的:$R \leftarrow R + K(S - \hat{S})$,每下完一局更新一次。它的设计目的是追踪随时间变化的棋手水平。但语言模型的水平在评测期间是固定的,在线更新只会引入对「比赛顺序」的依赖——同样一批数据换个顺序喂进去,排名会变。

所以 Arena 实际用的是上面这个批量最大似然(Bradley–Terry MLE),并用 bootstrap 重采样给出置信区间。排行榜上那些 $\pm 5$ 的误差棒就是这么来的——看排行榜时永远先看置信区间,相邻几名往往在统计上无法区分。

Arena 排行榜:模型按 Elo 分排列,每行给出分数、置信区间上下界、投票数、组织和许可证。
Arena 排行榜。注意排名(Rank)一列通常用的是「有多少模型在统计上显著优于它」,而不是简单按分数排序——这是对置信区间的正确处理方式。

6.3 Arena 的优点

  • 真实世界的 prompt:用户是来免费用模型的,他们输入的是自己真正想问的东西,动机真实。
  • 不需要把同一批 prompt 喂给所有模型。Percy 特别把这一点点出来当作一个 feature:因为打分的是人,你没法要求每个人把所有模型的回答都读一遍。Bradley–Terry 天然处理稀疏、不平衡的对战图——只要对战图是连通的,所有模型的相对分数就都可辨识。这是它相对于「固定测试集 × 所有模型」范式的巨大工程优势。
  • 动态:新 prompt 和新模型随时可以加入,不需要重跑历史。

6.4 Arena 的问题(Percy 逐条点名)

注意:这些偏差都是结构性的,不是实现 bug
  • 这些人是谁?投票者是自选样本(self-selected)——上网、懂英语、对 AI 感兴趣、有闲。他们的偏好未必代表企业采购者、医生、或者非英语用户。还有刷票者(spammers)和有组织的拉票问题。
  • 二元偏好混淆了风格与正确性。用户点的那一下同时包含了「更对」「更好看」「更长」「语气更讨喜」,你无法从一个比特里把它们分开。
  • 人类根本无法评估正确性。如果你问的是一道你不会做的题,你怎么判断哪个答案对?实际发生的是:你会选那个看起来更自信、更有条理的答案。
  • 容易招致讨好(sycophancy)。模型只要学会附和用户、多夸几句、多用 markdown 排版,就能在 Arena 上涨分——而这些行为对实际任务毫无帮助,甚至有害。这是「优化排行榜」与「优化真实有用性」之间最典型的一个背离。

针对风格污染,Arena 后来引入了风格控制(style control):在 Bradley–Terry 的回归里额外加入回答长度、markdown 标题数、列表条数、加粗数等特征,拟合后把这些系数置零,得到「去风格化」的分数。思路和第 5.3 节 AlpacaEval 的长度去偏完全一致:

$$ \mathrm{logit}\,\Pr(A \succ B) = (\beta_A - \beta_B) + \sum_{k} \gamma_k \cdot \left(s_k^{(A)} - s_k^{(B)}\right) $$

其中 $s_k$ 是第 $k$ 个风格特征。加上风格控制后,排行榜上一部分模型的名次会明显下滑——那部分排名就是靠排版和篇幅换来的。

常见误区:把 Arena 分当成「能力」

Arena 度量的构念是「在开放对话中,一个自选的互联网人群更喜欢谁的回答」。这是个真实且重要的构念,但它不是「智能」,也不是「在你的业务场景下更有用」。一个在 Arena 上排第一的模型,在你的代码库上、在你的医疗文档上、在你的成本预算下,完全可能是错误选择。第 11 节讲的 GDPVal、MedHELM 就是为了补上这个缺口。

7. 有效性危机:数据污染与数据集质量

前面所有基准都建立在一个假设上:分数反映的是能力。这一节问的是:我们凭什么相信这一点?Percy 把这个问题叫做 validity(有效性),它有两个主要威胁:训练-测试重叠,和数据集本身的质量。

7.1 训练-测试重叠:机器学习 101 崩塌了

机器学习第一课就是:不要在测试集上训练。在基础模型之前,这条规矩很好守——ImageNet、SQuAD 都有明确定义的 train/test 划分,你用了哪些数据是公开的、可审计的。

今天的情况是:在整个互联网上训练,并且不告诉任何人自己的数据。

注意:污染几乎是默认发生的,不是例外

回想第 4.1 节 MMLU 的自述:题目「由学生从网上免费可得的来源收集」。也就是说,MMLU 的题目在被收集成基准之前就已经在网上了。任何在网页快照上训练的模型,都有很大概率见过其中相当一部分。GPQA、HLE 之所以要花大价钱雇专家原创题目,一半原因是难度,另一半原因正是避免污染。

更麻烦的是二次污染:基准一旦发布,就会被人搬到 GitHub、博客、Hugging Face、Reddit 讨论、以及各种「刷题网站」上,然后被下一轮爬虫收进语料。基准的有效性会随时间单调衰减。

检测手段一:n-gram 重叠

最直接的方法:把测试题拿去和训练语料做字符串匹配。GPT-3 论文用的是 13-gram 重叠,Llama 系列用过 8-gram,具体阈值各家不同。做法是把训练语料建成 n-gram 索引,然后统计每道测试题有多大比例的 n-gram 命中。

局限:只有训练数据的持有者才能做这件事——外部研究者拿不到语料。而且它对改写、翻译、格式变化完全无能为力:把题目换个说法、翻译成中文再翻回来,n-gram 重叠归零,但记忆效应还在。

检测手段二:canary 字符串

BIG-bench 开创的做法:在数据集文件里嵌入一段全局唯一的随机 GUID(canary,「金丝雀」),并明确要求「训练时请排除包含此字符串的文档」。之后只要问模型「请补全这个 GUID」,如果它能背出来,就证明它见过这份数据。

局限:这是自愿合规机制。它只能抓住诚实的人,抓不住有意或无意忽略它的人;而且经过清洗流水线(去重、切分、格式转换)后 canary 常常会丢失。

检测手段三:成员推断攻击

成员推断(membership inference)的思路是:模型对见过的文本会给出异常高的概率。最简单的版本是看整段的困惑度;更稳健的是 Min-K% Prob——只看这段文本里概率最低的那 $K\%$ 个 token 的平均对数概率:

$$ \text{Min-K\%}(x) \;=\; \frac{1}{|S_K|}\sum_{x_i \in S_K} \log p(x_i \mid x_{<i}),\qquad S_K = \text{概率最低的 } K\% \text{ 个 token} $$

直觉是:没见过的文本总会有几个「意外」的 token 把分数拉下来;见过的文本连最难的 token 都很顺。但整体而言,单条文本的成员推断在大模型上信噪比很差——因为大语料上每条数据只被见过一两次,记忆信号非常弱。

检测手段四:可交换性检验(这是最漂亮的一个)

Percy 重点介绍的是 Oren et al., "Proving Test Set Contamination in Black Box Language Models"。它的洞察是:不要检测单条样本,要检测整个数据集的顺序。

推导:为什么顺序会泄密

一个基准数据集 $D = (d_1, d_2, \dots, d_n)$ 里,各条样本之间是可交换的(exchangeable)——第 7 题排在第 3 题前面还是后面,没有任何语义意义。

零假设 $H_0$(没有污染):模型没见过这份文件,那么它对「按原顺序拼接的 $D$」和「随机打乱后拼接的 $D_\pi$」应该给出同分布的对数似然:

$$ \log p(D) \;\overset{d}{=}\; \log p(D_{\pi}),\qquad \pi \sim \text{Uniform}(S_n). $$

如果模型训练时见过这份文件,它记住的是那个特定的顺序,于是 $\log p(D) \gg \log p(D_\pi)$。

于是构造一个置换检验(permutation test):采样 $m$ 个随机置换,计算

$$ \hat{p} = \frac{1 + \#\{\pi : \log p(D_\pi) \ge \log p(D)\}}{1 + m}. $$

这个 $\hat p$ 是一个严格有效的 p 值——不需要访问训练数据,只需要黑盒地拿到 log-prob。$\hat p < 0.05$ 就是「该基准被训练过」的统计证据。

可交换性检验示意图:横轴是对数似然,一条竖线标出原始顺序数据集的对数似然,直方图是大量随机置换后数据集的对数似然分布;污染情况下竖线远在直方图右尾之外。
可交换性检验的图示。直方图是随机打乱顺序后的数据集对数似然分布,竖线是原始顺序的对数似然。没污染时竖线应落在直方图中间;一旦落在极右尾,说明模型「记得这份文件本来的样子」。这个方法的优雅之处在于:它把「有没有作弊」变成了一个有严格 p 值的假设检验,而不是靠阈值拍脑袋。

7.2 四条应对路线

路线做法代价 / 局限
① 从模型反推重叠可交换性检验、成员推断、canary只能事后检测;对「改写后的污染」无效;需要 log-prob 访问权限
② 建立报告规范模型提供方主动报告训练-测试重叠率(Singh et al., 2024),就像今天大家都会报告置信区间一样纯靠自律;商业上没有动机
③ 用新鲜评测LiveCodeBench、UncheatableEval:持续爬取训练截止日之后的新网页/新题目时间戳并不总是安全的——新页面的内容可能是老内容的复制/改写
④ 用私有评测公司用自己不在互联网上的内部代码库;个人用自己的私人写作不可复现、不可比较、不可公开;对困惑度最容易实现(不需要标注答案)
直觉:为什么「私有评测 + 困惑度」是被低估的组合

路线 ④ 对困惑度特别友好:你只需要一堆没被公开过的文本,不需要出题、不需要标答案、不需要设计打分规则。把你自己的邮件、内部文档、私有代码仓拿来算 bits-per-byte,就得到了一个零污染、贴合你自身分布的评测。它无法告诉你模型的绝对能力,但对「模型 A 还是模型 B 更懂我的领域」这个采购问题,往往比任何公开榜单都准。

7.3 另一半问题:数据集本身有多脏

就算完全没有污染,基准也可能是错的——因为题目和标准答案本身有问题。这是评测领域长期被忽视的一块。

  • SWE-Bench → SWE-Bench Verified:OpenAI 请专业软件工程师逐条审查 SWE-Bench,发现相当一部分任务根本无法从 issue 描述中推断出预期行为,或者单元测试过于严苛(要求实现细节完全一致)。清洗后剩下 500 个经人工确认可解的任务——模型分数因此显著上升,但那不是模型变强了,是尺子被修直了。
  • Platinum Benchmarks:对一批经典基准做逐题人工核查,剔除标注错误。结论很扎心:前沿模型在这些「简单」基准上剩下的错误,有很大比例其实是基准本身标错了——真实的剩余错误率比报告的低得多,我们一直在测量噪声。
  • Agent 基准的特有问题:测试用例覆盖不足(agent 写了个假实现也能过测)、任务实际上被trivial agent(什么都不做、或只做一步的基线)就能解决。这类问题会让「agent 能力提升」的结论完全站不住。
  • Docent:用语言模型去审查 agent 的执行轨迹,自动发现「它是不是靠作弊过的关」「它是不是卡在一个环境 bug 上」。这是一种很务实的方向——用模型来给评测本身做质检。
可操作的建议

如果你只从这一节带走一件事:看到任何基准分数,先问两个问题——「这些题在网上吗?」和「有人逐条看过模型的输出吗?」。前者决定分数是不是记忆,后者决定分数是不是噪声。HELM 之所以坚持把每一条预测都公开可浏览,正是为了让第二个问题有答案。

8. Agent 与真实任务:从「说了什么」到「做成了什么」

Percy 用一句话概括这个转折:

  • 之前:评测语言模型说了什么(chat);
  • 现在:评测语言模型做了什么(agents)。

这里必须先把定义钉死:

Agent = 语言模型 + Agent 脚手架(scaffold,决定如何使用这个 LM 的逻辑)

我们关心的是那些需要使用工具(比如运行代码)、并且需要在一段时间内反复迭代的任务。这类任务有一个巨大的评测优势:结果往往可以被环境自动判定——单元测试过不过、flag 拿到没拿到、提交的分数是多少。不需要人评,也不需要 LLM 评委。

8.1 SWE-Bench:修真实仓库里的真实 issue

SWE-Bench 的流程图:从 GitHub 仓库取出一个 issue 及其对应的合并 PR,把 issue 描述和仓库代码交给模型,模型产出补丁,用该 PR 引入的 FAIL_TO_PASS 测试和原有 PASS_TO_PASS 测试来验证。
SWE-Bench 的构造方式:从 12 个 Python 仓库里挖出 2294 个任务。每个任务给模型整个代码库 + 一段 issue 描述,要求它提交一个补丁(PR)。评测指标是单元测试:必须让这个 issue 对应的测试从失败变成通过(FAIL_TO_PASS),同时不能弄坏原来通过的测试(PASS_TO_PASS)。当前排名(注意用的是第 7.3 节说的 Verified 版本)。
直觉:为什么单元测试是理想的评分器

它同时满足了三个通常互相冲突的要求:客观(二值、无歧义)、自动(零人力)、真实(这是人类工程师本来就在用的验收标准)。这也是为什么代码类任务成了 agent 评测的主战场——在别的领域你很难找到这样一个天然存在的、可执行的 oracle。

但注意它的软肋(第 7.3 节已经提过):测试覆盖不足时,一个投机取巧的补丁也能通过;测试过严时,一个正确但实现不同的补丁会被判错。

8.2 Terminal-Bench:把终端当作通用环境

Terminal-Bench 的示意图:agent 在一个容器化的 Linux 终端里操作,任务描述给定初始状态和目标,agent 通过发送 shell 命令完成任务,最后由验证脚本检查环境状态。
Terminal-Bench 的核心设计选择:计算机终端既简单又通用。任何能在 Linux 上做的事——编译、调试、配置服务、数据处理、逆向——都能用同一套接口(发命令、看输出)表达,并用同一套方式验证(跑一个检查脚本看环境状态)。这避免了为每类任务单独造环境的巨大成本。

规模:229 个任务,来自 93 位贡献者众包;其中经过筛选的 89 个任务构成 Terminal-Bench 2.0。

Terminal-Bench 任务的人类完成时间分布直方图:从几分钟到几小时不等,用作任务难度的标定。
用人类完成任务所需时间来标定难度。这是一个越来越流行的做法:它给了「难度」一个有物理意义的单位(分钟/小时),从而可以问「模型能可靠完成多长时间的人类工作」这种更有信息量的问题,而不只是一个百分比。
Terminal-Bench 结果柱状图:不同模型与不同 agent 脚手架组合的任务完成率对比。
Terminal-Bench 结果。注意横轴上的条目是「模型 × 脚手架」的组合——同一个模型换一套脚手架,成绩可以差出很多。这直接引出第 8.5 节的核心论点。最新排名。

8.3 Cybench:网络安全夺旗赛

Cybench 概览:40 个来自专业 CTF 比赛的任务,分为密码学、Web、逆向、二进制利用、取证等类别,每个任务给出环境与目标 flag。
Cybench:40 个夺旗赛(Capture The Flag, CTF)任务,来自真实的专业安全比赛。CTF 的评测性质极好:目标是拿到一个 flag 字符串,要么拿到要么没拿到,零歧义。
Cybench 的 agent 交互轨迹示例:模型循环执行「思考 → 发出命令 → 观察输出」,逐步定位漏洞并构造利用。
Cybench 的 agent 循环:思考 → 执行 → 观察,反复迭代直到拿到 flag。这类轨迹也是第 7.3 节 Docent 之类工具要审查的对象。

Cybench 一个特别值得学习的设计是用「首次解出时间(first-solve time)」作为难度度量——即在原始比赛中,全球最快的人类战队花了多久解出这道题。于是可以画出「模型能解决人类需要多久的题」这条曲线:

Cybench 结果图:横轴为任务的人类首次解出时间,纵轴为模型成功率,可以看到成功率随人类耗时增加而快速下降。
把成功率对「人类首次解出时间」作图。这把一个抽象的能力分数,翻译成了「模型相当于多强的人类安全研究员」——对政策制定者和风险评估来说,这个表述比「准确率 37%」有用得多。最新排名。

8.4 MLE-Bench:让 agent 去打 Kaggle

MLE-Bench 示意:75 个 Kaggle 竞赛任务,agent 需要读懂任务描述、处理数据、训练模型、生成提交文件,按竞赛榜单的奖牌线评分。
MLE-Bench:75 个 Kaggle 竞赛。任务要求 agent 完整走一遍机器学习流程——理解问题、清洗数据、特征工程、训练模型、调参、生成提交文件。评分直接用竞赛原本的排行榜:拿到铜牌/银牌/金牌线以上算成功。
MLE-Bench 结果表:不同模型与脚手架组合获得奖牌的比例,以及多次尝试(pass@k)带来的提升。
MLE-Bench 结果。注意多次尝试(多个种子 / 更长的时间预算)会显著提升奖牌率——这提醒我们,agent 评测的分数必须和「给了多少 token 预算、多少墙钟时间、允许几次尝试」一起报告,否则不可比。

8.5 脚手架:你到底在评什么?

Percy 引用了 Deep Agents 一文,把当代 agent 脚手架的四个关键组件列了出来:

组件做法解决什么问题
显式规划
explicit planning
维护一份 todo 列表,完成一项勾掉一项长任务中模型会「忘记」原始目标、漏做子任务
层级委派
hierarchical delegation
主 agent 调用子 agent,子 agent 有干净的上下文,只返回结论上下文窗口被中间过程塞满;无关信息干扰主线推理
持久记忆
persistent memory
把状态写进文件,需要时再读回来上下文是易失的、有限的;文件系统是无限且持久的
极致上下文工程
context engineering
在系统提示里对「流程」给出大量显式指令模型不知道这个具体环境的规范做法、边界与陷阱
核心结论:评 agent = 评「脚手架 + 模型」
  • Agent 极大地扩展了语言模型的能力面——同一个模型,加上能跑代码、能读文件、能迭代的脚手架,可解决的任务范围完全不是一个量级。
  • 脚手架非常重要,重要到它经常是分数差异的主要来源。
  • 因此你永远无法单独评测「模型」:SWE-Bench 上的 65% 是「某模型 + 某脚手架 + 某预算」的联合结果。看到 agent 榜单时,先找脚手架是哪一个、token 预算多少、允许几次尝试。

这正是第 0 节 takeaway 里「明确游戏规则」的具体含义——第 12 节会把这条线收尾。

9. 纯推理:ARC-AGI 与推理模型时代

到目前为止的所有任务,都同时需要语言能力和世界知识。SWE-Bench 要懂 Python 生态,GPQA 要懂有机化学,Arena 要懂英语表达习惯。于是有一个自然的问题:

能不能把「推理」从「知识」里分离出来?

Percy 的表述是:可以说,推理捕捉了一种更纯粹的智能形式——它不只是记住事实。如果一个系统能在完全没见过的规则体系里推出正确答案,那比它记住了多少化学式更能说明问题。

9.1 ARC-AGI 的设计哲学

ARC-AGI(Abstraction and Reasoning Corpus)由 François Chollet 提出,两条设计原则决定了一切:

  • 人类 100% 可解,但对 AI 极具挑战——每道题都是彩色网格上的几个「输入→输出」示例,你要推断出隐含的变换规则,然后应用到新的输入上。规则本身(对称、计数、填充、重力、包含关系)都是人类幼儿就具备的核心先验知识,不需要任何专业知识。
  • 每个任务都是独一无二的,所以记忆没用——这是它对抗第 7 节数据污染问题的根本方式:你没法通过背题来解题,因为每道题的规则都不一样。
直觉:ARC 是一个「小样本归纳」测试

每道 ARC 题只给 2–4 个示例,你要从中归纳出一个程序,再执行它。这和语言模型平时做的「在海量数据上插值」是根本不同的操作:它要求从极少样本中提取抽象规则。这也是为什么纯预训练模型在上面长期毫无进展——你无法通过见得更多来解决一个「见得少也要会」的问题。

ARC-AGI-1(2019)是第一版;ARC-AGI-2(2025 年 3 月)加入了更多需要多步组合推理的题目——单条规则不够,你得把几个规则串起来用。

9.2 结果:推理模型让曲线突然抬头

ARC-AGI 分数随时间的散点图:2020-2023 年间各代预训练语言模型分数一直贴近低位,2024 年底起 o1、o3 等推理模型分数急剧上升,同时标注了每道题的推理成本。
ARC-AGI 上的进展曲线,这是本讲最有信息量的一张图。预训练语言模型(GPT-3 → GPT-4 那一代)几乎没有推动指标——参数量和数据量涨了两个数量级,ARC 分数纹丝不动。直到推理模型(o1、o3)出现,曲线才开始起飞。这是「test-time compute 是一个和 pretraining compute 正交的新维度」最干净的实证之一。
推理模型时代给评测带来的新问题:分数必须和算力一起报告

推理模型的分数随思考 token 预算单调上升。同一个模型,让它想 1K token 和想 100K token,是两个完全不同的系统。ARC Prize 在公布 o3 成绩时,特意同时报告了每道题的推理成本,低算力配置和高算力配置之间差了大约两个数量级——高算力下分数大幅提升,但单题成本高到无法实际部署。

于是「准确率 X%」这个数字在推理模型时代本身已经不构成一个完整的陈述。正确的报告方式是一条曲线:准确率 vs. 每题算力(或美元)。这也让第 1.2 节那张「分数—成本」帕累托图从一个商业视角,变成了一个科学必需品。

同样的逻辑适用于数学竞赛类基准(AIME、HMMT、IMO 级别题目):这些基准在 2024 年之后成为推理模型的主战场,而它们的分数同样对采样次数(pass@k、多数投票的样本数)和思考预算极其敏感。报告 "AIME 90%" 而不说采样策略,等于什么都没说。

9.3 ARC-AGI-3:从静态谜题到交互环境

ARC-AGI-3 的界面示意:一个类似小型游戏的交互环境,agent 需要通过动作探索规则并达成目标状态。
ARC-AGI-3(2026 年 3 月)把测试从「看几个例子推规则」变成了交互式环境:agent 必须通过主动尝试去发现环境的规则,再利用规则达成目标。这引入了 ARC 前两版没有的能力要求——探索、假设检验、以及从失败中更新信念。
ARC-AGI-3 的结果对比:人类基线接近满分,而当前最强的模型/agent 组合得分很低。
ARC-AGI-3 上人类与模型的差距。人类接近满分,模型接近地板——这正是一个好的新基准应该有的样子。
注意:ARC 路线本身的两个局限
  • 「把推理从知识中解耦」极其困难。ARC 用彩色网格来规避语言和领域知识,但网格本身就编码了视觉先验(物体、连通性、对称性)。你只是换了一套知识,不是消除了知识。
  • 它被约束在人类推理上,而不是超人推理。「100% 人类可解」这条设计原则保证了公平的人类基线,但也意味着ARC 永远无法度量超越人类的能力。当模型在 ARC 上达到 100% 时,我们只知道它在这类问题上不比人差,不知道它能否发现人类想不到的东西。

尽管如此,Percy 的评价是正面的:ARC 清晰地暴露了当前模型的缺陷。在一个所有基准都在被刷爆的时代,一个能稳定让最强模型难堪的基准,本身就是稀缺资源。

10. 安全评测与红队

Percy 开场用了一个类比:汽车的碰撞测试评级。汽车行业有成熟的、标准化的、由第三方执行的安全评级体系,消费者看得懂,监管者用得上。AI 有什么?——先得回答一个更基础的问题:对 AI 来说,「安全」到底是什么意思?

10.1 两种构建安全基准的路线

路线一:从行为出发。HarmBench 基于 510 种违反法律或社会规范的有害行为——制造武器、网络犯罪、骚扰、虚假信息等。每条对应一个请求,用分类器判断模型是否实际执行了该行为(而不只是说了些什么)。HELM 上有完整榜单,并且可以逐条查看真实的失败案例——这一点很重要,安全评测尤其不能只看聚合数字。

路线二:从规则出发。AIR-Bench 不自己定义什么是有害,而是直接从各国监管框架和各公司的使用政策中抽取,整理成一个 314 个风险类别的分类体系,配 5694 条 prompt。

直觉:为什么「从规则出发」是个聪明的设计

安全评测最容易被质疑的一点是:凭什么是你来定义什么算有害?AIR-Bench 把这个问题外包给了已经存在的、有合法性来源的文本——欧盟 AI 法案、美国行政令、以及 OpenAI/Anthropic/Google 自己公布的使用政策。于是评测结论变成了一句无法反驳的陈述:「按照贵公司自己写的政策,你的模型在这 N 个类别上违反了自己的规定。」AIR-Bench 榜单。

10.2 越狱:对抗性攻击

语言模型被训练成拒绝有害指令。问题是这层防护有多结实?

GCG(Greedy Coordinate Gradient)(Zou et al., 2023)证明了:不结实。它自动优化出一段对抗性后缀,拼在任何有害请求后面就能绕过安全对齐。方法本身很直接:

  1. 把目标设为最大化模型以肯定语气开头的概率,比如 $p(\text{"Sure, here is how to..."} \mid \text{prompt} + \text{suffix})$。一旦模型开了这个头,后面的内容就会顺着生成下去。
  2. token 是离散的,没法直接梯度下降。GCG 用梯度作为候选提议:对后缀的每个位置,用 one-hot 嵌入上的梯度挑出 top-$k$ 个最有希望的替换 token。
  3. 然后实际前向计算这些候选,贪心地选损失最小的那个,替换、迭代。
GCG 攻击示例:一段人类不可读的乱码后缀被拼接在有害请求后面,原本会拒绝的模型开始给出详细的有害回答。
GCG 找到的对抗后缀——一串对人类完全无意义的乱码。最令人担忧的发现是迁移性:在开源权重模型(Llama)上优化出来的后缀,能直接迁移到闭源模型(GPT-4、Claude)上生效。这意味着「不公开权重」并不能防住基于梯度的攻击——开源模型成了闭源模型的攻击训练场。

10.3 安全为什么难以标准化

Percy 的两个论点
  • 安全的很多方面是强烈依赖语境的。政治、法律、社会规范因国家而异:在一个国家属于合法言论的内容,在另一个国家可能违法;在一种文化里正常的表达,在另一种文化里冒犯。不存在一个全球通用的安全基准,这是原理性的,不是技术不够好。
  • 风险的种类极其多样。Percy 列举的清单跨度惊人:幻觉(hallucination)、谄媚(sycophancy)、协助犯罪(abetting crimes)、加剧不平等(inequality)、以及人类丧失批判性思维能力。这些风险的度量方式毫无共同点——测幻觉要事实核查,测谄媚要设计诱导实验,测「丧失批判性思维」需要纵向的人类研究。把它们压进一个「安全分数」是没有意义的。

10.4 双重用途

最后一个根本性困难:双重用途(dual-use)。Percy 举的例子正是第 8.3 节的 Cybench——一个有能力的网络安全 agent,既可以被用来入侵系统,也可以被用来做渗透测试、发现并修补漏洞。

这两件事在能力层面是同一件事。你无法通过限制能力来只保留好的一面;能区分它们的只有使用者的意图和部署的语境——而这两样东西都不在模型里,因此也不在任何模型评测的范围内。这是为什么安全评测最终必然要延伸到部署层面的治理,而不能只停留在基准分数上。

11. 生态效度:让评测贴近真实使用

Percy 用心理学的术语给这一维度命名:生态效度(ecological validity)——一个评测在多大程度上捕捉了真实世界的使用。

把前面讲过的基准放到这把尺子上:

  • 考试型基准(如 GPQA)离真实使用非常远。没有用户会拿博士资格考试题去问客服机器人。它们测的是能力上限,不是使用场景。
  • Chatbot Arena 的 prompt 来自真人,但分布是不受控的。你得到了真实性,却失去了覆盖度——你不知道这些 prompt 代表了哪些人群、哪些职业、哪些真正有经济价值的任务。

下面三个工作代表了三种补救思路。

11.1 GDPVal:按经济结构去采样任务

GDPVal 的构成示意:按美国 GDP 贡献排名的 9 大行业,每个行业下若干代表性职业,共 44 种职业,每种职业由资深从业者提供真实工作产出任务。
GDPVal(OpenAI)的采样策略非常有想法:按美国 GDP 贡献最大的 9 个行业,选出 44 种职业,然后请平均约 14 年经验的从业者提供他们真实工作中的任务和交付物(法律意见书、工程图纸、财务模型、护理计划……)。评分方式是让同行专家把模型产出和人类产出做盲评比较。
直觉:用 GDP 当采样权重

「什么任务重要」是个没有客观答案的问题。GDPVal 的回答是:让经济结构来决定权重。这既解决了「凭什么选这些任务」的合法性问题,也让评测结论可以直接对接一个所有人都关心的问题——AI 能替代或加速多少经济产出。代价是它偏向可数字化交付的白领工作,且完全是美国视角。

11.2 MedHELM:从标准化考试转向真实临床任务

MedHELM 针对的是一个具体病灶:此前的医疗基准都基于标准化考试(USMLE 之类的执照题)。「模型通过了美国医师执照考试」这个新闻标题传播极广,但医生的日常工作并不是做选择题——而是写病历摘要、做鉴别诊断、回复患者消息、核对用药冲突、整理出院小结。

MedHELM 的做法是:从 29 位临床医生那里采集 121 个真实临床任务,并且混合使用公开数据集和私有数据集(后者同时也缓解了第 7 节的污染问题)。MedHELM 榜单。

11.3 Clio:直接分析真实用户数据

Clio 的分析结果表:按类别统计真实用户与 Claude 对话的主题分布,例如软件开发、写作辅助、教育、商业策略等,并给出各类别占比。
Clio(Anthropic)代表第三种思路:用语言模型去分析真实的用户对话数据,自动聚类成主题,然后只对外公布聚合后的一般模式——人们到底在拿模型做什么。原始对话不出系统,输出的是「编程占 X%、写作占 Y%」这样的分布。
注意:真实性与隐私是天然对立的

Percy 在这里给出了本节最重要的一句判断:不幸的是,真实性和隐私有时是互相冲突的。

最真实的评测数据,就是用户真实的对话、真实的代码库、真实的病历——而这些恰恰是最不能公开的。于是这个领域被推向两个不理想的极端:公开但不真实的基准(考试题、合成指令),和真实但不可复现的私有评测(各家公司内部的评估集)。Clio 这类「只发布聚合统计」的做法,是目前在这条张力上找到的少数可行折中之一。

11.4 HELM 的整体性评测哲学

贯穿本讲的一条暗线是 HELM(Holistic Evaluation of Language Models)——Percy 自己在 Stanford CRFM 主持的评测框架。前面几乎每个基准都出现过一个 "on HELM" 的链接,这不是偶然,而是一套明确的方法论主张:

主张具体做法解决什么问题
多场景覆盖把大量场景(scenario)系统性地列成一个分类体系,明确标出哪些格子是空的避免「只测有基准的地方」,让覆盖缺口本身变得可见
多指标并行对每个场景同时测准确率、校准度、鲁棒性、公平性、偏见、毒性、效率单一准确率会掩盖代价:一个更准但更慢、更有偏见的模型不一定更好
标准化 prompt 与打分所有模型走同一套模板、同一种打分方式第 4.2 节讲的那些自由度不再污染横向比较
完全透明公开每一条 prompt 和每一条模型输出,任何人可以点进去逐条看让「聚合分数背后到底发生了什么」可被审计——这是发现基准质量问题(第 7.3 节)的唯一途径

后面的 MedHELM、AIR-Bench、HELM Capabilities、HELM Safety 都是这套框架在具体领域的实例化。核心信念只有一句:评测应该像做实验一样可复现、像做审计一样可追溯。

12. 评测究竟是为了回答什么问题

最后 Percy 把整讲收束到两个元问题上。

12.1 评测的目的是什么

不存在唯一正确的评测;一切取决于你想回答什么问题。他列了四种典型的提问者,它们对评测的要求几乎完全不同:

#谁在问想回答什么因此需要什么样的评测
1用户 / 公司为我的用例(如客服机器人)该买模型 A 还是模型 B贴近自己场景的私有评测 + 成本维度;绝对分数无所谓,只要排序对
2研究者模型的原始能力(比如「智能」)到底到哪了难、干净、抗污染、有人类基线的基准(GPQA、HLE、ARC-AGI)
3政策 / 商业分析者这个模型带来的收益与危害分别是什么覆盖广、多指标、透明可审计(HELM、AIR-Bench、GDPVal)
4模型开发者怎么改进模型信号密集、低方差、快的指标(困惑度、bits-per-byte、小规模自动评测)
这张表解释了很多「无谓的争论」

「困惑度根本不能反映能力」和「困惑度是最有用的指标」这两句话可以同时成立——前者站在第 2 类提问者的立场,后者站在第 4 类。同理,「Arena 榜单毫无意义」和「Arena 是最真实的信号」也可以同时成立。大多数关于评测的争吵,本质是双方在回答不同的问题而不自知。

12.2 我们到底在评什么:方法、模型,还是 Agent

这是本讲第二条 takeaway 的正题:必须明确游戏规则。

  • 基础模型之前,我们评的是「方法」(methods)。ImageNet、SQuAD 有标准化的 train/test 划分,所有人在同一份训练数据上比算法。分数的差异只能来自方法本身。
  • 今天,我们(大多)评的是「模型/系统」(models/systems)。怎么训、用什么数据、多少算力,全都随意(anything goes)。分数的差异可能来自算法,也可能来自你多花了十倍的钱、或者偷偷用了测试集。

也有例外。Percy 举了一个漂亮的反例:

Karpathy 的 nanogpt speedrun 记录:固定数据集与目标验证损失,参赛者比拼在 8 卡 A100/H100 上达到该损失所需的墙钟时间,记录被一次次刷新。
nanoGPT speedrun:固定数据集、固定目标验证损失,比达到它所需的时间。这是一个纯粹的「评方法」的竞赛——数据不变、目标不变,唯一能改的是架构、优化器、内核、并行策略。这个规则设计让它成为了近年最有效的开源算法创新引擎之一:muon 优化器、各种注意力变体和 kernel 优化都在这里被验证。
规则固定什么比什么鼓励什么典型例子
评方法数据、算力预算、目标指标算法研究者的算法创新nanoGPT speedrun、经典 ML 基准
评模型只固定测试集最终模型的能力对下游用户有用的信息MMLU、GPQA、Arena
评 Agent测试环境、时间/token 预算、允许尝试次数模型 + 脚手架的组合系统工程与产品化SWE-Bench、Terminal-Bench

Percy 的判断是:评方法鼓励研究者做算法创新;评模型/系统对下游用户更有用。两者都需要,但绝不能混着来——把一个「随便你怎么训」的分数当成「这个算法更好」的证据,是当前论文里最常见的推理错误。

无论走哪条路,你都必须先把游戏规则定义清楚。

本讲小结

Percy 给的三条 takeaway,现在应该都能读懂了:

  1. 不存在唯一正确的评测——根据你想度量什么来选择评测。
  2. 清楚地陈述游戏规则——你在评方法、评模型,还是评 agent?
  3. 三个考量维度:难度(difficulty)、真实性(realism)、有效性(validity)。

一页速查表

问题一句话答案见
困惑度怎么算$\text{ppl}=\exp\!\big(-\frac{1}{|D|}\sum_i \log p(x_i\mid x_{<i})\big)$,即平均 NLL 取指数§3
为什么困惑度不能跨模型比分母是 token 数,依赖 tokenizer;改用 $\text{BPB}=\frac{N_{\text{tok}}}{N_{\text{bytes}}}\log_2\text{ppl}$§3.5
为什么缩放定律都用困惑度它平滑、连续、低方差;准确率是阶跃的,小模型上贴着随机基线§3.7
多选题为什么分数不可比至少 4 种打分方式(原始 logprob / 长度归一 / PMI / 字母),加上 prompt 与 few-shot 敏感性§4.2
基准饱和了怎么办加选项数、上 CoT、请专家原创题、用当前模型过滤(MMLU→MMLU-Pro→GPQA→HLE)§4.3–4.5
怎么评开放式回答两两比较 + 人类或 LLM 评委;用 checklist/rubric 提升可靠性§5
LLM 评委有哪些偏差长度偏置(回归去偏)、位置偏置(双向评测)、自我偏好§5.3–5.4
Elo 是怎么来的Bradley–Terry:$\Pr(i\succ j)=\sigma(\beta_i-\beta_j)$;Elo 换底 10、尺度 400,$R\approx173.7\beta$§6.1
Arena 的结构性问题投票者自选样本;一个比特混淆风格与正确性;人无法判断正确性;奖励谄媚§6.4
怎么查数据污染n-gram 重叠 / canary / 成员推断(Min-K%)/ 可交换性置换检验(有严格 p 值)§7.1
怎么防数据污染报告规范、新鲜评测(LiveCodeBench)、私有评测(对困惑度最容易)§7.2
Agent 基准评的是什么模型 + 脚手架 + 预算的联合结果,不是模型本身§8.5
推理模型时代怎么报分必须给出「准确率 vs 每题算力/成本」的曲线,而不是单个数字§9.2
安全能不能标准化不能全局标准化:强烈依赖语境,风险种类异质,且存在双重用途§10.3–10.4
真实性的代价最真实的数据最不能公开;真实性与隐私天然对立§11.3
给自己做评测时的检查清单
  1. 我想回答的是哪一类问题(采购 / 研究 / 政策 / 开发反馈)?
  2. 我固定了什么、放开了什么——规则写下来了吗?
  3. 这些题在互联网上吗?有没有做过污染检查?
  4. 打分方式是什么?换一种打分方式,排名会变吗?
  5. 我逐条看过模型的输出吗?错的那些,是模型错了还是标注错了?
  6. 报告里有置信区间吗?相邻名次在统计上可区分吗?
  7. 成本/算力/尝试次数报告了吗?
  8. 这个指标和我真正关心的构念之间,还剩多大的缝?

下一讲进入被这一讲推迟的主题:数据——去哪里搞数据、怎么清洗、怎么配比。有了本讲的评测框架,那些「加了这批数据模型变好了」的说法才有了可以被检验的含义。

延伸阅读

困惑度与经典语言建模

  • Exploring the Limits of Language Modeling (2016) —— Transformer 之前 1BW 上的最高水位(51.3 → 30.0),理解「分布内评测」范式长什么样。
  • LAMBADA (2016) —— 完形填空基准,刻意构造成必须读完整段才能填对,是「伪装成任务的困惑度」的典型。
  • HellaSwag (2019) —— 对抗过滤(adversarial filtering)如何把一个简单任务变成难题,方法本身比数据集更值得学。

考试型基准

  • MMLU (2021) —— 这一代基准的奠基者;读它的数据收集方式,你会立刻明白为什么污染问题无法回避。
  • MMLU-Pro (2024) —— 「如何修复一个饱和的基准」的标准操作手册:删噪声题、扩选项、上 CoT。
  • GPQA (2023) —— 「Google-Proof」的操作化定义,以及如何用对照组把难度变成可测量的量。
  • Humanity's Last Exam (2025) —— 值得读的是它的激励机制与流水线设计(奖金 + 共同作者 + 模型过滤 + 多轮评审)。

开放生成与人类偏好

  • Chatbot Arena (2024) —— 完整讲清楚 Bradley–Terry 拟合、采样策略与置信区间,是理解所有偏好榜单的必读。
  • Length-Controlled AlpacaEval (2024) —— 用回归剔除混淆变量的范本,思路可以直接迁移到你自己的评测里。
  • WildBench (2024) —— 真实对话采样 + checklist 评判;「评判也要 CoT」这个想法很实用。

Agent 与真实任务

  • SWE-Bench (2023) —— 用单元测试做 oracle 的开创性设计,读它如何从 GitHub 自动挖掘任务。
  • Terminal-Bench —— 「终端作为通用环境」这个选择大幅降低了造环境的成本,值得借鉴。
  • Cybench (2024) —— 用「人类首次解出时间」标定难度,把能力分数翻译成可理解的人类参照。
  • MLE-Bench (2024) —— 75 个 Kaggle 竞赛;也是理解「预算如何影响 agent 分数」的好材料。
  • Deep Agents 综述 —— 显式规划、层级委派、持久记忆、上下文工程四件套。

有效性:污染与数据集质量

安全

真实性

  • GDPVal (2025) —— 用 GDP 结构决定任务采样权重,把评测和经济价值直接挂钩。
  • MedHELM (2025) —— 从执照考试转向 121 个真实临床任务,是「领域评测该怎么做」的模板。
  • Clio (2024) —— 用模型分析真实用户数据、只发布聚合模式,是隐私与真实性之间的可行折中。
  • ARC Prize —— ARC-AGI 三代的设计文档与结果,理解「推理 vs 知识」这条线的最佳入口。