本文属于 RAG 工程框架中的「1 数据接入与文档切分」环节,聚焦「Hierarchical Chunking(层级切分)」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
同时构建父 Chunk(章节级)与子 Chunk(段落级),查询时先粗召回父 Chunk,再细召回子 Chunk,兼顾覆盖度与精度。
关键技术/实现路径
- 章节树构建与父子 ID 关联。
- 多粒度索引(父/子分开建索引)。
- 检索时父子融合与去重。
优缺点
- 优点:减少语义截断,复杂问题召回更稳。
- 缺点:索引与检索链路更复杂。
性能与资源
- 离线成本:中。
- 在线时延:中(双层召回)。
应用场景
- 长文档、规章体系、技术手册。
统一合成数据示例
输入数据片段
1 | {"doc_id":"D21","sections":[{"id":"S1","title":"报销标准","paras":["机票上限2000元","30天内提交"]}]} |
中间结果(父子 Chunk + 检索路径)
1 | { |
要点:父块先覆盖章节语义,子块再精确到条款,对应「粗到细」两层检索。
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:RAPTOR (Sarthi et al., 2024)。
- 核心解决问题:解决多粒度检索与长文组织。
- 成熟实现工具:llama-index recursive retriever, langchain parent retriever。
详细原理拆解
- 父子 Chunk 双层检索,先父级覆盖再子级精确,典型融合分数 score=alpha*parent+(1-alpha)*child。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def hierarchical_retrieve(query, parent_index, child_index, alpha=0.4): |
参数示例
1 | parent_chunk_level: section |
常见失败案例
- 失败模式 1:父块过粗,embedding 与查询相似度低,子块根本没被展开,长章漏检。
- 失败模式 2:子块过碎,同一事实被拆成多条命中,证据重复、上下文噪声大。
- 失败模式 3:alpha 固定,不同查询类型(定义类 vs 数值类)最优融合权重不同,一刀切失效。
Demo 数据带入计算示例
1 | 问句 q 与父块 P-S1 相似度 sp=0.72;与子块 C-S1-1 相似度 sc=0.91。 |