文本分块处理(上)
1. 分块(Chunking)概述
1.1 分块的作用
分块(Chunking)是将大文档内容切分为多个较小文本单元,再进行后续入库和检索处理的过程。
主要作用:
-
便于 Embedding 模型进行向量化处理;
-
避免 LLM 输入信息过多导致生成速度降低;
-
减少无关信息干扰,提高重要信息被检索和利用的概率。
2.1 固定字符切分分块
定义:按照固定文本长度对文档进行切分。 例如:每 200~300 字切分为一个 Chunk。
优点 :实现简单; 适合文本量较少、结构简单的文档; 开发成本低,容易快速使用。
缺点:容易造成上下文信息缺失 ; 破坏原本文档结构实际处理制度类文件时,容易出现 Chunk 只包含少量文字的问题。
2.2 递归分块
定义:递归分块是一种根据多个层级规则逐步切分文本的方法。
其中:递归 = 方法处理 → 条件判断 → 再决定是否继续处理。
优点:保留较好的语句完整性;相比固定长度切分,检索准确性更高。
缺点:需要根据不同文档设计合适的递归规则;参数和策略调整较复杂。
示例流程:首先按照段落进行切分 -> 判断切分后的文本块是否过大 -> 如果过大,则继续按照换行符 \\n 切分; -> 如果仍然过大,则继续按照句号 。 等更细粒度规则切分(如果过小的话可能会采取合并的操作) -> 最终得到满足长度要求的文本块。
2.3 语义分块
定义:语义分块根据文本内容的含义进行切分,而不是单纯按照字符数量切分。
例如:"我很穷,没有钱。" "我没钱买吃的。"
虽然文字不同,但表达的语义接近,属于同一主题。
优点:语义完整性更好;适合非结构化文本。
缺点:依赖 Embedding 模型能力;对文档结构理解能力有限;参数调节较复杂。
提出几个问题:语义如何计算?语义为什么抽象呢?
Embedding 向量相似度(主流方式)-> 将文本转换为向量,通过向量之间的相似度判断语义关系。(就是求解余弦的角度一样)
常见计算方式:余弦相似度。

-1 ≤
≤ 1
接近 1:说明语义非常相近(角度趋近 0°)
接近-1:说明语义非常相反(角度趋近 180°)*
利用大模型理解段落主题 + 上下文(我没有尝试,暂不细讲)
基本流程:
文本初步切分
↓
计算 Chunk 间语义相似度
↓
判断是否属于同一主题
↓
合并或重新划分
↓
形成新的语义 Chunk
实际上语义分块并不是适用于所有文档,我们处理文件时候就出现这样的问题
例如制度文件:奖学金管理制度,具体申请条件:(两个部分虽然连续,但主题可能不同)
因此:语义分块更适合作为辅助策略;我们需要针对特定类型文档进行个性化配置。
2.4 文档结构分块
定义:根据文档本身的结构进行切分,例如:标题;章节;小节等等文章的结构
优点:结构更加清晰;Chunk 内容主题一致;更符合人工阅读习惯。
缺点:不同类型文档需要不同结构识别策略;Chunk 长度可能不一致。
基本流程:
文本 + 页面版面信息提取
↓
识别结构元素
↓
生成文档层级
↓
按照层级切分
我们项目中 MinerU 主要负责文档解析和结构信息提取,而分块阶段负责利用这些结构信息进行切片。
因此 (解析质量 → 结构识别质量 → 分块质量) 三个环节是会相互影响。
2.5 父子分块(Parent-Child Chunking)
定义:父子分块通过建立较大的 Parent Chunk 和较小的 Child Chunk 之间的关联,实现检索精度和上下文完整性的平衡。
优点:解决普通分块中信息不完整的问题;解决 Chunk 大小与检索需求不匹配的问题;保留更完整上下文。
缺点:需要维护 parent_id 和 child_id 关系;存储成本增加;Parent Chunk 质量直接影响最终效果;参数调节更加复杂。
基本流程:
识别文档结构
↓
生成 Parent Chunk
(保证完整语义单位)
↓
继续细分
↓
生成 Child Chunk
(用于精确检索)
我们实际项目应用采用:父子分块;语义分块(辅助);长度限制。
其中重点关注:Parent Chunk 的质量决定后续检索上下文质量。
2.6 基于 LLM 的分块
定义:利用大语言模型理解文本内容,并自动决定文本切分边界。
优点:使用方便;理论上能够获得较好的语义效果。
缺点:推理成本高;速度较慢;对模型能力依赖较强。

![[LangChain RAG] 01 大模型为什么需要 RAG:四个问题与标准流程-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260825035331-6a8d11bb97bca-220x150.png)

