字节跳动大模型Dolphin:如何实现文档图像的“多模态”精准解析?

字节跳动的核心一直都是它的算法。他们为人工智能行业贡献了许多项目,例如开源了一个名为 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 解码器关注编码的视觉特征,以导出保持结构关系的序列布局元素。

第二阶段使用布局元素来并行解析内容,使其高效同时保留特定元素的细节。这分为两个步骤:

  1. 元素图像编码:将每个布局元素的区域从原始图像中裁剪出来以创建局部视图。这些视图使用 Swin Transformer 编码以生成特定元素的视觉特征。
  2. 并行 内容解析:利用这些编码特征,解码器并行生成每个元素的解析内容。

训练

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 中国区独家战略合作伙伴卓普云

相关推荐
LLM大模型6 小时前
LangGraph篇-子图可控性
人工智能·程序员·llm
DeepSeek忠实粉丝6 小时前
微调篇--基于PyTorch微调T5模型
人工智能·程序员·llm
MarkGosling6 小时前
【开源项目】免费且本地运行:用 DeepEval 测测你的大模型接口有没有缩水
人工智能·python·llm
玩转AGI6 小时前
Coze篇-搭建产品卖点提炼智能体
人工智能·程序员·llm
阿里云大数据AI技术1 天前
PAI推理重磅发布模型权重服务,大幅降低冷启动与扩容时长
大数据·人工智能·llm
聚客AI1 天前
🧠 预训练核心解密:Masked Language Model运作原理解析
人工智能·llm·掘金·日新计划
Baihai_IDP1 天前
为什么说大家低估了 AI 的实际使用规模?实际情况如何?
人工智能·llm·aigc
ExperDot1 天前
如何用大语言模型提取任意文档中的知识点
ai·llm·知识库·rag
DeepSeek忠实粉丝1 天前
微调篇--Transformers多模态数据预处理
人工智能·程序员·llm