org: 百度

TL, NR

本文主要讨论百度提出的 Unlimited OCR。目前很多 OCR 系统面对多页文档时,本质上还是 page-by-page 的 for-loop:
  • 第 1 页输入模型,输出第 1 页结果
  • 第 2 页输入模型,输出第 2 页结果
  • ...
这个方案工程上当然能 work,但它不是一个真正的长程解析模型。每一页之间的状态是被外部调度器切断的,模型本身并没有形成连续的解析过程。
但这方法显然牺牲了速度,原本可以多页并发处理,现在是单页串型处理。
多页长程解析一个很大的问题是,随着生成序列的增大,kv-cache线性增加。为了解决这个问题
Unlimited OCR 的核心思路是:保留 reference token 的全局可见性,同时让 generated token 只看最近一小段历史。对应到 attention 设计上,就是 Reference Sliding Window Attention,简称 R-SWA。
notion image

1 背景

近两年端到端 OCR 的趋势比较明显:用 VLM / MLLM 统一做版面分析、文本识别、公式识别、表格结构解析,最后直接输出 markdown 或结构化文本。
这类方法的优势是 pipeline 更短。传统 OCR 往往是:
  • 版面分析模型负责找 text block、table、formula 等区域
  • 不同 recognizer 分别识别文本、公式、表格
  • 中间还要依赖 crop、rectify、排序、merge 等启发式策略
虽然end-to-end的方式系统误差小,但有一个很现实的问题:decoder 是自回归生成的,输出越长,KV cache 越长,attention 计算越慢,显存占用也越高。
对于单页 OCR,这个问题还不算严重。但如果想一次性解析 20 页、40 页,甚至更多问题就来了:1)输出 token 数可能超过模型最大上下文长度;2)KV cache 随生成长度线性增长,越生成越慢
这也是本文的研究的出发点:OCR 的长程解析是否一定需要 full attention?

2 Method

论文里有一个很有意思的类比:人类抄书时,并不会反复阅读已经抄完的全部内容。
不妨想象一下手抄一段文字时的注意力分布:
  • 一部分注意力在原文上
  • 一部分注意力在刚写下的几个字上
  • 一部分注意力在下一个要写的字上
我们并不会保留完整的历史输出,而是保留一个很短的 working memory。更早的内容会被“软遗忘”,只要不影响当前进度即可。
从这个角度看,标准 causal full attention 反而有点过强。它允许每个新 token 看所有历史输出,但 OCR 这种 parsing task 的历史依赖并不一定需要完整保留。
对于 OCR,真正不能丢的是 reference 信息,也就是图像 token / prompt。因为它们是被解析对象本身。而历史输出只需要保留最近一小段,用来帮助模型知道自己解析到了哪里。

2.1 模型架构

Unlimited OCR 基于 DeepSeek OCR 改造,整体还是一个 encoder-decoder 风格的端到端 OCR 模型:
notion image
  • Encoder 使用 DeepEncoder (1024x1024的image对应256个visual token)
  • Decoder 使用 MoE-LLM
  • 将 decoder 中所有标准 attention 替换为 R-SWA

2.2 Reference Sliding Window Attention

notion image
R-SWA 可以理解为一种“两段式 attention”:
  • reference segment:包含视觉 token 和 prompt,对所有生成 token 全局可见
  • decode segment:只保留最近 个已生成 token,按 causal sliding window 滑动
设 prefix token 长度为 (这部分包含visual token和task prompt),decode window 宽度为 。对于第 个生成 token,它可访问的位置集合为:
其中:
即每个生成 token 都能看到完整图片和 prompt,但只能看到最近 个历史输出。这里的 默认是 128。

2.3 KV Cache 为什么能保持恒定

标准 MHA 下,生成 个 token 后,KV cache 大小为:
其中 是prefix 长度, 是已经生成的 token 数。
R-SWA 下,reference cache 始终保留,但 decode-side cache 只保留最近 个 token,因此:
从中可见,R-SWA 将 decode-side KV cache 从随 线性增长,变成了一个常数上界。
如果输出特别长,且 ,那么 cache ratio 为:
随着 增大,这个比例会不断下降。也就是说,长文档越长,R-SWA 相比 full attention 的优势越明显。

3 模型训练

3.1 数据构造方式

Unlimited OCR在DeepSeek OCR checkpoint 的基础上继续训练。论文中构造了约 200 万条 document OCR 数据,单页数据和多页数据比例大约是 9:1。
单页 PDF 数据的标注方式如下:
  • 使用 PaddleOCR 做初始标注
  • 将每个 block 的坐标和内容拼接起来
  • 构造 end-to-end detection and parsing ground truth
  • 坐标统一归一化到 0-1000 范围
多页数据则是由单页数据合成:
  • 随机拼接单页样本
  • 每条样本包含 2 到 50 页
  • 页与页之间用 <page> 作为 separator
  • 所有样本 packing 到 32K token 长度内

3.2 训练配置

训练时冻结 DeepEncoder,只训练 LLM 参数。采用DeepSeek OCR checkpoint进行初始化,采用AdamW优化器lr=1e-4并结合cosine annealing scheduler,训练步数为4000,global batch size 256,训练采用了8x16 A800 GPUs,数据组织方式为random packing,训练框架为Megatron-LM结合DeepEP (expert parallelism=4)。

4 实验结果

4.1 OmniDocBench

Unlimited OCR 在 OmniDocBench v1.5 上的 overall score 达到 93.23,高于 DeepSeek OCR 的 87.01,提升 6.22。
notion image

4.2 长程解析

Unlimited OCR 比较吸引人的能力在长程解析。
论文构造了内部多页测试集,测试 2、5、10、15、20、40+ 页的 one-shot OCR。结果显示,即使在 40+ 页场景下,Edit Distance 仍然低于 0.11,Distinct-35 约为 96.90%。
notion image
作者也分析了重复错误的来源:主要不是 R-SWA 在长程解析中丢失方向,而是多页场景使用 1024x1024 Base 模式时,小字本身不够清晰。
实验结果说明,在 OCR 这类 reference-based parsing task 中,完整视觉 reference + 短历史窗口已经足够模型维护进度。

4.3 效率

论文还比较了不同输出长度下的理论 TPS 上限。
notion image
在 256 tokens 时,DeepSeek OCR 和 Unlimited OCR 速度几乎一样。但随着输出长度增长,DeepSeek OCR 的 TPS 持续下降,而 Unlimited OCR 基本保持稳定。
到 6144 tokens 时:
  • DeepSeek OCR:5822.87 TPS
  • Unlimited OCR:7847.71 TPS
提升约 35%。

6 小结

Unlimited OCR 是基于 DeepSeek OCR 改造的端到端多页 OCR 模型,核心是用 R-SWA 替换 decoder 中的 full attention,使视觉 tokens、prompt 全局可见,而生成历史只保留最近窗口,从而在多页 PDF OCR 中保持恒定 decode-side KV cache,实现更高效的 long-horizon parsing。
 
多模态模型如何处理任意分辨率输入:位置编码设计Nougat 深度剖析
Loading...