本文经授权完整转载,保留原讲座转录、时间戳与课件图片。原文:课程页面。
语言模型评估:从困惑度到智能体,我们究竟在衡量什么
这堂课的标题是评估。它系统梳理了衡量语言模型好坏的各类方法——困惑度、考试型基准、聊天基准、智能体基准、纯推理基准与安全基准——并讨论了污染、生态效度、数据集质量,以及"评估究竟为了什么"这个更根本的问题。
评估为什么值得用一整讲来讲
今天我们要讲评估。到目前为止,这门课已经把训练一个语言模型所需的东西都讲完了:我们定义了架构、优化器、主训练循环,展示了如何用 kernel 和并行把训练做快,然后看了缩放定律(scaling laws),也看了一点如何让推理变快。所以现在唯一缺的一块,就是我们训练所用的数据,下周会花时间讲它。数据会塑造模型的行为:如果你在代码上训练,模型大概就会擅长代码;如果你只在 DNA 序列上训练,它大概不会说英语。但在进入数据之前,我们需要先谈我们想从模型得到什么样的行为,这就是评估的主题。
评估问的是一个非常简单的问题:给定我们训练好的模型,它有多好?那么,什么是"好"?评估看起来像是个挺机械的流程:你定义一些提示词(prompt),把提示词发给模型,拿回一些回答,然后计算准确率。那为什么我们要用一整讲来讲评估?因为评估其实是一个非常深的话题,而且非常重要,因为正是评估在塑造 AI 的发展方向。

评估设定"北极星"(North Star),模型的开发者——无论是开源还是闭源——所有人都把评估当作衡量进步的标尺。所以,认真地思考你的评估方式,其实就是在隐式地塑造你的模型将来能做什么。评估难的地方在于下面这一点:你往往是从一个抽象概念出发的——我希望我的模型做到什么?也许我想让它擅长对话,或者擅长推理。这些都是抽象概念。而评估的真正过程,就是把它转化为一个具体的指标,由一些具体的提示词或环境来支撑。这就是核心挑战,我们后面会看到很多"抽象概念到具体指标"这个过程的例子。
"好"的几种定义:从榜单到付费
我们回到"什么让一个模型算好"这个问题,先浅层地看。也许一个模型好,是因为它在基准测试上表现好。有个叫 Artificial Analysis 的网站,它在衡量所谓"模型智能程度"上已经算是个标准了。如果你去 Artificial Analysis 上看,就能看到从 GPT-5.5 开始往下排的各种模型——这个点之后还有很多模型。它包含了一堆不同的数据集,其中一些我们后面会讲。

或者,也许一个模型好,是因为它基准测试表现好而且运行便宜,因为成本也应该算数。这张图同时画出了前面那个智能指数(intelligence index),以及运行某个模型的推理成本。你可以看到,正如你可能预期的,两者是相关的:运行费用越高,智能指数越高,但它们并不完全对齐。
又或者,也许一个模型好,是因为人们就是更偏好它。这个立场是 Arena AI(原名 Chatbot Arena)采取的,你可以根据人们喜不喜欢来给模型排名。再或者,也许一个模型好,是因为人们干脆选择去用它,并因此为它付费。OpenRouter 就是这样一个服务,它让人通过一个统一的端点使用多个不同的模型。因此它收集了大量关于人们在使用哪些模型的统计数据,并公布出来,看看 OpenRouter 上被使用最多的模型是很有意思的。这不能代表所有模型使用情况,但它能让你对 OpenRouter 上的人在做什么有个感觉。这更像是一个经济学视角:我不知道什么是"好",但如果人们愿意为之付费,那它一定是好的。

这些答案未必有哪个是正确的。我也不知道是不是存在一个正确答案,我只是想让大家思考"好"的不同衡量方式。

困惑度:最自然的评估方式
现在我们从具体的方法开始看如何评估语言模型。没有比回到语言模型的核心概念更好的起点了:语言模型是 token 序列上的一个分布 P(x)。从这个视角看,评估一个分布有一种非常自然的方式,就是困惑度(perplexity),或者说似然、对数损失(log loss),这些都是相关的概念。它的意思基本是:我有一个测试数据集 d,我看看我的语言模型给 d 分配了多少概率质量,然后做归一化、做除法,让数字更容易解释。基本上就是这样:我的概率语言模型给一个数据集分配了多少质量。

这很自然。事实上,我们在训练时就是在训练集上最小化困惑度。所以显然的做法就是去测测试集上的困惑度,这就是 2010 年代很多年里语言建模研究者的传统做法。你随便翻开一篇语言建模的论文,他们做的就是这件事。那时标准的数据集包括 Penn Treebank、WikiText-103,还有从机器翻译来源构建的 One Billion Word Benchmark。这全都属于经典范式,也就是分布内(in-distribution)评估:你在某个数据集的训练划分上训练,然后在它的测试划分上评估。
人们确实取得了很大进步,而这种进步就是通过困惑度的下降来衡量的。比如有一篇 2016 年的著名论文,展示了你可以把 CNN 和 LSTM 应用到 One Billion Word Benchmark 上,得到巨大的困惑度下降。要知道,在那个时候人们还在讨论 n-gram 模型,也许还有混合模型。这是第一个决定性的结果,证明纯神经网络显然是正确的方向。

那时候生活很简单:你在训练划分上训练,在测试划分上测困惑度。到 2019 年 OpenAI 的 GPT-2 出现时,他们训练用的数据集叫 WebText,是从 Reddit 链接出去的网页中抓取的 40GB 文本。而他们的评估方式其实不同:他们在所有人都在评估的标准数据集上做零样本(zero-shot)评估。这就是分布外(out-of-distribution)评估。
这是他们论文里的一张表,显示随着他们训练不同的模型——最大的模型是 15 亿参数——他们能展示出相当大的提升,尤其是在小数据集上。比如 PTB 这个很小的数据集,他们得到了 35 的困惑度,而当时的最好成绩是 46。如果你的分布内数据足够多,你的表现就不如 SOTA,但考虑到这个模型根本没有在 One Billion Word 数据集上训练过,这已经相当令人印象深刻了。我不知道,也许有重叠,因为我不确定他们有没有仔细做训练-测试的去污(decontamination)。
这开启了一个新范式:不再只把语言模型看成一个分布内设定,而是思考我们想在一个大数据集上训练,然后在标准基准上评估,这如今已经是很普遍的标准了,但当时还被视为一种新奇的做法。
"困惑度就是你所需的一切"这个论调
既然在讲困惑度,我也想说一句:困惑度就是你所需的一切。我不会太当真,但我认为这是一种心态,驱动了很多语言建模研究。基本论证是这样的:外面存在某个真实分布,叫它 t,而你在训练模型 p。那你能得到的最好的困惑度是什么?最好的困惑度就是那个真实分布的熵,而这在 p 等于 t 的时候实现。所以通过最小化困惑度,你就是在把困惑度往下压。
唯一的极小值点就是当你真正得到了真实分布。而当你有了真实分布,你就大功告成了。你模型了一切。你可以解决所有问题,你可以做这样的事:以问题为条件,生成解答;以问题为条件,生成答案。所以通过降低困惑度,我们最终会达到 AGI,这就是那个论点。
我的意思是,这听起来可能有点天方夜谭。但从某种意义上说,这确实是许多人强有力的驱动力,他们不断扩展语言模型,在那个收益也许不那么明显的时期。在 GPT-3 之前,我不认为人们清楚语言模型会产生如此巨大的影响。而正是这种信念:如果你把困惑度降下来,好事就会发生。
困惑度的局限与条件困惑度
当然,困惑度也许并不是全部。一种框架方式是,困惑度也许比你需要的东西更多。比如你有一个句子像"Stanford was founded in 1885",困惑度会惩罚所有 token 上的预测。特别是,它会问:给定其余部分,1885 的概率是多少?那个 token 可能相当有用,它基本上是一个以句子补全形式表达的问答例子,捕捉了关于世界的知识。但其他部分——比如句子的第一个词,甚至"founded"——也许就没那么有趣。而困惑度并不在意,它会给每一点偏离真实分布的偏差都收比特(bit)的代价。

这里有一个小解决方案,就是你可以总是测量条件困惑度(conditional perplexity)。你可以以某个提示词为条件,然后测量回答其余部分的困惑度。这让你一般能够专注于某些你相信相关的 token,而较少关注那些附带的 token。
还有一点很重要:一些基准即使没有明确的困惑度度量,实际上也是伪装的困惑度。比如考虑封闭型任务。有一篇很久以前的 LAMBADA 论文,大概是 2016 年的,基本上就是填空。你有一段上下文、一个句子,比如"Do you honestly think I will want you to have a ___",目标是猜出那个词。虽然它用准确率衡量,但它实际上是一个下一 token 预测问题。

这里的困惑度不是所有词的困惑度,而是被精心挑选过的。如果你去读这篇论文,这些词是精心挑选的,你必须真正需要一长串上下文才能解开。这实际上是早期 GPT 论文重点关注的东西,因为它们对长上下文建模很感兴趣,认为那是解锁推理等能力的关键。通过聚焦于那些需要长距离依赖才能解开的位点,是把困惑度"磨尖"到你关心的某个现象上的一种方法。
这是另一个经典数据集,你在一些语言建模论文里会看到,叫 HellaSwag。HellaSwag 是什么?他们去了各种不同的数据集和来源,做出来这个东西——它是选择题,但其实是句子补全。某种程度上,它就是困惑度。比如这样一个句子:"A woman is outside with a bucket and a dog. The dog is running around. She ___."然后你要判断哪句话最好地补全了它。所以它不完全是困惑度,是选择题,但某种程度上它又是困惑度。

困惑度榜单的一个警示
这里有一个提醒。如果你哪天决定完全接受困惑度作为衡量标准,打算搞一个排行榜让大家来比拼困惑度,那要小心一件事:困惑度排行榜会长什么样?人们会给你提交一个语言模型,而你必须计算一个对数概率(logprob)。你把测试数据发给他们,他们返回一个对数概率给你。你一看,嗯,这有点可疑,因为你需要信任他们交给你的概率是合法的,而且加起来等于 1。

否则,我可以实现一个语言模型,它总是返回 1——或者我猜是 logprob 0——那我就能得到非常好的困惑度,但显然那不是合法的分布。有了这个契约,你其实很难检查某人内部是否真的有对数概率,所以这里有些信任问题。也许你得去看代码之类的。
对于下游任务,这就直接得多,因为你可以把它当成黑盒语言模型:我给你一个提示词,你给我一个回答,然后我就能用这个回答算出某些准确率。所以困惑度从根本上不同,因为它处理的是分布,你必须小心一些。更不用说自回归模型有很多问题了。如果你用的是 VAE 或者某些模型,你甚至没法计算分布——你只能计算一个界(bound)——那你还得真的相信数学,相信这确实是一个合法的界。
总结一下困惑度:它在语言模型开发中实际上仍然被大量使用。它有一些很好的性质,我们看到它一般被用于缩放定律,因为它随规模平滑变化,这对得到缩放定律很重要。但归根结底,尤其是如果你不是信徒,那你就需要一些基准来真正捕捉真实世界的情形,去说服别人你的语言模型是好的。而对信徒来说,只要你给我看一个极低的困惑度,他们就会被说服。
关于困惑度还有问题吗?好,希望大家现在都成了信徒。
考试型基准:MMLU
那我们来谈考试型基准。考试,各位同学都知道,是我们用来测试人类的方式。你也可以把同样的心态用来测试语言模型。考试的好处是你对考察对象、对难度有非常仔细的控制。你可以把它们设计成有明确无歧义正确答案的形式,这让评分很容易。关于考试有很多很好的性质。正因如此,很多语言模型基准文化就建立在"考试"这个概念之上。

显然有很多基准,我只挑几个我认为在语言模型发展中有影响力的讲。这个是 MMLU,Massive Multitask Language Understanding,来自 Hendrycks 等人,2020 年。当时人们还不清楚语言模型真的能当通用任务求解器。那大概是 GPT-3 出现的时期,很多人我认为还是把语言模型就当成语言模型:你能生成流利的英语。但他们有这样一个想法——我们要走在曲线前面。他们覆盖了 57 个学科,组织了一批学生去互联网上搜罗各种来源,真正拼出了这个非常全面的数据集。

尽管名字叫 MMLU,里面有"Language Understanding"这个词,它其实是在考查知识和推理,而不太是纯粹的语言理解。他们评估的方式是用 GPT-3,用少样本提示(few-shot prompting)。他们基本上是说:我构造了这样一个提示词,"以下是一些关于高中数学的问题",然后给一些上下文示例,问题、答案、问题、答案,最后是最终的问题,模型要预测答案。

这看起来非常平淡无奇,但在当时,我认为相当激进:你会构造这样一个相当复杂的问题,配上上下文示例,然后指望语言模型真的能做出点合理的回应。果然,一开始模型表现得并不好。一些小模型几乎只在随机水平之上一点。而大一点的模型——这个 GPT-3——确实明显高于随机,这还挺令人鼓舞的。
然后这些年来,如我们所知,这个基准基本上饱和了。这是一个网站,我不认为它包含了所有数据。大概是 3.5 Turbo,那是 2024 年初——哦,其实是 '23 年——到 GPT-4。而现在它已经在 90 多分了。这里还有一个链接,你可以跟着去看看这些模型的一些预测,看模型究竟在哪些题上翻车、哪些题上答对,总是很有意思。

从 MMLU-Pro 到 GPQA:把考试越做越难
大概 2024 年,MMLU 已经取得了很多进展,于是就有了:好吧——你会反复看到这个主题——这个基准变得太容易了,我们把它做难一点。首先,他们注意到有一些有噪声和琐碎的题目,所以先去掉它们。四个选项可能有点太容易了,那就扩展到 10 个。那时候用思维链(chain of thought)来解这些基准已经更流行了,而 GPT-3 出来时还不是这样。显然有些题目能从几步推理中受益。这个新基准更难了,模型的准确率又回到了 33。但你可能已经从进展中看出来,它一开始很低,现在已经回到了大概 88、接近 90。所以这个基准可能也稍微太容易了。

还有另一个基准叫 GPQA,全称是 Google-Proof QA(防 Google 问答)。这里的想法是:我们怎样才能得到一个真正好的基准?思路是,如果一个题目你查 Google 就能解出来,那 Google 有互联网,而语言模型也是在互联网上训练的,所以如果你一查就能解,那这题大概太容易了。

他们的题目是博士级别的。MMLU 也许有些是本科甚至研究生水平,但现在它更明确地是想出很难的题。而这时候你会发现,要出真正难的题,你得投入相当多的人力。这个基准由 Upwork 上的 61 名博士承包者参与。有人写一道题,经过专家验证,专家给出反馈;出题人再修改这道题;另一个专家再看这道题;然后题目才算成形。

接着你把题发给一些非专家,他们可以访问 Google,然后看他们能不能解出来。这些题里有一个子集叫 DIAMOND set,你可能在别人的排行榜上见过,它的标准是:两位专家都同意,并且有一位非专家也能答对,那才算一道好的 DIAMOND 题。这是一个相当严格的评审流程。

博士专家只能拿到 65%。这我想主要是四选一。所以这高于随机。但如果你考试只得 65 分,这不算好成绩。而且即便是专家,就算给他们 30 分钟并可以访问 Google,也只是略高于随机,多不了多少。当时 GPT-4 大概是 39%,我们看看现在怎么样。GPQA 现在也到了 94。所以这些基准的保质期我想都不太长。
我要说的是,这些基准里有些虽然对大模型饱和了,但对开发更小的模型、拟合缩放定律之类的仍然有用。
训练污染问题
有人问了一个非常重要的问题:你怎么知道这些测试没有用于训练、模型没有和它们接触过?你怎么知道这些题目不在训练集里?简短的回答是我们不知道,因为我不知道训练集里有什么。我稍后会回到污染(contamination)这一点,以及应对它的方式。但你应该始终对这些数字打个折扣,因为这里只能靠信任。
也许再补充一句。我认为训练污染是有点微妙的,因为很可能不是他们真的在测试集上训练。但题目可能来源于其他来源,而那些来源可能被训练过。所以污染往往是一个比"不小心在测试集上训练了"微妙得多的过程。
还有另一个问题吗?同样的问题。好,很好,保持怀疑总是好的。
Humanity's Last Exam
我要讲的最后一个考试型基准,有一个不祥的名字,叫 Humanity's Last Exam(人类最后的考试)。这是去年的。他们在说:好吧,这些模型变得这么厉害了,我们把能做的都做上,搞一个真正难的出来。所以它是多模态的、涵盖很多学科、仍然是选择题,我想还有一些简答题。

这是众包的。他们有一些钱来激励那些喜欢钱的人来出题,也用署名权来激励那些在意这个的人。他们经过多轮评审,用前沿模型来筛选,有一整套流程。对你那个问题的另一个回答是,他们还留了一个没有公开发布的私有集合,好确保它不会进入训练。然后你只能希望——因为你还是得把题发给模型——这些提示词不会最终进入训练。但愿如此吧。
每篇数据集论文都长这样:以前的基准,看模型做得多好;我的数据集,看所有模型都做得很差。这是一个常见的模式。这个基准尤其如此,分数是个位数,相当惨淡。我们看看 2026 年做得怎么样。它还有一些空间,即使是 Mythos 也只有 64.7。所以这确实似乎是个相当难的考试。

总结这一节:如你所见,随着模型变强、现有基准饱和,我们把题目越做越难。有意思的是,选择题这种形式仍然存活下来,因为用选择题,你想让它多难就能多难。有人认为选择题太容易,但你看,我可以给你一道非常难的选择题,这不是重点。我想重点在于,选择题限制了你所能问的问题的范围。但就难度而言,选择题没有问题。
考试型题目的根本问题
考试型题目的主要问题是,它不捕捉真实世界的使用。除了在评估 HLE 的时候,没有人会拿 HLE 的题目去问语言模型。绝大多数时候,人们在问开放式的问题。它们甚至不一定有正确答案,可能本身就表述得不好,而这些基准捕捉不到这一点。

有人问:模型的输出怎么和标准答案比较来算准确率?对选择题来说,就是看你有没有选对答案。语言模型生成 C,而我的答案是 B 或 C 或 A 或 D,我就检查它们是否相同。又有人追问:那我们只生成一个 token 吗?是的——好,那这个问题就更多是关于模型如何生成答案,而不是评估本身了。有几种做法:一种是字面上采样生成一个字母;或者现在更常见的是生成思维链,你生成答案,也许还有一些解释。但如何抽取答案是有一套做法的,这确实有影响,语言模型评估对此可能非常敏感。不过我在这里不讲这个。
聊天基准与人类偏好
那我们讲一个非常不同的基准类别,叫聊天基准。到目前为止我们讲的都是选择题任务,它们在捕捉某种智能和难度上还是挺好的。但大多数人不会拿一道选择题去问他们的 AI 助手,除非他们想用 AI 系统替自己考试——你永远不会那么做,没有人会。
这里有一个半受真实用例启发的例子。我可能说:"我想做一道带奶酪的甜菜沙拉,哪些香草合适、哪些不合适?"这是一个非常开放的问题。然后你得到一些回答,同样是开放式的回答。那问题就是,你怎么评估这个东西?你没法用精确匹配去检查。甚至根本没有标准答案。这里有一些想法,我们可以逐个过一遍。

其中一个想法是由 Chatbot Arena 开创的。思路是:去问人。但他们问人的方式,我认为是个聪明的点子。他们做了这样一个网站,任何互联网上的随机的人都可以进来聊天。然后不是像一个普通助手那样得到一个回答,你实际上会从两个不同的模型得到两个回答,都是匿名的,然后你来评哪个更好。比如你输入一个问题,得到这两个回答,助手 A、助手 B,然后问:A 更好、两个都好、两个都差、还是 B 更好?

用这个过程,你可以得到一大堆模型 A、模型 B 两两比较的数据,哪个更好?然后你可以据此计算 ELO 排名。我不知道你们有多少人熟悉这个,我让大家都跟上。在这些 ELO 排名里,你把评分模型定义成:某个模型打败另一个模型的概率,是模型 B 和模型 A 的 ELO 分数的某个函数。A 的 ELO 分数越高,概率就越高。这是一个平滑映射。然后你用参数——也就是 ELO 分数——去拟合这个模型,最大化两两比较的似然。结果你就得到了每个模型的一个评分。
这就是 Chatbot Arena(现在叫 Arena AI)做的事。你可以得到这样一个漂亮的排名。我想 Claude Opus 在这里表现不错,但名单上也有别的模型。

人类偏好评价的优点与隐患
这个设置有几个好的地方。一是你有真实世界的提示词。想法是任何人都可以来这个网站,而来这个网站的动机是他们能免费使用语言模型。所以有一个隐含假设:他们确实是想用它做点有用的事。因此你得到的是真实世界的提示词。
但有一点你要记住:这些人是谁?互联网上的随机的人——我不知道那个分布是什么样的。来到这个平台的互联网随机人,我不知道那个分布长什么样。我想他们在论文里有一些人口统计信息,但人口统计说明不了全部问题。你可能会担心来自不同模型的偏见。也许是垃圾信息发送者。有人试图钻空子,甚至可能是提交了模型的人,他们想让自己的模型看起来好。你根本不知道。这有点像个蛮荒西部。
还有一个问题是,二选一的偏好——A 还是 B 更好——非常简单,能喂给这个评分,但它把风格和正确性混在了一起。国际象棋的 ELO 排名很合理,因为唯一重要的是你有没有赢。但"哪个更好"就远没那么清晰。
还有人是裁判这个问题。输入提示词的那个人来回答问题。这在某种程度上是好的,因为这个人有某种意图,他们可以声明自己的意图有没有被满足。但某种程度上也不行,因为他们之所以问这个问题,大概是因为他们不知道答案。所以如果我给你两个答案,他们凭什么判断哪个是对的?然后还有谄媚(sycophancy)的问题:更讨人喜欢的回答可能会比正确但诚实的回答得到更高的权重。所以这里有很多潜在问题。
但这个方法的妙处在于,你不需要把同样的提示词喂给所有模型,这正是 ELO 的美妙之处。在国际象棋里,你不必让每个人都和每个人下,可以只是稀疏地采样一部分,只要图是连通的,你仍然能推出排名。这很重要,因为评分的是人,你没法指望一个人去评价所有模型,甚至超过两个模型都不行。还有一点很好的是,随着新提示词和新模型的到来,有一个自然的随时间更新的故事。
LLM 作为裁判:AlpacaEval 与 WildBench
那我讲一个不同的方法。这是 2023 年的 AlpacaEval。指令来自各种来源。这里的指标是对基线模型的胜率。你有一个模型,AlpacaEval 说,我来为这个提示词生成——用比如当时的基线模型 GPT-4 preview 生成——然后用 GPT preview 来评判哪个更好。这立刻引出了潜在偏见的问题,但我们先放一边。

这基本上是 LLM 作为裁判(LLM as a judge)的一个实例,现在非常流行。你可以通过使用多个裁判并做集成等方式来缓解这种偏见。AlpacaEval 初期的一个问题是,LLM 裁判偏好长回答。这导致了一堆榜单刷分行为,很多微调过的模型被提交上来,仅仅因为回答更长就在 AlpacaEval 上得到很高的分数。这个问题在后续一篇论文里被修复了,他们用一个非常简单的回归方法来给指标去偏。
但这引出了一个更一般的问题,不一定是 AlpacaEval 特有的:你怎么评估一个指标?我们一直在讲模型的评估,讲如果我有一个指标,怎么评估一个模型。但如果我在提出一个指标,这个指标本身怎么算好?这是一个难题,没有答案。
你可以做的一件事更像是一种合理性检查:看它和其他指标的相关性,想法是除非你是想模仿另一个指标,否则相关性高并不一定总是更好。AlpacaEval 和 Chatbot Arena 的相关性是 0.98,相当高。这暗示说:假设你想在 Chatbot Arena 上评估,但你不好意思把自己的模型放上去,或者不想等人评分之类的,你就可以改用 AlpacaEval 来评估。当然,这个相关性是针对某一组模型的,所以它对比如比 GPT-4 preview 更强的模型可能不成立。这个榜单我想已经一年没维护了,但这是它当时的样子。

还有一个我要讲的基准叫 WildBench,它从人机对话中收集了一批例子。像 Chatbot Arena 一样,他们也上线了一个免费服务,人们可以和这个机器人聊天,他们收集了查询。然后像 AlpacaEval 一样,他们用 LLM 作为裁判来评估模型。

这里的主要创新是使用清单(checklist),它是针对某个特定提示词或任务生成出来的。想法是,如果你只是让语言模型判断这个回答好不好,这在某种意义上是定义非常不明确的任务,我不知道这取决于你在意什么。而有了清单或评分标准(rubric),就大大限定了范围,让评估任务定义得更清楚。他们也展示了与 Chatbot Arena 的相关性,诚然这有点循环论证,因为你可以问 Chatbot Arena 真的是金标准吗,但至少大家都在同一条船上。

如何评估开放式回答
总结这一节:你怎么评估开放式回答?这里没有清晰的答案,但有一些想法。在参考答案和模型回答之间做两两比较一般是个好主意,因为尤其对于非常相似的回答,你可以给出方向性信息:这个比那个稍微好一点。但绝对评分,比如这是 7 分还是 8 分,这通常信号要弱得多。
你应该始终留意偏见,无论是人类裁判还是 LLM 裁判,他们有不同偏见,但无论如何这是要重点关注的。也许你唯一能做的就是用好多个裁判、人类,以及所有东西来做评估——如果所有裁判都说你的模型更好,那也许你的模型确实更好。
最后,开放式回答的评估问题,我想强调,它其实并不是定义明确的。所以我认为,越来越重要的是定义评分标准或清单,来提高实际评估的可靠性和明确性。这一点无论对裁判是人还是 LLM 都成立。任何做过众包的人都知道,如果你只是让一个人去给某个东西打分而不给评分标准,你大概会得到非常莫名其妙的结果。
智能体基准:从 SWE-bench 到 CyBench
那我们进入智能体的世界。可以把我们到目前为止做的想象成:评估语言模型说了什么,也就是聊天。而现在我们要评估 LLM 做了什么,也就是智能体。所有关注 AI 热潮的人都知道,智能体无处不在。我认为它们肯定会改变我们思考语言模型的方式。
智能体基本上就是一个语言模型加上某种脚手架(scaffold),脚手架是一套逻辑,决定语言模型将如何被调用、它能访问哪些工具等等。有几个我想指出的基准。一个是现在非常流行的 SWE-bench。任务基本上是:给你一个代码库和一个 GitHub issue 的描述,提交一个 PR。评估 PR 的方式是它能不能通过单元测试。这些测试的设计是:在你提交 PR 之前,某些单元测试通不过,你的目标是修好它,让某些单元测试通过且不破坏别的东西。
这里是些说明的例子,这是 issue,然后是一些上下文里提供的代码,你的目标是生成一个补丁(patch)。给定一个补丁,评估你能不能通过。这个的好消息是评估非常直接。我们看看 SWE-bench 上表现如何。其实这是 SWE-bench Verified,我稍后会讲为什么会这样。SWE-bench 在——这大概是 2024 年——还只有 16% 左右,现在已经到 93 了。干得漂亮,Mythos。

这是一个非常经典的通用基准,因为智能体方面的大量注意力都投在了编程能力上。SWE-bench 真正开创了这种思路:如何评估智能体在真实环境中写代码的能力。
这是另一个项目,叫 Terminal-Bench。这里的想法是它会更通用。我们让环境是一个计算机终端,定义一批可以在计算机终端里通过输入各种命令完成的任务。这个环境的好处是它非常简洁和通用。这些任务是从全世界 93 个人那里众包来的。其中 89 个任务构成了 Terminal-Bench 2.0。这些任务一般要花一小时到一周多,取决于你是专家还是新手。这是今天排行榜的样子。最顶尖的模型是前沿模型。有趣的一点是,智能体在这里也很重要,因为你可以有两个智能体用同一个模型,准确率却不同。
另一个我要讲的基准是网络安全。这是 40 个夺旗(Capture The Flag)任务。设定是:你有一个智能体,给定一个环境,它可以运行各种命令,比如看源代码,它可以访问 web 服务器。目标是入侵这台服务器,提取出一个 flag,一个唯一的字符串,证明你成功入侵了服务器。这些是竞赛、网络安全演练,正常是人类来做的。
这是这个智能体脚手架的一个例子。这是非常简化的一版:基本上你有一段连续的记忆,你产生一个动作,得到环境反馈,然后把结果放进这个缓冲区里拼接起来。我后面会展示,这段历史显然会增长得相当多,你需要更好的方式管理上下文。这是它刚出来时排行榜的样子。效果最好的模型大约在 10% 左右。随着时间推移,现在这个问题其实已经完全解决了。这就是 CyBench。

还有另一类问题,属于 MLE 工程。这个基准测试包含了一系列 Kaggle 竞赛,涉及处理数据、训练模型,等等等等。智能体可以查看数据集、阅读描述、编写代码、训练模型,最终提交结果,然后得到一个评分。这就是目前排行榜的样子。同样,你可以看到,其实还是那些老面孔,在 LLM 这边。但在不同的智能体脚手架方面,存在相当大的差异。

脚手架为什么重要
有一点需要注意,我要指出,关于智能体脚手架,它们非常重要。所以当我说我讲的是语言模型评估时,这比语言模型评估的范围更广。原因在于,不像我之前提到的最早的那个 CyBench 智能体脚手架,现在你需要复杂得多才能解决真正复杂的任务。

人们意识到的一件事是,显式规划是有帮助的。你不能只是意识流、思维链这样,然后你构建起这个上下文,智能体很容易就迷失了方向。与其这样,不如维护一个待办清单,把它逐项勾掉。还有分层委派:智能体应该调用其他子智能体,带有一些干净的上下文,那个智能体做一些事情,只返回结果。主智能体不需要看到所有血淋淋的细节,这有助于封装,提供一些封装。
还有记忆,人们一直在实验显式地读写文件,尤其是随着上下文增长,你不能只是把它存在上下文窗口里。最后,还有更多的上下文工程,用来管理这个过程。什么时候该委派给子智能体?什么时候该试这个策略而不是那个策略?该把什么写入持久记忆?而这些东西一般是针对特定语言模型来优化的。
智能体令人兴奋,因为它们扩展了语言模型的能力面。脚手架非常重要。所以当我们谈评估智能体时,其实是同时在评估语言模型和智能体脚手架两者。

纯推理:ARC-AGI 这条线
现在我们换个方向,讲另一种非常不同的基准风格。我叫它们纯推理,没有更好的说法。动机是:到目前为止所有任务都需要一些语言和世界知识。那问题是,我们能不能把推理或纯粹的流体智能(fluid intelligence)从知识和事实记忆中分离出来?可以说这能给你一种更纯粹的智能形式。
有一个项目叫 ARC-AGI,从 2019 年开始,目标正是这个。任务的设计是 100% 人类可解,但对 AI 有挑战。每道题都是一个特别的雪花(独一无二),这是意图。所以记住一堆事实或解过以前的问题不应该有多大帮助。如果你们还记得 LLM 的历史,2019 年是前 LLM 时代,我的意思是这是 GPT-2 时代。所以这在这方面是很有先见之明的。

这是这个问题第一版的一个例子。给你这些图,你试着猜接下来是什么。你花 10 秒大概就能解出来。你大概会猜到,就是把黄色填进去组成一个矩形。
去年有一个更新版,稍微复杂一些,你可以看看。这是它的轨迹。ARC-AGI-1 刚出来的时候——我想这其实是 0。基本上模型什么都做不了。GPT-3 预训练模型完全没能推动指针。而这正是创作者本来的意图:预训练模型只是学习互联网上的事实,也许学到一些语言模式,但这些对 ARC-AGI 任务都没有直接帮助,至少对这些任务是这样。
然后 2024 年发生了一些事情。这是 OpenAI 发布 o1 和 o3 模型的时候。然后情况突然开始起飞。现在 ARC-AGI-1 基本上被解决了。甚至 2025 年 ARC-AGI-2 出来时,它也没完全被解决,但看起来正在被解决的路上。真正解锁这一切的是推理能力。
现在人们也许会想,预训练学到的那些知识对这个任务是不是必要的。当然,没有预训练就不会有推理模型的爆发,所以可以说它仍然重要,只是在 ARC-AGI 的大部分历史里也许不直接可见。
就在上个月,ARC-AGI-3 出来了。你看到这个熟悉的模式:创作者一看,哦,该出新基准了。这现在是一个交互式环境,你可以在线玩这个游戏。同样没有语言,你只是根据模式去推断。挺有意思的。现在分数极低。所以明年我教这门课时,我肯定得更新这页幻灯片。我们走着瞧。
我觉得 ARC-AGI 这条线非常值得思考。目标是 disentangle 推理和知识。这真的很难做。我认为这大概是这方面最好的尝试。能不能真正完全解耦并不清楚。当然,如果人们真的在意这个基准,我想人们大概可以——人们几乎能给任何东西做基准。所以你可以设计这样的问题:这些仍然来自某种先验,我不确定有什么东西是所谓的纯粹推理。
这也被限制在人类推理范围内。明确目标是在合理时间内 100% 人类可解。所以它并不扩展到超人类推理,比如赢得更多金牌或解决开放数学问题,而后者可以说仍然非常有用和重要。但显然它暴露了当前模型的一些缺口。所以如果你把目标想成是能解决所有任务,那就还有工作要做。
有人问:ARC-AGI-3 看起来很有图形感,是否涉及多模态内容,或者也能用文本表示来编码?是的,问题是这个看起来很图形化,那么语言模型的输入是什么?这基本上是——我不知道具体尺寸——我想是 64×64。你可以提供这个图像,或者你可以用 ASCII art 或某些文本表示来提供它。无论哪种方式,这里都有一个空间元素需要模型去推理,它真的不是英语或自然语言。

安全基准与"安全"的定义难题
我们换个方向,讲另一类与安全相关的基准。人们谈论语言模型的安全已经有一阵子了。如果你想其他领域,比如汽车,这里的安全是什么意思就很清楚。这些是汽车安全评级,涉及把车撞向墙壁、测试气囊、看它保护假人的效果如何。这背后是几十年的游说和厘清车辆安全是什么。那对 AI 来说呢?我会说这里没有很好的答案,但我会给你们一些人们在思考的例子。

有一个基准叫 Harm-Bench。它主要是关于用一些被认为有害的东西去提示模型,并期望模型拒绝。这是一种安全。我认为人们想到安全时,最主要想到的就是:我想防止坏人用语言模型做坏事。但事实证明,这不是唯一重要的事。
还有另一项工作 AIR-Bench,它试图更全面地思考安全,考察欧盟、中国和美国的监管框架,以及公司政策,构建出一个分类体系,涵盖所有可能出错的事情。然后用这个构建一组特定的提示词,进行评估等等。

安全的一个问题是越狱(jailbreaking),这本身是个子问题。语言模型一般被训练成拒绝有害指令,但我们知道,如果你够聪明,是可以绕过去的。有一些早期工作用自动方式优化提示词来绕过安全防护,用的是 GCG,基本上是一种坐标式优化算法。引人注目的是,在开放模型上做优化可以迁移到别的模型上。我希望这些攻击现在不再奏效了。但在当时,你可以生成一些基本上是乱码的东西,加上一份毁灭人类的分步计划,OpenAI 的模型就会照办。当然,你可以争辩说,这真的是毁灭人类的计划吗?至少期望的行为应该是它拒绝。

这引出一个更大的问题:什么是安全?让这件事棘手的一点是,安全的许多方面是非常依赖上下文的。它涉及政治、法律、社会规范,这些在不同国家各不相同。还有,你想到安全,你得想到风险是什么。风险其实也相当多样,大概需要不同的关注。幻觉(hallucination)是一种风险,尤其在医疗、法律或金融场景里。但这也和单纯的能力相关:如果你把模型做得更准确,它就和看得不那么清楚相关。谄媚是个问题。协助犯罪是个问题,但这可能和能力相反。不平等。丧失批判性思考也可能是一种风险,而它和能力相关。
所以如果你思考语言模型对世界的广泛社会影响,并把安全想成是确保 AI 对人类往好的方向发展,这实际上是一个比我这里有时间讲的要复杂得多的话题。最后,语言模型还有两用(dual use)的一面。网络安全智能体可以被用来入侵系统,也可以用来做渗透测试、让系统更安全,这让"这些到底是安全风险还是实际上有益"这个问题变成一把双刃剑。

生态效度:评估离真实使用有多近
我们接着谈评估的一些更宽泛的考量。我认为评估的一个重要方面是真实性,或者说生态效度(ecological validity):评估在多大程度上捕捉了真实世界的使用?特别是,考试离真实使用非常远。Chatbot Arena 来自真实的人,但你可以质疑这个分布是不是对的人或对的使用场景的分布。
有几个我想提的基准试图触及生态效度,尤其是试图触及用例层面,至少不只是单个查询的层面。OpenAI 做了一个基准叫 GDPVal。他们考察了按美国 GDP 排名前九的行业、44 种不同职业,请了一批专业人士来创建任务。这些是约有 14 年经验的专业人士。你可以看到有护士、礼宾、房地产经纪人、影视剪辑师等等。他们创建了一批任务。

还有一个例子是在医学领域。在此之前,很多医学基准是基于标准考试的。事实上,对人类来说也是如此:你通过这些标准考试,从医学院毕业,然后你去给病人做手术。其实这是个更长的过程,你不会直接给病人做手术。但重点是,对语言模型来说,你也不应该只是通过医学考试就直接部署它们。这是一个项目,121 个任务来自 29 位临床医生。它意在代表临床医生实际会问语言模型的那类东西,这和选择题型考试题相当不同。
还有另一个试图触及真实数据的项目。如果你问:谁真正有数据、知道人们在做什么?是模型开发者。这个项目很有意思,因为它用语言模型自身来分析真实数据。特别是,出于隐私考虑,你不能真的去看人们的数据,但你可以让语言模型去看这些数据,分析和总结总体模式。然后语言模型就能告诉你,人们用 Claude 做的事情都有哪些类型。
有时真实性和隐私是相互冲突的,因为理想情况下你想要的其实是来自真实查询流的一个样本。那会非常有价值,能评估一个模型工作得怎么样,深入理解错误是什么。但那会撞上隐私考量。

科学效度:训练-测试污染
另一个考量是另一种效度,就是总体而言,评估如何做到科学有效。这个问题很早就被提出了,就是训练-测试重叠,或者叫污染。在机器学习入门课里,你学到的是:希望你不要在测试集上训练。在基础模型之前,这其实很清楚。用 ImageNet、SQuAD 和很多基准——抱歉,是数据集——总有一个训练划分和一个测试划分,大家都按同样的规则玩:你在训练数据上训练,在测试数据上测试。生活很简单。
而现在,你有这些在互联网上训练的模型,而且不止于此。此外,你不知道数据里有什么。所以这让评估变得相当不同。那你能做什么?第一件事,你可以试着推断一个模型是否真的见过测试数据。
这是来自 Tatsu 小组的一个巧妙想法:你利用这样一个事实——基准中题目的出现顺序应该是随机的。但如果模型偏好某种与基准一致的特定顺序,那这大概说明它就是在那个基准上训练过。

另一条路是,你可以鼓励人们报告实际的训练-测试重叠。这和规范有关。一般而言,也许在机器学习里较少,但在统计学里,你总是报告置信区间。你有一个估计值,而我总是想知道这个估计值有多可靠。这只是标准做法。这篇立场论文的想法是,模型提供方——如果你要声称某个 GPQA 分数,你就应该总是提供一些理由,说明你没有在测试集上训练。

另一条路是干脆放弃。就是说,好吧,所有这些评估——我们就假设人们在上面训练过,就假设最坏情况。我们这边有的是,你总能定义新的评估。有一堆想法,比如 LiveCodeBench、UncheeatableEval,基本上就是抓取新的网页,或从论文、GitHub 存档里定义那些超过语言模型截止日期的评估样本。这看起来相当稳健、很好。但要记住一点,时间戳也不总是安全的,因为比如我可能贴出代码——我可能把某个东西放到 GitHub 上,而它实际上来自另一个仓库。所以你没法确定它是否真的新鲜。
第四条路是用私有评估。公司的模型开发者就是这么做的。如果你是 Google 或 OpenAI,你有内部代码库,你假设它不在互联网上,你显然也不会在这份数据上训练,所以你可以用它来评估。这一般相当可靠。如果你不是公司,你可以用你个人的写作。我有一堆研究生时被拒的论文,我从来没放到网上,所以我可以用它们。这种评估方式我认为对困惑度评估特别有利,因为困惑度你只需要一个好的数据集,然后评估对数概率。
数据集质量
另一个我要提的担忧是数据集质量。记得我展示过 SWE-Bench Verified 的排行榜。这是因为 SWE-Bench 有一堆问题,或者说任务、单元测试,不够严谨,以及其他一些问题被修掉了。还有很多其他基准也经历了这个过程,比如 GSM8K 或 MMLU,人们去做了更仔细的审计,然后意识到,等一下,这道题其实——这道题有什么地方坏了。
比如这一道。这段文本里没有给出曲线,所以你没法回答这个问题。宝宝穿袜子了吗?不行,没法判断。还有一篇论文显示,智能体基准有很多问题,而它们可以说更难评估,因为不只是你去看问题和可能的答案,还有一整个环境。

对于编程,有能通过或通不过的测试用例是很好的。但正如我们知道的,测试用例可能是不完整的。所以你可能会通过所有测试用例,却仍然没有一个能用的解决方案。还有一个例子是 TorchBench 基准,他们展示了如果一个智能体只输出空回答,就能拿到 38%。所以这些基准有一些琐碎的地方,你要非常小心地避免。
我要提一个工具叫 Docent,它用语言模型来检查智能体的轨迹(trace),以发现问题。这是对我们那种非常量化的基准方式的一种定性回应。我总是建议,每当你做一个基准——无论是开发一个基准,还是在一个基准上跑模型——你都要始终去看输出,试着审计它,确保你确实认为你在衡量你自认为在衡量的东西。
评估的目的是什么
也许再哲学一点。评估的意义是什么?我讲了很多不同类型的评估。真的没有一种评估能统治一切。我认为,当你思考评估时,你必须非常清楚目的是什么。而我认为这一点常常没有被清楚地说出来。
比如,你可能是一个用户,或者一个想做出购买决策的公司:对某个特定用例,你要选 A 还是 B?或者你只是一个研究者,你有某种对智能的直觉概念,想以某种方式衡量它。或者你想为商业或政策原因理解其中的益处和危害。又或者你是一个开发者,你想要反馈来改进模型。这些不同的目标会把你引向可能不同的基准,或者不同的评估策略组合。

最后还有一点要处理,我之前隐约提到过:我们到底在评估什么?在基础模型之前,研究者评估的是方法,因为我们有训练测试划分,唯一变化的是实际的算法。而今天,我们大多在评估模型和系统,一切都行。有一些例外。比如 NanoGPT speedrun,它有意设计成一种评估算法的方式,特别是评估你能多快训练一个模型。但大多数语言模型评估是关于评估最终的模型,这很有用,因为那才是真正会被交付、被人们使用的东西。但我想核心要点是:你应该始终非常明确地声明你的目标是什么。

总结
没有唯一正确的评估。选择你想衡量的东西。我们讲了一堆不同的基准,从困惑度、考试型、聊天、智能体、推理到安全。它们在难度、真实性、效度上各不相同。而且往往有权衡。很难同时做到真实、困难和生态有效,而且没有训练测试污染。所以你往往得在其中一个因素上妥协,取决于你的目标,你得选择你愿意在哪个因素上妥协。这就是这一讲的结尾。下周我们会开始讲训练数据。好,下次见。