简介:超长文档OCR难在哪?本文以百度开源的文心Unlimited OCR 2为线索,拆解其两大核心设计:借鉴“人类抄书”直觉的稀疏参考滑动窗口注意力SR-SWA,与基于重叠分块、缓存复用与及时释放的无限解码机制;结合47GB降至1.77GB的KV Cache峰值显存压缩、360提升至1315 TPS的并发吞吐等官方数据,并沉淀长文档解析系统的通用工程实践。
在传统OCR的认知里,“一页一识别”是默认工作模式:页面切好、逐张推理、结果拼接。但真实业务中的文档往往不是这个形态——标书、卷宗、财报、技术手册、论文合集,动辄数百页起步,数千页也不罕见。
一旦要求模型把整份文档当作一个连续整体来理解,问题立刻升级:
百度这次开源的文心Unlimited OCR 2给出的答卷是:3600多页的长篇小说合集,单序列推理一口气读到底;1200多页的科幻三部曲理解起来同样不费力;并在多页文档基准评测中取得了SOTA表现。
这套方案的技术灵感来自一件特别朴素的事:抄书。
想象人类抄一本厚书时的行为——目光始终停留在当前页;遇到跨页关联,偶尔翻回去参考一下;绝不会每抄一句话,都把前面所有页面重新读一遍。
把这个直觉抽象成注意力设计,就是三条原则:
团队提出的SR-SWA(稀疏参考滑动窗口注意力机制),正是这个直觉的“两级漏斗”实现:
粗到细的好处是双重的:页粒度的门控计算开销极小,却能把候选空间压缩一个数量级;Token级筛选则保证真正参与注意力的,是“值得看”的视觉信息。两者叠加的结果是:无论文档是100页还是3000页,单步解码的注意力计算成本都能保持近似恒定——这正是“抄书直觉”的数学化表达。
解决了“算多少”,还要解决“存多少”。即便每步只关注少数Token,如果所有页面的视觉缓存一直堆积在GPU里,几千页下来照样吃不消。于是又有了第二件武器:无限解码机制。
它的核心思路可以概括为“分块+重叠+复用+释放”:
用一段示意伪代码来描述这个滚动窗口的逻辑(仅示意思想,非真实接口):
# 无限解码的滚动窗口处理(伪代码)groups = split_with_overlap(pages, chunk_size=K, overlap=O)cache = {} # 视觉KV Cache工作区for gi, group in enumerate(groups):for page in group:if page.id not in cache: # 边界页命中缓存, 直接复用cache[page.id] = encode(page)refs = page_gating(cache) # 1. 页面门控: 粗筛候选页tokens = token_filter(refs) # 2. Token筛选: 细选相关块step_decode(tokens) # 3. 稀疏注意力解码keep = boundary_pages(groups[gi+1]) # 下一分块的边界页集合for pid in list(cache): # 4. 释放陈旧缓存if pid not in keep:del cache[pid]
核心效果在于:显存中始终只需要维护一个有限的缓存工作区,其大小取决于分块策略,而与文档总页数解耦。这就是”Unlimited”的工程含义——不是真的没有上限,而是把上限从“显存容量”变成了“你愿意读多久”。
按照官方技术报告给出的测试数据:
| 指标 | 数值 |
|---|---|
| 单序列推理KV Cache峰值显存 | 47 GB → 1.77 GB(约26倍压缩) |
| 16并发端到端吞吐 | 360 TPS → 1315 TPS(约3.7倍) |
| 百页级文档单步解码速度 | 较全注意力方案提速约7倍 |
| 长度稳定性 | 最长300页评测范围内,解析精度保持稳定 |
这些数字应该怎么读?有三点值得展开:
当然,官方数据基于其设定的测试条件;实际收益会随文档类型、扫描质量、硬件配置与部署参数浮动,落地之前,建议用自有语料做一轮基准回归。
这一模型并非凭空出现。上一代模型开源后,已在国际主流开源模型社区累计超过1000万次下载,长文档解析能力经过了大规模的真实检验。
这一代的推进方向很明确:上一代重点解决的是长文本生成时的缓存优化,这一代把战场推进到了超长视觉输入的计算与显存管理。两者的问题结构相似——序列长、缓存大——但视觉输入更棘手:视觉Token密度更高,页面之间存在大量结构化关联(跨页表格、连续图表、脚注引用),不能简单当作均匀的文本流来处理。这也解释了为什么“页面门控”要以页为粒度设计:页是视觉文档的天然结构单元。
在这次公开的技术报告里,还藏着一个小彩蛋:
像素为身,Token为血。已阅尽千页,不为KV Cache所限,亦不为上下文长度所缚。
熟悉经典动漫中那段广为流传的咏唱桥段的读者,应该能一眼认出这段文字的句式出处。这个创意最早来自上一代模型开源后的社区互动:有开发者把那段经典咏唱改编成了以模型为主题的版本,开发团队看到后非常喜欢,最终将其正式收录进了2.0的技术报告。一段社区创作走进官方技术文档,也算开源社区与研发团队之间一次小小的双向奔赴。
剥开具体实现细节,这次开源所验证的经验,对任何长文档解析系统都有参考价值:
超长文档解析的瓶颈,从来不是“能不能识别一页”,而是“能不能把几千页当作一个连续整体来理解,并且读得起”。文心Unlimited OCR 2用SR-SWA回答了前半个问题,用无限解码机制回答了后半个问题。关于这套方案的更多技术细节,百度将在11月12日举行的百度世界2026大会上进一步分享,对长文档多模态解析感兴趣的工程师值得关注。