{"notes":[{"id":"deepseek/deepseek-ocr-2","category":"deepseek","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DeepSeek-OCR 2","subtitle":"目光的順序","author":"Z. Yuan","paperDate":"2026-01-28","publishedOn":"2026-11-08","world":"external/deepseek-ocr2","paperTitle":"DeepSeek-OCR 2: Visual Causal Flow","paperUrl":"https://arxiv.org/abs/2601.20552","bibliography":{"title":"DeepSeek-OCR 2: Visual Causal Flow","authors":["Haoran Wei","Yaofeng Sun","Yukun Li"],"url":"https://arxiv.org/abs/2601.20552","pdfUrl":"https://arxiv.org/pdf/2601.20552v1","codeUrl":"https://github.com/deepseek-ai/DeepSeek-OCR-2","preprint":{"id":"2601.20552","submittedOn":"2026-01-28","url":"https://arxiv.org/abs/2601.20552"},"publication":null,"citation":"@misc{deepseekdeepseekocr22026,\n  title = {{DeepSeek-OCR 2: Visual Causal Flow}},\n  author = {Haoran Wei and Yaofeng Sun and Yukun Li},\n  year = {2026},\n  eprint = {2601.20552},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2601.20552}\n}\n","citationPath":"/content/papers/citations/deepseek/deepseek-ocr-2.02901bc9ba9f.bib"},"thumbnail":{"src":"/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png","width":1194,"height":483},"locale":"zh-hant","path":"/content/papers/zh-hant/deepseek/deepseek-ocr-2.c951fbab8c03.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"id":"把-clip-換成語言模型","text":"把 CLIP 換成語言模型","depth":3},{"id":"遮罩決定誰能看誰","text":"遮罩決定誰能看誰","depth":3},{"id":"一頁要幾個-token","text":"一頁要幾個 token","depth":3},{"id":"訓練","text":"訓練","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"omnidocbench-v15","text":"OmniDocBench v1.5","depth":3},{"id":"九種文件拆開看","text":"九種文件拆開看","depth":3},{"id":"上線之後看什麼","text":"上線之後看什麼","depth":3},{"id":"作者的願景與後續成績","text":"作者的願景與後續成績","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"deepseek/deepseek-ocr","relation":"referenced","topic":""}]},{"id":"deepseek/deepseek-ocr","category":"deepseek","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DeepSeek-OCR","subtitle":"一圖勝千言","author":"Z. Yuan","paperDate":"2025-10-21","publishedOn":"2026-03-09","world":"external/deepseek-ocr","paperTitle":"DeepSeek-OCR: Contexts Optical Compression","paperUrl":"https://arxiv.org/abs/2510.18234","bibliography":{"title":"DeepSeek-OCR: Contexts Optical Compression","authors":["Haoran Wei","Yaofeng Sun","Yukun Li"],"url":"https://arxiv.org/abs/2510.18234","pdfUrl":"https://arxiv.org/pdf/2510.18234v1","codeUrl":"https://github.com/deepseek-ai/DeepSeek-OCR","preprint":{"id":"2510.18234","submittedOn":"2025-10-21","url":"https://arxiv.org/abs/2510.18234"},"publication":null,"citation":"@misc{deepseekdeepseekocr2025,\n  title = {{DeepSeek-OCR: Contexts Optical Compression}},\n  author = {Haoran Wei and Yaofeng Sun and Yukun Li},\n  year = {2025},\n  eprint = {2510.18234},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2510.18234}\n}\n","citationPath":"/content/papers/citations/deepseek/deepseek-ocr.66e8e5a7db8d.bib"},"thumbnail":{"src":"/content/papers/assets/6f53ecfe63f39804454a69ef4468c93e8018fa1afbe08d1bb52b7e8d52d194c3.png","width":1288,"height":350},"locale":"zh-hant","path":"/content/papers/zh-hant/deepseek/deepseek-ocr.d61cee3b4441.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"id":"整體架構","text":"整體架構","depth":3},{"id":"跟著一頁-10241024-的影像走一次","text":"跟著一頁 1024×1024 的影像走一次","depth":3},{"id":"解碼器從壓縮的表示把字還原","text":"解碼器：從壓縮的表示把字還原","depth":3},{"id":"資料與訓練","text":"資料與訓練","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"壓縮比實驗fox-上的-100-頁","text":"壓縮比實驗：Fox 上的 100 頁","depth":3},{"id":"實際文件omnidocbench","text":"實際文件：OmniDocBench","depth":3},{"id":"光學壓縮與遺忘","text":"光學壓縮與遺忘","depth":3},{"id":"發布後的討論","text":"發布後的討論","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"model-evaluation/linguistic-crutch","relation":"referenced","topic":""}]}],"text":"一份三欄的報紙，人怎麼讀？\n\n我們不會從左上角一路掃到右下角。先讀標題，再沿第一欄往下，讀到底跳回第二欄的頂端；看到「接第 5 版」，視線就跟著跳過去。下一眼看哪裡，取決於剛剛讀到了什麼。\n\nVLM 不是這樣讀的。影像被切成一格一格的 patch，依固定的「由左而右、由上而下」攤成一列，加上位置編碼，交給語言模型。對一般照片沒什麼問題；對版面複雜的文件，這個順序常常和內容的邏輯順序不一樣。\n\nDeepSeek-OCR 2 想讓編碼器自己決定**先看哪裡、再看哪裡**。這是 DeepSeek-AI 在 2026 年 1 月 28 日上傳的技術報告，本文依 v1 閱讀，程式與權重同步開源。\n\n\n> [!TIP]\n> \n> 前一代的 DeepEncoder 與光學壓縮的設計，可以先看：\n> \n> - **[[25.10] DeepSeek-OCR：一圖勝千言](/blog/papers/deepseek/deepseek-ocr)**\n\n\n## 定義問題\n\n作者的出發點是一個觀察：人的視線移動有因果關係，下一個注視點取決於前面看到的東西；可是現在的 VLM 編碼器，把 2D 影像攤成 1D 序列時，用的是和內容無關的固定順序。\n\n語言模型是用一維、有先後順序的文字訓練出來的。作者因此問：能不能用兩段「一維、有因果順序」的推理，接起來處理二維影像？\n\n- 第一段在編碼器裡：依影像內容，把視覺 token 重新排出閱讀順序。\n- 第二段在解碼器裡：照這個順序，自迴歸地輸出文字。\n\n他們以文件閱讀當試驗場，因為文件有多欄版面、公式和表格，閱讀順序本身就帶著邏輯。\n\n## 解決問題\n\n### 把 CLIP 換成語言模型\n\n[![左：DeepEncoder，由 80M 的 Tokenizer 接 CLIP ViT 300M；右：DeepEncoder V2，由同一個 Tokenizer 接一個以 Qwen2 500M 為基礎的語言模型，視覺 token 之後接上一組可學習的查詢，只有查詢的輸出往下傳](/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png)](/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png)\n\n*原論文 Figure 1，取自 [**v1 PDF 第 1 頁**](https://arxiv.org/pdf/2601.20552v1#page=1)，CC BY 4.0。左為前一代 DeepEncoder，右為 DeepEncoder V2。*\n\n左右兩邊的上半部一樣：一個約 8,000 萬參數的 Tokenizer，沿用前一代的 SAM-base 加兩層卷積，把 token 數壓到十六分之一。\n\n差別在下半部。前一代用 3 億參數的 CLIP 做全域注意力；V2 換成一個以 **Qwen2-0.5B** 初始化的語言模型架構，並在視覺 token 後面接上一組**可學習的查詢**（作者稱為 causal flow token）。\n\n這組查詢和視覺 token 一樣多。最後只有查詢那一半的輸出交給解碼器，視覺 token 本身不往下傳。\n\n作者也試過另一種接法：把視覺 token 放進獨立的編碼器，再用 cross-attention 讓查詢去讀，類似 mBART 的編碼器－解碼器結構。結果訓練不收斂。他們推測，視覺 token 被隔在另一個編碼器裡，和查詢互動不夠；改成把視覺 token 當前綴、放在同一個序列裡，每一層都能交換資訊，才訓練得起來。\n\n### 遮罩決定誰能看誰\n\n[![注意力遮罩示意：ViT 式的雙向遮罩與 LM 式的因果遮罩組合成 DeepEncoder V2 的遮罩，前三列視覺 token 彼此互看，後三列查詢可以看所有視覺 token 與前面的查詢](/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png)](/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png)\n\n*原論文 Figure 5，取自 [**v1 PDF 第 7 頁**](https://arxiv.org/pdf/2601.20552v1#page=7)，CC BY 4.0。綠色可注意，粉紅不可注意，白圈是自己。*\n\n這張圖是整個設計的核心，我們用三個視覺 token $v_0,v_1,v_2$ 和三個查詢 $q_0,q_1,q_2$ 走一遍。列是「誰在看」，欄是「被看的對象」，1 表示可以注意：\n\n```text\n       v0 v1 v2 | q0 q1 q2\nv0      1  1  1 |  0  0  0\nv1      1  1  1 |  0  0  0\nv2      1  1  1 |  0  0  0\n----------------+---------\nq0      1  1  1 |  1  0  0\nq1      1  1  1 |  1  1  0\nq2      1  1  1 |  1  1  1\n```\n\n- **左上**：視覺 token 彼此全部可見，和 ViT 一樣是雙向注意力，保留 CLIP 那種整張圖的視野。\n- **右上**：視覺 token 看不到查詢，所以影像特徵不會被查詢的順序影響。\n- **左下**：每個查詢都能看到所有視覺 token。\n- **右下**：查詢之間是下三角，$q_1$ 只看得到 $q_0$ 和自己，和 decoder-only 語言模型的因果注意力一樣。\n\n論文的公式寫成：\n\n$$\nM=\\begin{bmatrix}\\mathbf{1}_{m\\times m} & \\mathbf{0}_{m\\times n}\\\\ \\mathbf{1}_{n\\times m} & \\mathrm{LowerTri}(n)\\end{bmatrix},\\quad n=m\n$$\n\n右下那個下三角就是「順序」的來源。$q_0$ 先決定要從影像裡取出什麼；$q_1$ 知道 $q_0$ 取了什麼，再決定下一個；依此類推。查詢的輸出排成一列，本身就是一種閱讀順序。\n\n作者把整個流程寫成：\n\n$$\n\\mathbf{O}=\\mathcal{D}\\big(\\pi_Q(\\mathcal{T}^L(\\mathcal{E}(\\mathbf{I})\\oplus\\mathbf{Q}_0;\\mathbf{M}))\\big)\n$$\n\n$\\mathcal{E}$ 是 Tokenizer，$\\oplus$ 把視覺 token 和查詢接起來，$\\mathcal{T}^L$ 是 $L$ 層帶遮罩的 Transformer，$\\pi_Q$ 只取最後 $n$ 個，也就是查詢的輸出，$\\mathcal{D}$ 是解碼器。\n\n### 一頁要幾個 token\n\n為了不必替每種解析度準備一套查詢，作者固定兩種視角：\n\n- **全域視角** 1024×1024：1024/16 = 64，64×64 = 4,096 塊，壓縮十六倍後是 **256** 個 token，配 256 個查詢。\n- **局部裁切** 768×768：768/16 = 48，48×48 = 2,304 塊，壓縮後 **144** 個，所有裁切共用同一組 144 個查詢。\n\n裁切數 $k$ 在 0 到 6 之間，兩邊都小於 768 時不裁。所以交給解碼器的 token 數是 $144k+256$：最少 256，最多 $6\\times144+256=1{,}120$。\n\n作者特別比較了上限：前一代 Gundam 模式最多 1,156 個，Gemini 3 Pro 的視覺 token 上限也是 1,120。\n\n解碼器沒有換，仍是前一代的 3B MoE，啟用約 5 億參數。\n\n### 訓練\n\n資料來源和前一代相同，OCR 資料佔 80%。兩個小調整：OCR 1.0 資料依內容分成文字、公式、表格，以 3:1:1 取樣；版面標註把語意相近的類別合併，例如圖說和圖標題。\n\n訓練分三段：\n\n1. **編碼器預訓練**：Tokenizer 沿用前一代，語言模型式編碼器從 Qwen2-0.5B-base 初始化，接一個小型解碼器做下一個 token 預測。160 張 A100，約 1 億組影像文字對。\n2. **查詢強化**：凍結 Tokenizer，編碼器與 DeepSeek 解碼器一起訓練，強化查詢的重排能力。\n3. **解碼器專精**：凍結整個編碼器，只訓練解碼器。同樣的 batch size 下訓練速度提高一倍以上。\n\n## 討論\n\n### OmniDocBench v1.5\n\n主要評測是 OmniDocBench v1.5，共 1,355 頁、9 種文件類型，中英文都有。\n\n| 模型 | 視覺 token 上限 | Overall | 文字 ED | 閱讀順序 ED |\n| --- | ---: | ---: | ---: | ---: |\n| DeepSeek-OCR（9 裁切） | 1,156 | 87.36 | 0.073 | 0.085 |\n| DeepSeek-OCR 2 | 1,120 | 91.09 | 0.048 | 0.057 |\n\n*表：原論文 Table 1 節錄。ED 為編輯距離，越低越好；Overall 越高越好。*\n\n在相近的資料來源下，整體分數提高 3.73，閱讀順序的編輯距離從 0.085 降到 0.057。作者也在 Table 2 拿整體編輯距離和 Gemini 3 Pro 比較：在相同的 1,120 個 token 上限下，DeepSeek-OCR 2 是 0.100，Gemini 3 Pro 是 0.115。\n\n同一張 Table 1 裡也有兩個值得注意的對手。PaddleOCR-VL 是 92.86，MinerU2.5 是 90.67，兩者都先做版面分析、再裁切辨識，論文把它們歸在 Pipeline 一類。換句話說，在這個基準上，端到端的 DeepSeek-OCR 2 已經和兩階段系統非常接近，但還沒超過最好的那一個。\n\n### 九種文件拆開看\n\nTable 3 把兩代模型在九種文件上的表現拆開。閱讀順序的編輯距離**九類全部改善**，例如彩色教科書從 0.125 降到 0.066，筆記從 0.089 降到 0.035。\n\n文字的編輯距離就沒那麼一致。多數類別變好，但書籍從 0.022 變成 0.033，報紙從 0.131 變成 0.139。作者對報紙提出兩個原因：視覺 token 上限較低，對文字極多的報紙不夠，未來可以增加裁切數；以及報紙的訓練資料只有 25 萬筆，對新的編碼器來說太少。\n\n### 上線之後看什麼\n\n這一節很短，但我認為是整篇最實際的部分。\n\nDeepSeek-OCR 在公司內部有兩種用途：替 DeepSeek 的語言模型讀使用者上傳的圖片與文件，以及批次處理 PDF 產生預訓練資料。上線環境沒有標準答案可以比，作者選用**重複率**當主要的可觀察品質指標：\n\n| 模型 | 線上使用者圖片 | 預訓練 PDF |\n| --- | ---: | ---: |\n| DeepSeek-OCR | 6.25% | 3.69% |\n| DeepSeek-OCR 2 | 4.17% | 2.88% |\n\n*表：原論文 Table 4，重複率越低越好。*\n\n重複是生成式 OCR 最容易觀察到的失敗：同一段字一直輸出，程式一抓就知道。\n\n反過來說，沒有標準答案時，「字寫順了但寫錯」這類錯誤，用重複率是看不到的。對要拿 OCR 結果做決策的應用，這張表提醒我們：上線監控要另外設計看得到這類錯誤的方法，例如和文字層比對、檢查欄位格式，或抽樣人工複核。\n\n### 作者的願景與後續成績\n\n作者在討論一節把話說得比較大：一個重排視覺的因果編碼器，接上一個做任務推理的因果解碼器，兩段一維推理也許能走向「真正的二維推理」。他們也設想，同一個語言模型式編碼器只要換一組查詢，就能處理影像、語音與文字。這些目前都是展望，論文只在文件閱讀上做了驗證。\n\nOmniDocBench 之後改版到 v1.6，加入 296 頁較難的樣本。官方排行榜上，DeepSeek-OCR 2 的分數是 90.25；前五名則是一群 10 億參數上下的專用模型，最高約 97 分。[OmniDocBench README](https://github.com/opendatalab/OmniDocBench)\n\n## 結論\n\nDeepSeek-OCR 2 改的地方很集中：只換編碼器的後半段，讓一組可學習的查詢依序讀取影像，把視覺 token 重新排成閱讀順序。\n\n1. **遮罩設計是關鍵**。視覺 token 彼此雙向可見，查詢之間是因果的；只有查詢的輸出往下傳。\n2. **閱讀順序全面改善**。OmniDocBench v1.5 的閱讀順序編輯距離從 0.085 降到 0.057，九類文件全部變好。\n3. **文字辨識不是每類都變好**。書籍與報紙的文字編輯距離反而略升，報紙受限於 token 上限與訓練資料。\n4. **上線指標只看得到重複**。重複率從 6.25% 降到 4.17%，但這個指標看不到通順的錯字。\n\n把閱讀順序交給一組會依序看圖的查詢，是很直覺的想法。它讓模型更像人讀文件；至於讀到的字是看清楚的，還是依上下文補上的，仍然要另外檢查。\n","imageSizes":{"/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png":{"width":1111,"height":588},"/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png":{"width":1194,"height":483}}}
