阶段 6 · 让模型跑起来

评测:这个领域最难的问题
是"怎么知道它行不行"

上一章《服务化与吞吐》保证了「快」,却回答不了「对不对」。 只有评测没有一把可信的尺子:分数≠能力。 这一章讲三件事:基准为什么骗你、分差里有多少噪声、幻觉到底是什么。

1

三类评测,各有各的毛病

评测方式怎么做好处问题
静态基准
MMLU / GSM8K / HumanEval
固定一套题,跑分 可复现、便宜、能横向比 会被污染(训练集里见过题)、会饱和(分数到顶)、 会诱发 Goodhart 定律
人类偏好
Arena / Elo
让真人盲测两个回答,投票 贴近真实感受;题目不固定所以难以针对性优化 贵、慢;标注者之间一致性低; 分数差异常常在噪声范围内
下游实测
你自己的任务
在你真实场景的数据上跑 唯一真正可信的 只对你自己的场景有效,没法和其他模型比

基准分数是"某个特定数据集上的某个特定指标",不是"这个模型有多强"。 不同论文的 MMLU 分数可能用了不同的 prompt 模板、不同的 few-shot 数量 (few-shot = 先给模型看几个示例再让它作答),答案提取规则也不一样—— 差 3 分完全可能是评测方法的差异。所以 MMLU 高了 5 分, 在你要做的那个任务上可能毫无差别。

互动 · 同一个模型,三把尺子量出三个分数

2

静态基准的三个致命问题

① 数据污染 Data Contamination 测试题本来就在训练数据里。互联网上到处都是带答案的题目、解析、讨论帖, 想彻底清洗干净几乎不可能。
症状:某个基准分数高得反常,但在相关任务上表现平平。
② 饱和 Saturation 分数顶到天花板,失去区分度。MMLU 已经被刷到 88%+, 剩下那 12% 很大一部分是题目本身有争议或者标注错误。
这时榜单上的名次变化,反映的可能只是谁在噪声上运气更好。
③ Goodhart 定律 「当一个指标成为目标,它就不再是一个好指标。」
一旦大家开始针对某个基准优化,这个基准衡量的就不再是能力,而是"对这个基准的适配程度"。 这就是为什么前沿模型的宣传里,基准分数越来越多而实际差距越来越小。

饱和是怎么回事:分数越高,区分度越低

互动 · 饱和之后,榜首其实是靠抽签定的

真实第一名
—
重抽样里榜首换人的比例
—

3

亲手测一次数据污染

检测污染最常用的方法叫 n-gram 重叠检测:n 就是重叠的长度, 如果测试题里有一段连续 n 个 token 原封不动地出现在训练语料里,那这道题很可能被污染了。 行业里最常用的阈值是 13。
下面用的就是最长公共子串算法。为了看得清,这里每个汉字或字母都算一个 token。

互动 · 真实的 n-gram 污染检测

测试题(基准里的)

训练语料里被匹配到的那一段(高亮 = 与题目重合的字)

最长公共 n-gram
—
重叠 token 占比
—
判定
—

为什么阈值定在 13 个 token?因为短的重叠是正常的——常见短语、固定搭配、数学符号都会重复出现。 但连续 13 个以上的 token 完全一致,在自然语言里几乎不可能是巧合。 这个数字不是定理,是经验值,GPT-3 那篇论文用的就是这个阈值。
注意:检测到重叠 ≠ 一定污染。也可能是这道题的出处本身(比如一本教材) 被收录进了训练数据。但无论哪种情况,这道题的分数都已经不可信了。

互动 · 巧合最长能有多长(这决定了阈值为什么定 13)

4

排行榜上的分差,有多少是噪声

Arena 类排行榜按 Elo 分数排名——Elo 原本是给棋手发明的评分, 只由胜负累积,不看回答内容。但Elo 分数是估计值,不是真值: 换一批对局重测,分数会变,所以它带着一个置信区间。 95% 置信区间的意思是:同样的实验重复很多次、每次算一个区间, 约 95% 的区间能盖住真值。而绝大多数榜单不显示这个区间。

互动 · Bradley-Terry 拟合(从胜负估分数)+ bootstrap 置信区间

测得的 Elo 差
—
95% 置信区间
—
判定
—

互动 · bootstrap 的一次「重抽」:上面直方图的每一根柱子就是这么来的

💡 区间跨过 0,名次就不成立

两个模型在排行榜上差 20 分,可能完全在噪声范围内。 对局数只有几百场时,这根误差棒能长到 ±40 分——20 分的差距整个落在区间里, 根本读不出来。所以看到"A 比 B 高 15 分"时,正确的理解是:以现有数据,还分不出谁更好。
差距要大到 50 分才值得当真:50 分约对应 57% 胜率,不到这个数,排名常常会翻 (把「真实胜率」拖到约 57% 就能对上)。想稳稳分辨 20 分的差距,对局数要几千场: 拖到 3000 场,误差棒还有 ±12 分。

置信区间有解析公式,但它依赖"每场对局是独立的"这个假设——真实投票里 同一个问题会被很多人投、同一个用户会投很多场,独立性并不成立。 Bootstrap 的做法更粗暴:把已有的对局结果当成一个池子,有放回地随机重抽同样多的场次, 重新算一遍 Elo,重复几百次,看结果的分布。这样得到的区间不需要假设分布形状。

5

幻觉:不是 bug,是它的本质

很多人把幻觉当成"模型还没训好"。这是个误解。 幻觉是语言模型训练目标的直接后果。

模型被训练去做的事:给定前文,什么下一个 token 最合理
它从来没被训练去判断"这句话是真的吗"

当模型不知道答案时,它面对一个选择:编一个听起来合理的,还是说"我不知道"。 在训练数据里,前者出现的频率高得多——所以从统计上看,编造是更优的策略。

🎯 类比

像一个只学过"怎么把话说圆"、没学过任何事实的演讲者。 他被要求"接下来说一句最符合语境的话"。
当他知道事实时,他会说事实(因为事实在语料里最常出现)。 当他不知道时,他会说出最像事实的那句话——语法完美、语气笃定、格式规范, 但内容是空的。
他不是在骗你,他是在做他被训练要做的那件事。
这个类比管到"它为什么编"为止:真演讲者可能心里清楚自己在糊弄,模型没有"故意"这回事。

缓解手段怎么起效局限
RAG 检索增强 把相关资料放进上下文,让模型"照着抄"而不是"凭记忆编" 检索不到就还是会编;检索到的资料本身错的也会跟着错; 而且模型可能无视资料继续编
工具调用 让模型去算、去查,而不是自己回忆 只能解决"可计算、可查询"的那部分;决定调哪个工具本身还是靠模型判断
拒答训练 专门训练模型说"我不知道" 会和"有用性"直接冲突——拒答太多用户会觉得模型没用。 而且模型不知道自己不知道什么,这个判断本身就不准
降低温度 减少随机性,让输出更集中 对幻觉基本无效——因为幻觉往往是模型"非常确定"的那个答案, 温度低反而让它更自信地重复错误

模型知道答案时,多次采样会给出同一个答案;不知道时,每次编的都不一样。 所以有个简单有效的检测信号叫自我一致性:同一个问题问 K 遍,看答案一致不一致。 一致率低 = 高风险幻觉。下面这个互动就是在算这个。

互动 · 真实的多次采样与一致率

众数答案占比
—
不同答案种类
—
风险判定
—

互动 · 它知道 vs 它不知道:多次采样分别长什么样

6

常见基准各自在测什么

基准测什么特点 / 现状
MMLU57 个学科的多选题 最著名也最饱和。前沿模型已 88%+,区分度基本没了
MMLU-ProMMLU 的加强版(10 选项、更难) 为对抗饱和而设计,分数回落到 70% 区间,重新有了区分度
GPQA研究生水平的科学问答 专门设计成"搜索引擎查不到",抗污染。博士专家也只有约 65%
GSM8K / MATH小学数学 / 竞赛数学 推理能力的经典指标。GSM8K 和 MATH 都已接近饱和
HumanEval / MBPP写函数级代码 题目短、易污染、已饱和。"刷题"现象最严重的领域
SWE-bench真实 GitHub issue 修复 目前最有说服力的代码基准——要在真实仓库里跑测试,很难作弊
MT-Bench / Arena多轮对话质量 / 人类盲测 MT-Bench 易被针对;Arena 难被针对但分差噪声大
HELM多维度综合评测框架 不只看准确率,还看鲁棒性、公平性、效率。更全面但也更贵
RULER / LongBench长上下文真实利用能力 揭穿了"支持 128K"的水分——很多模型宣称的支持长度, 实际有效利用远达不到
⚠️ LLM-as-judge 的系统性偏见

用大模型当裁判很流行(便宜、快),但它有已被反复验证的偏见:
① 长度偏好——更长的回答得分更高,哪怕内容更差。
② 自我偏好——模型倾向于给自己或同家族模型的输出打高分。
③ 位置偏好——在 A/B 对比里,排在前面或后面的那个会被系统性偏爱。
所以看到"用 GPT-4 当裁判"的评测结果时,至少要确认它有没有做位置交换、有没有控制长度。

互动 · LLM 当裁判:同一个回答,只换个位置,胜负就翻了

M

数学 · 为什么必须拖一根误差棒

第 4 节说「排行榜差 20 分常常是噪声」。这不是感受,是算出来的,只有两步: ① 把胜率换算成分数,② 给这个分数配一根误差棒。 (§4 里那个 6.9 分是从「600 场观测到的胜率 51.0%」反推的点估计; 这里先把 52% 当成真值,看真值对应的真实分差 13.9。两者差的那 1 个百分点,本身就是抽样误差。)

核心大图 · 拖「对局数」:误差棒长到把 0 吞掉的那一刻,名次就没了

测得的评分差 ΔR
—
95% 区间
—
判定
—

互动 · 每个符号管图上的哪一块

🎬 自己验一遍

把「对局数」从 3000 拖回 50:ΔR 一点没变,变的只有那根误差棒。 再回第 4 节看那张 bootstrap 直方图——那是同一件事的另一种画法: 这边用公式直接算区间,那边用重抽样算区间,两个答案几乎一样。
它们都在说同一句话:能力没动,是尺子不够长。

7

为什么这个问题至今没解决

根本困难为什么绕不过去什么时候真的会痛 → 换什么
没有一个"真值" 图像分类有标签,翻译有参考译文,但"一个好的回答"没有唯一答案。 你连自己在测什么都说不清 要在几个模型间取舍时没有依据 → 换成你自己的场景数据 + 人工抽检
基准一旦公开就会被针对 这是结构性的:公开基准 → 有人刷 → 失去意义 → 建新基准 → 循环。 维持私有测试集能缓解,但又失去了可比性 榜上排第一、上线却不行 → 换成私有测试集 + 定期换新题
人类评测的主观性无法消除 标注者之间的一致性(Cohen's κ,扣掉"瞎蒙也能对上"之后的吻合度)落在 0.4~0.6, 按 Landis–Koch 的判读算"中等"(这是一个常用的判读尺:0.4~0.6 算"中等一致")——意味着相当一部分判断是分歧的 用众包投票定胜负时分歧大 → 固定题目 + 专家复核 + 交换位置
评测本身很贵 一次完整的人类盲测要募集大量投票人,成本很高。小团队根本做不起, 只能依赖别人的榜单——而那些榜单正好是最容易被针对的 小团队做不起盲测 → 先用公开榜单粗筛,再在小样本上自测
能力和"讨人喜欢"会混淆 人类偏好投票测的是"哪个回答更让人满意", 不是"哪个回答更正确"。一个会说漂亮话但内容错的回答,可能赢过正确答案。 选型选到"会说漂亮话"的 → 用客观可验证的任务(代码、数学)+ 失败模式抽检

互动 · 一次评测的账:钱花在生成上,不花在算力上

工业界怎么写 · 你的评测结果也要配一根误差棒

💡 所以实践中最靠谱的做法

不要相信任何单一的公开分数。正确的流程是:
① 用公开基准做一个粗筛(去掉明显不行的)
② 然后一定在你自己的数据上测——哪怕只有 100 条,也比 MMLU 差 3 分有意义得多。 自己那 100 条上的分差也要配误差棒:100 条的 95% 区间大约有 ±10 个百分点
③ 关注失败模式而不是平均分:它在什么情况下会错?错得多离谱?

8

小结

你想要的叫「能力」,你能拿到的叫「一个在你选的那道题上的分数」——这两样从来不是同一个。 中间隔的是一次有损压缩:把 N 个模型 × M 道题的答案表,逐行压成正确率,再压成名次。

互动 · 有损压缩:一张答案表压成一个分数,到底掉了什么

它对应哪条线 ② 没有免费午餐 → 必须有归纳偏置——评测不是中立的测量, 它是「先决定什么算对」的一次归纳偏置选择
一句话 这一章的做法,本质上是在把「能力」压缩成一个分数,然后开始争论这个分数—— 而压缩这一步是有损的,损失掉的那部分恰好是你最想要的东西。
它牺牲了什么 牺牲了无法被自动打分的那些维度(真正的有用性、失败模式的严重程度、成本、安全), 也牺牲了指标本身的中立性:一旦大家开始针对它优化,它衡量的就不再是能力, 而是「对它有多适配」(Goodhart)。
这就是为什么这一节只能告诉你「不要信什么」,给不出「该信什么」。
🎬 自己验一遍

回到第 2 节那张「饱和是怎么回事」。把「这套题的天花板」滑块从 88% 往下拖到 50%—— 同样是能力从 60% 涨到 85%(非常大的一步),面板上的分差会从接近 2 个百分点 缩到 1 个百分点出头。

那个瞬间你看到的就是「分数不是能力」:能力一点没变, 只是把「什么算对」这条线挪了一下,区分度就消失了。
再回到第 4 节,把「对局数」滑块从 3000 拖回 50—— 置信区间会宽到把两个模型吞进去。那一下你看到的是同一件事的另一半: 噪声也伪装成能力。如果你刚才没有想指着某个滑块说这句话,那这一节对你就是没用的——回去再拖一次。

它在哪几条暗线上

七条线回答「深度学习为什么能行」,暗线回答「拆一个方法时该问哪几件事」——两套编号不是一回事。

暗线这一章的回答
C 参数账本 评测的账不在参数量,在 token 数和调用次数:
· 跑一遍 1000 题的 MMLU ≈ 1000 次调用,每次连带题目与选项约 200 token 输入 → 20 万 token; 加上 LLM-as-judge 双评,直接翻倍。
· 这一章第 4 节那个 bootstrap:600 场 × 300 次重采样 = 18 万次重新拟合,只在本机循环。 模型本体是 8B~数百 B 参数,而一次评测花的是 API 钱和人类标注钱——两者不是同一种成本
D 跑在什么上 带宽受限,不是算力受限。评测的重活是把答案一个一个生成出来, 而自回归生成逐 token 搬权重,最贵的动作是一次完整生成,不是一次矩阵乘。 人类盲测更极端:瓶颈在募集到多少投票人。完整的 Roofline 账见 《硬件与算力账本》。
E 它假设了什么 四条,每一条都被现实打破过:① 这套题能代表能力; ② 题目没被模型见过(抗污染);③ 每场对局、每次投票相互独立; ④ 裁判中立。这四条就是这一章的归纳偏置。
🎯 前后钩子

它接住上一章《服务化与吞吐》留下的「快不保证对」,把问题交给下一章《提示与上下文学习》。

一句话带走评测

分数不是能力:静态基准会被污染、会饱和、一旦成为目标就失效,Arena 类排行榜的 Elo 分差又常常整个落在误差棒里——差 20 分根本读不出来,幻觉也只是「预测下一个 token」这个训练目标的必然结果。
所以呢:不要相信任何单一公开分数,一定在你自己的数据上测,并且看失败模式而不只看平均分。

9

拓展阅读

上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。

📄 这一章的说法从哪来

💻 工业界怎么写

∑ 更严格的形式