嘿,亲爱的算法工程师们!今天咱们聊一聊PDF解析的那些事儿,简直就像是在玩一场“信息捉迷藏”游戏!PDF文档就像是个调皮的小精灵,表面上看起来规规矩矩,但当你想要从它那里提取信息时,它就开始跟你玩捉迷藏了。
在RAG(Retrieval-Augmented Generation)中,从文档中提取信息是一个不可避免的场景。确保从源内容中有效提取信息对于提高最终输出的质量至关重要。
不要低估这个过程。在实现RAG时,解析过程中信息提取不当会导致对PDF文件中包含信息的理解和利用受限。
下图显示了PDF解析过程(红框)在RAG中的位置。:
在实际工作中,非结构化数据比结构化数据丰富得多。如果这些海量数据无法解析,它们的巨大价值将无法实现。
在非结构化数据中,PDF文档占据了大多数。 有效处理PDF文档也可以极大地帮助管理其他类型的非结构化文档。
预防针
1. PDF解析的“魔法”
- 规则派:用规则去解析PDF,就像是用一把钥匙去开锁,虽然简单直接,但遇到复杂的PDF布局时,这把钥匙可能就“卡壳”了。
- 深度学习派:深度学习模型就像是“魔法师”,能准确识别文档的布局,甚至能理解表格里的复杂结构。不过,这“魔法”需要强大的GPU加持,不然可能会慢得像蜗牛爬。
- 多模态大模型派:这是最新的“黑科技”,结合了图像识别和文本处理,能像“超级侦探”一样从PDF中提取出最复杂的信息。
2. PDF解析的“陷阱”
- 双栏PDF的“迷宫”:双栏PDF就像是个迷宫,解析时一不小心就会把左右栏的内容搞混。不过,咱们可以通过“中心线”算法来破解这个迷宫,确保信息按正确的顺序排列。
- 多级标题的“捉迷藏”:PDF里的多级标题就像是在玩捉迷藏,你得通过布局块的高度差来找到它们。找到这些标题后,LLM的回答就会更加准确,就像给AI装上了“导航仪”。
3. 未来的“魔法棒”
- 多模态模型:未来的PDF解析可能会越来越依赖多模态模型,尤其是结合了图像识别和文本处理的模型。它们不仅能解析表格,还能从图像中提取关键信息,简直是“全能选手”。
提前的忠告
PDF解析就像是一场“信息大冒险”,没有一种方法是万能的。你得根据具体的PDF类型和项目需求,选择合适的“魔法工具”。不过,如果你有条件,深度学习或多模态模型绝对是你的“最佳拍档”。
好了,下面我们进行详细的剖析
解析PDF文件的方法
解析PDF的难点
PDF文档是非结构化文档的代表,然而,从PDF文档中提取信息是一个具有挑战性的过程。
与其说PDF是一种数据格式,不如说它是一组打印指令。 PDF文件由一系列指令组成,这些指令告诉PDF阅读器或打印机在屏幕或纸张上显示符号的位置和方式。这与HTML和docx等文件格式形成对比,后者使用诸如<p>
、<w:p>
、<table>
和<w:tbl>
等标签来组织不同的逻辑结构,如图2所示:
解析PDF文档的挑战在于准确提取整个页面的布局,并将内容(包括表格、标题、段落和图像)转换为文档的文本表示。 这个过程涉及处理文本提取的不准确性、图像识别以及表格中行列关系的混淆。
解析PDF文档的“魔法”
一般来说,解析PDF有三种方法:
- 基于规则的方法:根据文档的组织特征确定每个部分的样式和内容。然而,这种方法并不具有很好的通用性,因为PDF的类型和布局多种多样,无法用预定义的规则覆盖所有情况。
- 基于深度学习模型的方法:例如结合目标检测和OCR模型的流行解决方案。
- 基于多模态大模型的复杂结构解析或关键信息提取。
基于规则的方法
最具代表性的工具之一是pypdf,它是一个广泛使用的基于规则的解析器。它是LangChain和LlamaIndex中解析PDF文件的标准方法。
以下是使用pypdf解析"Attention Is All You Need"论文第6页的尝试。原始页面如图3所示。

reader = PyPDF2.PdfReader(pdf_file)
page_num = 5
page = reader.pages[page_num]
text = page.extract_text()
print('--------------------------------------------------')
print(text)
pdf_file.close()
执行结果如下(省略部分内容):
pip list | grep pypdf
pypdf 3.17.4
pypdfium2 4.26.0
python ./Downloads/pypdf_test.py
--------------------------------------------------
Table 1: Maximum path lengths, per-layer complexity and minimum number of sequential operations
for different layer types. nis the sequence length, dis the representation dimension, kis the kernel
size of convolutions and rthe size of the neighborhood in restricted self-attention.
Layer Type Complexity per Layer Sequential Maximum Path Length
Operations
Self-Attention O(n2·d) O(1) O(1)
Recurrent O(n·d2) O(n) O(n)
Convolutional O(k·n·d2) O(1) O(logk(n))
Self-Attention (restricted) O(r·n·d) O(1) O(n/r)
3.5 Positional Encoding
Since our model contains no recurrence and no convolution, in order for the model to make use of the
order of the sequence, we must inject some information about the relative or absolute position of the
tokens in the sequence. To this end, we add "positional encodings" to the input embeddings at the
bottoms of the encoder and decoder stacks. The positional encodings have the same dimension dmodel
as the embeddings, so that the two can be summed. There are many choices of positional encodings,
learned and fixed [9].
In this work, we use sine and cosine functions of different frequencies:
PE(pos,2i)=sin(pos/100002i/d model)
PE(pos,2i+1)=cos(pos/100002i/d model)
where posis the position and iis the dimension. That is, each dimension of the positional encoding
corresponds to a sinusoid. The wavelengths form a geometric progression from 2πto10000 ·2π. We
chose this function because we hypothesized it would allow the model to easily learn to attend by
relative positions, since for any fixed offset k,PEpos+kcan be represented as a linear function of
PEpos.
...
...
...
根据PyPDF的检测结果,观察到它将PDF中的字符序列序列化为一个长序列,而没有保留结构信息。换句话说,它将文档的每一行视为由换行符“\n
”分隔的序列,这阻碍了准确识别段落或表格。
这种限制是基于规则方法的固有特性。
基于深度学习模型的方法
这种方法的优点是能够准确识别整个文档的布局,包括表格和段落。它甚至可以理解表格内部的结构。这意味着它可以将文档划分为定义明确、完整的信息单元,同时保留预期的含义和结构。
然而,这种方法也有一些局限性。目标检测和OCR阶段可能耗时较长。因此,建议使用GPU或其他加速设备,并采用多进程和多线程进行处理。
这种方法涉及目标检测和OCR模型,我测试了几个具有代表性的开源框架:
- Unstructured:它已经集成到langchain中。使用
hi_res
策略和infer_table_structure=True
的表格识别效果很好。然而,fast
策略表现不佳,因为它没有使用目标检测模型,错误地识别了许多图像和表格。 - Layout-parser:如果需要识别复杂的结构化PDF,建议使用最大的模型以获得更高的准确性,尽管速度可能稍慢。此外,Layout-parser的模型在过去两年似乎没有更新。
- PP-StructureV2:使用各种模型组合进行文档分析,性能高于平均水平。架构如下图所示:
除了开源工具外,还有像ChatDOC这样的付费工具,它们利用基于布局的识别+OCR方法来解析PDF文档。
接下来,我们将解释如何使用开源的unstructured框架解析PDF,解决三个关键挑战。