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

一、RAG系统落地时的常见问题
-
文档内容解析错误:在解析PDF文件时,可能会遇到内容错误识别或格式错误的问题,导致信息丢失或错误。
-
分块(Chunking)丢失语义信息:在将文档分割成小块以适应模型输入时,可能会破坏原文的语义连贯性,影响信息的完整性。
-
目标内容召回问题:在检索阶段,有时难以准确地找到与查询相关的文档部分,导致召回率不高。
-
召回结果排序困难:即使成功召回相关内容,如何根据相关性对结果进行排序也是一个挑战。
-
答案生成幻觉:在生成答案时,模型可能会产生与原始文档不完全一致或偏离主题的回答,这种现象被称为“幻觉”。
在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解析器,经过超过一千万个文档页面的训练。通过识别和区分文档中的所有视觉元素,如文本、表格、图像、图表等,并保留它们的空间关系。它包括以下步骤:
- OCR 进行文字定位和识别;
- 物理文档对象检测;
- 跨列和跨页调整;
- 阅读顺序确定;
- 表格结构识别;
- 文档逻辑结构识别。

通过以上步骤,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系统的性能至关重要。
参考文献
- https://www.pdflux.com(如果有需要,可以直接向其申请试用PDFlux API)
- Revolutionizing Retrieval-Augmented Generation with Enhanced PDF Structure Recognition,https://arxiv.org/pdf/2401.12599
- https://mp.weixin.qq.com/s/JJHlJsWEqFG77LdzhvzDNw
相关文章:
【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux
前言 在私域知识问答和企业知识工程领域,结合Retrieval-Augmented Generation(RAG)模型和大型语言模型(LLM)已成为主流方法。然而,企业中存在着大量的PDF文件,PDF解析的低准确性显著影响了基于…...
五大API接口:提升你的应用性能与用户体验
引言: 简述API接口的重要性引入API接口对于提升应用性能和用户体验的贡献 API接口简介: 定义:解释什么是API接口作用:概述API接口在软件开发中的作用 1. 数据访问API 功能描述:提供快速、安全的数据存取功能提升性…...
RabbitMQ实践——在Ubuntu上安装并启用管理后台
大纲 环境安装启动管理后台 RabbitMQ是一款功能强大、灵活可靠的消息代理软件,为分布式系统中的通信问题提供了优秀的解决方案。无论是在大规模数据处理、实时分析还是微服务架构中,RabbitMQ都能发挥出色的性能,帮助开发者构建高效、稳定的系…...
Ubuntu中防火墙的使用 和 开放 关闭 端口
目录 1.查看防火墙的状态 2.开启ufw防火墙 3.重启ufw防火墙 4.关闭ufw防火墙 5.设置外来访问默认权限 6.开放普通端口 7.关闭普通端口 8.开放规定协议的端口 9.关闭指定协议端口 10.重启防火墙,是配置生效 1.查看防火墙的状态 sudo ufw status 2.开启uf…...
ansible 模块进阶及变量
yum 模块进阶 - name: install pkgs hosts: webservers tasks: - name: install web pkgs # 此任务通过yum安装三个包 yum: name: httpd,php,php-mysqlnd state: present # 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很…...
MYSQL数据库安装
一.编译安装MySQL服务 1.安装环境依赖包 2.将安装mysql 所需软件包传到/opt目录下 mysql-boost-5.7.44.tar tar zxvf mysql-boost-5.7.44.tar.gz 3.配置软件模块 cd /opt/mysql-5.7.44/ cmake \ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DMYSQL_UNIX_ADDR/usr/local/mysq…...
Pycharm配置远程调试
第1步:添加SSH Inerpreter 打开Settings --> Project interpreter配置项,配置如下两项 Project Interpreter添加SSH inerpreter 首次使用的远程环境需要填写ip及账号密码,建立ssh连接,然后选择对应的远端python路径 Path mapp…...
【Java面试】二十二、JVM篇(下):JVM参数调优与排查
文章目录 1、JVM的参数在哪里设置2、常见的JVM调优参数有哪些3、常见的JVM调优工具有哪些4、Java内存泄漏的排查思路5、CPU飙高的排查思路 1、JVM的参数在哪里设置 war包部署,在tomcat中设置,修改TOMCAT_HOME/bin/catalina.sh 文件 jar包启动࿰…...
统计信号处理基础 习题解答10-17
题目: 在选择不含信息的或者不假设任何先验知识的先验PDF时,我们需要从数据中得到最大的信息量。在这种方式下,数据是了解未知参数的主要贡献者。利用习题10.15的结果,这种方法可以通过选择使I最大的来实现。对于例10.1的高斯先验PDF,该如何选择和2使得 是不含信息…...
嵌套使用模板类
#include<iostream> using namespace std;template <class Datatype> class Stack { private:Datatype* items;//栈数组int stacksize;//栈的实际大小int top;//栈顶指针 public://构造函数:1)分配栈数组内存,2)把栈顶…...
adb卸载系统应用
1.进入shell adb shell2.查看所有包 pm list packages3.查找包 如查找vivo相关的包 pm list packages | grep vivo发现包太多了,根本不知道哪个是我们想卸载的应用 于是可以打开某应用,再查看当前运行应用的包名 如下: 4.查找当前前台运行的包名 打开某应用,在亮屏状态输入 …...
Rapidfuzz,一个高效的 Python 模糊匹配神器
目录 01初识 Rapidfuzz 什么是 Rapidfuzz? 为什么选择 Rapidfuzz? 安装 Rapidfuzz 配置 Rapidfuzz 02基本操作 简单比率计算 03高级功能 查找单个最佳匹配 查找多个最佳匹配 使用阈值优化性能 04实战案例…...
【猫狗分类】Pytorch VGG16 实现猫狗分类1-数据清洗+制作标签文件
Pytorch 猫狗分类 用Pytorch框架,实现分类问题,好像是学习了一些基础知识后的一个小项目阶段,通过这个分类问题,可以知道整个pytorch的工作流程是什么,会了一个分类,那就可以解决其他的分类问题࿰…...
磁盘管理 磁盘介绍 MBR
track:磁道,就是磁盘上同心圆,从外向里,依次1号、2号磁道..... sector:扇区,将磁盘分成一个一个扇形区域,每个扇区大小是512字节,从外向里,依次是1号扇区、2号扇区... cy…...
JSON响应中提取特定的信息——6.14山大软院项目实训2
在收到的JSON响应中提取特定的信息(如response字段中的文本)并进行输出,需要进行JSON解析。在Unity中,可以使用JsonUtility进行简单的解析,但由于JsonUtility对嵌套对象的支持有限,通常推荐使用第三方库如N…...
【C++高阶】高效搜索的秘密:深入解析搜索二叉树
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C多态 🌹🌹期待您的关注 🌹🌹 ❀二叉搜索树 📒1. 二叉搜索树&…...
《软件定义安全》之七:SDN安全案例
第7章 SDN安全案例 1.DDoS缓解 1.1 Radware DefenseFlow/Defense4All Radware在开源的SDN控制器平台OpenDaylight(ODL)上集成了一套抗DDoS的模块和应用,称为Defense4ALL。其架构如下图,主要有两部分:控制器中的安全…...
java语言his系统医保接口 云HIS系统首页功能实现springboot框架+Saas模式 his系统项目源码
java语言his系统医保接口 云HIS系统首页功能实现springboot框架Saas模式 his系统项目源码 HIS系统的实施旨在整个医院建设企业级的计算机网络系统,并在其基础上构建企业级的应用系统,实现整个医院的人、财、物等各种信息的顺畅流通和高度共享,…...
使用vscode插件du-i18n处理前端项目国际化翻译多语言
前段时间我写了一篇关于项目国际化使用I18n组件的文章,Vue3 TS 使用国际化组件I18n,那个时候还没真正在项目中使用,需求排期还没有定,相当于是预研。 当时就看了一下大概怎么用,改了一个简单的页面,最近需…...
双系统下,如何隐藏另一个系统分区?
前言 最近有小伙伴在公众号下留言: 小伙伴说:“双系统时,非当前系统的系统盘能不能屏蔽?!比如Win7的系统盘在Win10系统时,盘符成了D盘,安装应用软件时,有些文件就到了D盘࿰…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
