百度 Unlimited-OCR:突破长文档解析的长度极限
百度的参考滑动窗口注意力(R-SWA)如何实现 O(1) 恒定显存文档解析,让逐页拼接的传统 OCR 成为历史。
Unlimited-OCR
在单次前向传播中以恒定的 O(1) 显存复杂度解析数十页文档。
在单次前向传播中解析数十页文档,无需分块。
KV 缓存大小保持平稳,彻底杜绝 GPU 显存溢出(OOM)错误。
生成速度不随文档长度增加而衰减,保持极高吞吐量。
百度正式开源了 Unlimited-OCR,这是一个突破性的文档解析模型。它通过在单次前向传播中以完全恒定的显存占用解析数十页复杂文档,在 OmniDocBench 上达到了 SOTA 性能。
文档智能的演进
多年来,数字化文档一直是一个两步走的过程:先对单页图像运行光学字符识别(OCR)引擎,然后使用启发式算法或大语言模型(LLM)重建版面、表格和阅读顺序。虽然视觉语言模型(VLM)最近展示了端到端解析文档的能力,但它们受到了文档长度的极大限制。在单次运行中处理 50 页的 PDF 会因为注意力机制的二次方级别缩放而迅速撑爆 GPU 显存。
长文档处理中的 KV 缓存瓶颈
在标准的 Transformer 解码器中,当模型生成文本时,它会将所有先前 Token 的 Key-Value(KV)状态存储在内存中(即 KV Cache),以避免重复计算。在转录长文档时,输出文本很容易达到数千个 Token。这导致 KV 缓存线性增长,进而在自注意力机制中带来二次方级别的显存消耗。结果是推理变得极慢,甚至最终系统因显存溢出(OOM)而崩溃。
Memory Footprint Comparison (KV Cache)
Memory demands inflate rapidly as the output grows. Results in Out-of-Memory (OOM) crashes on long documents.
Memory footprint remains perfectly flat. The model only remembers the visual source and the immediate text window.
参考滑动窗口注意力 (R-SWA) 的引入
其灵感来源于人类转录文档的认知过程——我们看着源页面(参考),但在短期记忆中只保留最近写下的少量文字。R-SWA 将注意力分为两部分:
完整视觉参考
解码器始终可以无限制地关注文档页面的完整视觉特征(参考),确保不丢失任何视觉上下文。
滑动窗口文本注意力
解码器仅关注最近生成的固定滑动窗口内的文本 Token(默认为 128 个 Token),而不是整个生成历史。
恒定 KV 缓存
通过限制对文本历史的关注,KV 缓存大小保持恒定。这实现了 O(1) 的显存复杂度和生成过程中每个 Token 的平稳延迟。
对比:传统 OCR vs. Unlimited-OCR
| 特性 | 传统单页/拼接 OCR | 百度 Unlimited-OCR |
|---|---|---|
| 最大文档长度 | 1 - 2 页(单次处理) | 无限制(已测试 50+ 页) |
| 显存复杂度 | O(N²) 二次方增长 | O(1) 恒定显存 |
| 版面拼接错误 | 高(表格与句子易断裂) | 零(无缝端到端解析) |
| 每个 Token 的延迟 | 随长度呈指数级增加 | 完全呈水平直线 |
深度技术:架构与效率
Unlimited-OCR 构建在 DeepSeek-OCR 基线之上,继承了其高效的视觉语言基础。然而,百度团队将解码器中的标准自注意力层替换为了 R-SWA 模块。该模型采用了混合专家(MoE)结构:
- 30 亿总参数: 在海量多语言文档数据集上训练的强大基座模型。
- 5 亿激活参数: 在推理过程中仅激活部分专家,带来极高的吞吐量和极低的功耗。
- 行业领先的准确率: 在 OmniDocBench v1.5 基准测试中获得 93.23% 的综合评分,刷新了行业纪录。
快速上手 Unlimited-OCR
百度采用 MIT 开源协议发布了 Unlimited-OCR。您可以下载模型权重、进行本地推理,或将其集成到您的文档处理流水线中。它可以在单张消费级 GPU 上流畅运行。
安装与运行
git clone https://github.com/baidu/Unlimited-OCR.git常见问题解答
Unlimited-OCR 的最大页数限制是多少?▼
它能在消费级硬件上运行吗?▼
它适合商业应用吗?▼
社区热议
长文档生成的恒定 KV 缓存是一个颠覆性的技术。我们终于可以解析 50 页的报告而不用担心显存溢出了!
测试了 Hugging Face 的 Spaces 演示。从第 1 页到第 30 页,速度完全保持平稳。百度的出色工作。
使用 MoE(30B 总参数 / 5B 激活)意味着我们可以在单张消费级 GPU 上以极高的吞吐量运行它。迫不及待想要集成它了。