文章详解RAG数据准备流程,包括文档加载和文本分块两大步骤。文档加载比较了Unstructured、PyMuPDF4LLM等工具特点与适用场景;文本分块分析了固定大小、递归分块、语义分块等策略,以及基于文档结构的分块方法,并介绍了ChunkViz可视化工具的应用。
一、前言
上篇我们提到RAG的两大过程:检索与生成,而在检索之前首先需要构建知识库,而构建知识库之前需要进行数据准备。
数据准备又可以细分两步:文档加载、文本分块。接下来我们就讲下这块的内容。
二、文档加载
文档类型可能有word、excel、pdf、md等格式,都需要对应的解析为文本或结构化数据,才可以进行文本分块。解析文档内容的同时,需要提取相关元数据,如页码等信息,方便溯源(引用来源)。
文本加载,一般会使用已有的类库,这些类库把不同文档类型的解析做了封装处理,方便直接调用。
主流文档加载器
| 工具名称 | 特点 | 适用场景 | 性能表现 |
|---|---|---|---|
| PyMuPDF4LLM | PDF→Markdown转换,OCR+表格识别 | 科研文献、技术手册 | 开源免费,GPU加速 |
| TextLoader | 基础文本文件加载 | 纯文本处理 | 轻量高效 |
| DirectoryLoader | 批量目录文件处理 | 混合格式文档库 | 支持多格式扩展 |
| Unstructured | 多格式文档解析 | PDF、Word、HTML等 | 统一接口,智能解析 |
| FireCrawlLoader | 网页内容抓取 | 在线文档、新闻 | 实时内容获取 |
| LlamaParse | 深度PDF结构解析 | 法律合同、学术论文 | 解析精度高,商业API |
| Docling | 模块化企业级解析 | 企业合同、报告 | IBM生态兼容 |
| Marker | PDF→Markdown,GPU加速 | 科研文献、书籍 | 专注PDF转换 |
| MinerU | 多模态集成解析 | 学术文献、财务报表 | 集成LayoutLMv3+YOLOv8 |
如上工具里,之前用过MinerU整体效果不错,可以直接将文档解析为md、json格式,直接对文档结构化,生成文档标题结构信息。 这些工具,多数都会内部依赖传统算法模型(yolo、nltk等),同时借助LLM大模型,实现语义相关优化
Unstrucured
这里主要介绍下Unstrucured,langchain内部也集成了Unstructured。Unstructured有如下优势
1、格式支持广泛,支持word、excel、pdf、html、md等格式,而且对外api接口一致,内部根据不同格式调用不同的解析逻辑
2、可以直接识别标题、段落、表格等结构化信息,保留文档元数据,方便后续分块、入库
通过langchain加载,可以使用langchain的UnstructuredMarkdownLoader实现文档加载,这个是langchain对Unstructured的封装实现。
from unstructured.partition.auto import partitionfrom unstructured.partition.pdf import partition_pdf# PDF文件路径pdf_path = "data/C2/rag.pdf"# 使用Unstructured加载并解析PDF文档elements = partition( filename=pdf_path, content_type="application/pdf")# 直接使用partition_pdf# elements = partition_pdf(filename=pdf_path)# hi_res会用到yolo模型# elements = partition_pdf(filename=pdf_path, strategy="hi_res")# ocr_only用到poppler工具# elements = partition_pdf(filename=pdf_path, strategy="ocr_only")# 打印解析结果print(f"解析完成: {len(elements)} 个元素, {sum(len(str(e)) for e in elements)} 字符")# 统计元素类型from collections import Countertypes = Counter(e.category for e in elements)print(f"元素类型: {dict(types)}")# 显示所有元素print("\n所有元素:")for i, element in enumerate(elements, 1): print(f"Element {i} ({element.category}):") print(element) print("=" * 60)partition内部会根据不同文档类型调用不同的实现类,本例中使用的pdf文件,实际上就是调用的partition_pdf。
我们也可以直接调用partition_pdf,可以有一些参数自定义,不同的策略,内部调用的工具也不同。
解析的结果,是各种类型的元素,后续可以根据不同的需要再对元素进行拼接分块。
三、文本分块
文本分块的理解
文本分块就是把长篇的文档,拆分为一个个相对较短的文本片段,这个片段就是RAG之检索的基本单位。一个片段一般几百字,尽可能只有一个语义主题,这样可以更好的和用户提问相匹配。
文本分块的重要性
文本分块需要选择合适的分块大小,主要考虑模型输入限制与性能考虑
1、模型输入的限制 embedding一般都有输入限制,有些512token,长一些的1024token,分块过程无法embedding向量化
大模型输入一般会比较长,但是由于分块会比较长,也会导致放不了几个分块,从而影响了可以参考信息的广度。 而且随着输入内容的过长,也会导致输出结果的准确性打折扣
2、为啥分块不是越大越好,因为过大的分块会影响RAG的性能 1)嵌入过程的性能损失 embedding会将文本转换为一个向量(多维数值数组),如512/768/1024维,不管这个文本有多少个字,都是生成一样长度的向量。这个其实是做了信息压缩的(不管之前多少文字,都转换成相同大小的向量)
检索阶段,就是通过比较两个向量的位置相近,即语义相似来检索相关内容。
但是如果分块很长,可能存在多个主题信息,会导致信息压缩程度更大,那么信息丢失更多,关键信息就会变模糊,从而影响了检索精度
2)主题稀释影响检索
过长的分块,意味着一个分块存在多个主题,这样导致主题信息的稀释,就会导致本来应该检索到的内容,没有呗检索到,进而影响最终的生成结果。
3)生成过程的大海捞针
如果分块过大,在生成阶段,会导致有用的没用的信息都给到大模型,没用的信息就会形成干扰信息,而且大量的上下文输入到大模型,也会影响大模型提取到最关键的信息来回答问题。
基本的分块策略
1、固定大小
这个是最基本的分块策略,按照固定长度的分块。但是一般也会保证整句的完整性。
一般还会设置重叠长度,以便保留上下文信息。
这种方法的好处就是简单、效率高,但是存在把同一语义的内容切分到不同的分块。
2、递归分块
该方法是利用多个分隔符按层级递归分块
先按第一个分隔符分块,如果不超过分块大小,则暂存,后续累加
如果超过分块大小,则先把之前暂存分块信息合并分块,接着判断是否还有剩余分割负,如有按第分隔符继续分割,后续操作递归
相比于固定大小分块,递归分块可以更好的处理超长文本,可以利用更细粒度的分隔符继续分割
3、语义分块
语义分块是更加智能的分块方法,可以不依赖固定长度、分隔符,而是尝试利用语义进行切分。
核心是:在语义差异显著的地方进行切分。这样可以保持每个分块具有内部一致性。
基本实现过程:
1)先按照分隔符,切分为一个个句子
2)对句子embedding,一般会将当前句子的上下句也加入计算embedding,这样可以更好融入上下文信息
3)计算相邻句子的embedding向量的语义差异,语义差异越大,说明语义关联越弱,更应该在这些地方断开
4)识别端点,根据各个句子的语义距离统计数据,确定一个阈值,大于该值的位置,则为断句的位置
5)根据断句位置,将句子合并为分块
具体如何语义分块的方法也有多种,如百分位法、标准差法、四分位距法、梯度法。
基于文档结构的分块
对于有明确文档结构标记的文档(如html、md等),可以基于文档结果进行分块
以md文档为例,说明下分块思路:
1、根据标题可以识别一级标题(# xx)、二级标题(## yy)…,然后就可以使用# ##进行内容分割,然后根据层级可以一级一级细化
2、内容聚合,基于标题,就可以把标题下的文本内容聚合到一起,并且有层级关系
这个时候,还可以把标题信息作为文本的元数据信息,从而可以实现文本的定位
还存在某个标题下文本长度过长的问题,这个时候可以使用其他方法,继续对该文本进行分块,多个分块都可以拥有相同的标题信息元数据
四、分块可视化
可以利用ChunkViz工具实现分块的可视化
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2025 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。