为什么文档解析会那么难?
主要原因就在于文档格式和结构太复杂,特别是现在的富文本,同时包含图片,文字,表格等多种格式的数据;而如果只是格式种类比较多还问题不大,主要是文档内容多结构。
举例来说,你的文档是一个技术架构图,或者流程图等带有结构的数据,这时候你不论选择什么技术都很难进行处理。
以现在常见的OCR技术来说,虽然OCR能够识别出文档中内容,也就是信息;但是它识别不出来文档内容中的结构信息。
从作者个人的体验来看,除了纯文字的文档之外,任何带有结构化信息的文档,经过OCR处理之后,文档中的结构化信息全部丢失,而这对构建知识库来说会产生非常大的影响,甚至会直接导致有些文档完全无效,还不如不要。
所以在RAG中,文档处理的核心主要有以下三点:
保证文档中重要的数据内容都能被提取出来
要保证文档的结构,如标题,段落,表格等;因此,作者在处理的过程中,会在每段拆分的文档前面拼接上其上层标题。
有些人在使用文档格式转换工具或OCR工具之后,就直接把转换之后的文档切分并入库;但事实上这样的文档内容质量会非常差,原因就在于其中会存在很多噪音数据。
如图片,结构图,表格分隔符等,会占用大量的无效空间,导致文档质量直线下降;而这些噪音数据又很难处理,特别是在文档量比较大的情况下。一般情况下只能根据规则或正则表达式对内容进行适当的删除和处理。
因此,在RAG中知识库的构建,也就是文档的处理需要花费大量的时间和精力;然后根据不同的业务场景,选择合适的文档格式和结构,并且选择合适的存储工具;如传统数据库,向量数据库,知识图谱等。