跳到主要内容

评估(上):为什么最难,尺子有哪几把

这一章讲三件事: 为什么「这个模型好不好」会成为整门学科最卡脖子的问题; 考卷上真正老资格的那几把尺子怎么读数——困惑度、执行正确率; 以及一个贯穿全书后半部的地基概念:把「意思」变成一串数字,让相近的意思有相近的距离。 它在全书的位置:前三章造出了会聊天也可能胡说的模型,这一章开始回答书里最重的问题——好不好,谁说了算;第 05 章接着讲 AI 当裁判,第 06 章讲怎么搭自己的考场。

1. 顶层全景:考试比教学还难

Greg Brockman(OpenAI 总裁)2023 年底说过一句分量很重的话:很多时候,仅靠评估就够了1。意思是:模型能力大家都差不多时,胜负手不在训练,在选拔——你怎么挑、怎么验,决定你上线的是什么质量。

但这件事恰恰最难。原因用一个真实事故就能说清:曾有聊天机器人劝人结束生命,有律师提交了模型编造的判例被法院处罚,还有航空公司的机器人信口给出了不存在的退款政策,公司被判赔2——这些系统的开发方都不是草台班子,而是没考出模型的真话。作者把评估难的根源拆成五条:

#挑战一句话
越智能越难评一年级数学人人能判分,博士级论文谁也给不了分
输出开放式正确响应有无穷多种写法,列不全「标准答案」
黑盒商业模型细节不公开,只能看输入输出猜内部
考卷饱和越来越快GLUE 考卷 2018 年发布一年就考满,SuperGLUE 补上又满
考试范围还在扩大不光要打分,还得探索模型能干什么新活

本书用来破局的尺子分两族,这一章讲第一族(打分的尺子):

尺子族谱:
├── 语言建模指标(§3):熵 → 交叉熵 → 困惑度
│ 量的是「模型预测下一个 token 时有多犹豫」
├── 精确评估(§4–5):
│ ├── 功能正确性 —— 能跑、结果对就给分(代码类)
│ └── 相似度比对 —— 和参考答案比对(不可靠,谨慎用)
└── AI 当裁判 / 两两比较排名(第 05 章)

图说:尺子从左到右越来越贵,也越来越接近「人的判断」。

2. 主走查:熵——一段话的平均信息量

要看懂家族里最有名的成员困惑度,得先认识它的底层:熵。这个词是香农 1951 年在同一篇论文里提出的,他把当时的研究对象定为字符;熵衡量的是一个 token 平均携带的信息量3

信息量听起来玄,走一遍书里的例子就落地了。假设你要发明一种语言,专门描述「一个点落在正方形里的哪个位置」4:

方案 A:词表只有 2 个词 ——「上半」「下半」
每个词只排除一半可能 → 1 个比特就够编码
这种语言的熵 = 1

方案 B:词表有 4 个词 ——「左上」「右上」「左下」「右下」
每个词信息更多 → 要 2 个比特编码
这种语言的熵 = 2

图说:每个词携带的信息越多,表示它要花的比特越多;
同时预测难度也越大(要在更多候选里猜)。
以上是书内原例,不是演示编造的数。

这里顺带交代比特:它是最小的二进制单位,1 个比特能区分两种可能,2 个比特能区分四种——每加一个比特,可区分的可能性翻倍。

所以熵有双重身份:既是「每个词平均带多少信息」,也是「猜下一个词有多难」。熵越低的语言越好猜——香农补过一句妙语的反面:如果你能完美预测我接下来要说什么,那我说的话就没有提供任何新信息5

3. 同一把尺的三副面孔:交叉熵与困惑度

3.1 交叉熵:给模型的猜测打分

有了「数据的熵」这个基准,就能给模型记账了。交叉熵这个名字指的是:拿模型学到的分布去对照真实分布时,「预测下一个 token 的难度」6。它的构成书里写得明白:

交叉熵 H(P,Q) = H(P)(数据本身的熵,天生的难度)
+ KL(P‖Q)(模型分布偏离真实的罚分)

训练的全部目标就是把这个数往下压;
如果模型学得完美,KL 项归零,交叉熵退化为数据自己的熵。

图说:「天生难度 + 学艺不精的罚分」。KL 散度非对称,
P 对 Q 和 Q 对 P 是两个不同的数——方向别搞反。

KL 散度这两个字母不用怕,读作「两个概率清单差多远」即可,后文不再用到公式。

3.2 困惑度:从比特数翻译成「几个选项」

工程里大家嫌比特读数不直观,于是把它翻译成更好懂的问法:困惑度(perplexity,缩写 PPL——把交叉熵换算成「下一个 token 在几个选项里犹豫」的读数,换算用的是以 2 为底的幂)。数字越大,模型越拿不准7

主走查的第二步落在这里。回到方案 B 那种语言:某模型完美学会了它,交叉熵 2 比特;轮到它预测时,要从 2² = 4 个选项里做选择——所以它的困惑度恰为 48

三个实践规律,报数前先看清楚(不然跨模型比较必踩坑)9:

规律原因
内容越规整,困惑度越低HTML 里看见 <head> 就能赌附近有 </head>
词表越大,困惑度越高可选 token 多了,天然更难猜
上下文越长,困惑度越低香农当年只用 10 个前文 token,今天普遍 500 到上万个

作为参照:困惑度低到 3 并不罕见——若所有 token 等概率,这意味模型有三分之一的概率蒙对下一个 token;考虑到词表动辄几万到几十万,这个准确率相当惊人10

3.3 这把尺拿来干什么

困惑度在家里有四个正经用途11:当模型能力的代理指标(GPT-2 的报告显示更大模型在各数据集上都更低)、检测考题泄密(模型在某基准上困惑度异常地低,多半说明考卷进了它的训练餐单)、训练数据去重(只收高困惑度的新样本)、以及抓异常文本(「我的狗在空闲时间教量子物理」这种句子会让它飙高)。

但要记住两个诚实声明。其一,算这条尺需要模型交出每个 token 的抽签把握值,而并非所有商业模型都肯交出这份数据——这把尺正变得只能对开源模型使用12。其二,书里记录了一个反直觉现象:有些模型经过偏好微调之后困惑度反而升高了,而使用者更喜欢它们——「分数更好」和「产品更好」在这把尺上并不同步13

4. 精确评估:代码能跑,就算对

换一族思路:不估「像不像好答案」,直接验「是不是好答案」。功能正确性的定义朴素到家:系统有没有实现预期功能14

它的自动化范式是代码生成,别名执行准确性:把模型生成的函数丢进解释器跑一遍。书里的例子值得完整抄录——要求模型写 Python 函数 gcd(num1, num2) 求最大公约数,然后喂给它 (15, 20):

输入生成:gcd(15, 20)
解释器执行 → 若返回 5 ✓ 通过这道测试
→ 若返回其他 ✗ 该份答卷记错

图说:不评代码写得美不美,只看数字对不对。
这是整套评估体系里唯一「零争议」的一格。

支撑它的老家底有两件。一件是单元测试:在不同场景下执行一小段代码、核对其输出的自动检查,LeetCode 这类平台判定你提交用的就是它。另一件是现成的考卷:代码类有一套叫 HumanEval 的(OpenAI 出品),还有一套叫 MBPP 的(谷歌出品);「文本转 SQL」任务也有 Spider 等专门考卷,全部沿用此法15

计分方式也有讲究。主流口径叫 pass@k:每个题目让模型答 k 次,只要其中一次通过全部测试,该题算解;得分 = 解出的题数 ÷ 总题数16。比如 10 题、k 取 3 时解出 5 题,pass@3 就是 50%。它天然成立一条不等式:抽签次数越多越容易命中——pass@1 < pass@3 < pass@10,看成绩单时别拿不同 k 的数字混着比。

边界也要看清:能整体验证的任务才能用它。若复杂任务模型只完成一半,「半个答案」往往比完整错误答案更难评判(评估一步棋容易,评估半盘棋难);游戏机器人、节能调度这类有硬性得分的目标则非常适合17

5. 和参考答案比:三种方法,层层退让

多数任务没有解释器可用。常见做法变成:准备一份人工写好的参考答案,比大小。比较的方式从严到宽有三档,每一档都有坑。

第一档:精确匹配。 只适合「2+3=?」式简短答案;放松一点可以接受「包含参考答案即算对」——「答案是 5」算对。但这立刻翻车:问某事件日期,回答多写了一个错误的月份,整段仍应判错,包含式却放行了18

第二档:词汇相似度。 数字面上重叠多少:一个办法是编辑距离(把一段文字改成另一段最少需要几次增删改),另一个是 n-gram 重叠(连续 n 个 token 的小片段有多少共同出现)。机器翻译时代的老牌指标 BLEU 就是这么算的。它的致命伤书里钉得很死:OpenAI 发现,在 HumanEval 上,错误解答和正确解答的 BLEU 得分竟然相近——字面撞车和答案正确是两回事19。经典反例还有一句话之差:「Let's eat, grandma」(吃饭吧,奶奶)和去掉逗号的版本(吃掉奶奶吧)词汇几乎全同,含义南辕北辙20

第三档不再比字面,改比意思层面的接近程度,名字叫语义相似度——这就把我们带到全书的下一块基石跟前。

6. 嵌入:把意思变成距离

先从现象起头:计算机只会算数,「你好吗」和「What's up」字面毫无重叠,凭什么让它知道是一个意思?

办法是把每个文本都换成一串数字(嵌入——旨在捕捉原始数据含义的数值表示)。关键的设计约束只有一条:意思相近的文本,这串数之间的距离也近。「距离」用几何说法理解就行——两串数各是空间中的一个点,点挨得近就是意思近。这样的串通常几百到上万个数字组成,比起原始文本动辄百万级的信息量,是一种刻意压扁的低维表示;所以这串数的长度也叫它的维度21

制造这种表示的模型就叫嵌入模型(BERT、CLIP 都是),选型时有专门的排行基准 MTEB。它的用途远不止评分:第 08 章的检索(RAG)核心动作「拿查询找最近的知识片段」,整个地基就是嵌入的距离;第 12 章的数据去重同理——两段文字几乎相同,它们的点必然几乎重合。

更进一步,两组不同类型的东西也能塞进同一个空间。CLIP 就用网络上收集的约 4 亿对「图像配文字」训出了一对编码器,使一张钓鱼的照片和「一名渔夫」这句话的两个点紧紧相邻——从此可以拿一句话去搜图库22。这套「联合嵌入」是第 08 章多模态检索的地基,记住结论即可:不同的模态,只要各有编码器投进同一空间,「距离等于相关」就开始生效。

7. 作者的判断与证据

  • 五条挑战是行业共识的汇编:每条都有公开文献或年报支撑(基准饱和有 GLUE→SuperGLUE 的发布时间为证),可信度高。
  • 语言建模指标的数学是教科书级的,作者自己也注明本节数学偏多、读者可跳过公式只取直觉。
  • 作者的观察:LLM 评估方向的论文数量在 2023 上半年出现爆发式攀升,但她引 DeepMind 研究者的话指出,评估方法的开发长期缺少系统性投入——工具有点跟不上雄心23

判断(我们的,不是书里的): 本章三把尺的评价应该倒过来背——困惑度正因商业模型关闭数据而加速失效;BLEU 类指标已在代码任务上被判「与正确无关」;真正可靠且可自动化的只剩功能正确性,而它能覆盖的任务面最窄。自动评估的天花板 = 你能不能造出一个机器可验证的成功标准。 如果错,会错在: 如果新一代商业模型重新开放逐 token 概率、或多模态任务的自动验证器成熟(图表渲染、网页截图比对等),功能正确性的覆盖面会快速外溢,判断需上调。

8. 边界与局限

  • 本章继承原书的分期:讲的指标以 2023 年前后的实践为准;语义相似度的具体打分工装(BERTScore 等)书中一笔带过,未给选型建议。
  • 「基准饱和」的证据链在第 06 章(公开基准的可信度)还会展开,此处只承担「为什么要造新尺子」的动机部分。
  • 嵌入一节是原书 3.3.3 的速写版:嵌入模型的训练机制本书未展开,我们也没有补充超出书外的推导。

9. 可带走的

  1. 评估难的根子有五条:越智能越难考、开放式输出列不全标准答案、黑盒、考卷饱和快、考的范围还在扩大;

  2. 熵 = 平均信息量;困惑度 = 预测下一个 token 时在几个选项里犹豫——两者是一把尺的两种读数;

  3. 交叉熵 = 数据天生难度 + 模型学艺不精的罚分;训练就是在压这个数;

  4. 实用规律:内容越规整困惑度越低,上下文越长困惑度越低——跨模型比较前先对齐词表和长度;

  5. 困惑度的新用途:查考卷泄密(某基准上异常低 = 大概率进过训练集);

  6. 功能正确性是唯一无争议的自动评分法:gcd(15,20) 返回 5 就是对;pass@k 里 k 不同不可横比;

  7. 词汇相似度不可靠:HumanEval 上错误解和正确解的 BLEU 相近;「吃掉奶奶吧」教训——字面重叠不是含义;

  8. 嵌入 = 把意思变成距离:意思近的点挨得近;CLIP 证明图文可进同一个空间,这是第 08 章检索的地基。

10. 原文地图

主题原书章原文位置
评估的五条挑战第3章text/10-ch03.txt:81(搜「对其进行评估就越困难」) · text/10-ch03.txt:91(搜「饱和的速度正越来越快」)
Brockman「仅靠评估就够了」第3章text/10-ch03.txt:27(搜「仅靠评估就够了」)
三大故障开场案例第3章text/10-ch03.txt:24(搜「怂恿下自杀」)
熵的定义与香农第3章text/10-ch03.txt:170(搜「衡量了语言文本中每个字母平均产生了多少信息」) · text/10-ch03.txt:175(搜「平均携带的信息量」)
正方形语言走查第3章text/10-ch03.txt:178(搜「上半部分还是下半部分」) · text/10-ch03.txt:181(搜「左上、右上、左下或右下」)
熵 = 预测难度第3章text/10-ch03.txt:190(搜「预测语言中下一个token的难度」)
交叉熵构成与 KL第3章text/10-ch03.txt:213(搜「相同的数学符号」) · text/10-ch03.txt:229(搜「最小化其相对于训练数据的交叉熵」)
BPB 压缩视角第3章text/10-ch03.txt:249(搜「一半以下」)
困惑度 = 几个选项第3章text/10-ch03.txt:272(搜「不确定程度」) · text/10-ch03.txt:275(搜「困惑度为4」)
困惑度三规律第3章text/10-ch03.txt:313(搜「HTML代码」) · text/10-ch03.txt:319(搜「战争与和平」)
困惑度 3 = 三分之一第3章text/10-ch03.txt:328(搜「三分之一的概率」)
困惑度四大用途、查泄密第3章text/10-ch03.txt:354(搜「检测数据污染很有用」) · text/10-ch03.txt:357(搜「教量子物理」)
商业模型不给 logprob第3章text/10-ch03.txt:376(搜「公开其对数概率」)
功能正确性与 gcd第3章text/10-ch03.txt:401(搜「是否实现了预期功能」) · text/10-ch03.txt:407(搜「gcd(15,20)」)
单元测试与考卷第3章text/10-ch03.txt:410(搜「LeetCode」) · text/10-ch03.txt:413(搜「Spider」)
pass@k第3章text/10-ch03.txt:467(搜「pass@3」)
局部解难评、游戏机器人第3章text/10-ch03.txt:470(搜「一步棋」) · text/10-ch03.txt:475(搜「俄罗斯方块」)
精确匹配及其坑第3章text/10-ch03.txt:575(搜「包含参考答案」)
编辑距离与 n-gram第3章text/10-ch03.txt:602(搜「编辑距离」) · text/10-ch03.txt:622(搜「my cats」)
BLEU 不可靠第3章text/10-ch03.txt:640(搜「BLEU分数相近」)
语义相似度 intro第3章text/10-ch03.txt:646(搜「Let's eat, grandma」)
嵌入的定义与地位第3章text/10-ch03.txt:685(搜「简要介绍一下嵌入」) · text/10-ch03.txt:696(搜「捕捉原始数据含义的数值表示」)
维度与低维表示第3章text/10-ch03.txt:699(搜「低维空间中的一种表示」)
联合嵌入与 CLIP第1、3章text/08-ch01.txt:319(搜「包含4亿个」) · text/10-ch03.txt:742(搜「映射到联合嵌入空间」) · text/10-ch03.txt:755(搜「基于文本的图像搜索」)

Footnotes

  1. 出处:「第3章」第 27 段(text/10-ch03.txt:27,搜「仅靠评估就够了」)。Brockman 的原文语境是 discussing o1 类推理模型。

  2. 出处:「第3章」第 24 段(text/10-ch03.txt:24,搜「怂恿下自杀」)。同一组案例还包括律师提交虚假判例与加航赔偿案。

  3. 出处:「第3章」第 175 段(text/10-ch03.txt:175,搜「平均携带的信息量」)。香农原始措辞见第 170 段。

  4. 出处:「第3章」第 178 段(text/10-ch03.txt:178,搜「上半部分还是下半部分」)与第 181 段(text/10-ch03.txt:181,搜「左上、右上、左下或右下」)。

  5. 出处:「第3章」第 190 段(text/10-ch03.txt:190,搜「没有提供任何新信息」)。

  6. 出处:「第3章」第 201 段(text/10-ch03.txt:201,搜「预测该数据集中下一个token的难度」)。

  7. 出处:「第3章」第 272 段(text/10-ch03.txt:272,搜「不确定程度」)。

  8. 出处:「第3章」第 275 段(text/10-ch03.txt:275,搜「困惑度为4」)。

  9. 出处:「第3章」第 313 段(text/10-ch03.txt:313,搜「HTML代码」)、第 319 段(text/10-ch03.txt:319,搜「战争与和平」)、第 325 段(text/10-ch03.txt:325,搜「500到10,000」)。

  10. 出处:「第3章」第 328 段(text/10-ch03.txt:328,搜「三分之一的概率」)。

  11. 出处:「第3章」第 354 段(text/10-ch03.txt:354,搜「检测数据污染很有用」)与第 357 段(text/10-ch03.txt:357,搜「教量子物理」)。代理指标用途见第 340 段附近。

  12. 出处:「第3章」第 368–376 段(text/10-ch03.txt:376,搜「公开其对数概率」)。

  13. 出处:「第3章」第 351 段(text/10-ch03.txt:351,搜「熵坍缩」)。

  14. 出处:「第3章」第 401 段(text/10-ch03.txt:401,搜「是否实现了预期功能」)。

  15. 出处:「第3章」第 410 段(text/10-ch03.txt:410,搜「LeetCode」)与第 413 段(text/10-ch03.txt:413,搜「Spider」)。

  16. 出处:「第3章」第 467 段(text/10-ch03.txt:467,搜「pass@3」)。

  17. 出处:「第3章」第 470 段(text/10-ch03.txt:470,搜「一步棋」)与第 475 段(text/10-ch03.txt:475,搜「俄罗斯方块」)。

  18. 出处:「第3章」第 575 段(text/10-ch03.txt:575,搜「包含参考答案」)。

  19. 出处:「第3章」第 640 段(text/10-ch03.txt:640,搜「BLEU分数相近」)。Chen 等 2021。

  20. 出处:「第3章」第 646 段(text/10-ch03.txt:646,搜「grandma」)。

  21. 出处:「第3章」第 685 段(text/10-ch03.txt:685,搜「简要介绍一下嵌入」)、第 696 段(text/10-ch03.txt:696,搜「捕捉原始数据含义的数值表示」)、第 699 段(text/10-ch03.txt:699,搜「低维空间中的一种表示」)。

  22. 出处:「第1章」第 319 段(text/08-ch01.txt:319,搜「包含4亿个」)、「第3章」第 742 段(text/10-ch03.txt:742,搜「映射到联合嵌入空间」)与第 755 段(text/10-ch03.txt:755,搜「基于文本的图像搜索」)。

  23. 出处:「第3章」第 97 段(text/10-ch03.txt:97,搜「每月」)与第 121 段(text/10-ch03.txt:121,搜「几乎没有得到系统性的关注」)。