DeepSeek-OCR 论文解读:把文本”光压缩”进视觉 token
论文:DeepSeek-OCR: Contexts Optical Compression 作者:Haoran Wei、Yaofeng Sun、Yukun Li,DeepSeek-AI 这篇论文的想法很反直觉,一页文档 1000 个词,能不能只用一个 512×512 的图、64 个视觉 token 就把它”解压”出来?答案是能,10 倍压缩率下 OCR 精度还有 97%,压到 20 倍还有 60%。DeepSeek-OCR 不是个普通的 OCR 模型,它是”光学压缩上下文”这个研究方向的探路石,顺带把实用的 OCR 做成了极致压缩版,OmniDocBench 上只用 100 个视觉 token 就超过用 256 个 token 的 GOT-OCR2.0。
一、核心思想:一张图顶一千个词
Transformer 处理长文本的代价是平方级增长的,而一张含文字的图片,信息密度远高于等价数字文本。能不能把视觉当压缩媒介,把长文本”压”进视觉 token,再让模型学会解压?
OCR 恰好是这个压缩-解压范式的理想试验场。它天然建立视觉和文本之间的映射,还能量化评估。DeepSeek-OCR 就是干这个的,模型本体是 DeepEncoder 加一个 3B MoE 解码器,但论文真正想探讨的是,上下文光学压缩的边界在哪里。
二、DeepEncoder:新造的视觉编码器
现有视觉编码器各有毛病。Vary 那种双塔架构要双预处理,流水线并行难搞;InternVL 那种分块法原生分辨率低,大图切太碎,视觉 token 爆炸;Qwen2-VL 那种自适应分辨率(NaViT)激活内存大,大图直接爆显存,长序列拖慢推理。
DeepEncoder 的要求清单:能处理高分辨率、高分辨率下激活低、视觉 token 少、支持多种分辨率、参数适中。
结构是 SAM-base(80M,窗口注意力)串一个 CLIP-large(300M,全局注意力),中间用两层卷积做 16 倍下采样压缩。1024×1024 的图先切成 4096 个 patch token,窗口注意力只占 80M 参数,激活可控;进全局注意力之前,压缩模块把 token 从 4096 压到 256,全局注意力部分的内存也控制住了。CLIP 的 patch embedding 层去掉,因为它接的是 token 不是图像。
多种分辨率模式:Tiny 512(64 token)、Small 640(100)、Base 1024(256)、Large 1280(400),靠位置编码动态插值实现一个模型多种分辨率。还有个 Gundam 模式,n 个 640 局部块加 1 个 1024 全局视图,token 数 n×100+256,专治超高分辨率输入(报纸这种),n 控制在 2 到 9,不会切太碎。Gundam-Master 是 1024 局部块加 1280 全局视图,因为分辨率太大、跟其它模式一起训会拖慢训练,是单独继续训练出来的。
三、数据引擎:70% OCR + 20% 通用视觉 + 10% 纯文本
OCR 1.0。文档数据 3000 万页、覆盖约 100 种语言(中英约 2500 万,其他语言 500 万)。粗标注用 fitz 直接提文本,教模型认光学字符;细标注中英各 200 万页,用先进版面模型(PP-DocLayout)和 OCR 模型(MinerU、GOT-OCR2.0)标注成”版面坐标 + 文本”交错格式,坐标归一化到 1000 档。小语种用模型飞轮,先训一个 GOT-OCR2.0 标小 patch,造了 60 万样本。另外 300 万条 Word 数据贡献公式和 HTML 表格。自然场景 OCR 中英各 1000 万,LAION 和 Wukong 的图、PaddleOCR 标注。
OCR 2.0。图表 1000 万(pyecharts/matplotlib 渲染,任务定义为图转 HTML 表格,比 OneChart 的字典格式省 token);化学式 500 万(PubChem 的 SMILES 用 RDKit 渲染成图);平面几何 100 万(Slow Perception 生成方式,perception-ruler 取 4,加了平移不变增强)。
通用视觉 20%,保住通用视觉接口(描述、检测、定位)。纯文本 10%,长度 8192,保语言能力。
四、训练:两阶段,简洁
第一阶段单独训 DeepEncoder,用紧凑语言模型套 next token prediction 框架,OCR 1.0+2.0 数据加 100M LAION,2 个 epoch,batch 1280,学习率 5e-5。第二阶段训整个 DeepSeek-OCR,流水线并行分 4 段,SAM 和压缩器当”视觉 tokenizer”冻结在 PP0,CLIP 当输入 embedding 放 PP1 可训练,MoE 12 层各 6 层放 PP2/PP3。20 节点 × 8 张 A100-40G,DP 40,batch 640。生产环境单卡 A100 一天能产 20 万页训练数据,20 节点一天 3300 万页。
五、压缩率研究:边界在哪
在 Fox 基准上做压缩-解压实验,英文文档 600-1300 token,用 Tiny(64 token)和 Small(100 token)模式测:
- 600-700 token 文档:64 token 下精度 96.5%(10.5 倍压缩),100 token 下 98.5%(6.7 倍)
- 1000-1100 token:100 token 下 91.5%(10.6 倍)
- 1200-1300 token:64 token 下只有 59.1%(19.7 倍),100 token 下 87.1%(12.6 倍)
结论,10 倍以内压缩率精度约 97%,10-12 倍约 90%,20 倍还有 60%。超 10 倍性能开始掉,原因有两个,长文档版面变复杂,以及长文本在 512/640 分辨率下变糊。作者认为后者可以当成”遗忘机制”的特征来研究——20 倍压缩时模型记住的是梗概而不是逐字文本,这跟 LLM 的长期记忆模型有相似之处。
六、实用成绩:OmniDocBench
OmniDocBench 上(编辑距离,越小越好):
- Tiny(64 token)整体 0.386,已经好过 Nougat
- Small(100 token)0.221,超过用 256 token 的 GOT-OCR2.0(0.287)
- Base(256,182 有效)0.137
- Large(400,285 有效)0.138,论文称与 SOTA 持平
- Gundam(795 token)0.127,超过要 6790 个 token 的 MinerU2.0(0.133),token 数只有它的约八分之一
- Gundam-M(1853 token,200dpi)0.123,逼近 dots.ocr 的 0.125
分文档类型看,幻灯片 64 个 token 就够(0.116),书和报告 100 token 就行,报纸要 Gundam 甚至 Gundam-M(文本量 4000-5000 token,远超其它模式的 10 倍压缩率上限)。这些结果划出了光学压缩的真实边界。
七、其他能力
深度解析。OCR 1.0+2.0 合体,可以二次调用解析文档里的图,图表转 HTML 表格、化学式转 SMILES、几何图转结构化字典、自然图片给详细描述,一个统一提示词搞定。
多语言。接近 100 种语言,版面和非版面输出都支持,论文展示了阿拉伯语和僧伽罗语。
通用视觉。保留定位和描述能力(/
收尾:我的一点看法
这篇论文最值钱的是那个”一句话问题”:1000 个词的文档,最少要多少个视觉 token 才能解码?这个问题的答案直接关系到 LLM 长上下文怎么省钱。10 倍压缩率保 97% 精度,意味着如果这个方向成熟,一万 token 的长文档可以压成一千 token 的图,长上下文的成本结构会被改写。
DeepEncoder 的设计值得单独夸。窗口注意力处理海量 patch、16 倍卷积压缩器砍 token、全局注意力处理压缩后的表示,这个三段式把”高分辨率、低激活、少 token”三个互相打架的需求同时满足了。跟 V4 的 CSA”先压缩再稀疏”思路遥相呼应,DeepSeek 在压缩这件事上是认真的。
那个”20 倍压缩时的性能下降 = 遗忘机制”的观察很有想象力。当信息被压到 20 倍,模型记住的是梗概、丢掉的是细节,这确实跟人类记忆和 LLM 长期记忆的行为模式相似。作者没深挖,但指了个方向,光学压缩可以当研究遗忘机制的工具。后来 V4 论文里引用的 Conditional Memory(条件记忆)论文,就是这条线的延续。
OmniDocBench 的成绩单也很漂亮,100 个 token 干翻 256 个 token 的 GOT-OCR2.0,795 个 token 干翻 6790 个 token 的 MinerU2.0。这不是简单的高压缩,是压缩和高精度同时拿到了。
当然,边界也明显。压缩率一过 10 倍就肉眼可见地掉,报纸那种 4000-5000 token 的超长文档必须上 Gundam 模式,本质还是靠堆 token;版面复杂的文档是硬伤。论文自己也说这是 proof-of-concept(概念验证),不是终点。另外 OCR 之外,这个压缩范式能不能泛化到任意文本、能不能无损,都是开放问题。
附:核心数据速查
架构
| 组件 | 参数 | 说明 |
|---|---|---|
| DeepEncoder | ~380M | SAM-base(80M,窗口注意力)+ 16× 卷积压缩器 + CLIP-large(300M,全局注意力) |
| 解码器 | DeepSeek-3B-MoE | 6/64 路由专家 + 2 共享,570M 激活 |
| 1024×1024 输入 | - | 4096 patch token → 压缩到 256 |
分辨率模式
| 模式 | 分辨率 | token 数 |
|---|---|---|
| Tiny | 512×512 | 64 |
| Small | 640×640 | 100 |
| Base | 1024×1024 | 256 |
| Large | 1280×1280 | 400 |
| Gundam | n×640 + 1024 全局 | n×100+256(n∈[2,9]) |
| Gundam-M | n×1024 + 1280 全局 | n×256+400(单独继续训练) |
压缩率实验(Fox 基准)
- <10× 压缩:精度 ~97%
- 10-12×:~90%
- 20×:~60%
OmniDocBench(编辑距离,越小越好)
| 模式 | token | 英文整体 |
|---|---|---|
| Tiny | 64 | 0.386 |
| Small | 100 | 0.221 |
| Base | 256(182 有效) | 0.137 |
| Large | 400(285 有效) | 0.138 |
| Gundam | 795 | 0.127 |
| Gundam-M | 1853 | 0.123 |
| GOT-OCR2.0 | 256 | 0.287 |
| MinerU2.0 | 6790 | 0.133 |
数据构成:70% OCR(1.0+2.0)+ 20% 通用视觉 + 10% 纯文本
- OCR 1.0:3000 万页 PDF(~100 语言)+ 中英各 1000 万自然场景 + 300 万 Word
- OCR 2.0:图表 1000 万 + 化学式 500 万 + 几何 100 万
生产能力:单张 A100-40G 每天 20 万+ 页;20 节点每天 3300 万页
关键概念清单
- contexts optical compression = 上下文光学压缩(文本压进视觉 token)
- DeepEncoder = 自研视觉编码器(窗口注意力 + 16× 压缩 + 全局注意力)
- compression ratio = 压缩率(文本 token / 视觉 token)
- deep parsing = 深度解析(图内嵌图二次解析)
- OCR 1.0 = 传统 OCR(场景文字 + 文档)
- OCR 2.0 = 复杂人造图像解析(图表/化学式/几何)
- SMILES = 化学结构线性表示法
- model flywheel = 模型飞轮(用小 patch 数据训模型再标数据)
- Fox / OmniDocBench = 文档解析评测基准
- edit distance = 编辑距离
- Gundam 模式 = 多分辨率动态模式(局部块 + 全局视图)
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





