字节跳动的核心一直都是它的算法。他们为人工智能行业贡献了许多项目,例如开源了一个名为 Monolith 的高吞吐量、低延迟深度学习框架,用于大规模推荐建模。最近字节跳动发布了众多新项目,包括 Bagel ,这是一个具有图像生成和编辑能力的开源多模态基础模型;Trae,一个专为程序员设计的人工智能助手,能够回答编码问题、完成代码片段,并根据提示开发完整的项目;DAPO,一个用于优化大型语言模型(LLM)的分布式强化学习框架;以及 UI-TARS,一个用于自动化图形用户界面(GUI)交互的开源代理。
此外,他们还推出了 Dolphin,这是一个新的多模态文档图像解析模型,全称为 Document Image Parsing via Heterogenous Anchor Prompting。
在本教程中,我们将带着大家做两件事:一是概述涵盖模型架构和训练方法,二是我们将运行该模型。我们将向您展示如何在H100 GPU 的按需实例上运行模型。
开发 Dolphin 的初衷
研究人员之所以开发这个模型,是因为现有的集成文档解析方案和视觉语言模型(VLM)还不够理想。
Dolphin 论文中提到的现有文档解析方法如下。
类别 | 描述 | 示例 |
---|---|---|
集成式文档解析 | 传统的文档解析解决方案使用多阶段流水线,包含多个专用模型,从布局检测开始,然后是对每种元素类型的专用识别器。 | Mathpix TextIn MinerU Layout Parser |
通用 VLMs | 大型视觉-语言模型无需任务特定训练即可处理文档解析任务,这得益于其通过大规模多样化视觉数据预训练而获得的零样本能力。 | GPT-4V 系统卡片(示例) Claude系列(文档) Gemini系列(博客)(文档) QwenVL系列 MiniCPM系列 InternVL系列 DeepSeekVL2 Step-1V |
专业 VLMs | 专门针对文档解析的模型,经过微调以应对文档特定的挑战,通常在文档解析基准测试中优于其他模型。 | Nougat GOT-OCR2.0 Donut LayoutLM系列 UDOP Wukong-Reader KOSMOS系列 UniDoc (论文) UReader DocPedia (论文) TGDoc Vary Fox Monkey系列 TabPedia TextSquare DocFusion TextHawk系列 mPLUG-Doc Owl系列 SmolDocling PlatyPus olmOCR Ocean-OCR Mistral-OCR |
在论文中,研究人员解释说,集成式的文档解析解决方案需要独立优化不同的 OCR 任务(例如布局检测、阅读顺序预测和文本行、公式或表格的识别),而现有的 VLM 解决方案(包括通用和专业的 VLM)在解析复杂布局的长文档时会出现布局结构退化和效率瓶颈。由于现有解决方案面临的限制,字节跳动提出了 Dolphin 进行文档处理。
什么是 Dolphin?

Dolphin 采用"分析再解析"的方法来提取文档中的结构化内容。这两个阶段中的第一个阶段,即分析阶段,涉及分析页面级布局以按阅读顺序提取元素。提取的元素用于第二个解析阶段来并行解析各个元素。这种方法的并行处理,当与特定元素的提示配对时,可以实现计算效率和准确的内容识别。
架构

Dolphin 利用编码器-解码器变压器架构。编码器是一个 Swin Transformer,其中页面图像是输入并输出为一系列视觉嵌入。使用交叉注意机制和提示"解析此文档的阅读顺序",mBart 解码器关注编码的视觉特征,以导出保持结构关系的序列布局元素。
第二阶段使用布局元素来并行解析内容,使其高效同时保留特定元素的细节。这分为两个步骤:
- 元素图像编码:将每个布局元素的区域从原始图像中裁剪出来以创建局部视图。这些视图使用 Swin Transformer 编码以生成特定元素的视觉特征。
- 并行 内容解析:利用这些编码特征,解码器并行生成每个元素的解析内容。
训练
Dolphin 使用 Donut 的预训练权重进行初始化。指令调整使用的训练数据集包括 3000 万个样本,涵盖了页面级文档和元素级组件。下表详细介绍了数据样本的类型以及这些不同数据格式如何处理 Dolphin 的布局或解析阶段。
数据来源 | 处理/渲染方法 | 注释/标记细节 | 样本数量 | 任务类型 |
---|---|---|---|---|
混合文档 | 收集自多种来源(教育材料、出版物、商业文档)。 | 手动注释元素级别的边界及其阅读顺序。 | 0.12M | 布局 |
HTML | 通过网页渲染生成合成训练数据(例如中文和英文维基百科文章)。应用随机字体选择以增加视觉多样性。 | HTML 内容通过添加 span 标签进行字符级别注释处理。获取字符、单词、行和段落级别的全面边界框注释。 | 4.37M | 解析 |
LaTeX | 使用 LaTeX Rainbow 进行处理,这是一种特殊的渲染框架,保留了层次结构。不同元素(公式、图表)以不同颜色渲染。使用 XeTeX 工具渲染公式图像。 | 渲染文档自动解析以提取元素类型、层次关系和块、行和单词级别的空间位置。公式表达式以 LaTeX 格式收集。 | 0.5M | 解析 |
Markdown | 使用 Pandoc 进行 PDF 渲染,并使用自定义模板。 | 基于 PyMuPDF 的解析和与源 Markdown 的内容对齐,以获取段落、行和单词级别的层次文本注释,以及特定元素类型如表格。公式块通过不同颜色渲染后的像素匹配来确定。 | 0.71M | 解析 |
表格 | 使用现有的大规模数据集:PubTabNet(568K 表格)和 PubTab1M(1M 表格)。 | PubTabNet 提供 HTML 注释。PubTab1M 提供更精细的结构注释。 | 1.57M | 解析 |
公式 | 来自 arXiv 的 LaTeX 格式的公式表达式。使用 XeTeX 工具将其渲染为公式图像。渲染过程中使用各种背景和字体。 | LaTeX 格式本身作为真实值。 | 23M | 解析 |
实现运行字节 Dolphin
字节的Dolphin 提供了两种推理框架,支持在两个不同级别上解析文档。第一个级别是页面级别解析,将整个文档页面转换为结构化的 JSON 和 Markdown 格式。第二个级别是元素级别解析,将文档分解为单独的组件,例如文本、表格和公式,以便进行更详细的分析。
第一步:设置 GPU Droplet
首先设置一个DigitalOcean GPU Droplet云服务器,选择 AI/ML 并选择 NVIDIA H100 选项。具体方法,我们在往期博客中介绍过,进入 DigitalOcean 后台之后,选择 Creat GPU Droplet,然后选择所需要的配置即可。当然,你也可以选择其他型号的 GPU,比如 最新发布的AMD MI300X,包含按需实例。

第二步:SSH

通过 SSH 登录到您最喜欢的代码编辑器或终端
kotlin
ssh root@<your IPv4 address here>
第三步:安装依赖项
在终端中复制并粘贴以下代码片段:
apt install python3-pip python3.10
第四步:安装 Conda
下载 miniconda 安装程序:
arduino
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
运行安装程序:
bash Miniconda3-latest-Linux-x86_64.sh
现在让我们设置 Dolphin 项目并下载必要的模型。
第五步:创建 Conda 环境并克隆 Dolphin
bash
conda create -n ai python=3.11 -y && conda activate ai
git clone https://github.com/ByteDance/Dolphin.git && cd Dolphin
此命令创建一个新的名为 ai 的 Conda 环境,使用 Python 3.11,激活它,然后克隆 Dolphin 存储库并导航到其目录中。
第六步:安装 Python 要求
接下来,安装 Dolphin 所需的所有 Python 库:
pip install -r requirements.txt huggingface_hub
这将安装 Dolphin 的 requirements.txt 文件中列出的所有内容,以及用于与 Hugging Face 交互的 huggingface_hub。
第七步:准备下载模型
我们需要一个地方保存模型:
arduino
mkdir hf_model
登录 Hugging Face:你需要一个 Hugging Face 访问令牌(Token)才能下载模型。如果没有,请在 Hugging Face 网站上的你的个人资料设置中创建一个(设置 -> 访问令牌)。
然后,通过命令行登录:
huggingface-cli login
当提示时粘贴您的令牌。
第八步:下载 Dolphin 模型
最后,将模型文件直接下载到您的新目录中:
bash
huggingface-cli download ByteDance/Dolphin --local-dir ./hf_model
第九步:运行推理
让我们在 Dolphin 的 demo 文件夹中提供的图像上运行推理:
bash
# 处理单个文档图像
python demo_page_hf.py --model_path ./hf_model --input_path ./demo/page_imgs/page_1.jpeg --save_dir ./results
# 处理单个文档 pdf
python demo_page_hf.py --model_path ./hf_model --input_path ./demo/page_imgs/page_6.pdf --save_dir ./results
# 处理目录中的所有文档
python demo_page_hf.py --model_path ./hf_model --input_path ./demo/page_imgs --save_dir ./results
# 使用自定义批量大小进行并行元素解码
python demo_page_hf.py --model_path ./hf_model --input_path ./demo/page_imgs --save_dir ./results --max_batch_size 16

让我们看一下page_1的输出。
以下是 markdown 输出:

以下是 json 输出:

总之,字节跳动的 Dolphin 模型提出了一种有前景的文档解析方法,利用了分析后解析策略。这种方法利用异质锚定提示技术,实现了精度和效率,解决了现有集成解决方案和 VLM 解决方案中的局限性。我们讨论了模型架构和训练过程。此外,我们向您展示了如何在 DigitalOcean GPU Droplets 上运行 Dolphin 的页面级和元素级解析功能。
最后,DigitalOcean 提供了多种型号的 GPU 云服务器,包括按需实例与裸金属产品,价格普遍低于一线云服务平台,而且性能稳定。目前已经有多家中国地区企业正在使用。如需了解详情以及最新优惠动态,可联系 DigitalOcean 中国区独家战略合作伙伴卓普云。