
RAG文档处理的流程——给你的RAG文档处理制定一个标准 原创
“ 文档处理有一套标准和规范,良好的规范才能让后续处理更简单,更少出错。”
最近一直在优化RAG的文档处理功能,随着各种问题被解决之后,慢慢发现文档处理没有想象中的那么简单;而我们大部分人对文档处理还仅仅只停留在表面上,并没有真正深入研究过文档处理的流程,格式,规范。
今天作者就以自身这段时间的经验来梳理一下文档处理的具体流程,包括处理格式的选择,文档处理的步骤,以及一些注意事项等。
RAG之文档处理
在一个RAG系统中,最重要也是最困难的两个点就是文档处理和数据召回;今天我们主要讨论的就是第一步文档处理。
文档处理的目的,就是把各种格式的数据进行分类,拆分,向量化之后用于相似度检索。
文档来源
因此,文档处理的第一步就是文档的收集,根据不同的业务场景文档的来源也多种多样,但主要包括以下几个来源:
1. 来自于文本文档 包括word,pdf,ppt,excel,csv,txt等多种常见文本类型
2. 来自于数据库,包括关系型数据库,缓存数据,文档数据库等
3. 来自于网络API接口等
总之,文档来源可以是任何渠道,任何形式。
文档格式统一
这里文档格式的统一并不是来源文档的格式,因为文档的来源我们无法控制;所以,我们需要在拿到文档之后,把它们处理成统一的格式,这样才有利于后续处理
由于文档来源和格式的复杂性,因此在具体的业务场景中我们需要把文档格式进行统一处理;比如说不论任何格式的文档,最终都处理成markdown或html格式。
之所以选择markdown和html格式,原因就在于其能层次结构,且比较通用。
如果不对文档格式进行统一会出现什么情况?
如果不对文档格式进行统一,那么面对多种复杂的文档类型,那么我们就需要每一种都进行处理;这样会导致系统变得更复杂,并且后续在使用中也会面临各种各样的问题。
所以,在真正开始文档处理之前我们一定要根据自己的业务选择一个适合自己的文档格式;否则面对各种类型的文档格式,我们逐一处理会特别麻烦,而且不利于统一管理。
具体流程就是,不论拿到何种类型的文档,我们通过手动处理也好,格式转换工具也好,自己写转换程序也好;最终都把它们转换成我们指定的格式(markdown或html);当然,这里的markdown和html只是一种比较合适和通用的选择,在不同的业务场景中也可以根据自己的需要选择格式的文档格式。
文档拆分
由于文档内容长短不一,但为了提升召回率,因此对文档进行适当的截取是一个比较好的选择;以markdown为例,可以把word,pdf等根据段落和长度进行切分,并且在切分时把文档的名称和段落标题拼接到每段文档中;而类似于excel这种格式的数据,可以把每行数据拼接成一个markdown文档段。
注意事项
在文档处理中有很多注意事项,由于文档的复杂性,因此在实际操作中我们很难做到让所有人都按照标准的格式对文档进行处理,因此最好能够提供一个文档模板,让别人按照我们的规则来进行处理。
其次,文档在处理过程中因为各种各样的原因会存在大量的噪音内容;包括一些无用数据,无效数据,符号,换行符等;因此,我们需要对这些数据进行一定的清洗,删除文档中的噪音。
之后,处理之后的文档一定要紧凑并做好格式化,文档处理之后主要有两个作用,一个是给用户看的,另一个是用来做相似度召回的;前者需要做好格式化,后者需要做得足够紧凑,尽量把噪音数据的影响降到最低。
以word中的表格数据为例,有些人处理之后的表格数据充斥着大量的|------|------| +++++ | ++++++++++这种内容,而这些东西完全可以用更少的符号来表示,这样才能使得最终的文档比较紧凑,有助于召回。
本文转载自AI探索时代 作者:DFires
