深入探索:AI 驱动的 PDF 布局检测引擎源代码解析 [译]

上周,PDF 转 Markdown 的工具 Marker 成为 Hacker News 首页的热门话题。

2023 年 12 月 10 日 • Shrijith Venkatramana

上周,PDF 转 Markdown 的工具 Marker 成为 Hacker News 首页的热门话题。作为一个对机器学习(ML)充满好奇的学生,我觉得这是一个绝佳的机会,深入了解这款出色的文档 AI 工具的内部机制。

Marker 是什么?

用一个形象的比喻,Marker 就像一个高智能的抄写员,它能够阅读那些复杂的书籍和科学论文 PDF,并将它们转化为清晰、易读的 Markdown 文档。它就像是帮助你进行文档数字化的智能小助手。

官方对这款工具的描述更加专业,具体如下:

Marker 能够将 PDF、EPUB 和 MOBI 文件转换成 Markdown 格式。它的转换速度比 nougat 快 10 倍,准确度更高,且几乎没有误解风险。

  • 支持多种类型的 PDF 文档(尤其适用于书籍和科学论文)

  • 能够去除文档中的页眉、页脚和其他无关内容

  • 将大部分数学公式转换为 Latex 格式

  • 格式化代码块和表格

  • 支持多种语言(主要测试语言为英语)。更多语言设置可在 settings.py 中查看。

  • 可在 GPU、CPU 或 MPS 上运行

工作流程概览

Marker 主要通过以下六个阶段来工作:

  1. 准备阶段: 利用 PyMuPDF 工具,可以把各种格式的文档转换成 PDF 文件。

  2. 文本识别(OCR): 使用 TesseractOCRMyPDF 进行文字识别;也可以选择用 PyMuPDF 进行基本的文字抓取。

  3. 布局识别: 运用专门定制的 LayoutLMv3 模型 来识别文档中的表格、图表、标题、图说、页眉和页脚。

  4. 列的检测和排序: 再用一个定制的 LayoutLMv3 模型来识别文档中的列,并按照正确的顺序(上到下,左到右)进行排列。

  5. 公式 / 代码处理: 通过 Nougat 工具,把公式图片转换成对应的 latex 代码,并利用启发式方法准确识别和调整代码及表格内容。

  6. 文本清理与优化: 使用定制的 T5ForTextClassification 模型进行文本清理,比如去掉不必要的空格和奇怪的字符,确保以一种保守且保留原意的方式进行优化。

借助这六个阶段,Marker 能够把任何文档转化为格式整洁的 Markdown 文件。

实例展示

示例:简单教科书

转换前(PDF 格式)

转换后(Markdown 格式)

双栏布局的转换

转换前(PDF 格式)

转换后(Markdown 格式)

科研论文中的数学公式

转换前(PDF 格式)

转换后(Markdown + Latex 格式)

标记工具的直观工作原理解析

从宏观视角来看,这个转换过程结合了众多手动策略和四个专门的人工智能 / 机器学习模型来完成任务。

文档会在不同阶段被不同程序_多次_扫描,每个阶段都会对页面增加有用信息或注释,或者去除多余的元素。

第一步:准备阶段

使用工具: PyMuPDF

标记工具能够接受 epub、mobi 和 PDF 文件作为转换流程的输入。它利用 PyMuPDF 将 epub 或 mobi 文件转换成 PDF,作为准备阶段的一部分。整个流程接下来完全基于 PDF 格式内容进行。

第二步:光学字符识别(OCR)

使用工具: OCRMyPDFTesseract

例如,在第一步中增加的信息是 OCR,它能够为我们提取文档中的文字行。标记工具在这一步骤中会使用 OCRMyPDF 或 Tesseract 来进行文字识别。

第 3 步:布局检测

工具: LayoutLMv3(定制模型 - layout_segmenter

通过使用 LayoutLMv3,我们增加了一个识别不同布局块的功能。Marker 能够识别以下类型的布局块:

json 复制代码
{

  "id2label": {

    "0": "Caption",

    "1": "Footnote",

    "2": "Formula",

    "3": "List-item",

    "4": "Page-footer",

    "5": "Page-header",

    "6": "Picture",

    "7": "Section-header",

    "8": "Table",

    "9": "Text",

    "10": "Title"

  }

}

第 4 步:排序

工具: LayoutLMv3(定制模型 - column_detector

本步骤运用一系列规则来排除诸如页眉和页脚等多种元素类型。

第 5 步:公式和方程式的转化

工具: Nougat

接下来,我们利用 nougat 模型将图像中的公式和方程式转换成 latex 代码

第 6 步:后处理与优化

工具:T5(定制模型 - pdf_postprocessor_t5_base

最后一步,我们使用一个模型对处理后的文本进行清理和优化,将其转换成 Markdown 格式,并保存到磁盘上。

如何开始使用?

您可以在 GitHub 页面 上找到 Marker 的官方安装指南。

要将 PDF 文件转换为 markdown 格式,您可以执行以下命令:

css 复制代码
python convert_single.py --parallel_factor 2 --max_pages 10 input.pdf output.md

项目中引入的有趣模型、库和工具

Ray: 扩展人工智能工作的利器

Ray 的官方定义是这样的:

Ray 是一个旨在扩展人工智能和 Python 应用的统一框架。它由一个核心的分布式运行环境和一系列用于加快机器学习工作的 AI 库组成。

如果你觉得这个定义有些晦涩,那你并不孤单。我深入研究了一番,才弄清楚为何在构建 AI/ML 驱动的软件时会用到 Ray。

最能说明 Ray 用途的例子,出自《用 Ray 扩展 Python》这本书。

简而言之,Ray 是一种加强版的_多进程_处理库。它不仅能并行处理数据列表,还能在多台远程机器上执行操作。因此,当你的 AI/ML 代码开始处理更多数据或追求更快的处理速度时,只需向系统中增加更多机器,就能将计算能力扩展到更多的机器和进程。

PyMuPDF: PDF 文件的多功能工具包

PyMuPDF 是一个快速且功能强大的用于创建和处理 PDF 文件的库。在 Marker 项目中,PyMuPDF 被用作初步处理的第一步。

如果输入的文档格式是 epub 或 mobi,我们会用 PyMuPDF 把它转换成 PDF 文件。

每一页都通过 PyMuPDF 的数据结构来访问和展现。

如果文档不需要进行 OCR,且已经包含了嵌入式文本,我们还会用 PyMuPDF 直接从 PDF 中提取文本内容。

Nougat:科学文献中方程式的探测器

Nougat 是一款基于 Transformer 技术的生成式 AI 模型,专门用于将扫描版和数字原生的 PDF 文件转化为文本格式。

这里所说的数字原生 PDF,指的是那些虽以 PDF 形式存在,但其实质是图像形式展现的文本或内容,而非直接可被机器读取的文字。

Nougat 在识别文档中的方程式图像并将其转换为有效的 LaTeX 代码这一任务上表现出色。

以这张图为例:

Nougat 能够将这样的图像精准地转换成如下 LaTeX 代码:

ruby 复制代码
The well known Pythagorean theorem $x^2 + y^2 = z^2$ was

proved to be invalid for other exponents.

Meaning the next equation has no integer solutions:

$ x^n + y^n = z^n $

Nougat 还能用流行的 Markdown 格式来构建文档的整体结构,同时将公式部分精确转换成 LaTeX 代码。

LayoutLMv3:书籍与文件布局检测

LayoutLMv3 是一种基于 Transformer 技术的视觉模型 (ViT),是 LayoutLMv2 和 LayoutLM 的升级版。

这一新版采用了基于 Transformer 的多模态设计,这意味着,它可以同时理解图像和文本,使用诸如 Patch Embedding,Masked Image Modeling 和 Word-Patch 对齐等技术。在本文中,我们不会深入讨论如何进行训练的技术细节。

首先,重要的是要理解 LayoutLMv3 是一个功能强大的框架,它能够处理众多与文本和图像相关的任务,包括:

  • 表单理解

  • 文档摘要

  • 文档分类

  • 文档问题解答

  • 场景理解

  • 文档内的对象检测

  • 列检测

  • 以及更多

在 Marker,我们特别利用 LayoutLMv3 来识别各类文档元素,如段落、图表、表格、公式等,并用于文档中列顺序的确定。

T5: PDF 后处理模型

T5,又名 文本到文本转换 Transformer(Text-to-Text Transfer Transformer),是 Google AI 研发的一款强大的 AI/ML 模型。它专门设计用于文本间的转换任务,非常适合我们进行文本内容的后期处理。

T5 和 LayoutLMv3 一样,是一个用于处理文本操作任务的统一框架。Marker 利用其专门开发的 PDF 后处理模型对提取的完整文本进行细致的优化:

  1. 清除之前阶段的干扰字符: 通常 OCR 等步骤会引入不必要的噪声字符,这些字符与原文内容无关。

  2. 内容美化或整理: Markup 功能能去除无用的缩进、空格等,使元素周围更整洁。

  3. 保留原始含义: Marker 在进行修改时非常谨慎,只对最显而易见的错误进行更正,以维护原始文件的完整性。

性能简介

详细的 性能基准测试结果 可以在 Marker 的仓库中找到。以下是关于速度、准确性和内存使用情况的快速概览:

准确性

Marker 的准确性与 nougat 相当。 虽然 nougat 在处理科学论文方面略胜一筹,但总体上,nougatmarker 的准确性分别为 65% 和 63%。相比之下,原生的 get text 方法的准确性仅为 28%。

速度

在处理页面 / 文档方面 Maker 的处理速度是 nougat 的大约 10 倍。nougat 处理每页大约需 3 秒,而 Marker 仅需大约 0.3 秒。

内存使用

Marker 平均每项任务需要大约 2 GB VRAM。 假设使用 A6000 GPU,平均可以同时处理 24 个文档。

结论

对于数字原生的 PDF 文件,Marker 展现出了极佳的处理能力。这里所说的 "数字原生",指的是通过 latex 制作的 PDF 文件。同样,在处理各种高品质的扫描文档方面,它也有不俗的表现。但在尝试阅读来自 archive.org 的一本古老书籍时,它似乎遇到了难题。与之形成对比的是,像 Amazon Textract 或 Azure Document AI 这样的商业级解决方案几乎可以完美处理这类文档。

虽然明显地,像 Marker 这样的开源文档 AI 要想赶上商业级解决方案,还有很长的路要走,但与过去的方案相比,Marker 为自由开源软件(FOSS)的文档 AI 领域做出了重要贡献。因此,我们应该对 Marker PDF 的创作者 Vikas Paruchur 表示感谢。谢谢你,Vikas!

相关推荐
泰迪智能科技012 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20213 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight3 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说3 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Focus_Liu3 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理
PowerBI学谦3 小时前
使用copilot轻松将电子邮件转为高效会议
人工智能·copilot
audyxiao0013 小时前
AI一周重要会议和活动概览
人工智能·计算机视觉·数据挖掘·多模态
Jeremy_lf4 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型