百度 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 上以極高的吞吐量運行它。迫不及待想要集成它了。