RAPTOR:如何用树状结构重塑RAG检索能力?
文章目录
- 1. 背景
- 1.1 长尾知识问题
- 2. 核心
- 3. 方法
- 3.1 RAPTOR 的核心流程框架
- 3.2 聚类算法
- 3.2.1 聚类的作用与目标
- 3.2.2 软聚类(Soft Clustering)的独特性
- 3.2.3 算法选择:高斯混合模型(GMM)
- 3.2.4 高维向量嵌入的降维处理(UMAP)
- 3.2.5 当一个聚类内容太长时怎么办?
- 3.2.6 如何选择聚类数量?(自动确定聚类数)
- 3.3 两种检索策略
- 3.3.1 Tree Traversal Retrieval(树遍历检索)
- 3.3.2 Collapsed Tree Retrieval(折叠树检索)
- 3.3.3 对比一般检索过程
- 4. 实验
- 4.1 数据集
- 4.1.1 NarrativeQA:文学类长篇阅读理解
- 4.1.2 QASPER:科研文献问答任务
- 4.1.3 QuALITY:多选题 + 文档推理
- 4.2 对比基准模型
- 4.2.1 基础检索器对比(使用 UnifiedQA)
- 4.2.2 跨模型对比(GPT-3 / GPT-4 / UnifiedQA)
- 4.2.3 任务级表现提升(QuALITY & NarrativeQA)
- 4.2.4 超越现有 SOTA 模型
- 4.3 树结构不同层级对 RAPTOR 表现的贡献分析
公司最近在用RAGFlow框架构建RAG系统,我发现这个框架只有勾选了使用RAPTOR回答的效果才比较满意,故看了看RAPTOR的文章:https://arxiv.org/pdf/2401.18059,并做一些分享。
1. 背景
当前很多**检索增强语言模型(Retrieval-Augmented Language Models)**可以通过从外部知识库中检索内容来增强模型对现实世界变化的适应能力,尤其能帮助处理那些少见或冷门的知识(long-tail knowledge)。
但现有的方法通常只能检索文档中的一些短小、连续的段落(chunks),这就带来了一个问题:
📌 问题: 模型在回答问题时,难以掌握整篇文档的整体结构和上下文,导致理解片面、不完整。
1.1 长尾知识问题
这里举一个例子来理解一下①什么是长尾知识,②传统RAG为什么难以解决这样的长尾知识,③RAPTOR是如何解决这样的长尾知识问题的。
🧩 主题问题:
“灰姑娘是如何获得幸福的?”
这是一个典型的、需要综合全篇信息、理解故事主题脉络的问题。
① 什么是长尾知识?(结合这个问题解释)
长尾知识 = 散落在文档中、出现频率很低但关键的重要细节信息
在回答这个问题时,我们需要一系列低频信息组成完整的故事链条:
细节 | 为什么是长尾? |
---|---|
她被继母虐待 | 出现在故事开头,频次低 |
她保持善良、勤劳 | 没有直接强调,容易被忽略 |
仙女现身、施魔法 | 情节关键,但不常出现 |
三次参加舞会的过程 | 分布在三个段落中,信息分散 |
王子寻找失主、鞋子匹配 | 最后几段才出现 |
🧠 这些信息加在一起,才能支撑出**“她为什么值得幸福”的完整因果链条**,但每一段都不是高频,不会频繁出现在模型训练语料中,也不会集中出现在某一段原文中,这就是典型的长尾知识结构。
② 为什么传统RAG无法处理这种长尾知识?
传统RAG的做法:
-
将文档分成很多短小的、连续的片段(chunks);
-
用户提问后,用关键词匹配 + 向量相似度,找出与问题最相近的几个原文片段;
-
把这几段放入语言模型,生成答案。
❌ 问题来了:
传统RAG可能检索到的是如下片段:
- “王子在舞会上遇到了一位神秘女子……”
- “水晶鞋掉落,王子派人寻找……”
但是,它漏掉了关键背景:
- 她曾经的苦难;
- 仙女的帮助;
- 她多次的努力与善良的表现。
⚠️ 导致结果:
模型可能会回答:
“灰姑娘在舞会上遇到王子,落下水晶鞋,最后被找到,嫁给王子。”
听起来像是对的,但它缺乏“幸福的因果逻辑”,也没有表达角色成长和命运转变——这就是传统RAG面对长尾知识的失败点:检索范围窄 + 无法整合跨段落的因果链条。
③ RAPTOR 是如何解决这个问题的?
RAPTOR 在文档预处理阶段就做了三件关键事:
🌳 树结构构建:
-
把原始文本切块(如传统方法);
-
对语义相近的段落进行聚类,可能会把“仙女帮助”、“舞会经历”聚在一起;
-
用 LLM 对每个聚类做摘要,生成一个“父节点”;
-
把摘要继续聚类、继续总结,一层一层形成语义树。
这样构建出的“语义树”中,每一层都包含不同层次的文本理解:
- 底层是细节;
- 中层是事件集合;
- 顶层是全篇总结。
🔍 查询阶段:
RAPTOR 可以按需检索:
- 不只是原文段落;
- 还能检索“包含多个事件的摘要节点”;
- 可以自动获取适合当前问题的抽象层次。
✅ RAPTOR 可能如何回答这个问题?
因为它可以聚合如下总结片段:
灰姑娘在继母欺压下仍保持善良。
在仙女帮助下参加舞会三次,王子被吸引。
她在舞会中掉落水晶鞋,王子通过鞋子找到她。
最终王子识破继母阻挠,与灰姑娘团聚,拥有幸福生活。
语言模型在有了这些多层信息后,可以生成如下自然回答:
“灰姑娘在继母的压迫下保持善良,在仙女的帮助下三次参加舞会,并赢得了王子的喜爱。最终王子凭借水晶鞋找到她,识破继母的阻碍,两人重逢,过上幸福生活。”
这才是真正对“如何获得幸福”这一问题的完整、结构化、充满因果逻辑的回答。
维度 | 传统RAG | RAPTOR |
---|---|---|
检索方式 | 只选几段原文 | 多层级、跨段聚合 |
结构理解 | 无上下文语义结构 | 有语义层级(树) |
长尾信息利用 | 易漏掉背景/因果 | 可压缩聚合关键细节 |
回答质量 | 片面、碎片化 | 整体、主题性强 |
用户满意度 | 中低 | 高,贴近提问语义 |
✅ 一句话总结:
RAPTOR 用树状语义结构和递归摘要技术,能够捕捉和整合长尾知识中的稀疏细节,为复杂问题生成更完整、因果清晰的答案,而传统RAG只能“抓关键词”,难以拼出完整故事。
2. 核心
🌲 RAPTOR 的核心创新
为了解决上述问题,作者提出了一种全新的方法,叫做 RAPTOR,它的核心思想如下:
-
把文档分块(像以前的方法一样,分成短段);
-
每一段进行嵌入(embedding),得到它们的语义向量;
-
对语义相似的段落进行聚类(clustering);
-
每个聚类由语言模型进行摘要(summarization);
-
重复这个过程,构建出一个“从下往上”的树状结构,从细节到总结,形成不同“抽象层级”的内容。
这个树结构中,底部是原文片段,越往上是越抽象的总结。这样一来,模型就能在不同的抽象层次上获取信息。
🧠 推理阶段怎么用?
在实际推理(inference)的时候,RAPTOR 会根据用户的提问,从这棵树里选出相关的节点,不管是具体细节还是整体主题,都可以根据需要选取,最终拼成一个回答上下文。
图中展示的是 RAPTOR 的“树结构构建过程(Tree Construction Process)”,是它的核心思想和实现机制之一。
📌 图像整体结构解读(由左至右)
整张图从左到右分为三部分:
-
左侧:RAPTOR Tree 整体结构图
-
中间:单层生成过程示意图
-
右侧:一个节点内部的内容结构
🧩 一、左图:RAPTOR Tree 语义树结构图
这部分展示了 RAPTOR 构建出来的一个完整的“语义树”,由底层细节到上层摘要组成。
树的结构分为:
- Leaf layer(叶子层):编号为 1-5,这是原始的文本块,即从文档中切出来的句子或段落。
- 中间层(如节点6、7、8):是从叶子层聚类后生成的聚合摘要节点。
- Root layer(根层):编号9、10,是更高层级的摘要,对下层的总结再进一步归纳。
🔁 层层向上,语义逐渐抽象:
每一层的节点都是对下一层几个子节点的摘要表示,形成“从原文细节 → 主题抽象”的语义路径。
🧪 二、中图:一层的构建过程
这部分详细说明了如何从原始文本块构建一层语义树节点:
步骤 1️⃣:Clustering(聚类)
- 文本块(chunk)1 到 5 分别用颜色标出,代表它们之间的语义差异。
- 类似的chunk被聚到一起,例如chunk 3 和 5 被归为一类,chunk 2 和 3 也聚到一起(这暗示软聚类,一个chunk可参与多个类)。
步骤 2️⃣:Summarization by LLM(由大语言模型生成摘要)
- 每个聚类内的文本块被送入 LLM,总结出该类的一个摘要文本;
- 每个摘要就成为树的新一层中的一个“父节点”(如图中的节点6、7、8)。
最终,这一层(6、7、8)连接到底层对应的chunk(子节点),就构成了一层新的语义层级。
📦 三、右图:一个节点的结构内容(以节点 #8 为例)
展示了一个 RAPTOR 节点具体包含哪些信息:
字段 | 含义 |
---|---|
Index #8 | 该节点在树中的编号 |
Child Nodes: 2, 3 | 表示这个节点的下层子节点是 chunk 2 和 chunk 3 |
Text | 这是 LLM 生成的摘要内容,归纳了 chunk 2 和 chunk 3 的内容 |
Text Embedding | 节点的语义向量(用来进行查询时的相似度比较) |
🔍 小提示:
- 每个节点都可以参与向量匹配,用于检索;
- 总结文本让树在高层也能表达内容;
- 子节点信息可以反向追踪,支持层级遍历。
3. 方法
3.1 RAPTOR 的核心流程框架
RAPTOR 通过构建语义树结构来增强语言模型对长文档的理解与检索能力。整个方法由以下几个关键步骤组成:
1. 文本切块与嵌入(Chunking & Embedding)
将原始文档按每段约 100 个 token 切成 chunk,保证语义完整性(整句移动,不截断)。
使用 SBERT 对每个 chunk 生成语义嵌入,作为树的叶子节点。
2. 语义聚类与摘要(Clustering & Summarization)
对相似的 chunk 进行聚类;
利用语言模型为每个聚类生成摘要;
将这些摘要重新嵌入,再次聚类、摘要,递归执行,构建多层级的语义树。
3. 检索策略(Querying the Tree)
提出两种检索方式:
Tree Traversal:逐层遍历,逐级选择最相关节点;
Collapsed Tree:摊平整棵树,跨层次筛选最相关节点;
支持在不同抽象层级上灵活检索,实现语义深度与细节结合的查询效果。
3.2 聚类算法
3.2.1 聚类的作用与目标
原文核心:
聚类用于将文本段落(chunks)按照语义相似性组织成群组,这样做的目的是为后续的“摘要”和“语义树构建”打好基础。
通俗解释:
聚类是 RAPTOR 中的第一步,它将意义相关的段落归在一起,形成可以被摘要的“主题小组”。
3.2.2 软聚类(Soft Clustering)的独特性
原文核心:
不同于硬聚类只能归入一个类别,RAPTOR 使用软聚类:
- 每个段落可以属于多个聚类;
- 不需要事先设定固定的聚类数量;
- 这是必要的,因为一段文本往往涉及多个主题。
✅ 举例说明:
一段话提到“灰姑娘去舞会”和“仙女帮助她”,这段既和“变装”聚类相关,也和“舞会经历”相关——必须允许它“属于多个类”。
3.2.3 算法选择:高斯混合模型(GMM)
原文核心:
RAPTOR 使用 GMM(Gaussian Mixture Models)作为聚类算法。
- GMM 是一种概率模型,假设每个向量来自于多个高斯分布的混合;
- 它非常适合不确定性强、主题分布模糊的文本数据;
- 提供柔性归属和解释性强的聚类结果。
为什么选择 GMM?
原文结尾总结:
虽然文本数据不一定完全符合高斯分布,但 GMM 的灵活性和表现能力,在实证中被证明非常适合做“软语义聚类”,尤其优于简单规则的“基于位置”的聚类(如只靠段落邻近性)。
使用GMM聚类的简化过程:
🎯 目标回顾:我们有一组文本段(chunk),已经通过 SBERT 得到向量,希望用 GMM 把它们按主题聚类(可重叠)
🪄 Step 0:准备输入数据
我们还是用悉的灰姑娘例子,假设我们现在有 5 个文本段(chunk),每段的向量已经由 SBERT 编码,维度简化为 2D 向量,方便你可视化:
Chunk | 文本内容(简述) | 向量表示 (x₁, x₂) |
---|---|---|
C1 | 被继母虐待 | [1.0, 0.2] |
C2 | 仙女施法送她去舞会 | [0.4, 0.9] |
C3 | 在舞会上遇到王子 | [0.3, 0.8] |
C4 | 水晶鞋掉落 | [0.2, 0.5] |
C5 | 王子找她,结婚,幸福结局 | [0.1, 0.6] |
这些向量构成一个点集:
X = { x 1 , x 2 , x 3 , x 4 , x 5 } \mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2, \mathbf{x}_3, \mathbf{x}_4, \mathbf{x}_5\} X={x1,x2,x3,x4,x5}
🪄 Step 1:定义 GMM 模型结构
假设我们现在要拟合 K = 2 个聚类(高斯成分):一个表示“魔法+舞会”主题,另一个是“故事背景+结局”。
每个成分用一个高斯分布建模:
P ( x ) = π 1 ⋅ N ( x ; μ 1 , Σ 1 ) + π 2 ⋅ N ( x ; μ 2 , Σ 2 ) P(\mathbf{x}) = \pi_1 \cdot \mathcal{N}(\mathbf{x}; \mu_1, \Sigma_1) + \pi_2 \cdot \mathcal{N}(\mathbf{x}; \mu_2, \Sigma_2) P(x)=π1⋅N(x;μ1,Σ1)+π2⋅N(x;μ2,Σ2)
其中:
- μ k \mu_k μk 是第 k 个高斯分布的均值(主题中心);
- Σ k \Sigma_k Σk 是协方差矩阵(控制形状/扩展范围);
- π k \pi_k πk 是该聚类的权重(类似“主题占比”)。
🪄 Step 2:E-M 算法迭代求解(Expectation-Maximization)
🔁 这个过程每轮包括两步:
🧮 E步:计算每个点属于每个聚类的概率(软分配)
用贝叶斯公式计算每个点属于第 k 个成分的概率(称为“责任值”):
γ i k = π k ⋅ N ( x i ; μ k , Σ k ) ∑ j = 1 K π j ⋅ N ( x i ; μ j , Σ j ) \gamma_{ik} = \frac{ \pi_k \cdot \mathcal{N}(\mathbf{x}i; \mu_k, \Sigma_k) }{ \sum{j=1}^K \pi_j \cdot \mathcal{N}(\mathbf{x}_i; \mu_j, \Sigma_j) } γik=∑j=1Kπj⋅N(xi;μj,Σj)πk⋅N(xi;μk,Σk)
举个例子:
假设第1轮我们初始化均值:
μ 1 \mu_1 μ1 = [0.3, 0.7](“魔法+舞会”类中心)
μ 2 \mu_2 μ2 = [1.0, 0.2](“家庭背景”类中心)
我们计算 Chunk 3 的概率:
γ 3 , 1 = 0.9 , γ 3 , 2 = 0.1 \gamma_{3,1} = 0.9,\quad \gamma_{3,2} = 0.1 γ3,1=0.9,γ3,2=0.1
→ 说明 Chunk 3(舞会)90% 属于主题 1,10% 属于主题 2,属于软聚类。
🧮 M步:更新 GMM 参数(均值、协方差、权重)
通过上面每个点属于每个聚类的概率,更新:
每个类的新均值 μ k \mu_k μk:加权平均所有点;
协方差矩阵 Σ k \Sigma_k Σk:点与均值的加权方差;
混合权重$ \pi_k$:该聚类在整体中的“占比”;
⏱️ 重复以上步骤,直到收敛
反复进行 E 步 + M 步,直到聚类的结果稳定;
最终会得到每个 chunk 在每个聚类中的“归属概率”。
🎯 最终输出(结果示意)
假设最终的 GMM 输出如下表(γ值是每个chunk对每个主题的概率):
Chunk | Cluster 1(魔法+舞会) | Cluster 2(背景+结局) |
---|---|---|
C1 | 0.1 | 0.9 |
C2 | 0.85 | 0.15 |
C3 | 0.9 | 0.1 |
C4 | 0.8 | 0.2 |
C5 | 0.3 | 0.7 |
这意味着:
C2、C3、C4 会被归入“魔法+舞会”摘要;
C1、C5 会被归入“家庭与结局”摘要;
C5 也可部分参与前者摘要(比如“水晶鞋的联系”);
这样建树时,C5 可以出现在两个节点下,实现交叉语义连接。
🧠 总结:在 RAPTOR 中使用 GMM 聚类的关键点
操作 | 解释 |
---|---|
数据输入 | 每个文本段的 SBERT 向量 |
模型结构 | 多个高斯成分的混合分布 |
算法流程 | EM 算法:先算归属概率(E),再更新中心(M) |
结果形式 | 每段文本对每个主题都有一个概率(软聚类) |
应用效果 | 一段文字可以属于多个摘要主题,建树时结构更真实、更完整 |
3.2.4 高维向量嵌入的降维处理(UMAP)
原文核心:
- 由于文本嵌入是高维向量,在高维空间中,距离不再稳定(即“维度灾难”);
- 为了解决这个问题,使用 UMAP(统一流形近似映射)进行降维处理;
- 并且用 n_neighbors 参数来调控聚类的局部与全局结构权重。
🧠 拓展理解:
RAPTOR 用了一种**“两阶段聚类策略”**:
-
先做全局聚类(识别大致主题);
-
再在每个主题下做局部聚类(提取细节)。
这种策略能同时捕捉宏观语义与微观关系,建立更有语义层次感的树结构。
3.2.5 当一个聚类内容太长时怎么办?
原文核心:
如果某个聚类组合起来的文本超过了语言模型的 token 限制,RAPTOR 会:
- 再次对子聚类进行递归聚类;
- 保证每个聚类都能在模型输入限制内被摘要。
✅ 这使得系统既灵活又稳健,自动调整压缩粒度,适配不同上下文限制。
3.2.6 如何选择聚类数量?(自动确定聚类数)
原文核心:
采用 BIC(Bayesian Information Criterion,贝叶斯信息准则) 进行模型选择:
B I C = l n ( N ) × k − 2 l n ( L ^ ) BIC = ln(N) × k − 2ln(L̂) BIC=ln(N)×k−2ln(L^);
它能在“模型复杂度”和“拟合效果”之间做权衡;
自动确定每一层的最优聚类数量。
📊 好处:
不用手动设定每层多少类,BIC会根据数据自然调整层级结构,保证树的语义合理性。
✅ 最终总结:RAPTOR 的聚类策略
步骤 | 技术手段 | 目的与优势 |
---|---|---|
聚类方式 | 软聚类(Soft Clustering) | 支持多重归属,反映文本多主题特性 |
聚类模型 | 高斯混合模型 GMM | 概率式建模,表达模糊语义边界 |
降维方法 | UMAP | 解决高维距离不可靠的问题 |
层次构建 | 两阶段聚类:全局+局部 | 构建结构化的语义树层级 |
动态聚类数 | BIC 自适应选择聚类数量 | 自动化、避免人为参数 |
长文本处理 | 递归聚类控制 token 长度 | 保证摘要可生成,系统稳健 |
3.3 两种检索策略
3.3.1 Tree Traversal Retrieval(树遍历检索)
这部分展示的是 逐层结构化向下检索的策略,按照语义树的层级结构一步步“筛选信息”。
📌 图中流程详解:
- Query(查询):
用户输入问题,通过一个 Encoder(如 SBERT)编码成一个向量表示 q \mathbf{q} q。
- Tree Structure(语义树):
系统已经通过聚类+摘要构建好一棵多层语义树;
树顶是抽象主题总结,越往下越接近原文细节(chunk)。
- 逐层选择节点:
首先在根节点层中计算所有节点与查询向量 q \mathbf{q} q 的余弦相似度;
选出 top-k 个最相关的节点;
然后在这些节点的子节点中继续做相似度匹配,重复这个过程直到叶子层;
整个过程是结构化、按层逐级下探的。
- Retrieved Context(检索结果):
把最终被选中的节点内容拼接在一起,作为“上下文输入”;
这部分通常由来自不同层次的摘要或原文段构成。
- 送入 LLM 解答:
把拼好的 context + 原始 query 一起输入大语言模型(如 GPT-4),生成答案。
✅ 特点总结:
优点 | 层次清晰,语义结构感强,适合对“主题→细节”有明确逻辑的问题 |
---|---|
缺点 | 每层选固定 k 个,容易漏掉高相关节点,信息召回受限于层次路径 |
3.3.2 Collapsed Tree Retrieval(折叠树检索)
这部分展示的是一种 “全局扁平检索”策略,即不再管树的层级,而是一次性把所有节点拿出来比相似度。
📌 图中流程详解:
- Query 编码:
和前面一样,将问题编码成一个向量 \mathbf{q}。
- Collapsed Tree Structure(扁平化语义树):
将语义树的所有节点(包括根节点、中间摘要节点、原文chunk节点)全部摊平为一个集合;
把这些节点放入一个大池子中统一计算相似度;
无论它是细节信息还是主题摘要,都被等价对待。
- 相似度计算与节点选择:
对这个大集合中每个节点与查询向量 \mathbf{q} 计算余弦相似度;
按照相似度从高到低,选出 top-k 个节点,直到上下文长度(token)达到上限。
- Retrieved Context(检索结果):
被选中的节点可以来自不同层次,但都被认为是与问题最相关的;
拼接后送入 LLM。
- 进入 LLM 解答:
同样将拼好的 context + query 一起送入大语言模型生成回答。
折叠树(Collapsed Tree)方法虽然灵活,但有个小缺点:
要对语义树中的所有节点都进行一次余弦相似度计算;
如果节点特别多,会导致计算开销变大;
不过:
这个问题可以用像 FAISS(Facebook 提供的高效向量检索库)来解决;
这些库可以快速进行k近邻搜索,大大加快处理速度。
✅ 特点总结:
优点 | 灵活、全局最优选取、适配问题需求粒度、实验效果更好 |
---|---|
缺点 | 没有利用树结构的语义路径信息,可能少了结构感 |
🧠 两种方法直观类比:
比喻 | 树遍历法(Tree Traversal) | 折叠树法(Collapsed Tree) |
---|---|---|
🏔️ 类比登山 | 一步一步走路找路径 | 飞到空中看全景再选 |
🧭 检索思路 | 层层走,按结构选 | 全面扫,全局选 |
🎯 检索偏向 | 更结构化、层级清晰 | 更灵活、粒度动态 |
🧪 实验效果 | 稍逊一筹 | 表现更优(论文实验中) |
3.3.3 对比一般检索过程
背景问题:图中展示了两道问题的查询过程**
-
Question 1:What is the central theme of the story?(故事的中心主题是什么?)
-
Question 2:How did Cinderella find a happy ending?(灰姑娘是如何获得幸福结局的?)
🌳 图示结构概览
这是一棵典型的 RAPTOR 语义树结构,由多个层级组成:
最底层(0–15):原始文本 chunk(叶子节点)
中间层(16–22):聚类后的摘要节点,表示某些 chunk 的聚合总结
顶层(23–26):更高层的总结节点,表示大主题的概括
所有节点之间的线条表示父子关系(上层总结的是下层的内容)
🟧 RAPTOR 检索结果(边框)
图中使用了两种边框颜色来表示 RAPTOR 选择了哪些节点:
颜色边框 | 说明 |
---|---|
橙色边框 | RAPTOR 为 Question 1 检索到的节点 |
紫色边框 | RAPTOR 为 Question 2 检索到的节点 |
可以看到:
RAPTOR 为两个问题都选择了不止一个节点;
并且它选择的是来自 不同层级 的节点,有原始 chunk,也有摘要节点(16–19),甚至还有高层摘要节点(25);
说明 RAPTOR 能根据问题需要的信息粒度灵活检索节点,而不是死板只选叶子段。
🟠 DPR 检索结果(箭头)
图中箭头表示的是传统 DPR 所检索出来的叶子节点(即原文段落):
箭头颜色 | 问题 |
---|---|
橙色箭头 | DPR 为 Question 1 检索的 chunk(如3、7、11、15) |
紫色箭头 | DPR 为 Question 2 检索的 chunk(如0、2、5、6) |
你可以观察到:
DPR 只能选叶子节点,无法抽象;
有些段落看似相关,但彼此分散、语义割裂;
DPR 检索结果常常分布在底层,不具备“主题整合能力”。
🔍 核心对比现象(作者想强调什么?)
RAPTOR 选的节点中,很多已经包含了 DPR 的内容,而且组织得更好、更紧凑。
举例说明:
节点 25(顶层) 是 RAPTOR 为 Question 1 检索的摘要节点,可能总结了多个 DPR 检索到的原始 chunk;
节点 16–19(中层) 是 RAPTOR 为两个问题都检索到的节点,表明这几个中层摘要既包含重要细节,也适合支持推理型问题;
相比之下,DPR 只能选低层原始段,造成信息零散、不成体系。
✅ 总结图示要点
比较维度 | RAPTOR | DPR |
---|---|---|
检索粒度 | 多层灵活(原文 + 摘要) | 固定(只能叶子段) |
信息整合 | 可选择高层总结,节省token | 内容分散、碎片化 |
对问题适配 | 可选主题总结(Q1)、细节线索(Q2) | 强依赖相似段落匹配 |
结果可覆盖性 | RAPTOR 结果包含 DPR 检索内容的压缩版 | 不具备压缩、抽象能力 |
4. 实验
4.1 数据集
作者用 NarrativeQA、QASPER 和 QuALITY 这三个公开数据集来全面评估 RAPTOR 的性能。这三个数据集在文本长度、任务类型和回答方式上各有特点,能够测试模型在不同问答场景下的表现。
4.1.1 NarrativeQA:文学类长篇阅读理解
📌 特点:
数据量:1,572 篇文档;
来源:小说书籍和电影剧本全文;
任务:基于全文回答自然语言问题(非段落提取,是真正的理解);
挑战点:需要理解整篇故事的结构与情节,类似“读完整本小说后答题”;
评估指标:
BLEU(B-1, B-4)衡量 n-gram 精确度;
ROUGE(R-L)衡量召回能力;
METEOR 衡量语义相关度。
✅ 目的:测试模型在“长文档+语义理解+生成式回答”上的能力。
4.1.2 QASPER:科研文献问答任务
📌 特点:
数据量:5,049 个问题,覆盖 1,585 篇 NLP 论文;
文本:完整科研论文(比小说更技术性,结构更清晰);
任务:回答各种类型的问题,包括:
是否能回答(Answerable/Unanswerable);
是非题(Yes/No);
摘要式回答(Abstractive);
直接提取型(Extractive);
评估指标:使用 F1 分数(准确性+召回综合指标)。
✅ 目的:测试模型在“结构化论文 + 信息定位 + 精准检索”下的能力。
4.1.3 QuALITY:多选题 + 文档推理
📌 特点:
数据类型:多项选择题;
每道题配一段平均 约 5000 tokens 的上下文(中等长度文档);
问题难度高:需要通篇阅读与推理,非局部提取;
含一个特别难的子集 QuALITY-HARD:
这些题是连人类 annotators 也容易答错的;
用于测试系统在 速度设定下的困难理解能力;
评估指标:准确率(accuracy)。
✅ 目的:测试模型在“中等长度文档 + 多选题推理 + 高难度任务”上的表现。
数据集 | 文本类型 | 任务类型 | 评估方式 | 目标能力 |
---|---|---|---|---|
NarrativeQA | 小说、剧本全文 | 自然语言回答 | BLEU, ROUGE, METEOR | 长文语义理解 + 生成能力 |
QASPER | NLP论文全文 | 精确回答多个类型 | F1 分数 | 结构化文献理解 + 信息定位 |
QuALITY | 中长篇文档 + 选择题 | 多项选择推理 | 准确率 | 推理判断 + 多跳理解能力 |
4.2 对比基准模型
作者使用统一的问答模型(UnifiedQA-3B)作为 reader,搭配三种主流检索器(retriever)进行对比实验:
SBERT:句子嵌入模型
BM25:关键词匹配(稀疏向量)
DPR:Dense Passage Retrieval(稠密向量)
每种方法均测试两个版本:
🔹 不使用 RAPTOR(标准 top-k chunk 检索)
🔸 使用 RAPTOR(树结构摘要检索)
4.2.1 基础检索器对比(使用 UnifiedQA)
NarrativeQA:长篇故事问答
Model | ROUGE | BLEU-1 | BLEU-4 | METEOR |
---|---|---|---|---|
SBERT + RAPTOR | 30.87% | 23.50% | 6.42% | 19.20% |
SBERT baseline | 29.26% | 22.56% | 5.95% | 18.15% |
BM25 + RAPTOR | 27.93% | 21.17% | 5.70% | 17.03% |
BM25 baseline | 23.52% | 17.73% | 4.65% | 13.98% |
DPR + RAPTOR | 30.94% | 23.51% | 6.45% | 19.05% |
DPR baseline | 29.56% | 22.84% | 6.12% | 18.44% |
QuALITY & QASPER:多选题推理 & 多段信息整合
Model | QuALITY Acc. | QASPER F1 |
---|---|---|
SBERT + RAPTOR | 56.6% | 36.70% |
SBERT baseline | 54.9% | 36.23% |
BM25 + RAPTOR | 52.1% | 27.00% |
BM25 baseline | 49.9% | 26.47% |
DPR + RAPTOR | 54.7% | 32.23% |
DPR baseline | 53.1% | 31.70% |
📌 总结:
所有模型加上 RAPTOR 后均有明显提升;
NarrativeQA 上的提升尤为显著,适合长文阅读理解;
QASPER 表现表明 RAPTOR 更擅长整合多段信息;
SBERT + RAPTOR 整体表现最佳。
4.2.2 跨模型对比(GPT-3 / GPT-4 / UnifiedQA)
QASPER:F1 Match 分数
Retriever | GPT-3 | GPT-4 | UnifiedQA |
---|---|---|---|
Title+Abstract | 25.2 | 22.2 | 17.5 |
BM25 | 46.6 | 50.2 | 26.4 |
DPR | 51.3 | 53.0 | 32.1 |
RAPTOR | 53.1 | 55.7 | 36.6 |
📌 结论:
RAPTOR 在所有模型配置下都优于 BM25 和 DPR;
平均提升范围在 1.8%–10.2%,展示了强泛化能力。
4.2.3 任务级表现提升(QuALITY & NarrativeQA)
QuALITY(推理型多选任务):
Retriever | GPT-3 Acc. | UnifiedQA Acc. |
---|---|---|
BM25 | 57.3% | 49.9% |
DPR | 60.4% | 53.9% |
RAPTOR | 62.4% | 56.6% |
RAPTOR 相较 DPR/BM25 提升 2%–5.1%;
与 GPT-4 搭配,在 QuALITY-HARD 子集上达到 82.6% / 提升 21.5%,显著超过 CoLISA(SOTA 模型)。
NarrativeQA(长文本生成):
ROUGE-L 提升 BM25 +7.3 分,DPR +2.7 分;
在 BLEU-1、BLEU-4、METEOR 等指标也有 0.7 ~ 5.8 分提升;
在 METEOR 上达到了新的 SOTA。
4.2.4 超越现有 SOTA 模型
QASPER:与顶级多段问答模型对比(Table 5)
Model | F1 Match |
---|---|
LongT5 XL | 53.1 |
CoLT5 XL | 53.9 |
RAPTOR + GPT-4 | 55.7 |
📌 RAPTOR 超越当前多段阅读 SOTA 模型(无需更大参数规模)。
🧠 总结分析
RAPTOR 通过构建语义树结构,将信息分层压缩与抽象,使模型能在固定 token 范围内获取更全、更高质量的上下文;
相比传统 top-k chunk 检索,RAPTOR 能整合更深层语义,支持复杂 reasoning;
整体表现优于 BM25、DPR,并超越多个 SOTA 检索+问答系统。
4.3 树结构不同层级对 RAPTOR 表现的贡献分析
🧠 RAPTOR 的语义树结构中,不同“层级”的节点(叶子节点 vs. 中层摘要 vs. 高层主题)对检索性能分别有多大贡献?
下面我会帮你从结构、图表、实验证明三个方面系统讲解:
📌 一、研究动机(为什么分析树层结构?)
作者假设(hypothesis):
上层节点(摘要、主题层)在处理主题类或多跳问题时尤其重要;
原因是这类问题通常需要整合多个片段,而叶子节点只能提供原始细节,缺乏总结。
于是,他们设计了一组“层级贡献”的分析实验,来回答这个假设是否成立。
📊 二、实验设计:逐层检索对比(Table 8)
使用 QuALITY 数据集中的一篇文章,构建完整语义树。然后分别设置以下检索策略:
查询策略 | 检索层级 | 准确率(Accuracy) |
---|---|---|
只用叶子节点(Layer 0) | 原始 chunks | 57.9% |
只用中层摘要(Layer 1) | 局部聚类摘要 | 57.8% |
只用高层摘要(Layer 2) | 全局主题总结 | 57.9% |
用中层+高层(2层) | Layer 1 + 2 | 63.15% ✅ |
用全树(3层) | Layer 0 + 1 + 2 | 73.68% ✅✅ |
✅ 解读:
单独使用某一层时,性能差不多(都在 57.8–57.9%);
只要加入上层摘要(Layer 2),准确率就大幅上升;
使用所有层的“全树检索”策略性能最好(提高近 16%);
说明:不同层级信息具有互补性,融合使用效果最佳。
🧪 三、定性+定量分析支撑结论
定性分析在附录 G 中展开(比如灰姑娘案例);
定量实验在 Table 8 展示;
检索被限制在不同层级节点中进行,以明确每一层对性能的边际贡献;
结果明确验证了假设:高层节点对主题类或多跳问题更有用。
🧠 四、关键结论总结(图文段尾部分)
作者指出:
RAPTOR 成功的根本原因之一,就是其 层级化的树结构检索;
它既保留了细节(叶子层),也保留了结构和摘要信息(中高层);
因此能适应各种问题粒度:无论是细节问题,还是需要全局理解的主题问题;
相比只能选 chunk 的 DPR,RAPTOR 语义层次结构大大拓展了信息可达性和组织效率。
✅ 总结:
RAPTOR 的表现强大,不仅在于它能检索摘要信息,更在于它的“语义树结构”提供了多层次、多粒度的信息融合能力。作者的实验证明,同时使用高层(总结)、中层(聚类)和底层(细节)节点,能带来最优性能提升。