AI 研究 · 结构化输出基准测试
LFM2.5-350M 在 JSON 上提升 14 个百分点,YAML 几乎原地踏步
一次 100 步的 GRPO 训练将 LFM2.5-350M 在 IFStruct schema 基准上的成绩从 22.6% 提升至 29.7%。JSON 提升 14 个百分点,YAML 提升 0.3 个百分点,而最主要的失败模式几乎没有变化。

7 个百分点的跃升,以及仍然失败的 70%
基线测试通过 llama.cpp 以 BF16 精度部署 LiquidAI 的 LFM2.5-350M,并让它面对全部 2,000 个 IFStruct 测试项。它通过了其中 452 项,即 22.6%,平均延迟 1,453 毫秒。IFStruct 发布博客对同一模型报告的成绩是 21.1%,两者足够接近,因此该 notebook 直接沿用本地测得的数字作为固定基线:此后所有数字都来自完全相同的部署栈,所以这一比较衡量的是训练本身,而非基础设施。
随后是在大约 500 个训练样本上进行的 100 步 GRPO。合并后的 checkpoint 通过了 2,000 项中的 594 项,即 29.7%,延迟 1,518 毫秒。这是 7.1 个百分点的提升,而微调后的模型仍有大约每十次中七次返回评测器拒收的结果。
错误统计显示了这些失败集中在何处。两次运行都由同一类报错主导:"required field missing"(缺失必需字段),基础模型记录到 7,228 次,训练后记录到 7,331 次。项目数量错误从 738 次升至 890 次,类型不匹配从 540 次升至 555 次。有两类错误确实消失了。基础运行记录到 317 个未闭合的代码块和 170 个缺失的代码块;这两项都没有出现在微调后的统计中,而这正是提示词设计所想要产生的结果。
为什么 schema 合规性需要单独的计分板
结构化输出是人们要求语言模型执行的最常见任务之一,却也是最缺乏单独衡量的一项。大多数评测套件把有效性并入更宽泛的推理或抽取分数中,于是一个以无法解析的格式给出正确答案的模型,和一个从未找到答案的模型可能得到相同的分数。IFStruct 衡量的是形态。它测试输出是否有效、是否可解析、是否与所请求的 schema 匹配,而这正是决定一个模型能否被接入下游系统的关键问题。
测试框架和数据集均为开放资源:代码位于 Liquid4All/ifstruct 仓库,数据集 1.0 版以 LiquidAI/ifstruct-v1.0 发布。来源明确指出,该 notebook 并非 IFStruct 博客中 RL 模型背后的流水线,也没有试图复现已公布的分数。它旨在证明:狭窄的、针对特定任务的微调可以把一个小模型推向大得多的模型的性能水平。
在免费档 GPU 上的 600 万个可训练参数
整个过程都能装进免费档的 16 GB Colab 或 Kaggle GPU。训练数据来自 nvidia/Nemotron-RL-instruction_following-structured_outputs,该数据集为每个提示词配一个目标 JSON Schema 和预期字段数量;实际使用了约 500 个样本。适配器是 rank 16、alpha 32 的 LoRA,由于 LFM2.5 采用注意力与卷积的混合架构,它针对该设计特有的模块名:q_proj、k_proj、v_proj、out_proj、in_proj、w1、w2、w3。这大约训练了 600 万个参数,约占模型的 1.66%。
Nemotron 的分布与 IFStruct 不匹配,因此提示词先经过改写。40% 的提示词末尾追加了使用围栏代码块的指令。另有 20%(与该组不重叠)被改写为带必需条目数量的顶层数组任务。后面的裸列表结果正来自这第二项改动。
三个奖励函数以 0 到 1 的量表为每个补全结果打分。json_format_reward 对所请求的格式给满分,对格式错误但可解析的答案给 0.2,对无法解析的输出不给分。field_count_reward 对完全正确的顶层字段数量给 1.0,并随着数量偏离线性衰减。schema_validation_reward 统计约束违规项,并根据必需键存在的比例给予部分分数。三者以 1.0、0.5 和 2.0 的权重相加,这意味着 schema 有效性所占的权重是格式本身的两倍。训练温度为 1.1,相对参考模型的 KL 惩罚为 0.01。
16 GB 的预算也塑造了其他选择。补全长度被限制在 1,024 个 token,对于嵌套 JSON 来说并不宽裕;作者报告称,整个训练过程中被截断的补全比例一直接近零。
隐藏在平均值背后的退步
| IFStruct 分组 | 基线 | GRPO 微调后 | 变化 |
|---|---|---|---|
| 总体 | 22.6% | 29.7% | +7.1 |
| JSON | 18.0% | 31.9% | +13.9 |
| YAML | 27.2% | 27.5% | +0.3 |
| 包装键 | 28.5% | 29.7% | +1.2 |
| 裸列表 | 16.6% | 29.7% | +13.1 |
按所请求的格式划分,JSON 通过率几乎翻倍,而 YAML 原地不动。按顶层结构划分,裸列表从 16.6% 跃升至 29.7%,包装键对象则从 28.5% 微升至 29.7%。这一模式与提示词增强直接对应,因为裸列表输出正是那 20% 被改写的训练提示词所要教的内容。
| 实体类型 | 基线 | GRPO 微调后 | 变化 |
|---|---|---|---|
| 剧本场景 | 17.4% | 37.0% | +19.6 |
| 日志解析器示例 | 29.2% | 45.8% | +16.6 |
| 支持工单批次 | 37.0% | 49.3% | +12.3 |
| 活动票务预订 | 45.8% | 57.9% | +12.1 |
| 访谈文字记录片段 | 26.2% | 16.2% | -10.0 |
| 相机评测 | 7.2% | 6.0% | -1.2 |
实体层面的结果在两个方向上的波动都更大。相机评测在 83 个项目中从通过 6 项滑落至 5 项,访谈文字记录片段则下降 10 个百分点。训练前后最弱的五个实体类型是同样的五个,只是顺序有变:recipe、gpu_review、camera_review、customer_email_thread 和 conference_schedule 在两次运行中都位于末尾。Recipe 翻了一倍多,从 4.3% 升至 10.0%,但依然接近垫底。无论奖励信号教会了什么,它都没有教会那些本来就最难的任务。
真正重要的比较是来源本身给出的那个。微调后的 350M 模型仍低于 Qwen3.5-2B 的 33.15%,后者的规模是它的数倍。用 600 万个可训练参数和 100 步训练填补这一差距的大部分,才是核心论点。而警示就在旁边:IFStruct 奖励的是形式,而形式正是狭窄的奖励信号能够买到的东西。微调运行中那 7,331 次缺失必需字段,从来就不是目标。
- 来源 : LFM2.5-350M gained 14 points on JSON. YAML barely budged — 2026-09-03
每天早晨用 3 分钟掌握科技要闻
每个工作日一封邮件,只讲真正重要的 AI 与科技动态。