第 16 章 · 整个模型,端到端Evaluation

评测:困惑度、基准,以及该多大程度上信任它们

深入阅读 · 第 16 章 完整模型——模型已经跑完了,怎么给它的好坏打一个数?

第 13 章-log p(target) 构建出了训练目标:模型的损失,就是它赋给真实下一个 token 的负对数概率,在所有位置上取平均。这个数字从没离开过训练场——它,不取指数的话,也是评测唯一需要的原料。困惑度(perplexity)就是这同一个损失,取个指数:

Hugging Face Transformers 的官方文档把它讲得很直白:这就是「数据与模型预测之间交叉熵的指数」。它有一种干净的读法:困惑度就是——如果模型是在这么多个等可能选项里均匀乱猜,它平均会有多困惑,那个「这么多」就是困惑度这个数。两个选项里满怀信心地猜对,困惑度是 1;在整个词表上彻底迷失,困惑度就逼近词表本身的大小。

这个具体模型自己的数字,取个指数

第 13 章已经算过一次:初始化时,这个模型 248,320 个词表 token 里的每一个都大致拿到相同的概率,所以损失从 −ln(1/248,320) = ln(248,320) ≈ 12.4 nats 起步。把它取个指数,正好还原出 248,320——也就是词表大小本身。这不是巧合:对 V 个结果做完全均匀的猜测,困惑度恒等于 V,因为均匀分布上的交叉熵是 ln V,而 exp(ln V) = V。所以在迈出第一步梯度之前,这个具体模型在自己词表上的困惑度就是 ≈ 248,320——训练中损失每降一个 nat,这个数字就跟着缩水。两个真实、已发表的锚点,标出了一个训练充分的模型能落到哪里:GPT-3 175B 在 Penn Treebank 上把困惑度做到了 20.50(此前 GPT-2 时代的最好成绩是 35.8),在 LAMBADA 下一词预测上,few-shot 提示下做到了 1.92(此前最好成绩是 8.63)——两个数字都来自 GPT-3 原始论文。GPT-2 第二大的模型(762M 参数——1.5B 才是最大的那个),在 WikiText-2 上报告的困惑度是 19.93。下面这整条阶梯用的都是同一个公式——从这个模型初始化时的 ≈248,320,到 GPT-3 的 1.92,跨越了五个数量级:

随着 loss 下降,perplexity 也在压缩(对数刻度)
10^010^210^410^6均匀随机基线PPL 248,320GPT-3 175B · Penn Treebank(zero-shot)PPL 20.50GPT-2 762M · WikiText-2(test)PPL 19.93GPT-3 175B · LAMBADA(few-shot)PPL 1.92
自信(低 perplexity)困惑(高 perplexity)

Perplexity = exp(cross-entropy loss)。对 V 个结果的均匀猜测,perplexity 恒等于 V——所以这个模型在第 13 章里那个 ln(248,320) ≈ 12.4 nat 的初始 loss,取个指数,就正是最上面这一档。训练中 loss 每降一个 nat,这根条就跟着缩短一截。

标准基准:固定的问题,固定的答案

困惑度算起来便宜,也不需要设计任何专门的留出任务,但它只衡量模型对通用文本的预测有多准——不能告诉你模型能不能答对一道知识题、写出能跑的代码、或者解出一道数学题。为此,这个领域靠的是基准(benchmark):一套固定的问题,配一套固定、可核对的答案。

MMLU(Massive Multitask Language Understanding,Hendrycks 等人,2020)是 57 个中学到专业水平的学科——历史、法律、医学、物理等等——打包成 15,908 道四选一的选择题。评分就是普通的选择题准确率,对比 25% 的随机猜测下限;GPT-3 175B 在 few-shot 下拿到 43.9%,而更小的 GPT-3 尺寸几乎只是压线超过随机水平(24.9%–26.0%)。

HumanEval(Chen 等人,2021,也就是提出 OpenAI Codex 的那篇论文)是 164 道手写的 Python 题目:给一个函数签名和一段 docstring,补全函数体,再跑真实的单元测试(平均每题 7.7 个测试)。因为采样本身是随机的,模型会拿到k 次尝试,指标就是 pass@k——k 个样本里至少有一次命中的问题占比,用一个无偏估计量算出来,这样就不会单纯因为多采样几次而占便宜:

其中每道题采样 n 次,c 次通过全部测试。Codex 做到了 pass@1 = 28.8%、pass@100 = 70.2%——而没有代码微调的普通 GPT-3,得分是 0%。

GSM8K(Cobbe 等人,2021)是 8.5K 道小学水平的应用题(7.5K 用于训练,留出 1K 用于测试)——「Natalia 在四月卖出玩偶给 48 个朋友,五月卖出的数量是四月的一半……」——评分靠精确匹配最终的数字答案,不是 pass@k:没有代码要跑,只有一个数字要核对。论文的核心结果讲的是验证器,而不是单纯拼规模:一个微调来解题的 6B 模型,配上另一个训练来给 100 个采样候选解重新排序打分的 6B 验证器模型,其表现略微超过了单样本、没有验证器的微调 175B 模型——论文把这个提升描述为「大致相当于把模型规模扩大 30 倍」。

LLM-as-judge:当没有唯一正确答案时

上面这些方法都搞不定开放式输出——「帮我写一句生日祝福」根本没有一个固定的正确字符串可以对比。Zheng 等人(2023)提出了如今业界普遍采用的解法:找一个强 LLM(他们用的是 GPT-4)去读两份候选回复,像人类评审一样判断哪个更好。他们提出的 MT-Bench(一套固定的多轮问题集)和 Chatbot Arena(众包的正面对决)正是建立在这个想法上,而 GPT-4 作为裁判达到了 >80% 与人类偏好的一致率——和两个人类彼此之间的一致程度相当。

这篇论文同样毫不含糊地指出了 LLM 裁判会在哪里出错,点名了三种具体的 bias:position bias(偏向无论谁先展示的那个回复)、verbosity bias(偏向更长的回答,不管它是不是真的更好),以及 self-enhancement bias(裁判偏向那些读起来像自己「家族」风格的回答)。LLM-as-judge 之所以强大,正是因为它能覆盖固定答案基准碰不到的开放式文本——但作为换来这份灵活性的代价,它也继承了那个裁判模型自己的盲点。

污染:为什么这些数字都不能照单全收

上面每一个基准都是互联网上的公开文本,而每一个现代模型都是在互联网的海量抓取上预训练出来的。如果一个基准的题目——更糟的话,连答案——泄漏进了预训练数据,模型完全可以靠背下了这套题拿高分,而不是真的推理出了答案。这就是污染(contamination),而抓污染的手段一直在变严格。

GPT-3 自己的论文用的是相对宽松的检测:评测样本和训练抓取数据之间的 13-gram 重叠。用这个方法,它把 QuAC、SQuADv2、DROP 里超过 90% 的样本都标记为受污染——这个数字相当惊人,说明只要网页抓取规模够大,公开基准的文本会渗透进去多深。GPT-4 的技术报告把门槛收紧成了 50 字符子串检测:先去掉评测文本和训练文本里的空格与符号,再看评测样本里随机抽的三段 50 字符片段,有没有原样出现在训练数据里。这个更严的检测确实找到了真正的泄漏——OpenAI 把受污染题目去掉后重新给考试打分,还整个丢弃了一项基准 BIG-bench,因为在其中确认发现了污染。更新的一种方法干脆绕开训练语料本身:Min-K% Prob(Shi 等人,2023)只看模型自己——如果一段序列里那些「最不该被猜中」的 token,模型给出的概率却高得可疑,就标记它为很可能是被记住的:一段真正没见过的文本里,理应有几个真正让模型意外的 token,而被记住的文本通常没有。

所以读这个子章节里的每一个基准数字,以及你在任何地方看到的每一个基准数字,都请带上这个星号:它是一个真实的、可核查的测试分数——同时也是一个可能在某种程度上是在衡量记忆、而不是能力的数字,具体到什么程度,训练这个模型的实验室之外没人能完整审计。

你浏览器里的 Qwen 有基准数字吗?

部分有。Qwen3.5-0.8B 官方的 Hugging Face model card 公布了一整族知识与推理基准上的真实、带日期的分数——其中包括 MMLU-Pro、MMLU-Redux、C-Eval、SuperGPQA、GPQA 和 IFEval——大多数都报了两遍(一遍是模型默认的 non-thinking 模式,一遍是 thinking 模式,也就是训后章节里那个 <think> 块),唯一的例外是 GPQA,卡片只报告了 thinking 模式下的分数。它没有公布的——对这个具体的 0.8B checkpoint 来说——是一个 GSM8K 分数、一个 HumanEval 分数、或者一个经典(非 Pro、非 Redux)的 MMLU 分数——直接搜索这三项,也都没能找到任何独立的官方数字。这是卡片自己给出的表格,缺口原样保留:

Qwen3.5-0.8B 官方 model card 实际报告了什么
non-thinkingthinking
MMLU-Pro
MMLU-Redux
C-Eval
SuperGPQA
GPQA
IFEval
GSM8K这个 checkpoint 未公开该项
HumanEval这个 checkpoint 未公开该项
MMLU (classic)这个 checkpoint 未公开该项

把每一行都按字面读,包括那个反常的一项:在 IFEval 上,卡片报告的是 non-thinking 分数更高,而不是 thinking(52.1 对 44.0)——thinking 模式并不是在每一项指标上都稳赢,卡片也没有把这一点抹平。而GSM8KHumanEval,以及经典 MMLU 这三个你可能会预期出现的 benchmark,在这个具体 checkpoint 的表里根本就没有。不是每个模型都会在每个 benchmark 上被评测;这个空白是诚实的数据缺失,不是一个被藏起来的差分数。

来源:huggingface.co/Qwen/Qwen3.5-0.8B——直接读取,没有任何外推。

这个缺口就是诚实的答案,本课程不打算用一个编出来的数字把它抹平。不是每个 checkpoint 都会跑遍每一个基准——同一个系列里更小、发布更快的模型,经常只在旗舰版跑过的一个较窄切片上被评测过——报告「没有测过」,比报告一个没人核实过的数字,更值得信任。