一次读完几十页文档:百度 Unlimited OCR 用 R-SWA 把长文档 OCR 推向新范式
百度这次开源的 Unlimited OCR 有几个数字很抓眼球。
在 OmniDocBench v1.5 上,它的综合得分达到 93.23%,相比 DeepSeek OCR 提升 6.22 个百分点;在 OmniDocBench v1.6 上,综合得分达到 93.92%,论文称其达到端到端 VLM OCR 模型中的 SOTA 水平。
更关键的是长文档场景。
论文测试了 2、5、10、15、20、40+ 页文档解析。在 40+ 页场景下,Unlimited OCR 的 Distinct-35 约为 96.90%,Edit Distance 约为 0.1069。也就是说,它不是只在单页 OCR 上刷分,而是在更长输出里依然保持了较好的稳定性。
速度也有变化。论文给出的推理效率对比显示,当生成长度来到 6000 tokens 左右时,Unlimited OCR 相比 DeepSeek OCR 的 TPS 提升约 35%。
这几个数字背后,真正值得看的不是“又一个 OCR 模型开源了”,而是一个更具体的问题:
过去 OCR 处理长文档,通常是把 PDF 拆成一页页图片,逐页识别,再把结果拼回去。Unlimited OCR 想做的,是让模型像人类抄书一样,一边看原文档,一边连续写下解析结果,尽量在一次 inference 流程里完成长程解析。
论文把这件事叫作 one-shot long-horizon parsing(一次性长时域解析)。
它的核心技术,是 参考滑动窗口注意力机制(Reference Sliding Window Attention,R-SWA)。这个机制让模型始终能看见原始文档,同时只保留最近一小段输出历史,从而把 decode 阶段的 KV Cache 控制在近似恒定规模。
说白了,它不是让模型“什么都记住”,而是让模型学会:哪些东西要一直看,哪些东西可以暂时记,哪些东西可以适当忘掉。

Unlimited OCR 到底做了什么
Unlimited OCR 是百度开源的端到端 VLM OCR 模型,代码和模型权重已经开放。

它不是从零搭一套新架构,而是在 DeepSeek OCR 的基础上继续改进。视觉侧保留了高压缩率视觉编码器 DeepEncoder,主要创新放在解码器注意力机制和 KV Cache 管理上。
这点很重要。
因为长文档 OCR 的瓶颈,不只是“图像能不能看清”,还包括“模型生成得越长,解码器会不会越来越慢、越来越占显存”。
Unlimited OCR 的整体设计可以拆成三层:
-
视觉编码器使用 DeepEncoder,把高分辨率文档图像压缩成较少的视觉 token; -
解码器使用 MoE LLM,总参数约 3B,激活参数约 0.5B; -
将解码器中的标准注意力替换为 R-SWA,限制输出侧 KV Cache 的增长。
论文中提到,DeepEncoder 可以把一张 1024×1024 的 PDF 图像压缩到约 256 个视觉 token。这意味着多页文档进入模型时,不会因为图像 token 数量过大而立刻失控。
但真正让它适合长文档解析的,是 R-SWA。
传统 OCR 为什么很难“一次读完一本书”
端到端 OCR 或 VLM OCR 的基本流程并不复杂:文档图片被编码成视觉 token,解码器再自回归生成文本、Markdown、表格、公式和阅读顺序。
问题出在“越写越长”。
在标准全注意力机制下,每生成一个新 token,解码器都需要把更长的历史 token 纳入注意力范围。输出越长,历史越长,KV Cache 越大,注意力计算也越重。
这会带来几个直接后果:
-
显存占用随着输出长度持续上升; -
每一步 decode 的计算成本增加; -
生成延迟变高; -
长文档场景下,系统更容易被迫做任务切分。
所以很多 OCR 系统会选择一种工程上很自然的方案:for-loop 式逐页处理。
先把 PDF 拆成图片,第一页 OCR 完,再处理第二页,最后把所有页的结果拼接起来。这个方案当然可用,很多生产系统也确实这么做。
但它有一个隐藏代价:上下文被不断重置。
模型不是在连续阅读一份文档,而是在反复完成一组短任务。页与页之间的逻辑关系、跨页表格、跨页段落、阅读顺序,都需要外部规则或后处理去补救。
这就是 Unlimited OCR 想绕开的地方。它不只是把逐页调度写得更漂亮,而是试图让模型在一次流程中连续解析多页内容。
R-SWA:让模型学会“软遗忘”
参考滑动窗口注意力机制(Reference Sliding Window Attention,R-SWA) 的设计思路可以用一句话概括:
参考信息长期可见,输出历史短期保留。

在 OCR 任务里,参考信息主要包括两部分:视觉 token 和 prompt。R-SWA 让每个生成 token 始终可以关注全部 reference tokens。也就是说,原始文档一直摊在模型面前,不会随着生成过程被“滑走”。
但对已经生成的输出 token,R-SWA 不再让模型关注全部历史,而是只关注最近 n 个生成 token。论文默认窗口宽度是 n=128。
你可以把它想象成两个区域:
-
固定参考区:视觉 token 和 prompt 一直保留; -
滑动工作区:输出 token 的 KV Cache 像队列一样移动,只保留最近一段。
每生成一个新 token,它的 KV 进入队列;更早的输出 KV 被移出窗口。视觉 token 不参与滑动更新,而是作为固定 reference 始终保留。
这很像人类抄书。
人抄一本书时,不会每写一个字都回看前面几十页。我们会盯着原书,只记住刚刚写下的一小段,用它判断有没有漏字、跳行、断句错误。更早写过的内容会从工作记忆里淡出,但原书还在眼前。
R-SWA 模拟的就是这种 “工作记忆 + 软遗忘”。
它不是盲目扩大上下文,而是把上下文分成两类:长期参考信息和短期工作记忆。
R-SWA 和其他方案相比改进在哪里
对比标准全注意力,R-SWA 的优势很直接:decode-side KV Cache 不再随着输出长度无限增长。
标准注意力下,输出 1000 个 token、6000 个 token、10000 个 token,历史缓存都会越来越长。R-SWA 下,输出侧只保留最近窗口,因此缓存规模被限制在固定范围内。
对比普通 Sliding Window Attention,R-SWA 的关键区别在 “Reference”。
普通滑窗如果直接用于 OCR,可能会把早期视觉 token 一起滑走。长生成过程中,模型越写到后面,越可能丢失原始图像依据。R-SWA 不这么做,它让视觉 token 和 prompt 始终作为 reference 保留,只让输出历史滑动。
对比逐页 OCR,R-SWA 则减少了上下文重置。
逐页处理是“每页重新开始”;R-SWA 支持模型在一次 forward / inference 流程中连续解析多页文档。它减少的不只是外部调度成本,更是长文档理解里很关键的连续性损耗。
模型架构和训练方式
Unlimited OCR 的训练策略也比较克制。
论文中提到,它从 DeepSeek OCR checkpoint 继续训练,并冻结 DeepEncoder,只训练 LLM 参数。视觉侧不重新发明轮子,主要把改造集中在解码器注意力上。
模型使用 DeepEncoder 作为视觉编码器,具备较强的图像 token 压缩能力;解码器是 MoE LLM,总参数约 3B,激活参数约 0.5B;解码器中的标准注意力被替换为 R-SWA。
训练数据约 200 万 document OCR 样本,单页与多页数据比例约 9:1。多页数据通过拼接单页数据合成,覆盖 2 到 50 页,并使用 <page> 作为分页符。训练最大序列长度为 32K。
这套设置透露出一个现实判断:长文档 OCR 不是单靠更大的模型解决的,注意力机制和缓存管理同样关键。
实验结果:准确率和速度都提升了多少
回到开头那组数据。
在 OmniDocBench v1.5 上,Unlimited OCR 综合得分达到 93.23%,相比 DeepSeek OCR 的 87.01% 提升 6.22 个百分点。论文还展示了文本编辑距离、表格 TEDS、阅读顺序等指标的提升。
在 OmniDocBench v1.6 上,Unlimited OCR 综合得分达到 93.92%,达到端到端 VLM OCR 模型中的 SOTA 水平。
长文档测试更能体现 R-SWA 的意义。论文在 2、5、10、15、20、40+ 页场景下评估 Distinct-n 和 Edit Distance。即使在 40+ 页场景中,Distinct-35 约为 96.90%,Edit Distance 约为 0.1069。
这说明模型在长输出过程中没有明显陷入重复、迷航或大规模内容混乱。
推理效率方面,论文给出的理论 TPS 对比显示,当输出长度达到 6000 tokens 左右时,Unlimited OCR 相比 DeepSeek OCR TPS 提升约 35%。在 OmniDocBench 这类平均文档较短的场景中,Base 模式也有约 12.7% 的速度提升。
这个收益会随着输出长度增加而更明显。原因很简单:标准注意力越写越重,R-SWA 的 decode-side KV Cache 保持受控。

如何部署和使用
项目已开源:https://github.com/baidu/Unlimited-OCR
模型可以通过 Hugging Face 或 ModelScope 获取。推理侧支持 Transformers、vLLM 和 SGLang。
如果只是本地快速体验,可以用 Transformers 加载模型:
from transformers import AutoModel, AutoTokenizermodel_name = "baidu/Unlimited-OCR"tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)model = AutoModel.from_pretrained( model_name, trust_remote_code=True, use_safetensors=True,).eval().cuda()
单图解析调用 model.infer。README 中说明,单图支持 gundam 或 base 两种配置:gundam 使用动态分辨率和 crop mode,base 使用 1024×1024 输入。
多页或 PDF 场景使用 base 模式,通常需要先把 PDF 页面转成图片,再调用 model.infer_multi:
model.infer_multi( tokenizer, prompt="Multi page parsing.", image_files=["page1.png", "page2.png", "page3.png"], image_size=1024, max_length=32768,)
README 还提供了 PDF 转图片示例,使用 PyMuPDF 将 PDF 页面导出为 PNG,再传给 multi-page parsing。
服务化部署方面,项目支持 vLLM,并提供 vLLM recipe 和对应 Docker 镜像;也支持 SGLang,包括启动 SGLang server、通过 OpenAI-compatible API 发起流式请求,以及处理图片 / PDF 输入的示例。
开发者可以按三种路径上手:
-
本地实验:Transformers + model.infer/model.infer_multi; -
批量处理:基于 README 中的 infer.py和并发参数; -
服务化集成:vLLM 或 SGLang server + OpenAI-compatible API。
需要注意的是,多页 PDF 通常不是直接把 PDF 文件喂给模型,而是先转成页面图片,再做 multi-page parsing。
Unlimited OCR 的意义,不只是 OCR
R-SWA 的价值并不仅限于 OCR,而是提供了一种新的长程任务记忆机制。
过去,行业解决长上下文的思路主要是不断扩大 Context Window;而 R-SWA 则将信息划分为长期参考与短期工作记忆:原始文档始终保留,模型最近生成的内容采用滑动窗口管理,避免 KV Cache 随输出持续增长。
放到其他任务里,也有类似结构:
-
ASR 中,音频特征可以是长期参考,最近转写文本是短期工作记忆; -
机器翻译中,源文本是长期参考,目标端最近输出是短期工作记忆; -
长视频理解中,关键帧或视频特征是长期参考,当前叙述状态是短期工作记忆; -
文档智能体中,原始资料是长期参考,当前推理链路是短期工作记忆。
长期保留输入参考信息,短期维护当前推理状态,让模型真正做到”记住该记的,忘掉该忘的”。
当然,Unlimited OCR 并非真正无限。目前仍受 32K Context 和 Prefill 长度限制,超长文档下视觉 Token 的加载仍会成为新的瓶颈,低分辨率模式下的小字识别也会影响最终效果。论文提出,未来可通过更长 Context(如 128K)以及 Prefill Pool 等机制,实现参考信息的按需加载,进一步提升超长文档处理能力。
Unlimited OCR 真正值得关注的,并不是一次能够处理几十页文档,而是提出了一种更符合长程智能的记忆管理方式:长期参考始终可见,短期记忆动态更新,历史信息按需遗忘。 这或许不仅适用于 OCR,也可能成为未来长音频、长视频、长文档乃至 AI 智能体的重要基础能力。
为什么 OCR 在大模型时代又重要了
如果把视角拉远,Unlimited OCR 的意义不只是“百度开源了一个新 OCR”。
OCR 的位置正在变化。
过去 OCR 更像一个工具能力:拍照识字、票据识别、扫描件转文字、表格提取。它解决的是“把图片里的字拿出来”。
但在大模型时代,OCR 变成了数据入口。
大量企业知识并不在结构化数据库里,而是沉淀在 PDF、合同、研报、票据、扫描件、书籍和档案中。对人来说,这些是信息;对模型来说,如果没有 OCR,它们只是像素。
只有经过 OCR,这些版面、段落、表格、公式和阅读顺序,才可能变成可检索、可训练、可推理的 token。
所以 OCR 不再只是识别工具,而是连接文档世界和大模型世界的基础设施。
这也是为什么长文档 OCR 重要。企业文档通常不是一张图片,而是一份几十页、上百页的材料。它们有目录、章节、跨页表格、脚注、公式、引用和复杂排版。逐页处理当然能用,但离“真正理解一份文档”还有距离。
Unlimited OCR 试图补上的,就是这个距离。
📬 关注我 · 获取更多内容
📌 南墨的技术小栈
这里是我的个人知识分享空间。我会定期整理和分享工作与学习中积累的经验与资源,内容涵盖:
-
算法分享 —— 深入讲解算法原理、实现思路与代码示例。 -
工具分享 —— 推荐实用工具与脚本,包括我个人开发的小工具和精选开源工具。 -
开源项目 —— 精选 GitHub 上高星项目,拆解原理、使用方法和最佳实践。 -
数据分享 —— 工作学习中收集整理的数据资源。 -
每日AI热点——每天 7 分钟,帮你快速掌握 AI 模型、产品、行业趋势与实战观点的最新热点。
无论你是技术爱好者、算法研究者,还是对数据与开源感兴趣的朋友,这里都希望能成为你学习、探索和实践的参考空间。
若在阅读或使用过程中有任何疑问,欢迎在公众号私信我,我会尽快与您交流。
夜雨聆风