【文档智能 & RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言

在私域知识问答和企业知识工程领域,结合Retrieval-Augmented Generation(RAG)模型和大型语言模型(LLM)已成为主流方法。然而,企业中存在着大量的PDF文件,PDF解析的低准确性显著影响了基于专业知识的问答效果,因此,这些文件的有效解析对RAG模型的构建至关重要。上篇文章(【文档智能 & RAG】RAG增强之路:增强PDF解析并结构化技术路线方案及思路)主要讨论了开源的PDF解析技术,而本文将先探讨下RAG落地时常见的问题及文档解析在RAG的重要性智能文档解析关键技术 ,然后重点介绍闭源的PDF文件解析服务------PDFlux

一、RAG系统落地时的常见问题

  1. 文档内容解析错误:在解析PDF文件时,可能会遇到内容错误识别或格式错误的问题,导致信息丢失或错误。

  2. 分块(Chunking)丢失语义信息:在将文档分割成小块以适应模型输入时,可能会破坏原文的语义连贯性,影响信息的完整性。

  3. 目标内容召回问题:在检索阶段,有时难以准确地找到与查询相关的文档部分,导致召回率不高。

  4. 召回结果排序困难:即使成功召回相关内容,如何根据相关性对结果进行排序也是一个挑战。

  5. 答案生成幻觉:在生成答案时,模型可能会产生与原始文档不完全一致或偏离主题的回答,这种现象被称为"幻觉"。

在RAG的预处理阶段,文档解析的准确性是至关重要的。如果文档解析不准确,这将直接影响到后续的检索和生成阶段,导致整个RAG系统的性能下降。以下是文档解析不准确可能带来的具体问题及其影响:

  • 内容识别错误:如果文档中的文本、图像或格式被错误识别,将导致原始信息的丢失或错误。例如:(1)表格数据可能被错误地解析为普通文本,表格的行列关系混乱等,导致表格数值类问题无法进行精准的回答。(2)图像中的文字(OCR)被错误识别。

  • 格式丢失:PDF文件中可能包含各种格式,如加粗、斜体、下划线等,这些格式在解析过程中可能会丢失,影响对文档结构和重要性的理解

  • 布局信息丢失:PDF文件的布局信息,如页面布局、段落、标题层级 等,在解析过程中可能会丢失,这会影响对文档结构的把握,进而影响分块(chunks)。为了适应模型的输入要求,文档需要被分割成小块。如果分块策略不当,可能会导致语义信息的丢失,影响模型对文档内容的理解。

  • 编码问题:PDF文件可能包含多种字符编码、水印 等,一些pdf解析工具不能正确处理这些编码,可能会导致乱码或字符显示不正确

  • 文档复杂性:复杂的文档结构,如多栏布局、阅读顺序恢复、混合文本和图像等,可能会给解析带来额外的挑战,增加解析错误的风险。

因此,对于C端文档问答的RAG系统应用产品,迫切的需要对文档进行精准解析。理想情况下,PDF 解析器应具备以下关键特征:

  • 文档结构识别:能够灵活地将页面划分为不同类型的内容块,如段落、表格和图表。这确保了划分的文本块是完整和独立的语义单元
  • 在复杂文档布局中保持鲁棒性:即使是在文档页面布局复杂的情况下也能保证解析效果,如多列页面、无边框表格甚至合并单元格的表格

二、智能文档解析关键技术难点

在介绍PDFlux之前,再次简要介绍下智能文档解析中的关键技术(核心难点):

2.1 文档版式分析

版面分析指的是对图片形式的文档(扫描件)进行区域划分,通过bounding box定位其中的关键区域,如:文字、标题、表格、图片等,通常采用一些CV目标检测模型进行版式分析,如:参数量大的有:DINO等基于transformer的目标检测模型;参数量小的有MaskRCNN、YOLO系列等。

难点具体表现如下:

  • 文档版式场景多样:版面元素布局丰富多样,元素之间层叠遮盖等。
  • 文档版式复杂 :单栏、双栏、三栏等。
    上述内容都给文档版式分析带来困难,从数据标注标签体系定义、到版式分析模型训练优化都面临着巨大的挑战。

2.2 文档树构建

通过版式分析得到版面元素的类别信息后,需要通过后处理方式建立起文档的层次结构关系,即:文档树

难点具体表现:需要通过规则引擎和深度语义模型算法的联合方式构建起文档树。

2.3 阅读顺序还原

通过版式分析后,能够输出版面元素的bounding box,如何准确的恢复出符合人类阅读顺序的文档内容也是尤为重要。

常见技术路径有:基于规则的方法(xy-cut等)、基于深度学习的方法(Layoutreader等)

难点体现在:与版式分析难点相同。

2.4 表格还原

pdf表格元素中,常见的表格类型包含:有线表、无线表、跨页表格、合并单元格、密集表格及表格中单元格中含有复杂元素(如:特殊字符、公式等)。如何有效的进行解析非常具有挑战性。

常见技术路径:表格结构识别(如:DeepDeSRT等)、表格内容OCR等。

三、PDFlux

PDFlux是一个基于深度学习模型的PDF解析器,经过超过一千万个文档页面的训练。通过识别和区分文档中的所有视觉元素,如文本、表格、图像、图表等,并保留它们的空间关系。它包括以下步骤:

  1. OCR 进行文字定位和识别;
  2. 物理文档对象检测;
  3. 跨列和跨页调整;
  4. 阅读顺序确定;
  5. 表格结构识别;
  6. 文档逻辑结构识别。

通过以上步骤,PDFlux解析器最终以 json 、 html 、word、markdwon 格式提供解析结果。

效果展示:


比较惊喜的是不但可以有效的合并单元格格式 ,还能够识别出单元格中填充的高亮数值颜色 。此外,通过word格式可以看到,PDFlux可以清楚的识别出pdf文件的目录层级结构,并有效的恢复原始文档的阅读顺序,这对RAG系统预处理阶段文本边界划分有着积极的意义。

值得一提的是,由于 Markdown 格式不能表示合并单元格,在 Markdown 格式中将合并单元格中的全部文本放入每个原始单元格中。如图所示,文本"观察期"重复了 7 次,表示该合并单元格合并了 7 个原始单元格。

PDFlux将pdf解析成结构化的形式后,可以构建类似文档树结构(如:RAPTOR等),增强RAG系统的效果,结构化文档树有以下优势:

  • 结构化信息保留:Markdown作为一种轻量级标记语言,能够很好地保留文本的结构信息,如标题、段落、列表和表格等。这使得RAG系统能够更容易地理解和处理文档的结构。

  • 改善检索质量:当文档以结构化的方式呈现时,RAG系统中的检索组件可以更准确地定位到相关信息。例如,如果用户查询与特定表格相关的问题,系统可以快速检索到整个表格及其标题,而不仅仅是表格的一部分。

  • 增强上下文理解:文档树提供了文档内容的层次结构,有助于RAG系统中的语言模型更好地理解上下文。这对于生成准确和相关的答案至关重要。

  • 提高信息检索的精度:构建文档树可以帮助系统更精确地定位信息,减少错误检索或信息片段的不完整检索,从而提高整体的检索精度。

  • 优化生成答案的过程:在RAG系统中,生成答案通常依赖于检索到的内容与用户查询的结合。文档树提供了一种清晰的方式,使得语言模型能够更有效地结合检索到的信息和上下文,生成更准确和全面的答案。

  • 支撑复杂查询:对于需要综合多个部分信息的复杂查询,文档树使得RAG系统能够更好地识别和整合来自文档不同部分的信息,以生成综合的答案。

四、PDFlux增强RAG实验

基于PDFlux,其构建了一个基于大模型的问答工具ChatDOC,并且构建了一份评估数据集。数据集收集了 800 个手动生成的问题。经过仔细筛选后,删除了低质量的问题,得到了 302 个可用于评估的问题。这些问题分为两类。

4.1 提取信息类问题的结果

提取信息类问题的结果如表 3 所示。在 86 个提取信息类问题中,ChatDOC 在 42 个案例中表现优于 Baseline 模型,有 36 例与 Baseline 模型表现持平,仅有 8 例表现不如 Baseline 模型。

评分的分布情况详见下图。在分布表中,ChatDOC 得分高于 Baseline 模型(ChatDOC 胜出)的情况表示在左下角,而 Baseline 模型得分较高的情况表示在右上角。

值得注意的是,大多数有明确胜负结果的样本位于左下角部分,这表明了 ChatDOC 的优势。令人印象深刻的是,ChatDOC 在近一半的案例中获得满分(10 分),总计 40 个。

4.2 综合分析类问题的结果

综合分析类问题的结果如前表所示。在 216 个综合分析类问题中,ChatDOC 在 101 个案例中表现优于 Baseline 模型,有 79 例与 Baseline 模型表现持平,仅有 36 例表现不如 Baseline 模型。

如图,这些问题的分数分布表显示,左下角的分数集中程度更高。这表明 ChatDOC 的表现经常优于 Baseline 模型。

值得注意的是,ChatDOC 的大多数检索结果得分在 8.5 到 9.5 之间,表明其检索质量很高。

总结

通过对PDFlux的体验,可以得出结论,除了RAG系统内部提升检索准确率和提高基础生成大模型的能力之外,精确的处理PDF文件,对提升RAG系统的性能至关重要。

参考文献

相关推荐
AI_小站18 小时前
RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
人工智能·程序人生·langchain·kubernetes·llama·知识库·rag
我爱学Python!1 天前
解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?
人工智能·程序人生·自然语言处理·大模型·llm·大语言模型·rag
to be a question6 天前
StructRAG Boosting Knowledge 论文笔记
自然语言处理·llm·论文笔记·rag
致Great8 天前
Invar-RAG:基于不变性对齐的LLM检索方法提升生成质量
人工智能·大模型·rag
水中加点糖9 天前
使用Spring AI中的RAG技术,实现私有业务领域的大模型系统
人工智能·function call·向量数据库·rag·springai·私有大模型·embedding模型
AI完全体10 天前
【AI日记】24.11.08 Knowledge Graphs for RAG (知识图谱,Neo4j,Cypher)
人工智能·自然语言处理·知识图谱·neo4j·rag·日记·cypher
合合技术团队17 天前
TextIn ParseX文档解析SDK工具新增Java版本
科技·数据·文档解析
余俊晖21 天前
【RAG】自动化RAG框架-“AutoML风”卷到了RAG?
自然语言处理·自动化·llm·rag
余俊晖21 天前
【多模态&RAG】多模态RAG ColPali实践
多模态·rag
洛阳泰山22 天前
比微软的GraphRag更加强大的LightRAG:简单快速的检索增强生成
数据库·python·microsoft·llm·rag·graphrag·lightrag