本文关于如何将非结构化数据(如PDF和Word文档)转换为结构化数据,以便于RAG(Retrieval-Augmented Generation)系统使用。
背景
尽管通用大语言模型(LLM)在知识问答方面取得了非常大的进展,但是对于专业领域依然无能为力,因为专业领域的数据不会对外公开,通用LLM没有学习过,自然不会回答。一种思路是将这些专业数据喂给LLM进行微调,但是对技术和成本要求往往太高,而RAG系统则是解决专业领域问答的另一种思路,在用户原始问题之后加上与之相关的私域数据一起提问,由通用LLM进行分析和总结。通过检索增强的方式为LLM提供更加精准的信息,从而提升最终回答效果,如下图所示:
知识数据库是RAG系统的核心组件,需要离线将各类私域文档转换成计算机可检索的数据。实际场景中,大部分专业文档都是以pdf、doc等非结构化数据进行存储,它们有标题、段落、表格、图片等元素,易于人类阅读,却不适合计算机进行检索和处理。文档解析是将这些非结构化文档转换为半结构化的文档(如markdown、html),由系统后续进行切片、向量化处理,最终形成可检索的结构化数据。因此,文档解析是RAG系统的第一步,所谓better input better output,高质量的解析结果自然会提升RAG系统整体的效果。
一、Word与Pdf对比
Pdf和Word(MS Office 2007之前为doc,之后为docx)是两种最常见的文档格式,但是二者有本质区别:
-
Word倾向于编辑。 Docx格式遵循Office Open XML标准[1],底层通过xml保存数据,有标题、段落、表格等概念,但是不含页面和位置的概念,文档各个元素最终展现的位置由实际的渲染引擎决定(同一份文档不同软件打开后显示结果可能不同)。解析docx文件只需要按照标准读取底层的xml文件即可。doc格式在2008年才对外开放(此时已被docx替代),能够解析的开源工具很少,通常是转换为docx文件后进行解析。
-
Pdf倾向于阅读和打印。 文档存储了一系列绘制字符、线条等基本元素的指令,指示了阅读器或打印机在屏幕或纸张上显示符号的位置和方式。相比word,pdf有页面和位置的概念,在不同终端的展示效果一致。因为不需要编辑,pdf中没有标题、段落、表格等概念,例如标题只是大号加粗的文字,表格只是对齐排列的线条和文字。解析pdf文件除了需要提取出文字外,还需要进行额外的版面恢复、表格识别等操作。
以下是docx和pdf文件结构的示例:
<w:document>
<w:body>
<!-- 段落 -->
<w:p w:rsidR="005F670F" w:rsidRDefault="005F79F5">
<w:r>
<!-- 文本属性 -->
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000"/>
</w:rPr>
<w:t>Hello world!</w:t>
</w:r>
</w:p>
<!-- 页面属性 -->
<w:sectPr w:rsidR="005F670F">
<w:pgSz w:w="12240" w:h="15840"/>
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720"
w:gutter="0"/>
<w:cols w:space="720"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
</w:document>
4 0 obj % 页面内容流
<< >>
stream % 流的开始
1. 0. 0. 1. 50. 700. cm % 位置在(50,700)
BT % 开始文本块
/F0 36. Tf % 在36pt选择/F0字体
(Hello, World!) Tj % 放置文本字符串
ET % 结束文本块
endstream % 流结束
endobj
总结:
二、Word解析
1. docx格式
一个DOCX文件实际上是一个包含多个文件和文件夹的压缩包,可以用解压缩工具进行解压。最小结构如下,示例为:
.
├── [Content_Types].xml
├── _rels
│ └── .rels
└── word
├── document.xml
└── _rels
└── document.xml.rels
其中word/document.xml是DOCX文档的主要内容。参考上面的示例,以下是一些关键标签:
- <w:document>:根元素,包含整个文档内容。
- <w:body>:文档主体部分,包含所有段落、表格和其他内容。
- <w:p> (Paragraph):段落元素。
- <w:r> (Run):包含一段连续的文本,带有相同的格式。
- <w:t> (Text):具体的文本内容。
- <w:sectPr> (Section Properties):节属性,定义页面设置如页边距、页码、页眉页脚等。
2. doc格式
doc格式本身是一个OLE(Object Linking and Embedding)复合文档,文档将数据分成很多流(Steams),存储在不同的 Storages 里,详见MS-DOC文件格式规范[2]。其中WordDocument二进制流是文档的主要内容,必须存在。据目前所知,python环境下没有任何库能够直接读取doc文件中的内容。python olefile虽然可以打开doc文件,但也仅限于打开,无法理解(decode)WordDocument等流。因此python环境下一般通过libreoffice将doc文件转换为docx文件进行解析。同时为了避免文件加密导致转换失败,可以借助olefile及文件格式规范进行提前判断。
最后分享
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型面试题
面试,不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费
】
如有侵权,请联系删除。