RAG文档切片新方案HiChunk:LLM重构RAG文档分块
在检索增强生成(RAG)的世界里,**文档分块(Document Chunking)**是一切的基石。如何将一篇长文档切分成有意义、不大不小的知识片段(Chunks),直接决定了后续检索的精度和最终生成答案的质量。然而,绝大多数现有的分块方法,无论是简单的固定大小分割,还是更智能的语义分割,都遵循一个共同的、却存在根本性缺陷的范式:线性分块(Linear Chunking)。它们将文档视为一个扁平的、一维的句子或段落序列。
这种线性视角,在面对结构层次分明、信息组织复杂的真实世界文档(如学术论文、技术手册、法律合同)时,显得捉襟见肘。用户的查询有时需要一个高屋建瓴的章节摘要,有时又需要一个具体到某个段落的精确细节。线性的、固定粒度的分块,难以动态地满足这种多层次的信息需求。
来自腾讯优图实验室的研究者们提出了HiChunk(Hierarchical Chunking),一个旨在颠覆传统线性分块的层级化文档结构框架。它不再将被动地“切割”文档,而是主动地利用微调后的大型语言模型(LLM)来“理解”并“重构”文档的内在层级结构,并配合一个创新的Auto-Merge检索算法,实现了检索粒度的动态自适应。
1. 引言:RAG需要“结构化”的知识
传统分块方法的“原罪”在于其上下文粒度的静态性。
- 固定大小分块 (Fixed-size Chunking):简单粗暴,极易切断语义完整的句子或段落。
- 语义分块 (Semantic Chunking):通过计算句子间嵌入向量的相似度来确定分割点,能够保证单个chunk的语义内聚性,但依然是单一层级的。
而用户的查询是多粒度的:
- 高层查询: “总结一下这篇论文的主要贡献。” -> 需要章节级别的上下文。
- 中层查询: “解释一下实验设置部分的细节。” -> 需要小节级别的上下文。
- 低层查询: “公式(3)中的变量gamma代表什么?” -> 需要段落或句子级别的上下文。
线性分块,无论粒度大小,都无法同时高效地满足这三种需求。HiChunk的出现,正是为了解决这一**粒度失配(granularity mismatch)**的核心问题。
2. HiChunk核心架构:基于LLM的“文档结构化”
HiChunk的核心是一个经过专门微调的LLM,其任务不再是生成对话或文章,而是将一篇长文档的所有句子,组织成一棵层级分明的“文档树”。
2.1 任务定义:从文本生成到结构预测
HiChunk巧妙地将复杂的“文档结构化”任务,转换成了一个LLM擅长的文本生成任务。
- 输入: 一篇被预先分割成句子的文档,每句带有一个行号。
1: 这是第一句。 2: 这是第二句,属于第一段。 3: 这是新的一段的开始。 ... - 输出: 一个描述了所有“分割点”及其层级的列表。
[[1, 1, true], [3, 1, true], [10, 2, false], ...]- 每个元组
{line number}, {segment level}, {be a title?}代表一个新chunk的开始。 {segment level}: 数字越小,层级越高(如1代表章,2代表节)。{be a title?}: 该行是否可以作为这个chunk的标题。
- 每个元组
2.2 模型训练:教LLM如何“划分章节”
- 基础模型: Qwen3-4B。
- 训练数据:
- 公开数据集:
Gov-report,Qasper,Wiki-727,这些数据集本身就包含明确的文档结构(章节标题)。
- 公开数据集:
