25页/秒!Marker深度学习文档处理流水线架构全解析

【免费下载链接】marker 一个高效、准确的工具,能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式,支持多语言和复杂布局处理,可选集成 LLM 提升精度,适用于学术文档、表格提取等多种场景。源项目地址:https://github.com/VikParuchuri/marker 【免费下载链接】marker 项目地址: https://gitcode.com/GitHub_Trending/ma/marker

你是否还在为学术论文、财务报表等复杂文档的格式转换而烦恼?Marker作为一款高效准确的文档转换工具,能够将PDF和图像快速转换为Markdown、JSON和HTML格式,支持多语言和复杂布局处理,可选集成LLM提升精度,适用于学术文档、表格提取等多种场景。本文将深入剖析Marker的架构设计与工作原理,帮助你全面了解这款强大工具的内部机制。

Marker架构概览

Marker采用模块化设计,主要由五大核心组件构成:Providers(数据提供器)、Builders(构建器)、Processors(处理器)、Renderers(渲染器)和Converters(转换器)。这种分层架构使得Marker能够灵活处理各种文档格式,并支持自定义扩展。

Marker架构概览

从整体性能来看,Marker在H100 GPU上的批处理模式下,预计吞吐量可达25页/秒,远超Llamaparse和Mathpix等云服务。其平均处理时间仅为2.83837秒,启发式评分为95.6709,LLM评分为4.23916,全面领先于同类工具。

核心组件解析

Providers(数据提供器)

Providers模块负责从各种文件格式中提取原始数据,是Marker处理不同类型文档的基础。Marker支持PDF、图像、PPTX、DOCX、XLSX、HTML、EPUB等多种文件格式,每种格式都有对应的Provider实现。

Providers的核心实现位于marker/providers/目录下,其中provider_from_filepath函数根据文件路径自动选择合适的Provider。例如,对于PDF文件,Marker会使用PdfProvider来提取文本和图像数据。

Builders(构建器)

Builders模块负责将原始数据构建为结构化的文档表示。Marker包含多个Builders,协同工作以构建完整的文档结构:

  • DocumentBuilder:统筹其他Builders,构建完整的文档对象
  • LayoutBuilder:分析文档布局,识别文本块、图像、表格等元素
  • LineBuilder:处理文本行,进行行合并和分割
  • OcrBuilder:处理OCR(光学字符识别)相关任务
  • StructureBuilder:构建文档的层次结构

这些Builders的实现位于marker/builders/目录下。以DocumentBuilder为例,它接收Provider提供的原始数据,并协调其他Builders构建文档结构:

document = DocumentBuilder(self.config)(
    provider, layout_builder, line_builder, ocr_builder
)

Processors(处理器)

Processors模块是Marker的核心处理单元,负责对文档进行各种复杂的处理操作。Marker提供了丰富的处理器,涵盖从基础文本处理到高级LLM增强功能:

  • 基础处理器:如OrderProcessor(排序处理)、LineMergeProcessor(行合并)、ListProcessor(列表处理)等
  • 高级处理器:如TableProcessor(表格处理)、EquationProcessor(公式处理)、CodeProcessor(代码块处理)等
  • LLM增强处理器:如LLMTableMergeProcessor(LLM表格合并)、LLMFormProcessor(LLM表单处理)等

这些处理器的实现位于marker/processors/目录下。在PDF转换流程中,处理器会依次对文档进行处理:

for processor in self.processor_list:
    processor(document)

Renderers(渲染器)

Renderers模块负责将结构化的文档数据转换为最终的输出格式。Marker支持多种输出格式,包括Markdown、JSON、HTML和Chunks等。

Renderers的核心实现位于marker/renderers/目录下。默认情况下,Marker使用MarkdownRenderer将文档渲染为Markdown格式:

renderer = MarkdownRenderer
rendered = renderer(document)

Converters(转换器)

Converters模块整合了上述所有组件,提供端到端的文档转换功能。Marker为不同的转换需求提供了多种Converter,如PdfConverter、TableConverter和OCRConverter等。

以PdfConverter为例,它是Marker处理PDF文件的核心转换器,实现位于marker/converters/pdf.py。其核心逻辑如下:

def __call__(self, filepath: str | io.BytesIO):
    with self.filepath_to_str(filepath) as temp_path:
        document = self.build_document(temp_path)
        self.page_count = len(document.pages)
        renderer = self.resolve_dependencies(self.renderer)
        rendered = renderer(document)
    return rendered

文档处理流水线

Marker的文档处理流程可以分为以下几个关键步骤:

  1. 数据提取:Providers从输入文件中提取原始数据
  2. 文档构建:Builders将原始数据构建为结构化文档
  3. 文档处理:Processors对文档进行各种复杂处理
  4. 结果渲染:Renderers将处理后的文档渲染为目标格式

文档处理流水线

混合模式(Hybrid Mode)

Marker引入了创新的混合模式,通过集成LLM(大型语言模型)来进一步提升转换精度。当启用--use_llm标志时,Marker会使用LLM来处理复杂场景,如跨页表格合并、公式识别和表单提取等。

Marker支持多种LLM服务,包括Gemini、Google Vertex、Ollama、Claude、OpenAI和Azure OpenAI等。这些服务的实现位于marker/services/目录下。

混合模式的性能提升显著,特别是在表格识别方面:

方法平均分数总表格数
marker0.81699
marker w/use_llm0.90799
gemini0.82999

性能优化策略

Marker在设计时充分考虑了性能优化,采用了多种策略来提高处理速度和降低资源消耗:

  1. 批处理模式:通过并行处理多个文档来提高吞吐量
  2. 多GPU支持:支持在多个GPU上分布式处理文档
  3. 选择性OCR:仅对需要的部分进行OCR处理,减少不必要的计算
  4. 内存优化:通过合理的资源管理和内存分配,降低内存占用

在H100 GPU上,Marker的单页处理时间仅为0.18秒,250页PDF的处理时间约为15秒,VRAM使用量约为3.17GB。

应用场景与最佳实践

Marker适用于多种场景,包括学术文档处理、财务报表分析、表格提取等。以下是一些最佳实践建议:

  1. 学术文档:启用--use_llm--force_ocr选项,以获得最佳的公式和表格识别效果
  2. 多语言文档:Marker支持多种语言的OCR识别,可通过配置文件指定语言
  3. 大批量处理:使用批处理模式,并根据GPU数量合理设置worker数量
  4. 自定义需求:通过自定义Processors和Renderers来满足特定的格式转换需求

总结与展望

Marker通过模块化的架构设计和深度学习技术,实现了高效准确的文档转换功能。其分层设计使得系统具有良好的可扩展性,可以方便地添加新的功能或支持新的文件格式。

未来,Marker将继续优化核心算法,提升处理速度和 accuracy,并扩展更多高级功能,如更智能的文档理解、多模态内容处理等。无论是学术界还是工业界,Marker都有望成为文档处理领域的重要工具。

如果你对Marker感兴趣,可以通过以下方式获取更多信息:

  • 官方代码库:https://gitcode.com/GitHub_Trending/ma/marker
  • 使用示例:examples/
  • 详细文档:README.md

通过深入了解Marker的架构和工作原理,你可以更好地利用这款工具来解决实际的文档处理问题,提高工作效率。

【免费下载链接】marker 一个高效、准确的工具,能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式,支持多语言和复杂布局处理,可选集成 LLM 提升精度,适用于学术文档、表格提取等多种场景。源项目地址:https://github.com/VikParuchuri/marker 【免费下载链接】marker 项目地址: https://gitcode.com/GitHub_Trending/ma/marker

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐