SP-DocReader:基于差异感知自博弈,将 Vary-600K 的 OCR 错误率减半
参考论文: SP-DocReader: Difference-Aware Self-Play for Precise Document OCR — Wenjie Liao, Xiaohui Song, Liangjie Zhao, Haonan Lu
当参数越多,文档阅读反而越差
用数万页文档图像去微调一个 40 亿参数的视觉语言模型,听上去是提升转写质量的好办法。在 SP-DocReader 的实验中,同时更新语言模型和 OCR 模块确实降低了分布内的字符错误率。但在留出的文档基准上,这种策略反而不如规模更小的适配方式。在包含扫描档案的 IIT-CDIP 上,语言模型与 OCR 模块联合微调的字符错误率为 16.87%;而同样的页面、冻结骨干网络、仅训练一个 0.5B 参数 OCR 模块,则达到 14.42%。两种配置中,视觉编码器及其连接器均保持冻结。
这一反直觉的差距,是 SP-DocReader 的发现之一。这篇 OCR 研究论文由 Wenjie Liao、Xiaohui Song、Liangjie Zhao 和 Haonan Lu 撰写,作者来自广东 OPPO 移动通信有限公司和阿德莱德大学,发表于 2026 年 10 月 8 日。文档转写本质上容不得马虎:针对一页内容给出简短回答,与逐字复现其中的文本(包括小字号字符和数字)是两回事。论文中的例子展示了可能出现的错误:把宪法修正案的废止年份 1933 读成 1935,把 "State legislatures" 读成 "State legislators",或者把数学维数公式 dim S = dim A + |L| 转写成 dim S = dim A + IL。
SP-DocReader 正是针对这类残余错误。该框架结合了两个思路:一是保持底层视觉语言模型冻结的模块化 OCR 分支;二是迭代式自博弈训练方案,根据生成转写与参考转写之间的差异来选取损失位置。
结果相当亮眼。在 Qwen3-VL-4B 上,三轮差异感知自博弈将 Vary-600K 验证集的字符错误率从 2.40% 降至 1.11%,相比两轮监督微调,相对错误率降低约 54%。在另一项训练预算对比中,使用 30,000 页参考文档的自博弈,在五任务综合得分上超过了使用 120,000 页的监督微调。这相当于不同训练参考页数的四分之一,但并不是对标注成本或总计算量的度量。

为什么标准监督微调会分散注意力
要理解 SP-DocReader 的动机,先来看标准监督微调(SFT)是如何训练文档阅读模型的。
在标准自回归微调中,模型接收文档图像和提示词,训练流程在整个目标文本上计算 teacher forcing 的交叉熵损失。每个目标 token 都会得到监督。如果一份参考文本包含 800 个模型 token,目标函数就涵盖全部 800 个位置,尽管它们的损失和梯度贡献不必相等。
一个已经能正确转写大部分页面的阅读器,可能仍然在少数残余错误上出问题。全序列 SFT 不会利用生成的转写结果来定位这些位置。SP-DocReader 要问的是:在监督阶段之后,明确挑出剩余的分歧位置,能否改善模型的适配效果。
Teacher forcing 与实际生成也存在差异。转写时,模型以自己先前的输出为条件生成每个新 token;而监督训练时,它是在真实前缀的条件下预测下一个参考 token。SP-DocReader 把模型自身生成的转写引入训练,同时在对参考 token 打分时仍使用完整的真实前缀。
论文报告的监督训练轨迹支持了这一改动。在 Qwen3-VL-4B 上,Vary-600K 的 CER 从一轮监督后的 2.50% 改善到两轮后的 2.40%,三轮后又升至 2.66%。InternVL 在该指标上也呈现类似的反转。这些结果支持探索不同的目标函数,但并不能说明监督微调在两轮之后会普遍不再有效。
无需独立奖励模型的自博弈
SP-DocReader 建立在 SPIN 的基础之上:将参考回答与上一个模型检查点的输出配对进行迭代。当前模型从这些配对中学习,然后成为下一轮的对手。
与开放式对话相比,文档转写有一个有用的结构性优势:训练页面本身就有参考转写。该框架可以直接根据这些参考文本找出分歧位置,而无需训练独立的奖励模型,也无需收集主观的偏好标签。
SP-DocReader 将这一循环适配到页面转写任务:
- 对手生成草稿: 在第
t轮,框架冻结当前检查点,将其作为对手($\theta_t$)。对手对每页贪心生成一份转写,遇到 EOS 或生成 1,024 个新 token(不含提示词)时停止。 - 框架比对草稿: 将对手生成的 token 序列与已知的参考转写对齐。
- 框架选取差异: 找出两个序列中未匹配的位置。这些位置决定哪些 token 的对数概率进入训练目标。
- 定向优化更新玩家: 双损失目标更新可训练的 OCR 模块。其中一项比较参考差异与生成差异相对于对手的得分变化,另一项直接监督未匹配的参考 token。
- 对手刷新: 局部优化之后,更新后的玩家成为下一个对手($\theta_{t+1}$),生成新的转写和差异掩码。
转写结果和掩码在每一轮内保持固定。在轮次之间刷新它们,可以让后续训练针对更新后模型的残余错误做出响应,不过该流程并不保证每一轮新出现的差异都比上一轮更难或更细微。
精准纠错:最长公共子序列与双重梯度
SP-DocReader 的核心技术贡献在于如何选取并评分这些差异。作者提出了两种互补机制:阅读差异掩码(Reading Discrepancy Masking,RDM)与聚焦保真损失(Focused Fidelity Loss,FFL)。
阅读差异掩码(RDM)
框架直接在模型 token 层面,对真实 token 序列 $y$ 与对手的合成序列 $\hat{y}$ 进行对齐。
它对后缀对使用动态规划计算最长公共子序列(LCS)。当 token 匹配时,两个序列的指针同时前进;当 token 不一致时,算法推进能保留更大剩余后缀 LCS 长度的那个指针。若两者相等,则推进合成序列的指针,同时保留真实序列中的位置。
这一确定性对齐产生两个位置集合,分别属于各自的序列:
- $\mathcal{E}_y$:真实序列中未匹配的位置。
- $\mathcal{E}_{\hat{y}}$:生成转写中未匹配的位置。
这些是模型 token 层面的差异,不一定对应单个字符或单词,也不一定是对每个识别错误的唯一诊断。
关键在于,SP-DocReader 并不会把未匹配的 token 作为孤立的文本片段送回模型。每个被选中的 token 都使用其完整的原始条件前缀来打分。位于第 450 位的参考 token 仍然使用其前面全部 449 个参考 token;生成的 token 则使用它自己生成的前缀。掩码只选取直接的损失项,而匹配的 token 仍然参与上下文计算。
阅读差异损失($\mathcal{L}_{RDM}$)
该框架计算一个改编自 SPIN 的对比目标,其动机来自积分概率度量(IPM)中使用的期望差距。对每个序列,它计算当前玩家与冻结对手之间的得分变化:
$$\Delta_t(z) = S_\theta(z, \mathcal{E}z) - S{\theta_t}(z, \mathcal{E}_z)$$
这里,$S_\theta$ 对所选位置的 token 对数概率求和,并使用其完整的原始前缀。该求和没有做长度归一化。阅读差异损失采用逻辑损失:
$$\mathcal{L}_{RDM}(\theta, \theta_t) = \mathbb{E}\left[\log\left(1 + \exp\left(\beta [\Delta_t(\hat{y}) - \Delta_t(y)]\right)\right)\right]$$
该目标倾向于让真实差异相对于对手的得分提升大于生成差异的得分提升。这是一种相对比较,而不是仅基于错误 token 绝对概率的惩罚。
聚焦保真损失(FFL)
对比目标可以通过降低合成得分来减小,而不必提高真实得分。因此,仅仅压制错误的转写,本身并不能保证对参考文本给予更强的支持。
为了加入这种直接的压力,作者引入了聚焦保真损失($\mathcal{L}_{FFL}$)。FFL 在未匹配的真实位置上应用 teacher forcing 的负对数似然:
$$\mathcal{L}{FFL}(\theta) = - \mathbb{E}\left[\sum{k \in \mathcal{E}y} \log P\theta(y_k \mid y_{<k}, I, x)\right]$$
匹配的位置不会得到直接的 token 损失项。它们仍然可以通过充当条件上下文来影响所选的损失,因此掩码并不意味着匹配位置上的所有内部梯度或计算都会消失。
最终目标将两项结合:
$$\mathcal{L}{total} = \mathcal{L}{RDM} + \lambda \mathcal{L}_{FFL}$$
实验使用 $\lambda = 0.5$ 作为直接监督的默认权重。
作者推导了关于可训练 OCR 参数的组合梯度:
$$\nabla_\theta \mathcal{L}{pair} = -[\beta \sigma(-u) + \lambda]\nabla\theta s_y
- \beta \sigma(-u)\nabla_\theta s_{\hat{y}}$$
这里,$s_y$ 和 $s_{\hat{y}}$ 是经过掩码的参考得分与合成得分,$u=\beta[\Delta_t(y)-\Delta_t(\hat{y})]$。在梯度下降下,这两项分别产生提高参考得分和降低合成得分的压力,而 FFL 为参考项增添了权重。该推导解释了这些项的作用,但并不证明梯度方差降低,也不意味着掩码会自动带来计算节省。
0.5B 参数的甜蜜点
除了损失函数之外,模型架构的选择同样重要。作者没有更新语言骨干网络,而是在 DocVLM 的模块化阅读器基础上构建。
整个流水线按职责划分:
- 冻结的视觉通路: 视觉编码器处理降低分辨率后的页面。标准协议在有物理尺寸时以 72 DPI 渲染 PDF;纯栅格页面则将长边限制在 842 像素,且不做上采样。
- 冻结的语言骨干: 语言模型的权重保持不变,但训练 OCR 分支时仍需要穿过其计算过程求导。
- 外部 OCR 引擎: 固定的 EasyOCR 从同一张降低分辨率的页面中提供识别出的文本和边界框。
- 可训练的 OCR 模块: 一个源自 DocFormerV2 的编码器接收 OCR 文本与版面信息,采用 LayTextLLM 风格,将投影后的边界框嵌入与文本嵌入交错排列。可学习的查询向量把其输出压缩为 64 个 OCR 查询表示,再经投影映射到冻结的 VLM 中。
OCR 编码器、投影层和可学习查询向量合计约 5 亿个可训练参数。这是一个附加的 OCR 模块,而不是 Qwen3-VL-4B 本身的 5 亿参数子集。
作者将其与两个变体做了比较:一个是不带 OCR 分支、只微调语言模型的"OCR-free"变体,有 33 亿可训练参数;另一个是同时微调语言模型和 OCR 模块的"全参数"变体,有 38 亿。尽管名为"全参数",这三种变体中视觉编码器及其连接器都保持冻结。
结果揭示了其中的权衡:
- 分布内阅读(Vary-600K): 全量微调的 CER 为 0.98%,模块化微调为 1.11%。
- 零样本学术页面(DocBank): 模块化微调的 CER 为 9.05%,全量微调为 11.28%。
- 零样本扫描文档(IIT-CDIP): 模块化微调的 CER 为 14.42%,全量微调为 16.87%。
- 文档问答(DocVQA): 模块化微调得 84.89 ANLS,全量微调为 80.41。
更长的训练轨迹进一步强化了这种对比。从 SFT-2 到五轮自博弈,全量微调的四任务零样本平均分从 75.92 降至 73.60,而模块化微调则从 75.89 升至 79.81。
这些结果在已评估的零样本任务上支持模块化适配。但它们并不能证明全量微调学到了某种特定的渲染风格,也不能证明其通用推理能力出现了退化。冻结骨干网络保留的是其权重;论文衡量的是最终系统的文档处理性能,而不是对所有更广泛能力的保留情况。

数字说明了什么:错误率减半,以及四倍页数预算对比
作者评估了两种骨干网络,InternVL-3.5-4B 和 Qwen3-VL-4B,主要实验使用来自 Vary-600K 的 30,000 页英文和 30,000 页中文训练页面。标准评估使用降低分辨率的输入,并对 PDF 和栅格图像采用不同的预处理规则。分辨率研究还测试了其他设置。
主要转写与问答基准
主要对比涵盖低分辨率基础模型、两轮监督微调(SFT-2)以及随后三轮自博弈(SP-DR-3):
| Backbone | Method | Vary-600K CER (%) ↓ | DocBank CER (%) ↓ | IIT-CDIP CER (%) ↓ | DocVQA ANLS ↑ | InfoVQA ANLS ↑ |
|---|---|---|---|---|---|---|
| InternVL-3.5-4B | Base (low-res) | 4.85 | 13.44 | 19.56 | 72.79 | 50.52 |
| SFT-2 | 2.12 | 11.60 | 17.83 | 73.01 | 48.15 | |
| SP-DR-3 | 1.17 | 9.73 | 15.35 | 74.27 | 48.06 | |
| Qwen3-VL-4B | Base (low-res) | 5.22 | 12.82 | 18.45 | 78.54 | 52.21 |
| SFT-2 | 2.40 | 10.95 | 16.71 | 81.22 | 55.34 | |
| SP-DR-3 | 1.11 | 9.05 | 14.42 | 84.89 | 58.94 |
在 Qwen3-VL-4B 上,自博弈使分布内 CER 降低了一半以上。DocBank 的 CER 下降 1.90 个百分点,IIT-CDIP 下降 2.29 个点,DocVQA 的 ANLS 提升 3.67 个点。InternVL 在三个转写基准和 DocVQA 上也都有提升,但 InfographicVQA 从 48.15 小幅下滑至 48.06。
这里的"零样本"是指在论文的监督和自博弈阶段没有针对目标基准做适配。这并不能证明预训练组件从未接触过这些数据集或相关文档。
其他解析基准
在主要数据集之外,报告的综合得分同样有所提升:
- OmniDocBench(文本编辑距离,越低越好): Qwen3-VL-4B 从 0.347 提升至 0.291;InternVL 从 0.366 提升至 0.312。
- OCRBench v2(越高越好): Qwen3 从 49.1 升至 55.3;InternVL 从 46.5 升至 52.0。论文使用中英文得分的等权语言均值。
- CC-OCR(越高越好): Qwen3 从 65.4 升至 71.0;InternVL 从 62.7 升至 67.9。论文报告的是等权赛道均值。
这些是综合层面的提升,并不能证明每一个底层子任务都有改善。
数据效率红利
在训练预算对比中,采用 SP-DocReader 的 Qwen3-VL-4B 使用 30,000 页不同的参考页面,取得 82.46 的综合得分。使用 120,000 页的 SFT-2 得分为 80.73。
该综合得分对 Vary-600K、DocBank 和 IIT-CDIP 的归一化编辑相似度(缩放到 0–100)以及 DocVQA 和 InfographicVQA 的 ANLS 给予相同权重,因此既包含分布内表现,也包含零样本表现。
每种预算都从相同的任务前初始化出发,并各自完成监督阶段。预算较小的模型不会继承在更大数据集上的适配成果。该结果支持在此次对比中,以四分之一的训练参考页数获得更好的表现,而计算量和标注工作量则属于另外的问题。
分辨率鲁棒性
论文在四种源图像设置下评估固定的 Qwen3-VL-4B 检查点。DPI 标签适用于已知物理尺寸的 PDF;纯栅格页面使用相应的长边上限,且不做上采样:
- 48 DPI: SFT-2 的 CER 为 3.41%;SP-DocReader 为 1.74%,相对降低约 49%。
- 72 DPI: SFT-2 为 2.40%;SP-DocReader 为 1.11%,降低约 54%。
- 96 DPI: SFT-2 为 1.93%;SP-DocReader 为 0.92%,降低约 52%。
- 150 DPI: SFT-2 为 1.52%;SP-DocReader 为 0.71%,降低约 53%。
在这些设置下,相对降幅保持在较窄的范围内。视觉分支和 EasyOCR 接收的是同一张被改变的源图像,因此这衡量的是整个系统对分辨率的响应,而不是单独隔离出视觉编码器的表现。
哪些组件真正起作用?
Qwen3-VL-4B 的组件消融研究分离了各项损失的贡献,同时在每个变体中都保留了差异掩码:
- 基线(SFT-2): Vary-600K CER 为 2.40%,DocVQA ANLS 为 81.22。
- 去掉对比式 RDM 损失: 仅使用 FFL 时,CER 为 1.88%,ANLS 为 83.47。该行仍然使用经 LCS 选出的参考位置。
- 去掉 FFL: 对比损失达到 1.57% CER 和 82.96 ANLS。它仍然提供提高参考得分的相对激励,但缺少 FFL 额外的直接监督。
- 完整 SP-DocReader: 组合目标在报告的全部五列中都取得最佳结果,包括 1.11% CER、84.89 的 DocVQA ANLS 和 58.94 的 InfographicVQA ANLS。
在绘制的对比中,刷新机制看起来同样有用。第二轮刷新后的检查点在两个局部 epoch 之后平均分接近 90.3,超过固定转写分支在五个局部 epoch 之后接近 89.8 的平均分。该平均值综合了 Vary-600K NED、DocBank NED 和 DocVQA ANLS。刷新会同时改变对手、生成的转写和掩码;该图并未分离它们各自的影响,也不能说明总训练成本相等。
为什么这对真实的文档工程很重要
对于构建文档处理流水线的工程团队,论文提供了三个值得探索的实用方向:
-
考虑在 OCR 适配期间冻结语言骨干。
在已评估的零样本任务上,模块化微调表现更好,同时更新的参数更少。在 SP-DR-3 时,其报告的累计适配成本是完整联合微调 SFT-2 运行的 0.33 倍,而联合微调在 SP-DR-3 时为 1.58 倍。该核算包括监督初始化、预处理、生成、对齐、打分和优化。这支持的是所测试的模块化配置,而不是"不应微调语言模型"的普遍规则。
-
在假设需要更多页面之前,先试试聚焦差异的训练。
30,000 页对 120,000 页的结果,使面向错误的适配值得研究。但它并未证明在发票、货运清单或任何其他具体生产领域也能取得同等收益。应用这一思路需要参考转写,并在系统实际会遇到的文档上进行评估。该论文只覆盖英文和中文页面,其中中文这类字符数以千计、版面密集的汉字文本是否同样受益,仍需在目标场景中专门验证。
-
衡量完整阅读器的推理开销。
论文报告,在一块 NVIDIA H20 上以批大小 1 测得,相对于不带 OCR 的骨干网络,端到端推理开销约为 10%。该协议包括模型加载之后的页面处理、外部 OCR、编码和生成。这是一个有用的报告结果,但开销是否可接受取决于具体部署,不应被视为与硬件无关的延迟保证。
该方法的局限
尽管基准结果亮眼,SP-DocReader 仍有明确的边界:
- 单页范围: 研究聚焦于单页转写,并未展示多页阅读或结构化抽取。它不能说明在跨页表格或文档级依赖上的表现。
- 固定的输出预算: 自博弈生成和评估在 EOS 或 1,024 个新 token 处停止,不做续写或拼接。这一预算可能限制对较长页面的覆盖。该协议把被截断的转写与完整参考比较;触及上限本身并不能证明存在遗漏,而输出 EOS 也不保证内容完整。
- 对外部 OCR 的依赖: 模块化阅读器将 EasyOCR 的文本和边界框与视觉特征一起使用。论文并未单独验证它对外部引擎完全漏掉的内容的恢复能力。
- 语言和模型证据有限: 训练使用英文和中文页面,实验涵盖两个骨干网络系列。结果不能证明可推广到其他语言或架构。
- 仍存在识别错误: 定性示例显示的是改进,而不是完美转写。在宪法示例中,SP-DocReader 纠正了废止年份,但仍把条文日期读成 12 月 16 日,而展示的参考文本为 12 月 18 日。其他示例中仍保留拼写和符号错误。
在这些边界之内,SP-DocReader 表明,聚焦差异的自博弈可以让模块化文档阅读器超越其监督训练的起点。最有力的证据是具体的:在两种骨干上,三个主要阅读数据集的转写错误率都有所降低;在大多数已评估的问答对比中得分更高;在参考页数预算对比中也更有利。骨干网络保持冻结,而 OCR 模块则从剩余的分歧中持续学习。