DeepSeek-OCR:上下文光学压缩
DeepSeek-OCR是对通过光学二维映射压缩长上下文可行性的初步研究。DeepSeek-OCR由两个组件构成:DeepEncoder(深度编码器)和作为解码器的DeepSeek3B-MoE-A570M。具体而言,DeepEncoder作为核心引擎,旨在高分辨率输入下保持低激活状态,同时实现高压缩,以确保视觉token数量处于最优且可管理的范围。
实验表明,当文本token数量为视觉token数量的10倍以内(即压缩比<10×)时,该模型的解码(OCR)精度可达97%;即便在20×的压缩比下,OCR准确率仍能保持在60%左右。这为大语言模型(LLMs)中的历史长上下文压缩、记忆遗忘机制等研究领域展现了可观的前景。
除此之外,DeepSeek-OCR还具有很高的实用价值。在OmniDocBench基准测试中,它仅用100个视觉token就超越了GOT-OCR2.0(256个token/页),且在使用少于800个视觉token的情况下,性能优于MinerU2.0(平均每页6000+个token)。在生产环境中,DeepSeek-OCR(单张A100-40G显卡)每天可生成20万+页的大语言模型/视觉语言模型训练数据。
来自:https://github.com/deepseek-ai/DeepSeek-OCR
- 图 1:图a)展示了在 Fox 基准测试上的压缩比(ground truth文本token数量 / 模型使用的视觉token数量)测试结果;图b)展示了在 OmniDocBench 基准测试上的性能对比。在所有端到端模型中,DeepSeek-OCR 使用的视觉token数量最少,且能实现当前最优(state-of-the-art)性能。
目录
- 背景概述
- 主流VLM中的视觉编码器
- 端到端OCR模型
- 方法
- DeepEncoder
- 多分辨率支持
- MoE解码器
- 数据工程
- 训练流程
- DeepSeek-OCR的应用
背景概述
当前的大语言模型(LLMs)在处理长文本内容时面临着巨大的计算挑战,这是因为其计算量会随序列长度呈二次方增长。DeepSeek探索了一种潜在的解决方案:将视觉模态用作文本信息的高效压缩媒介。一幅包含文档文本的图像,仅需使用远少于等效数字文本的令牌(tokens)就能承载丰富信息,这表明通过视觉令牌实现的光学压缩有望达到更高的压缩比。
这一见解促使我们从以大语言模型(LLM)为核心的视角重新审视视觉-语言模型(VLMs),重点关注视觉编码器如何提升LLM处理文本信息的效率,而非聚焦于人类擅长的基础视觉问答(VQA)任务。光学字符识别(OCR)任务作为连接视觉与语言的中间模态,为这种视觉 - 文本压缩范式提供了理想的测试平台:一方面,OCR 任务在视觉表征与文本表征之间建立了天然的压缩 - 解压缩映射关系;另一方面,它还能提供可量化的评估指标,便于衡量压缩效果。
DeepSeek-OCR是一款视觉 - 语言模型(VLM),其设计初衷是作为高效视觉 - 文本压缩的初步概念验证模型。该研究工作主要有三大贡献:
- 首先,研究人员对视觉 - 文本令牌压缩比进行了全面的定量分析。在包含多种文档布局的 Fox 基准测试中(如图 1a所示),DeepSeek-OCR展现出优异性能:当文本压缩比为 9-10 倍时,OCR 解码精度可达 96% 以上;压缩比为 10-12 倍时,精度约为 90%;压缩比达到 20 倍时,精度仍能保持在 60% 左右(若考虑输出结果与ground truth之间的格式差异,实际精度会更高)。
- 其次,研究人员提出了一种新型架构 ——DeepEncoder(深度编码器)。即便处理高分辨率输入,该架构仍能保持较低的激活内存占用,并生成数量极少的视觉token。DeepEncoder 通过一个 16 倍卷积压缩器,将窗口注意力编码器组件与全局注意力编码器组件串联起来。这种设计可确保:窗口注意力组件负责处理大量视觉令牌,而卷积压缩器会在视觉令牌进入密集型全局注意力组件之前对其进行数量缩减,最终实现高效的内存使用。
- 第三,基于 DeepEncoder(深度编码器)与 DeepSeek3B-MoE 模型,研究人员开发出了 DeepSeek-OCR。如图 1b 所示,在 OmniDocBench 基准测试中,在所有端到端模型里,DeepSeek-OCR 使用的视觉令牌数量最少,却能实现当前最优(state-of-the-art)性能。此外,该模型还被赋予了图表解析、化学公式解析、简单几何图形解析以及自然图像解析能力,以进一步提升其实际应用价值。在生产环境中,使用 20 个节点(每个节点配备 8 张 A100-40G 显卡)时,DeepSeek-OCR 每天可为大语言模型(LLMs)或视觉 - 语言模型(VLMs)生成 3300 万页数据。
综上,该研究初步探索了在大语言模型(LLMs)的文本信息处理中,将视觉模态用作高效压缩媒介的可行性。通过 DeepSeek-OCR 模型证实:针对不同历史上下文阶段,视觉 - 文本压缩可实现显著的令牌数量缩减(7-20 倍),这为解决大语言模型的长上下文处理难题提供了极具前景的方向。
- 图2:主流视觉 - 语言模型(VLMs)中的典型视觉编码器。目前开源视觉 - 语言模型(VLMs)中常用的编码器主要分为三类,但它们均存在各自的缺陷。
主流VLM中的视觉编码器
目前开源的视觉 - 语言模型(VLMs)采用三类主流视觉编码器,如图 2 所示。
第一类是以 Vary 为代表的双塔架构,该架构通过并行的 SAM 编码器增加视觉词汇参数,以实现高分辨率图像处理。尽管这种方法能实现参数与激活内存的可控,但存在明显缺陷:需对图像进行双重预处理,这不仅增加了部署复杂度,还使得训练过程中编码器的流水线并行难以实现。
第二类是以内 InternVL2.0 为代表的基于分块(tile-based)的方法,该方法通过将图像分割为小块(tile)进行并行计算,从而在高分辨率设置下降低激活内存占用。尽管它能处理极高分辨率的图像,但局限性也十分显著:其原生编码器分辨率通常较低(低于 512×512),导致大幅图像被过度分割,进而产生大量视觉令牌(vision tokens)。
第三类是以 Qwen2-VL 为代表的自适应分辨率编码,该编码采用 NaViT 范式,通过基于补丁(patch)的分割直接处理完整图像,无需分块并行。虽然这种编码器能灵活应对多种分辨率,但在处理大幅图像时面临严峻挑战:激活内存消耗极大,可能导致 GPU 内存溢出;且训练过程中进行序列打包(sequence packing)时,需要极长的序列长度。此外,过长的视觉令牌还会拖慢推理过程中的预填充(prefill)与生成(generation)两个阶段。
端到端OCR模型
光学字符识别(OCR),尤其是文档解析任务,一直是图像到文本领域的研究热点。随着视觉 - 语言模型(VLMs)的发展,大量端到端 OCR 模型应运而生:传统流水线架构需分别依赖检测与识别专用模型,而端到端模型通过简化 OCR 系统,从根本上改变了这一格局。
其中,Nougat 首次将端到端框架应用于 arXiv 平台的学术论文 OCR 任务,证实了模型在处理密集感知任务上的潜力;GOT-OCR2.0 则拓展了 OCR2.0 的应用范围,将更多合成图像解析任务纳入其中,并设计出一款兼顾性能与效率的 OCR 模型,进一步凸显了端到端 OCR 研究的价值。此外,Qwen-VL 系列、InternVL 系列等通用视觉模型及其众多衍生模型,也在不断提升自身的文档 OCR 能力,以探索密集视觉感知的边界。
然而,当前模型尚未解决一个关键研究问题:对于包含 1000 个单词的文档,解码至少需要多少个视觉令牌(vision tokens)?这一问题对于研究 “一图胜千言” 的原理具有重要意义。
方法
- 图 3:DeepSeek-OCR 的架构图。DeepSeek-OCR 由深度编码器(DeepEncoder)和 DeepSeek-3B-MoE 解码器两部分构成。其中,DeepEncoder 是 DeepSeek-OCR 的核心,包含三个组件:一是以窗口注意力为主导、用于感知功能的 SAM 模型;二是以密集型全局注意力为特征、用于知识提取的 CLIP 模型;三是连接前两者的 16 倍令牌压缩器(16× token compressor)。
如图 3 所示,DeepSeek-OCR 采用统一的端到端视觉 - 语言模型(VLM)架构,由编码器与解码器两部分组成。其中,编码器(即深度编码器 DeepEncoder)负责提取图像特征,并对视觉表征进行令牌化(tokenizing)与压缩处理;解码器则基于图像令牌(image tokens)与提示词(prompts)生成所需结果。DeepEncoder 的参数规模约为 3.8 亿,主要由 8000 万参数的 SAM-base 模型与 3 亿参数的 CLIP-large 模型串联构成;解码器采用 30 亿参数的混合专家模型(MoE)架构,激活参数规模为 5.7 亿。在后续段落中,将深入介绍该模型的组件构成、数据工程设计及训练技术细节。
DeepEncoder
为探索上下文光学压缩的可行性,我们需要一款具备以下特性的视觉编码器:1. 能够处理高分辨率输入;2. 在高分辨率下保持低激活内存占用;3. 生成的视觉令牌(vision tokens)数量少;4. 支持多分辨率输入;5. 参数规模适中。然而,如(主流VLM中的视觉编码器)所述,当前的开源编码器无法完全满足所有这些条件。因此,DeepSeek自主设计了一款新型视觉编码器,并将其命名为 DeepEncoder(深度编码器)。
DeepEncoder 主要由两个组件构成:一个是以窗口注意力为主导的视觉感知特征提取组件,另一个是具备密集型全局注意力的视觉知识特征提取组件。为充分利用以往研究的预训练优势,分别采用 SAM-base(patch大小为 16)和 CLIP-large 作为这两个组件的核心架构。对于 CLIP 组件,由于其输入不再是原始图像,而是前一处理流程输出的令牌,因此研究人员移除了它的第一个patch嵌入层。
在这两个组件之间,借鉴了 Vary 的设计思路,采用一个 2 层卷积模块对视觉令牌进行 16 倍下采样处理。其中,每个卷积层的卷积核大小为 3、步长为 2、填充值为 1,且通道数从 256 增加至 1024。假设输入一张 1024×1024 的图像,DeepEncoder 会将其分割为 1024/16×1024/16=4096 个patch令牌(patch tokens)。由于编码器前半部分(视觉感知特征提取组件)以窗口注意力为主导,且参数规模仅为 8000 万(80M),因此激活内存占用处于可接受范围。在进入全局注意力组件之前,4096 个令牌会先经过压缩模块处理,令牌数量缩减为 4096/16=256 个,从而使整体激活内存可控。
多分辨率支持
假设我们有一张包含 1000 个光学字符的图像,且希望测试解码该图像需要多少个视觉令牌(vision tokens)。这就要求模型能够支持可变数量的视觉令牌,也就是说,深度编码器(DeepEncoder)需要具备多分辨率支持能力。
研究人员通过位置编码的动态插值来满足上述需求,并设计了多种分辨率模式用于模型同步训练,最终实现单个 DeepSeek-OCR 模型具备多分辨率支持能力。
原生分辨率支持四种子模式:Tiny(微型)、Small(小型)、Base(基础型)和 Large(大型),其对应的分辨率与令牌数量分别为 512×512(64 个)、640×640(100 个)、1024×1024(256 个)和 1280×1280(400 个)。
由于 Tiny 和 Small 模式的分辨率相对较小,为避免视觉令牌(vision tokens)浪费,图像采用直接调整原始尺寸的方式进行处理;对于 Base 和 Large 模式,为保留原始图像的宽高比,需将图像填充(padding)至对应尺寸。填充后,有效视觉令牌数量会少于实际视觉令牌数量。
动态分辨率可由两种原生分辨率组合构成。例如,Gundam 模式(高达模式)由 n 个 640×640 的分块(局部视图)和一个 1024×1024 的全局视图组成,其分块方式参考了 InternVL2.0 的设计。
MoE解码器
解码器采用了 DeepSeekMoE 模型,具体为 DeepSeek-3B-MoE 版本。在推理过程中,该模型会从 64 个路由专家(routed experts)中激活 6 个,并激活 2 个共享专家(shared experts),激活参数规模约为 5.7 亿(570M)。这款 30 亿参数(3B)的 DeepSeekMoE 模型非常适合以特定领域为核心(比如 OCR 领域)的视觉 - 语言模型(VLM)研究:它既具备 30 亿参数模型的表达能力,同时又拥有 5 亿参数(500M)小型模型的推理效率。
解码器从DeepEncoder输出的压缩latent视觉token中重构原始文本表征,具体过程为: f d e c : R n × d l a t e n t → R N × d t e x t X ^ = f d e c ( Z ) f_{dec}:\mathbb{R}^{n\times d_{latent}}\rightarrow\mathbb{R}^{N\times d_{text}}\\\widehat{X}=f_{dec}(Z) fdec:Rn×dlatent→RN×dtextX =fdec(Z)其中 n n n小于等于 N N N。 Z ∈ R n × d l a t e n t Z\in\mathbb{R}^{n\times d_{latent}} Z∈Rn×dlatent代表从DeepEncoder获取的压缩latent视觉token, X ^ ∈ R N × d t e x t \widehat{X}\in\mathbb{R}^{N\times d_{text}} X ∈RN×dtext代表重构得到的文本表征。
数据工程
研究人员为 DeepSeek-OCR 构建了复杂多样的训练数据,具体包括以下三类:一是 OCR 1.0 数据,主要由场景图像 OCR、文档 OCR 等传统 OCR 任务数据构成;二是 OCR 2.0 数据,主要涵盖复杂人工图像的解析任务数据,例如常见图表、化学公式、平面几何图形的解析数据;三是通用视觉数据,其主要作用是为 DeepSeek-OCR 注入一定的通用图像理解能力,并保留通用视觉接口。
训练流程
DeepSeek-OCR训练流程非常简洁,主要包含两个阶段:a)独立训练深度编码器(DeepEncoder);b)训练 DeepSeek-OCR 模型。需注意,Gundam-master 模式是在已预训练完成的 DeepSeek-OCR 模型基础上,使用 600 万(6M)条采样数据继续训练得到的。由于该模式的训练方案与其他模式完全一致,后续将省略其详细说明。
训练DeepEncoder
借鉴 Vary 的方法,采用紧凑型语言模型,并通过下一个token预测(next token prediction)框架来训练深度编码器(DeepEncoder)。在该阶段,使用了前文提及的所有 OCR 1.0 和 OCR 2.0 数据,以及从 LAION 数据集中采样得到的 1 亿(100M)条通用数据。所有数据的训练轮次(epoch)设为 2,批次大小(batch size)为 1280;优化器采用 AdamW,搭配余弦退火调度器(cosine annealing scheduler),学习率(learning rate)设为 5e-5。训练序列长度(sequence length)为 4096。
训练DeepSeek-OCR
待深度编码器(DeepEncoder)准备就绪后,使用前面提及的数据训练 DeepSeek-OCR 模型,整个训练过程在 HAI-LLM 平台上进行。
整个模型采用流水线并行(pipeline parallelism,简称 PP)策略,共分为 4 个部分,其中深度编码器(DeepEncoder)占 2 个部分,解码器占 2 个部分。对于深度编码器(DeepEncoder),研究人员将 SAM 模型与压缩器视为视觉令牌生成器(vision tokenizer),将其部署在 PP0 分区并冻结参数;同时将 CLIP 部分视为输入嵌入层(input embedding layer),部署在 PP1 分区且不冻结权重,以参与训练。对于语言模型部分,由于 DeepSeek-3B-MoE 包含 12 层,在 PP2 和 PP3 分区各部署 6 层。
训练过程使用 20 个节点(每个节点配备 8 张 A100-40G GPU),数据并行(data parallelism,简称 DP)度设为 40,全局批次大小(global batch size)为 640。优化器采用 AdamW,搭配基于步长的调度器(step-based scheduler),初始学习率(initial learning rate)设为 3e-5。其中,纯文本数据的训练速度为每天处理 900 亿个令牌(90B tokens/day),多模态数据的训练速度为每天处理 700 亿个令牌(70B tokens/day)。
DeepSeek-OCR的应用
在金融研究报告领域,DeepSeek-OCR 的深度解析模式可用于获取文档内图表的结构化结果。图表是金融及科学领域中一种关键的数据呈现形式,而图表结构化提取则是未来 OCR 模型不可或缺的一项能力。
对于书籍和文章,深度解析模式能够为文档中的自然图像输出密集型描述(dense captions)。仅需一个提示词(prompt),该模型就能自动识别图像类型,并输出所需结果。
处于深度解析模式下的 DeepSeek-OCR,还能够识别化学文档中的化学式,并将其转换为 SMILES 格式。未来,OCR 1.0+2.0 技术有望在科学、技术、工程与数学(STEM)领域的视觉 - 语言模型(VLM)/ 大语言模型(LLM)发展过程中发挥重要作用。
DeepSeek-OCR 还具备复制(结构化)简单平面几何图形的能力。由于几何图形中各线段之间存在复杂的相互依赖关系,几何图形解析任务难度极大,目前仍有很长的路要走。
为赋予模型处理大规模爬取 PDF 文件(含多语言数据)的能力,研究人员对模型进行了近 100 种语言的 OCR 能力训练。对于小语种文档,通过不同的提示词(prompt),模型既支持输出带排版格式的结果,也支持输出无排版格式的结果。
研究人员保留了 DeepSeek-OCR 在通用视觉理解方面的能力,主要包括图像描述、目标检测、目标定位(grounding)等。同时,由于训练数据中包含纯文本数据,DeepSeek-OCR 的语言能力也得以保留。需注意,由于未设置监督微调(SFT,Supervised Fine-Tuning)阶段,该模型并非聊天机器人(chatbot),部分能力需通过补全提示词(completion prompts)才能激活。