在线AI教程 / AI入门

[AI21 Labs] 为什么我们在训练前先构建指令遵循基准

· 转自:ai21.com

为什么我们在训练前先构建指令遵循基准 概要 用标准的指令遵循(IF)奖励训练一个模型,它会学会只满足约束、跳过任务本身。我们有一次运行,面对「写一章历史」的请求只回了一个词,却拿到

转载本文转自「ai21.com」,版权归原作者所有,内容已摘录正文、去除外部链接。

为什么我们在训练前先构建指令遵循基准

概要

用标准的指令遵循(IF)奖励训练一个模型,它会学会只满足约束、跳过任务本身。我们有一次运行,面对「写一章历史」的请求只回了一个词,却拿到了满分奖励。本文讲述我们是如何把它训练对的:这意味着要先构建 LIFT-Bench——一个把每条约束都限定到文档某一小节、并对任务本身打分的基准,然后把同一个分数直接用作 RL 奖励。这样训练出来的模型没有退化,并且在 IFTrain 出现下滑的外部基准上保持稳定。

那次看起来完美的训练

假设你决定训练一个专门起草文档的模型。用户会交给它一个主题、一份大纲和几条规则:这一节用德语写、这里放一张对比表、摘要控制在 100 词以内。你挑了自己能找到的最好的基础模型,采用了指令遵循领域的首选开源数据集 IFTrain,用它的检查器作为奖励跑起了 RL。

它奏效了!奖励一路爬到 1.0,IFEval 涨了 5 分,IFBench 涨了 16 分。然后你真的去读了输出(本来就该读)。你要求它写一章关于辛亥革命的架空历史,并且任何单词重复不超过四次,模型给出的答案是:「China」。

这不是思想实验;这正是我们跑这个(真实的)实验时发生的事。它给了我们贯穿后文的教训:一条指令遵循奖励必须检查任务是否被完成,而不只是检查规则是否被遵守。要做到这一点,就得先构建一个基准。

问题出在哪:奖励从未看见任务

「China」不是偶然:到第 390 步时,答案长度的中位数已经从 114 词缩到 18 词。原因很简单。IFTrain 的奖励和 IFEval 一样,是用代码针对整条回复检查约束(不能有逗号、某个关键词出现三次)。没有任何东西检查任务是否被完成,所以丢掉任务不付任何代价,而 RL 会自己发现这一点。

常规的补丁堵不上这个缺口。IFBench 加了一个奖励模型分类器,但它打的是通用质量分,而不是这个任务的分。AdvancedIF 更接近一些:它用一个微调过的 rubric 生成器产出的内容 rubric 来训练。但那个生成器、训练数据和 RL 代码全是闭源的,所以这些东西一样也没法在此基础上继续做。

所以在训练任何东西之前,我们需要一个能看见任务的评测。

第 1 步:构建一个能看见任务的评测

起草这类任务有一个很大的优势:结构。我们没有把每条约束都拿去检查整条回复,而是把每条约束挂到大纲的某一小节上,只针对该小节的文本打分。这就是「某处有一段法语」和「2.1 小节用法语」的差别。我们称之为作用域约束(scoped constraints),它们是 LIFT-Bench 的核心。

每个小节都带两类约束。可验证的一类由代码检查(例如用德语写、至少用三次「tournament」)。需评判的一类由 LLM 检查,描述这一小节必须覆盖什么(例如把各届冠军追溯回它们的首届正式锦标赛)。需评判的约束就是任务本身,被逐小节写下来,并且和格式类约束计入同一个分数。

图 1:一个 LIFT-Bench 任务的示例。每条约束都挂在一个小节上,并且只针对该小节的文本打分;由 LLM 评判的那一类约束则会写明该小节必须覆盖的内容。

作用域还给了我们一个现有 IF 基准都没有的旋钮:密度,即单个小节上的约束数量。我们在生成任务时单独设置它,与整篇文档的约束总数解耦。

一切数据都是合成的。主题来自 Wikipedia,大纲和约束来自 LLM,再由一个采样器控制每个小节落多少条约束。同一条流水线也会产出扁平任务:没有大纲,每条约束都作用于整条回复,也就是 IFEval 的做法。LIFT-Bench 共有 784 个测试任务,分为十个 split:短文档和长文档(约 4 个和 9 个小节)各四个密度档,再加两个扁平 split。

第 2 步:确认评判器靠得住

需评判的约束需要一个评判器,而奖励的好坏取决于它的评判器。默认设置是把完整 prompt、完整回复和一条标准一起交给评判器。我们用 305 个人工标注的样本来测它,结果它对几乎一切都回答「是」。Gemma-4-31B 在其中通过了 292 个,而实际只有 227 个真正被满足。不加作用域的 Qwen2.5-32B 只拿到 0.44 的 macro-F1,和永远回答「是」的 0.43 差不多。

所以我们把评判器也做了作用域限定。它拿到的不是整篇文档,而是一个针对单小节的简短请求,以及该约束所作用的全部文本:

图 2: 各评判器在 305 个人工标注样本上的得分。把评判范围限定到约束所管辖的文本之后,两个模型的 macro-F1 都提升了,而且最弱的带作用域评判器也胜过最强的无作用域评判器。

作用域限定带来了 11–19 分的提升,是我们变过的所有因素里影响最大的一个,连评判模型本身都不如它。我们的解读是:无作用域的评判器与其说不会评判,不如说是在长文档里找不到该看的那一段。最终我们选了带作用域的 Gemma-4-31B。

这一点在这里比平时更要紧,因为同一个评判器还负责发放 RL 奖励。一个对几乎一切都回答「是」的评判器,就会同样为我们在开头看到的那种退化买单。

第 3 步:重新考虑基础模型

回到开头:你挑了最好的基础模型。可「最好」是按什么说的?大多数 IF 排行榜用的是扁平的、IFEval 风格的 prompt,每条约束都作用于整条回复。LIFT-Bench 让我们能在同一条流水线里比较这种设置与带作用域的任务。我们评测了 17 个模型,每个任务 8 个样本。

在结构化任务上,最强的模型几乎顶到天花板:GPT-5.5 平均 0.96。在扁平任务上,没有模型超过 0.85,领先的闭源模型平均只有 0.65–0.72。这不是负载的问题。扁平任务携带的约束少得多,而且当我们把两边都限制到约束数不超过 10 的任务时,除一个模型之外其余在扁平任务上的得分依然更低。只有结构化任务才能拿到的大纲分数占总分的 10%,不足以解释这么大的差距。

排名也会变。在我们的九个主力模型里,GPT-5.5 在结构化任务上排第一,在扁平任务上排第五;而整体平均分最高的两个都是开放权重模型:Kimi K3 和 DeepSeek V4 Pro。扁平排行榜上最好的模型,未必是你的起草任务最好的模型。

图 3: 在约束数不超过 10 时,除 Qwen3.8-A95B 外的每个模型在扁平任务上的得分都显著低于结构化任务,所以差距并不是负载造成的。

文档其他位置的负载同样有影响。把某一小节自身的约束固定住,往其他小节加更多约束,前沿模型几乎不动(Kimi K3 每个密度档损失 0.4%,GPT-5.5 损失 1.5%),而 GPT-5 nano 损失 5.5%。一个能把单个受限小节处理得很好的模型,在文档其余部分也被压上负载之后就可能掉链子。

第 4 步:用你衡量的东西来训练

有了可信的评测,下一步就顺理成章:把同一个分数原样用作 RL 奖励。这就是 LIFT-Train,来自同一个生成器的 34,258 个任务。我们用 GRPO 在 LIFT-Train 和 IFTrain 上分别训练 Qwen2.5-7B,先看训练过程中发生了什么。

两次运行走向了相反的方向。IFTrain 的奖励在第 180 步就到了 1.0,而它的答案中位数到第 390 步已从 114 词掉到 18 词,38% 的答案在不到 30 词的情况下拿到至少 0.8 分。在 LIFT-Train 上,答案中位数维持在 390–530 词左右,没有任何一个高分答案短于 30 词。奖励曲线不会给你这种警告,所以如果你在跑指令遵循的 RL,请把答案长度和它一起盯。

图 4: 在 Qwen2.5-7B 上跑 GRPO 期间的 rollout 健康状况。在 IFTrain 上,答案中位数从 114 词缩到 18 词,38% 的答案在不到 30 词时就拿到至少 0.8 分。在 LIFT-Train 上,答案保持很长,没有一个退化。

当然,其中一部分是构造使然:一个会给内容打分的奖励,没法靠删掉内容拿到满分。真正的问题是差别是否就来自内容本身,毕竟 LIFT-Train 在格式和主题上也与 IFTrain 不同。

所以我们做了一次对照。从 LIFT-Train 切出一个纯扁平的子集,它在表层形式上与 IFTrain 一致——扁平的 prompt、IFEval 风格的约束——但奖励里保留了内容。它也训练得很干净。主题仍然不同(Wikipedia 对 WildChat),所以这不是完美的对照,但它指向的结论是:起作用的是奖励里的内容,而不是格式。

不退化只是最低门槛。更难的问题是:我们的奖励在自己的基准之外是否也有用。于是我们在五个基准上比较了两次运行,其中两个是同样会给内容打分的外部基准:

图 5: Qwen2.5-7B 上跑完 180 步 GRPO 后的得分。每种配方都在自己的基准上获胜。在同样会给内容打分的 AdvancedIF 和 ComplexBench 上,IFTrain 下滑,LIFT-Train 保持稳定。

如预期,每种配方都在自己的基准上表现最好。在 AdvancedIF 和 ComplexBench 上,IFTrain 下滑,LIFT-Train 保持稳定。差值很小,所以我们把它解读为 LIFT-Train 躲开了一次回退,而不是一次普遍性的胜利;但这正是一个奖励能看见任务、另一个看不见时该出现的模式。

第 3 步里的扁平/结构化之分,对训练数据同样重要。我们在两个作用域上分别训练 Qwen3-32B,也在混合数据上训练。每种单作用域训练都会帮到另一个作用域,但不如混合:只用结构化数据时,扁平任务上拿到 0.805,只用扁平数据时结构化任务上拿到 0.798;而混合数据对应的是 0.896 和 0.919。由易到难的课程安排没有带来任何差别。

总结

教训不只是「造一个更好的基准」。奖励决定了模型会学着去在意任务的哪些部分。如果它只衡量规则而忽略任务,那么一路上涨的奖励可能掩盖住一个在你真正要求的事情上越来越差的模型。

如果要给另一支做指令遵循训练的团队提建议,我们会说:

衡量任务,而不只是规则。 把每条约束限定到它所管辖的文本,并把内容与格式一起打分。 用人工标注检查你的评判器。 它还负责发放你的奖励。 用那个评测来选基础模型, 而不是看扁平排行榜。 把评测当作奖励, 并且盯住答案长度,而不只是奖励曲线。

LIFT-Bench、LIFT-Train 和整条流水线可以在这里获取。完整技术报告见这里。