烛夜
烛夜
发布于 2026-08-03 / 19 阅读
0
0

RAG 基础设施专题 Day 1 —— 数据源预处理之 Docling

对数据源的预处理是 RAG 系统在工程落地时所必须考量的一项基础设施。

今天研读 《Docling Technical Report

开源模型:Docling

文档与示例:Github


1. Docling 是什么?为什么要引入 Docling ?

将 PDF 转换为一种机器可处理的形式一直是一大难题。因为 PDF 格式多样、缺乏标准化,且其设计最初是面向打印优化(printing-optimized)的,因此抛弃掉了大部分结构特征和元数据。但是,随着 LLMRAG 模式的兴起,高效利用 PDF 中的丰富内容变得前所未有地重要。

现有的强力文档理解工具大多是商业软件或云端服务。开源工具极少,且在功能和质量上与专有/商业方案有显著差距。因此作者提出了 Docling ,它构建在专用的版面分析和表格结构识别 AI 模型及数据集上。

部署门槛

  • 纯 Python 库

  • 许可协议宽松

  • 完全本地运行,仅需普通消费级硬件

  • 架构易于扩展新功能和新模型

Docling 的 6 大核心能力:

  1. 格式转换:快速稳定地将 PDF 转换为 JSONMarkdown

  2. 结构理解:理解详细的页面版面、阅读顺序,定位插图(figures),还原表格结构。

  3. 元数据提取:提取标题、作者、参考文献、语言等。

  4. 可选 OCR:支持扫描件 PDF 的文字识别。

  5. 两种运行模式

    • 批处理模式(batch-mode):高吞吐量、低单文档解算时间。

    • 交互模式(interactive mode):在效率上做适当妥协,追求极低延迟/快速响应。

  6. 硬件加速:支持 GPU、MPS 等不同加速器。

使用 Docling 的代码示例:

2. Docling 结构概述

Docling 的处理流水线可以概括为如下形式:

阶段一 - PDF 后端解析:后端不仅抓取文本内容及其在页面上的坐标,还会把每一页渲染成位图图像

阶段二 - 标准模型流水线:一系列 AI 模型逐页独立运行,抽取版面结构和表格结构等特征与内容

阶段三:聚合与后处理:将每一页各自处理的结果合并到一起,然后做后处理增强:

  1. 补充/增强元数据。

  2. 检测文档语言。

  3. 推断阅读顺序(注意:阅读顺序是在聚合阶段才根据全局/跨页信息推断出来的)。

最终产物:组装成统一的强类型文档对象,最后序列化为 JSONMarkdown

2.1 PDF 后端

Docling 的 PDF 后端接口封装了流水线处理需要的两个最基本能力:

  1. 文本与坐标提取:检索每页所有的文本内容及其在页面上的几何坐标

  2. 视觉图像渲染:将每个页面渲染为像在 PDF 阅读器中看到一样的视觉图像

作者指出,尽管 Python 生态中存在多个开源 PDF 解析库,但它们在实际应用中遇到了无法克服的障碍:

现有开源库

存在的主要缺陷

PyMuPDF

许可证限制严格

pypdfium / PyPDF

速度较慢,或存在不可逆的质量缺陷(如:将相距遥远的文本 Token 或表格列错误地合并为同一个文本单元格)。

为了解决上述问题,Docling 采用了多后端策略,并自研了全新的解析器:

  • 默认后端:自研 docling-parse

    • 底层基础:基于低层级的 qpdf C++ 库构建。

    • 发布形式:作为一个独立的开源 Python 包发布。

    • 定位:作为 Docling 默认使用的 PDF 后端,兼顾性能与解析质量。

  • 备用后端:基于 pypdfium 的替代接口

    • 定位:作为安全备用方案。

    • 适用场景:当使用默认后端遇到特定字体编码解析异常等边缘问题时使用。

2.2 AI 模型

Docling 流水线中集成了三大 AI 模块(版面分析、表格识别、OCR):

版面分析模型

  • 定位:目标检测器,用于预测页面元素的边界框和类别。

  • 模型架构:衍生自 RT-DETR,基于人类标注数据集 DocLayNet 及其他专有数据集进行了重训练。

  • 推理引擎:使用 onnxruntime 进行推理。

  • 后处理与图文结合逻辑

    1. 依据置信度和尺寸去除重叠的框。

    2. 求交集:将预测出的边界框与从 PDF 提取到的文本 Token 进行求交集计算,从而将散落的 Token 组合成段落、章节标题、列表项、图注、插图或表格等完整语义单元。

表格结构识别模型(TableFormer)

  • 定位:基于 Vision-Transformer 的表格结构恢复模型,可预测表格的逻辑行列结构,并判定单元格属于表头(列头/行头)还是表体。

  • 复杂场景应对:能很好地处理无/半边框、空白单元格/行列、跨行跨列(Cell spans)、多层级表头以及对齐/缩进不一致等复杂表格。

  • 推理引擎:使用 PyTorch 进行推理。

  • 核心效率优化

    • 避开二次 OCR/重转录:将 layout 截取的表格图片与页面原有文本单元一同输入模型,得到结构预测后,直接将结构映射回 PDF 原有的文本单元,避免了对表格图像内容重新识别/转录的高昂开销。

OCR 扩展模块

  • 定位:针对扫描件 PDF 或页面嵌入的位图图像。

  • 默认引擎:集成了第三方库 EasyOCR

  • 现状:由于使用较高分辨率(216 dpi),虽然保证了小字号的识别质量,但 CPU 运行较慢(每页可能耗时 30 秒以上)。

相关数据对比:

模块

核心架构

推理引擎

输入分辨率

CPU 延迟/速度

版面分析

RT-DETR (DocLayNet 训练)

onnxruntime

72 dpi

< 1 秒 / 页

表格识别 (TableFormer)

Vision-Transformer

PyTorch

表格图像裁剪块

2 ~ 6 秒 / 表格

OCR (可选)

EasyOCR

EasyOCR 默认

216 dpi

> 30 秒 / 页

2.3 答案组装阶段

该阶段负责将前面各页面的预测结果整合为一个结构化的文档对象,并通过后处理算法进行增强,最终导出为用户指定的格式。

步骤一 - 页面结果汇总与封装

Docling 在这一步会将各页面预测结果汇总到一个结构良好、类型明确的文档对象数据类型,该数据类型的具体定义封装在辅助 Python 包 docling-core 中。

步骤二 - 后处理模型与算法增强

生成文档对象后,流水线会将其送入后处理模型,利用多种针对性算法完成特征增强工作,例如:

  • 语言检测:识别文档所使用的语言。

  • 阅读顺序纠正:重新梳理并校正文本内容的实际阅读逻辑顺序。

  • 图文配对:将插图与其对应的图注(Captions)进行关联匹配。

  • 元数据打标:提取并标注文档的标题、作者、参考文献等元信息。

经过后处理增强的文档对象,可依据用户指令导出为两种主要格式:

  • JSON:进行完整的数据结构序列化(适合程序读取与下游 RAG 等开发)。

  • Markdown:转换为易读的排版文本格式(适合大模型上下文输入与文档预览)。

2.4 可扩展性

开发者可以对 “AI 模型 Pipeline ” 这一部分做灵活的自定义工作。

有两种自定义方式:

  1. 继承抽象基类 BaseModelPipeline 进行全新开发。

  2. 克隆并修改默认的模型流水线。

可定制内容

  • 重构模型调用链。

  • 替换已有模型或加入新的 AI 模型。

  • 增加额外的流水线配置参数。

使用方式:在调用 Docling 的主转换方法时,直接将自定义的流水线类作为参数传入即可。

这里作者强调了代码实现上的规范:

  • Python 接口要求:模型类必须实现 Callable 接口(即定义 __call__ 方法)。

  • 输入/输出范式

    • 输入:接受一个包含页面对象(page objects)的迭代器(Iterator)

    • 输出:生成/返回另一个包含页面对象的迭代器

  • 数据承载方式:模型在预测出新的特征/内容后,通过扩展页面对象中自带的 PagePredictions 数据模型,将结果装载并传递给下游。

3. 实验表现

为了保证实验的可复现性,作者在标准测试集上测试了不同硬件与线程下的性能表现:

  • 测试数据集:包含 3 篇 arXiv 论文 + 2 本 IBM Redbooks,共计 225 页

  • 测试变量

    • 两种 PDF 后端:默认自研的 docling-parse 与备用的 pypdfium。

    • 两种硬件平台

      1. 移动端/个人终端:MacBook Pro M3 Max

      2. 服务器端:Ubuntu 20.04 LTS Bare-metal 服务器(配备 Intel Xeon E5-2690 CPU)

    • 线程数控制(通过环境变量 OMP_NUM_THREADS 固定):

      1. 4 线程:Docling 的默认设置。

      2. 16 线程:对应测试硬件的满核数(Full core count)。

实验结果如下表:

对于资源极其有限的部署环境,作者给出了明确的权衡建议:

  • 推荐方案:切换至 pypdfium 后端。

  • 优势:运行速度更快,且内存占用更低

  • 代价解析质量会下降,特别是在表格结构恢复上的效果会有明显折扣。

4. 应用场景

作者提出了以下几种 Docling 的应用场景:

企业级搜索与知识提取

  • 优势:由于 Docling 能识别表格、插图、章节结构和参考文献等不同元素,企业可以对文档中的不同结构进行差异化/针对性处理

  • 应用:企业级文档搜索、段落检索以及文档分类任务。

生成式 AI 与 RAG 生态

  • 配套工具 quackling:团队推出了配套开源包 quackling,利用 Docling 提取的丰富特征,实现文档原生优化的向量嵌入与文本分块

  • 框架对接:可无缝集成到主流大模型开发框架中(如 LlamaIndex)。

自动化知识库与数据集构建

  • 成本与效率优势:由于 Docling 运行速度快、稳定性高且运行成本低,非常适合用来批量处理海量文档以构建衍生数据集。

  • 表格识别赋能:强大的表格结构识别能力为自动化知识库构建提供了核心支持。

大规模多模态数据预处理

  • 工程集成:Docling 已集成进开源的 IBM Data Prep Kit 中。

  • 用途:实现可扩展的数据转换,用于构建大规模多模态大模型训练数据集

5. 未来展望

作者提到了几个未来可以探究的方向:

  1. 扩展更多模型,例如插图分类模型、公式识别模型、代码识别模型等。这将有助于提升特定类型内容的转换质量,并利用额外信息丰富所提取的文档元数据。

  2. 进一步投入测试与优化 GPU 加速的性能效果。

  3. 改进 Docling 原生的 PDF 后端。


评论