一文搞懂RAG 的文档解析

52 阅读8分钟

大家好,我准备开启一个全新的系列,来聊聊——RAG(Retrieval-Augmented Generation)系统的底层设计与工程实现。

你可能已经用过各种“大模型加检索”的应用:AI 助手能秒答公司文档问题、客服机器人能一口气分析十几页合同、技术问答系统好像“查阅过全网资料”……但你有没有想过:这些模型到底是怎么“知道”你提的问题答案的?模型为什么能记住一整本文档?我们把知识库接入大模型,到底做了什么?

这一切的背后,离不开三个字母:RAG

这个系列将拆解构建一个 RAG 系统的全流程,深入剖析每个关键步骤的逻辑、技术选型与工程落地难点:

此外,所有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在 Github:LLMHub,欢迎关注收藏!

1.前言

在大语言模型(LLM)如ChatGPT、Claude、Gemini日益强大的今天,人们希望它们不仅能“生成”,还要“准确生成”。然而,LLM训练的数据往往是静态的、封闭的,这使得它们在面对时效性强、专业性高、上下文复杂的问题时,力不从心。

在有些时候,企业内部或者事业部门内部的数据是不允许公开上传的,那么也就没有办法享受到大模型的服务,生产力也得不到解放。

这时,RAG(Retrieval-Augmented Generation,检索增强生成)应运而生。它是连接“生成能力”与“外部知识”的桥梁,让LLM不再是“闭门造车”,而成为真正的知识型智能体。

关于RAG的介绍可以参考什么是RAG?一文搞懂检索增强生成技术

对于RAG来说,最重要的无疑是从文档中提取内容作为知识库,所以从文档中提取得到高质量的数据至关重要。

从计算机的角度来看,文档主要分为两类:

  • 有标记的文档:如Word,Markdown,HTML,JSON等,这些文档具有明确的结构,计算机可以直接解析和理解。
  • **无标记的文档:**如图像,pdf等,这些文档缺乏结构信息,计算机无法直接理解其内容。

下面介绍当下对pdf文件进行解析的方法。

2.pdf解析难点

pdf是一种和docx以及doc文档一样最常见的文档格式。以下介绍和分析以gpt3论文中的第9页为例。

尽管 PDF(Portable Document Format)是一种通用、稳定、跨平台的文档格式,但它并不是为结构化数据提取设计的格式,这也使得从中提取高质量、结构化的知识成为一项技术挑战。主要难点包括:

1. 格式复杂、结构不统一

PDF 文件更像是“数字版的打印纸张”,其本质是页面渲染信息,而不是像 HTML、XML 那样的结构化标记语言。这导致同样是一个段落或表格,不同的 PDF 文件可能用完全不同的底层表示方式来编码。因此:

  • 标题和正文没有语义上的“层级结构”;
  • 表格、列表、图像和段落难以准确分离;
  • 多栏排版、复杂排版(如学术论文)易导致文本顺序错乱。

2. 内容可能是图片而非文本

许多扫描版文档(如合同、书籍、报表等)将内容以图像形式嵌入 PDF,此时需要 OCR(Optical Character Recognition,光学字符识别)工具进行识别,但 OCR:

  • 容易受图像质量、字体、旋转角度等因素影响;
  • 误识率高,可能产生错别字或结构错位;
  • 表格、公式识别精度更低。

3. 表格、图表提取困难

PDF 中的表格通常以线段 + 文本方式绘制,并非内嵌结构表格数据。这导致表格提取需依赖:

  • 文字坐标分析;
  • 网格线推断;
  • 机器学习辅助模型等。
    而图表(如折线图、饼图)更难提取出其中的数据值,往往只能通过图像分析手段尝试“反推”。

4. 跨页内容难以关联

如长段落、长表格跨越多个页面时,PDF 中并没有“语义信息”标明它们属于同一个结构,需人工或智能算法识别其上下文关联性。

5. 不同语言、字体、排版标准差异

特别是在多语种文档处理(如中英文混排、右到左语言等)中,不同语言的排版逻辑和标点规则可能导致解析工具无法正确断句、分段,影响后续向量化建库质量。

3.基于规则的方法

这是最早期也是最基础的 PDF 解析思路,依赖 PDF 文档的结构信息(如页数、文本框、字体大小、位置等),通过手动设计规则提取内容。以 Python 中的 PyPDF2PyPDF4 为代表,它们支持读取 PDF 文件中的文本、页码、元信息等。 以最基础的PyPDF库为例进行介绍。

从图中的分析结果可以看到,PyPDF不对图片进行识别,输出的格式只支持txt,并且在文档换行的时候对应的识别结果也出现换行,段落完整性较差。

类似的基于规则的方法还有PyMuPDF等等, 这种方法适用于对文档结构非常了解的场景,如内部模板化文档、批量合同抽取等。

4.基于深度学习的方法

为了解决规则方法在结构复杂文档中的局限,近年来出现了以 深度学习模型 为核心的解析方法。典型代表如 LayoutParserDonutDocTR 等,结合图像分割、目标检测模型,对 PDF 页面进行版面分析(Layout Analysis),流程大致如下

1. 将 PDF 页面渲染为图像;
2. 使用模型识别出页面中的“标题”“段落”“表格”“图像”等区块;
3. 再使用 OCR 对每个区块进行文本识别;
4. 结合位置、标签进行结构化重构。

以PaddleOCR团队自研的智能文档分析系统PP-StructureV2为例,系统首先经过图像矫正模块,判断图方向并完成转正,随后进行版面信息分析和关键信息抽取。图像经过版面分析模型对文件不同区域进行划分,包括文本,图像,表格等等,随后对不同的区域进行识别,最后使用版面恢复将其恢复为与原始文件布局一致的文件中。

从上面的识别结果可以看出,相比于基于规则的识别方法,深度学习方法段落完整性较好,可适应多种布局;模型可迁移至各类文档(论文、发票、报告等);但是表格识别和图像识别仍然不够准确,同时需依赖 GPU 计算资源,对于语义理解和上下文推理仍然有限。

5.基于多模态大模型的方法

随着多模态大模型的发展,PDF 内容解析开始进入“端到端智能理解”阶段。这类方法利用图文输入能力强大的模型(如 GPT-4V、Gemini、Claude、MiniGPT-4),直接输入页面截图或文档图片,由大模型进行内容提取与理解。典型方式如下:

1. <font style="color:rgb(25, 27, 31);">将 PDF 渲染成图像;</font>
2. <font style="color:rgb(25, 27, 31);">提问如:“请总结这页的主要内容”“这页的表格中第一列是什么含义”;</font>
3. <font style="color:rgb(25, 27, 31);">LMM 模型结合视觉+语言能力返回结构化或自然语言内容。</font>

以Qwen2.5-VL系列模型为例,在 Qwen2.5-VL 中设计了一种更全面的文档解析格式,称为 QwenVL HTML 格式,它既可以将文档中的文本精准地识别出来,也能够提取文档元素(如图片、表格等)的位置信息,从而准确地将文档中的版面布局进行精准还原。

多模态模型无需预定义规则或模型训练,能处理复杂结构、跨页关联、图表内容,并支持语义级别的问答、摘要、推理。但是成本高(API调用或推理资源),对上下文窗口长度、图像清晰度等有一定要求。

内容部分参考

2024年 PP-Structure 快速入门 - 飞桨AI Studio星河社区

Qwen2.5 VL!

LLM之RAG实战(二十九)| 探索RAG PDF解析

文档解析与向量化技术加速 RAG 应用落地_AI&大模型_InfoQ精选文章

非常感谢,如有侵权请联系删除!

更多相关资料在github中,系统整理与分享大语言模型(LLM)相关的核心知识、面试内容、实际应用场景及部署技巧。内容涵盖从基础概念、主流模型对比、Prompt 设计、模型微调到工程部署的完整流程,帮助开发者、研究者以及求职者高效掌握大模型领域的关键能力。

GitHub - zhangting-hit/LLMHub: 本项目旨在系统整理与分享大语言模型(LLM)相关的核心知识、面试内容、实际应用场景及部署技巧。内容涵盖从基础概念、主流模型对比、Prompt 设计、模型微调到工程部署的完整流程,帮助开发者、研究者以及求职者高效掌握大模型领域的关键能力。

关于深度学习和大模型相关的知识和前沿技术更新,请关注公众号coting!