先给结论
LLMStructBench 的研究对象不是传统 IE 里的“字段识别准确率”那么简单,而是更贴近工程现场的要求:给定一段自然语言、一份 JSON Schema 和一个示例,模型能否在第一次响应中返回一个 schema-valid、字段值也正确的 JSON object。论文的核心洞见是,\(F1_{\mathrm{micro}}\) 这类字段级指标与 \(DOC_{\mathrm{micro}}\) 这类文档级完全正确指标会出现明显分裂:prompt 约束越强,JSON 越容易 parse,但语义值不一定更准。
输入是一封邮件,输出必须是符合 schema 的 JSON,而且字段值要真的从邮件里抽对。
PJ+ 几乎不再失败解析,但很多错误会变成 Wrong Value,也就是字段在、格式对、值错了。
P 往往综合最好;PJ+ 更适合先保住结构。真正上线还需要 validation 或人工兜底。
背景:为什么结构化输出这件事还没解决
先把场景想简单一点
你可以把这篇论文想成一个“自动填表”测试:员工发来一封邮件,系统需要把姓名、日期、设备、数量、严重程度等信息填进固定表格。问题是,LLM 很会写解释,但业务系统只认严格 JSON。括号少一个、日期格式错一个、字段值编错一个,自动化流程都可能坏。
在 HR、财务、IT support、物流、电商等流程中,大量业务数据先以邮件、工单、申请说明等自由文本出现。自动化系统真正想要的不是一段回答,而是一个能被程序消费的对象,例如:
{
"EmployeeName": "Aiko Tanaka",
"EmployeeID": "XY729B",
"IssueSeverity": "High",
"ReportDate": "05.10.2023"
}
对下游 ETL 或 workflow engine 而言,“大概对”通常不够。少一个 key、日期格式错、返回 markdown code fence、把数值写成解释性文本,都可能让 pipeline 在第一步失败。
本文发现的现实缺口
- 已有研究常看 schema compliance 或抽取准确率,但二者很少被同一套任务系统性拆开评估。
- LLM 的 JSON 输出质量不是单调随参数规模变好;同一模型族对不同 prompt 约束的反应差异很大。
- 结构正确性提升可能把错误从 Missing Key 转移到 Wrong Value,而不是消灭错误。
- 隐私场景中,很多团队不能把业务邮件送到闭源 API,因此 open-weight model 的本地部署表现很关键。
术语小词典
要解决什么问题
论文要回答一个工程味很浓的问题:当我们要求 LLM 从自然语言消息中抽取所有必要字段,并输出符合指定 JSON Schema 的单个对象时,什么模型、什么 prompt 策略最可靠?
邮件、申请、提醒、工单等自然语言文本。
固定 key、类型、嵌套深度、日期 pattern。
一个 example text + reference JSON。
要求只返回单个 JSON object。
同时比较 parseability、schema validity、字段值语义正确性。
目前的方法版图
Schema-constrained decoding
代表工作 JSONSchemaBench 关注 constrained decoding engine 能否覆盖 JSON Schema 特性、提升生成效率和合规性。优势是结构强;不足是更偏 decoder/framework 层,不直接衡量端到端 IE 里的语义字段是否正确。
Prompting workflow
Generate & Organize 这类两阶段方法先抽内容,再组织成结构,动机是拆开“理解文本”和“格式化输出”。本文实验支持这个思路:结构约束与语义正确性确实会互相拉扯。
Schema-driven prompting
在 prompt 中显式提供 schema 或 example object,让模型模仿目标结构。本文把这种策略和 Ollama API 的 format 参数组合起来,形成五种可比较条件。
LLMStructBench 的定位是补上一个中间层:不只问“能不能生成合法 JSON”,也不只问“字段值像不像”,而是用同一组邮件式任务观察模型族、规模、prompt 约束之间的 error redistribution。
本文方法:数据集、任务与创新点
Dataset 设计
数据集包含 5 个 use-case,每个 use-case 有 199 个手工验证样本,共 995 tests。每个 scenario 固定一份 JSON Schema,样本由自然语言消息和 schema-conform ground truth object 组成。论文强调数据虽由 GPT-4o 合成,但经过人工检查,删除或修复 text 与 JSON 不一致的样本。
合成流程是先生成 fully populated JSON object,再用 email generation prompt 转成自然语言邮件。为了制造 lexical diversity,prompt 要求随机化人名、日期、数值和场景字段。
创新点
- 开放 benchmark:995 个手工验证样本,任务明确面向 JSON structured extraction。
- 指标设计:同时给出 character/token-ish field 级 accuracy 和 document-level validity。
- prompt 策略实验:系统比较 5 种 JSON prompting configuration。
- 模型覆盖:22 个 open-weight variants + GPT-4o reference,覆盖 0.6B 到 70B。
- 错误画像:把 MK、MV、WV 的 overlap 拆开看,指出 WV 是长期瓶颈。
Table I:五类任务复杂度
| Use case | 描述 | Count | Keys | Leaves | Depth |
|---|---|---|---|---|---|
| Support tickets | IT support ticket requests | 199 | 5 | 5 | 2 |
| Sick leave | Sick-leave requests | 199 | 7 | 5 | 3 |
| Project extension | Project extension requests | 199 | 9 | 6 | 3 |
| Conference registration | Conference registration requests | 199 | 9 | 7 | 3 |
| Loan request | Equipment loan requests,含 object array | 199 | 10.04* | 9.04* | 4 |
* Loan request 的 key/leaves 是平均值,因为结构包含对象数组。
Appendix B 的两个示例
Easy: Support Ticket
文本包含员工姓名、ID、问题描述、严重程度、报告日期。目标是扁平 key-value JSON。
{
"EmployeeName": "Aiko Tanaka",
"EmployeeID": "XY729B",
"IssueDescription": "Unable to access shared drives due to permission error.",
"IssueSeverity": "High",
"ReportDate": "05.10.2023"
}
Harder: Loan Request
文本中列出多件设备和数量,目标 JSON 含 Equipment 数组,每个 item 有类型和数量。
{
"BorrowerName": "Hiroshi Yamamoto",
"BorrowerID": null,
"Equipment": [
{"EquipmentType": "tablet", "EquipmentQuantity": 1},
{"EquipmentType": "VR headset", "EquipmentQuantity": 2},
{"EquipmentType": "digital camera", "EquipmentQuantity": 1}
],
"ReturnDate": "23.11.2023"
}
数学表示与建模
先别急着看公式:作者其实在问两件事
第一,模型抽出来的每个字段值有多接近标准答案?这对应 \(F1_{\mathrm{micro}}\)。第二,整份 JSON 有没有一次性完全正确?这对应 \(DOC_{\mathrm{micro}}\)。前者像“考试按小题给分”,后者像“表单只要一格错就退回”。
论文把输出错误递归拆成 Missing Key (MK)、Missing Value (MV)、Wrong Value (WV)。WV 又分为 string deviation、same-type value error、coercible mismatch、hard type error。最终指标不是单一 accuracy,而是字段级 \(F1_{\mathrm{micro}}\) 与文档级 \(DOC_{\mathrm{micro}}\) 的组合。
ReturnDate。null。例如 "EmployeeID": null。字段级 score
这里 key 只占 25%,原因是作者认为 value 错误对下游系统更危险。一个 missing key 也会在 value 层再被罚一次,所以降低 key 权重避免重复惩罚过重。
值级 fuzzy credit
论文给出的参数是 \(\alpha=0.5\)、\(\tau_{\mathrm{good}}=0.1\)、\(\tau_{\mathrm{bad}}=2.0\),并对严重错误字符串施加负惩罚 \(\rho_{\mathrm{bad}}=-1\)。这一设计让“42” vs 42 或轻微拼写差异获得部分 credit,但硬类型错误和荒谬字符串不会被温柔放过。
文档级 correctness
这一步非常关键:一个模型可以字段级分数很高,但每个文档都错一个小字段,对严格 ETL 来说仍然不可用。\(DOC_{\mathrm{micro}}\) 逼迫模型在 document-level 上达到“整份 JSON 完全正确”。
一个小例子
假设一份 JSON 有 10 个字段,模型每次都抽对 9 个、错 1 个。字段级分数看起来很高,但如果业务系统要求整份表单完全正确,那么 100 份输出里可能 0 份能直接进入数据库。这就是论文为什么要同时看 \(F1_{\mathrm{micro}}\) 和 \(DOC_{\mathrm{micro}}\)。
实验方法与可复现设计
实验其实是在比较两种“管住模型”的方式
第一种是在 prompt 里反复告诉模型“按这个 schema 输出 JSON”,这就是 P。第二种是用 API 的 format 参数硬性要求 JSON 或 JSON Schema,这就是 J/J+。PJ+ 则是两者都用:prompt 里说清楚,API 层也约束。
模型池
Open-weight 模型共 22 个 variants,来自 Qwen3、Phi、Gemma3、Deepseek-R1、Llama3。规模覆盖 0.6B 到 70B。
额外加入 GPT-4o 作为 closed-weight upper-bound reference,但不纳入参数规模相关分析。
运行接口
论文使用 Ollama API 风格的 format 参数做 JSON 约束实验:有时传 literal string "json",有时传完整 JSON Schema object,也有完全不设 API format 的条件。
论文没有充分报告 temperature、top-p、seed、max tokens、硬件和具体 Ollama/version,这是复现层面的明显缺口。
Table II:五种 prompting strategy
| Tag | 描述 | format 参数 | System/User prompt 中是否含 schema/example |
|---|---|---|---|
| J | 只设置 API format 为 JSON | "json" | 不显式提结构 |
| P | prompt 要求返回 JSON,并给 schema 与 example object | 不设置 | 包含 JSON schema 和 example object |
| PJ | API 设置 "json",prompt 也要求 JSON | "json" | 包含 JSON schema 和 example object |
| J+ | 把 JSON Schema object 放进 API format | JSON-Schema object | 不显式提结构 |
| PJ+ | API format 使用 JSON Schema,同时 prompt 给 schema/example | JSON-Schema object | 包含 JSON schema 和 example JSON object |
Prompt 策略选择的早期 scoring
作者先不急着比较所有模型的最终综合分,而是粗略数一数:哪个策略更常产出完美 JSON,哪个策略更容易失败。这个 early scoring 的作用是筛出 P 和 PJ+ 两个主角。
作者先用一个粗粒度策略分数挑出最值得深挖的 prompting technique。每个 test-case 或 error occurrence 的权重如下:
- Correct:每个 flawless generation 加 10 分。
- Mistakes:value deviation 或 extra keys 每次扣 1 分。
- Errors:missing values 或 missing keys 每次扣 2 分。
- Failures:无法返回可解析 JSON 每个 test-case 扣 15 分。
实验数据结构化清单
| 复现项 | 论文提供的信息 | 复现时需要补足/固定 |
|---|---|---|
| 数据 | 5 scenarios × 199 = 995 validated tests;每个 scenario 固定 schema。 | 公开仓库路径、样本划分、schema 文件版本。 |
| 输入 | natural-language message + schema + example pair。 | exact system prompt/user prompt/template 拼接顺序。 |
| 模型 | Qwen3、Phi、Gemma3、Deepseek-R1、Llama3 共 22 个 open variants;GPT-4o reference。 | 模型 checkpoint hash、quantization、Ollama tag。 |
| 生成参数 | 围绕 Ollama format 参数做五种条件。 | temperature、top_p、top_k、max_tokens、seed、stop tokens。 |
| 解析 | 若模型输出 JSON 外包裹文本,尝试 regex 抽取 JSON substring。 | regex 具体实现,多个 JSON block 时的选择规则。 |
| 评估 | 递归比较 GT 与输出,统计 MK/MV/WV,计算 \(F1_{\mathrm{micro}}\)、\(DOC_{\mathrm{micro}}\)、Score。 | 字符串 normalization、日期/大小写/空白处理规则。 |
实验结果与核心结论
先抓住一条主线
这部分所有表和图都在证明同一件事:结构正确和语义正确不是一回事。强约束可以让模型更像 JSON,但不一定让字段值更可信。读结果时不要只看 Correct,也要看 Failed 和 WV。
1. Prompt strategy 比想象中更重要
| Strategy | Correct | Mistakes | Errors | Failed | 解读 |
|---|---|---|---|---|---|
| J | 2,271 | 45,951 | 28,797 | 726 | 只靠 API JSON mode 不够,语义错误和结构错误都多。 |
| P | 7,791 | 14,171 | 2,879 | 1,597 | 正确数最高、mistakes 最少,但对 Phi 等模型可能 catastrophic failure。 |
| PJ | 6,800 | 15,792 | 13,506 | 445 | 比 J 好,但 errors 高。 |
| J+ | 6,129 | 28,903 | 1,242 | 135 | schema-level format 降低 structural errors,但 semantic mistakes 多。 |
| PJ+ | 7,646 | 20,652 | 1,169 | 18 | 最稳 parse,几乎消灭 failure;代价是 Wrong Value 更多。 |
Table IV 显示 P 在 11 个模型上是最优,PJ+ 在 8 个模型上最优。作者后续集中比较 P 和 PJ+。
2. 模型规模有帮助,但不是单调决定因素
| Model | Size | \(F1_{\mathrm{micro}}\) | \(DOC_{\mathrm{micro}}\) | Score |
|---|---|---|---|---|
| GPT-4o | approx. 1.8T* | 0.96 | 0.52 | 0.74 |
| Gemma3 | 27B | 0.96 | 0.52 | 0.74 |
| Llama3.1 | 70B | 0.95 | 0.51 | 0.73 |
| Gemma3 | 12B | 0.95 | 0.49 | 0.72 |
| Deepseek-R1 | 70B | 0.95 | 0.45 | 0.70 |
| Llama3.3 | 70B | 0.95 | 0.45 | 0.70 |
| Qwen3 | 14B | 0.95 | 0.44 | 0.69 |
| Deepseek-R1 | 14B | 0.95 | 0.43 | 0.69 |
| Qwen3 | 1.7B | 0.94 | 0.40 | 0.67 |
| Deepseek-R1 | 7B | 0.94 | 0.39 | 0.67 |
| Qwen3 | 32B | 0.94 | 0.39 | 0.67 |
| Deepseek-R1 | 8B | 0.94 | 0.38 | 0.66 |
| Phi3 | 14B | 0.94 | 0.38 | 0.66 |
| Phi4-mini | 3.8B | 0.95 | 0.38 | 0.66 |
| Phi4 | 14B | 0.94 | 0.38 | 0.66 |
| Qwen3 | 4B | 0.93 | 0.37 | 0.65 |
| Qwen3 | 8B | 0.93 | 0.36 | 0.65 |
| Deepseek-R1 | 32B | 0.94 | 0.33 | 0.63 |
| Qwen3 | 0.6B | 0.92 | 0.30 | 0.61 |
| Deepseek-R1 | 1.5B | 0.90 | 0.16 | 0.53 |
| Gemma3 | 1B | 0.89 | 0.10 | 0.49 |
| Phi3.5 | 3.8B | 0.95 | 0.03 | 0.49 |
| Phi3 | 3.8B | 0.95 | 0.01 | 0.48 |
* GPT-4o 参数量是论文中的近似值,作者也注明没有有效公开信息。
最重要的结果读法
Gemma3-27B 与 GPT-4o 并列最高,Gemma3-12B 甚至超过多款 70B 模型。Qwen3-1.7B 进入中游,Deepseek-R1-32B 反而落后于更小模型。这说明 structured extraction 的可靠性更像是 instruction tuning、数据质量、架构和 prompt compatibility 的共同产物,而不是单纯参数规模的函数。
3. 错误从“结构失败”转向“语义值错误”
| Deepseek-R1 | P | PJ+ | ||||||
|---|---|---|---|---|---|---|---|---|
| \(N_{\mathrm{err}}\) | MK% | MV% | WV% | \(N_{\mathrm{err}}\) | MK% | MV% | WV% | |
| 1.5B | 790 | 36.8 | 18.9 | 76.7 | 605 | 0.0 | 0.3 | 99.7 |
| 7B | 601 | 1.2 | 16.0 | 91.5 | 616 | 0.0 | 1.6 | 100.0 |
| 8B | 611 | 0.0 | 5.7 | 97.2 | 658 | 0.0 | 0.0 | 100.0 |
| 14B | 561 | 0.2 | 7.7 | 96.4 | 631 | 0.0 | 0.5 | 100.0 |
| 32B | 666 | 0.3 | 4.8 | 98.3 | 733 | 0.0 | 0.0 | 100.0 |
| 70B | 538 | 0.2 | 6.7 | 97.8 | 578 | 0.0 | 0.0 | 100.0 |
Table VI 是全文最有洞见的表之一。PJ+ 几乎消灭 MK/MV,特别是小模型 1.5B 的 MK 从 36.8% 降到 0%。但剩余错误几乎全变成 WV。换句话说,强 schema 约束保证“盒子形状对了”,却没有保证“盒子里放的东西对了”。
4. 顶尖模型也绕不开 WV
| Top model | P | PJ+ | ||||||
|---|---|---|---|---|---|---|---|---|
| \(N_{\mathrm{err}}\) | MK% | MV% | WV% | \(N_{\mathrm{err}}\) | MK% | MV% | WV% | |
| GPT-4o | 473 | 0.0 | 9.3 | 96.4 | 555 | 0.0 | 5.0 | 98.0 |
| Gemma3-27B | 478 | 0.0 | 6.7 | 97.3 | 559 | 0.0 | 0.0 | 100.0 |
Table VII 说明,即使是 GPT-4o 和 Gemma3-27B,错误池中也几乎被 WV 主导。PJ+ 对 Gemma3-27B 可以把 MV 降到 0,但 WV 占比变成 100%。这再次证明:schema enforcement 解决的是“形状”,不是“事实”。
5. Table VIII 的模型族级总结
| 模型族 | 最佳/推荐策略 | 主要模式 | 论文观察 |
|---|---|---|---|
| Gemma3 | 1B 更偏 PJ+;12B/27B 用 P | 1B 有 MK/MV,12B 后以 WV 为主 | 12B 是巨大跃升,27B 只有边际提升;27B 与 GPT-4o 并列最高。 |
| Llama3 70B | P | WV | 整体准确率高,但 \(DOC_{\mathrm{micro}}\) 仍有波动。 |
| Qwen3 | 0.6B 可用 PJ+,多数规模用 P | 小模型有 MK/WV,中大模型 WV | 1.7B 中游表现亮眼;32B 不一定优于小模型。 |
| Deepseek-R1 | 1.5B 用 PJ+;7B-70B 多数用 P | 规模上来后 MK 消失,WV 持续 | 32B 是反常低点;PJ+ 让结构稳定但 WV 更集中。 |
| Phi | 3.8B 系列更适合 PJ+;14B/Phi4-mini 可用 P | WV,且小 Phi 的 P failure 明显 | Phi3/Phi3.5 3.8B 的 \(DOC_{\mathrm{micro}}\) 极低,Phi4-mini 是正向异常点。 |
核心结论压缩版
实践建议
- 如果模型族与 prompt 对齐良好,P 策略通常是最高综合分选择。
- 如果模型容易输出不可解析内容,PJ+ 是更安全的起点,因为 failure 极少。
- 对业务 pipeline,不能只看 JSON parse rate;必须单独评估 Wrong Value。
- 小模型不一定不可用,Qwen3-1.7B、Gemma3-12B 展示了强性价比。
- 扩大模型规模对 value accuracy 有帮助,但对 document-level 完全正确率没有稳定保证。
论文自己的结论
- GPT-4o 没有明显压过最好的开源模型,Gemma3-27B 达到同等 score。
- PJ+ 提升结构有效性,但会增加 semantic errors。
- WV 是几乎所有配置下的主导错误。
- 最佳方案是按模型族匹配 prompting strategy,而不是盲目选大模型。
- 未来需要 post-generation semantic validation 或 fine-tuning,而不只是更强 schema。
我的 reviewer 评价
我对这篇论文的总判断
这是一篇很有工程价值的 benchmark paper:它不一定把 structured extraction 研究推进到理论新高度,但把很多团队在线上踩过的坑量化出来了。它最适合作为“选模型和 prompt 策略前的基准读物”,不适合作为“证明某模型可直接上线”的最终证据。
优点:这篇工作抓住了真问题
我喜欢这篇论文的地方在于,它没有沉迷“模型能不能输出漂亮 JSON”这种表层问题,而是把 production extraction 的两个硬指标拆开:字段值对不对,以及整份文档能不能一次过。\(DOC_{\mathrm{micro}}\) 的引入很实用,因为它代表了自动化系统最残酷的验收标准。
另一个强点是错误分析。Table VI/VII 很清楚地说明 schema 约束不是免费午餐:它会把 structural error 压下去,但把不确定性挤到 Wrong Value。这个 insight 对做 LLM ETL 的人很有价值,因为它直接决定后续要投 validation、human-in-loop、retrieval grounding 还是 fine-tuning。
不足:benchmark 有用,但还不够硬
最大问题是数据生成。虽然作者做了人工验证,但主体数据仍由 GPT-4o 合成,且 use-case 主要是模板化邮件场景。这会低估真实业务文本中的歧义、缺省信息、噪声、附件引用、多轮上下文和 schema/text 不一致问题。它更像“clean room extraction benchmark”,还不是完整的 real-world ETL benchmark。
第二个问题是复现细节不够。模型 tag、quantization、decoding hyperparameters、prompt exact text、regex extraction rule、normalization policy 都会显著影响 JSON 任务结果。论文想服务 practitioner,但 appendix 没把这些钉牢,导致可复现性打折。
我会怎么改进
下一版应该加入真实邮件/工单脱敏子集,报告严格 seed 与 decoding 参数,并做统计显著性检验。更重要的是,我会增加三类 baseline:constrained decoding engine、function/tool calling style output、以及 post-hoc repair + validation loop。否则“P vs PJ+”的结论容易被更强的 decoding/repair pipeline 改写。
指标上也可以更业务化:对字段设置 criticality weight,例如日期、金额、ID 的 WV 远比称呼大小写严重。现在 Levenshtein fuzzy credit 对字符串友好,但对 business semantics 仍偏浅。
落地建议
- 先用 P 和 PJ+ 都跑一遍自己的业务样本,不要直接照搬论文的全局最优。
- 把评估拆成三层:能否 parse、是否 schema-valid、字段值是否语义正确。
- 对金额、日期、ID、数量这类 critical field 单独算错误率,不要让平均分掩盖风险。
- 上线前加入 post-hoc validator:日期格式、枚举值、数量范围、ID lookup、跨字段一致性都应该程序化检查。
One More Thing
这篇论文最值得带走的不是某个 leaderboard 名次,而是一种评估观:结构化输出不是“格式约束问题”,而是“格式、语义、模型习惯、解码策略和下游容错边界”的联合系统问题。
更适合已经听话的模型,综合分常更高。
更适合脆弱模型,先保住 parseability。
最终瓶颈是字段值真实性,不是 JSON 括号。