【RAG论文】文档树:如何提升长上下文、非连续文档、跨文档主题时的检索效果
- RAPTOR Recursive Abstractive Processing for Tree-Organized Retrieval
- ICLR 2024 Stanford
- https://arxiv.org/pdf/2401.18059
RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)是一种创建新的检索增强型语言模型,它通过嵌入、聚类和摘要文本模块来构建一个从底层到高层具有不同摘要层的树状结构。这种方法允許模型在推理时从这棵树中检索信息,实现跨文本的不同抽象层的整合。RAPTOR的相关性创新在于它构建了文本摘要的方法,以不同尺度检索上下文的能力,并在多个任务上展示超越传统检索增强语言模型的性能。
研究问题
当前问题:在传统的 RAG 中,系统通常会依赖于检索短文本块。但当处理需要理解长篇上下文的文档时,简单的将文档切割或仅处理其上下文显然不够,在非连续文档、跨文档主题和分散型主题内容时效果不佳。
研究动机:RAPTOR本意是针对目前基于分块的向量检索限制了对上下文的整体信息获取与理解,从而采用了一种构造“从下至上不同级别的摘要树“的优化方法(试想下,很多问题是需要对整个甚至多个文档知识进行理解后才能回答,仅有top_K的分块是不够的?)。
研究内容
研究内容:递归抽象处理树组织检索(Recursive Abstractive Processing for Tree Organized Retrieval)是一种全新且强大的技术,用于以全面的方式对大型语言模型(LLM)进行索引和检索。它采用自下而上的方法,通过对文本段(块)进行聚类和总结,形成一个层级的树状结构。
论文效果:在使用时,RAPTOR能够从这棵树中检索信息,有效整合长篇文档中的信息,覆盖不同的抽象层次。通过实验发现这种递归摘要的检索方式在多个任务上都优于传统的检索增强方法。特别是在需要复杂推理的问答任务上,结合RAPTOR和GPT-4的使用将QuALITY基准测试的性能提高了20%。
研究方法
RAPTOR基于向量Embeddings递归地对文本块进行聚类,并生成这些聚类的文本摘要,从下向上构建树。聚集在一起的节点是兄弟姐妹;父节点包含该集群的文本摘要。具体的方法如下:
- 文本分割
- 文本向量表示
- 文本聚类
- 文本摘要
- 创建树节点
- 递归分聚类以及摘要
- 文档检索
文本切割
将检索语料库拆分为100个tokens的短的连续的chunk,类似于传统方法
保持句子完整,即使超过100个tokens,以保持连贯性
文本向量表示
嵌入文本块使用SBERT获得密集的向量表示
SBERT——一个基于BERT的编码器(multi-qa-mpnet-base-cos-v1)对这些文本进行向量化。这些块及其相应的SBERT向量形成了RAPTOR树结构的叶节点。
文本聚类
- 采用软聚类使用高斯混合模型和UMAP降维
- 更改UMAP参数以识别全局和本地集群
- 采用贝叶斯信息准则进行模型选择,确定最优聚类数量
论文聚类方法是使用软聚类(soft clustering),其中节点可以属于多个聚类,而不需要固定数量的聚类。
高斯混合模型(GMMs):GMMs假设数据点是从几个高斯分布的混合中生成的。给定N个文本段的集合,每个文本段表示为一个维密集向量嵌入,文本向量x给定其在第k个高斯分布中的可能性为:

总概率分布是一个加权组合

UMAP:Uniform Manifold Approximation and Projection (UMAP),一种用于降维的流形学习技术。向量的高维性对传统GMMs构成挑战,因为距离度量在高维空间中用于测量相似性时可能表现不佳。为了缓解这一点,本文使用了Uniform Manifold Approximation and Projection (UMAP),一种用于降维的流形学习技术。UMAP中的最近邻参数n_neighbors决定了保留局部和全局结构之间的平衡,作者用算法变化n_neighbors来创建一个层次化的聚类结构:它首先识别全局聚类,然后在这些全局聚类中进行局部聚类。
贝叶斯信息准则(BIC)
如果局部聚类的组合上下文超过了摘要模型的token阈值,本文的算法会在聚类内递归应用聚类,确保上下文保持在token阈值内。为了确定最优聚类数量,该算法使用贝叶斯信息准则(BIC)进行模型选择。
BIC不仅惩罚模型复杂性,还奖励拟合优度(goodness of fit)。

给定GMM的BIC是 ,其中N 是文本段(或数据点)的数量,k 是模型参数的数量,L 是模型的似然函数的最大化值。在GMM的上下文中,参数数量k是输入向量的维度和聚类数量的函数。
文本摘要
使用LLM来总结每个簇(cluster)中所有chunks
生成捕获关键信息的简明摘要
实验中使用gpt-3.5-turbo来生成摘要。
尽管摘要模型通常产生可靠的摘要,但是会有大约4%的摘要包含轻微的幻觉。这些幻觉没有传播到父节点,并且对问答任务没有可辨别的影响。
创建节点
聚类块+相应的摘要=新的树节点,生成的总结构成了树的节点,高层次的节点提供了更抽象的概括。


递归分聚类以及摘要
重复 steps 2-5: 重新嵌入摘要,集群节点,生成更高级别的摘要
从下向上形成多层树
直到聚类不可行
检索方法
两种方法:树遍历(自上而下一层一层)或折叠树(扁平视图)
对于每一个,计算查询和节点之间的余弦相似度,以找到最相关的

树遍历和折叠树检索机制的示意图。树遍历从树的根层开始,并基于与查询向量的余弦相似性检索顶部k(在这里,是top-1)个节点。在每个层级,它从上一层的top-k的子节点中检索top-k个节点。折叠树将树折叠为单个层级,并基于与查询向量的余弦相似性检索节点,直到达到阈值标记数为止。折叠树方法通过同时考虑树中的所有节点,提供了一种更简单的寻找相关信息的方式,这种方法将多层树压缩为单一层,使所有节点处于同一层级进行比较
实验在QASPER数据集的20个story上测试了这两种方法(详见图3),树折叠方法表现更佳


查询过程:展示RAPTOR如何检索关于灰姑娘故事的两个问题的信息:“故事的中心主题是什么?”和“灰姑娘是如何找到一个幸福结局的?”。突出显示的节点表示RAPTOR的选择,而箭头指向DPR的叶子节点。值得注意的是,RAPTOR的上下文通常包含由DPR检索的信息,直接或在较高层的摘要中。
实验结果
RAPTOR的性能通过三个问答数据集进行评估:NarrativeQA、QASPER和QuALITY。
- NarrativeQA包含基于书籍全文和电影剧本的问答对,要求对整个叙事有全面理解。
- QASPER涵盖1,585篇NLP论文中的5,049个问题,探索全文中嵌入的信息。
- QuALITY包含多项选择问题,每个问题都有约5,000个token的上下文段落,评估在中等长度文档上的检索系统性能。
各数据集使用标准的BLEU、ROUGE、METEOR和F1评估指标,并在QuALITY的HARD子集上报告准确率,该子集包含大多数人类注释者在限时设置中回答错误的问题。
实验结果表明,当RAPTOR与任何检索器结合使用时,在所有数据集上始终优于各自的检索器。


QASPER 数据集上基于不同语言模型(GPT-3、GPT-4、UnifiedQA 3B)及多种检索方法的 F-1 分数对比分析。

表 4: 在 QuALITY 开发数据集上,针对两种不同的语言模型(GPT-3、UnifiedQA 3B)使用不同检索方法的准确性对比。RAPTOR 在准确度上至少领先传统方法 BM25 和 DPR 2.0%。

表 5: 在 QASPER 数据集上,各模型 F-1 匹配得分的对比结果。

RAPTOR 与 UnifiedQA 3B 搭配使用时,不仅超越了 BM25 和 DPR 等检索方法,还在 METEOR 指标中创下了新的最高水平

在需要复杂推理的问答任务上,结合RAPTOR和GPT-4的使用将QuALITY基准测试的性能提高了20%。

表 8:RAPTOR 在 QuALITY 数据集中查询 Story 1 的不同树层时的性能。列表示不同的起点(最高层),行表示查询的不同层数。

检索效率
Token成本是 QASPER、NarrativeQA 和 QuALITY 文档长度的函数。
RAPTOR 树构建成本与每个数据集的文档长度成线性比例。

对于最多包含 80,000 个Tokens的文档,构建时间是文档长度的函数。对于每个数据集,RAPTOR 树的构建时间与文档长度成线性比例

聚类实验
表 9 显示了消融研究的结果。该消融研究的结果清楚地表明,与基于新近度的树方法相比,使用 RAPTOR 的聚类机制可以提高准确率。这一发现证实了我们的假设,即 RAPTOR 中的聚类策略在捕获同类内容进行总结方面更有效,从而提高了整体检索性能。

数据集统计和压缩率
表明压缩率为 72%。平均摘要长度为 131 个标记,平均子节点长度为 86 个标记。

摘要提示

RAPTOR方案的优点
- 在不同层次的多个级别上构建了语义表示并实施嵌入,提高了检索的召回能力
- 可以有效且高效的回答不同层次的问题,有的问题在低阶节点解决,有的则由高阶节点来完成
- 适合需要多个文档的理解才能回答的输入问题,因此对于综合性的问题有更好的支持
参考资料
- https://luxiangdong.com/2024/02/07/kym/
- https://developer.volcengine.com/articles/7370376932045062195
- https://mp.weixin.qq.com/s/KqJt4-Yhab5chi8YJglMiw
相关文章:
【RAG论文】文档树:如何提升长上下文、非连续文档、跨文档主题时的检索效果
RAPTOR Recursive Abstractive Processing for Tree-Organized RetrievalICLR 2024 Stanfordhttps://arxiv.org/pdf/2401.18059 RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)是一种创建新的检索增强型语言模型,它…...
【前端每日基础】day27——小程序开发
小程序开发详细介绍 基本概念 小程序:小程序是一种无需下载安装即可使用的应用。用户通过微信搜索或扫描二维码即可打开小程序。小程序具有触手可及、用完即走、体验良好的特点。 组成部分: WXML:用于描述页面的结构。 WXSS:用于…...
【C语言】指针速览
指针速览 指针1.野指针与空指针2. 空类型指针 void *3. 指针常量4. 常量指针5. 指向常量的指针常量6. 指针操作数组6.1 数组名作为函数参数 7. 多级指针8. 函数指针8.1 函数指针数组 最后 指针 指针就是内存的字节单元编号地址,指针变量就是存放地址的变量。 1.野…...
Java基础学习:深入解析Java中的位运算符
在Java中,位运算符用于对整数类型的值进行位运算。以下是Java中的位运算符: 位与(&):两位都为1时,结果为1,否则为0。 位或(|):两位中有1个为1,结果为1。 位非(~):位的反&#…...
9.Redis之list类型
list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的"有序"的含义,要根据上下文区分~~有的时候,谈到有序,指的是"升序","降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 Li…...
Git 的安装和使用
一、Git 的下载和安装 目录 一、Git 的下载和安装 1. git 的下载 2. 安装 二、Git 的基本使用-操作本地仓库 1 初始化仓库 1)创建一个空目录 2)git init 2 把文件添加到版本库 1)创建文件 2)git add . 3)g…...
大模型时代的具身智能系列专题(五)
stanford宋舒然团队 宋舒然是斯坦福大学的助理教授。在此之前,他曾是哥伦比亚大学的助理教授,是Columbia Artificial Intelligence and Robotics Lab的负责人。他的研究聚焦于计算机视觉和机器人技术。本科毕业于香港科技大学。 主题相关作品 diffusio…...
基于springboot+vue的社区医院管理服务系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
车载电子电器架构 —— 智能座舱标准化意义
车载电子电器架构 —— 智能座舱标准化意义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…...
Compose在xml中使用滑动冲突处理
一、背景 在现有Android项目中使用Compose可能存在滑动冲突问题,例如 SmartRefreshLayoutCoordinatorLayoutComposeView(ComposeView这里又是一个LazyColumn) 二、解决方案 官方介绍:https://developer.android.google.cn/develop/ui/compose/touch-inp…...
微信网页版登录插件v1.1.1
说到如今的微信客户端,大家肯定会有很多提不完的意见或者建议。比如这几年体积越来越大,如果使用频率比较高,那占用空间就更离谱了。系统迷见过很多人电脑C盘空间爆满,都是由于微信PC版造成的。 而且,它还加了很多乱七…...
华为实训课笔记 2024
华为实训 5/205/215/225/235/275/28 5/20 5/21 5/22 5/23 5/27 5/28...
HTML静态网页成品作业(HTML+CSS)——宠物狗介绍网页(3个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有3个页面。 二、作品演示 三、代…...
网络模型-路由策略
一、路由策略 路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。目的:设备在发布、接收和引入路由信息时,根据实际组网需要实施一些策略,…...
【MySQL精通之路】InnoDB(7)-锁和事务模型
1.InnoDB锁 【MySQL精通之路】InnoDB(7)-锁和事务模型(1)-锁-CSDN博客 2.InnoDB事务模型 【MySQL精通之路】InnoDB(7)-锁和事务模型(2)-事务模型-CSDN博客 3.InnoDB中不同SQL语句设置的锁 4.幻影行 5.InnoDB中的死锁 5.1InnoDB死锁示例 5.2死锁检测 …...
深度学习创新点不大但有效果,可以发论文吗?
深度学习中创新点比较小,但有效果,可以发论文吗?当然可以发,但如果想让编辑和审稿人眼前一亮,投中更高区位的论文,写作永远都是重要的。 那么怎样“讲故事”才能让论文更有吸引力?我总结了三点…...
【ARM Cache 系列文章 7.1 – ARMv8/v9 MMU 页表配置详细介绍 02 】
文章目录 Translation table descriptorTable descriptor format页面粒度和地址长度粒度(Granules)48位和52位地址TCR_ELx.DSVTCR_EL2.DSFEAT_LPA块描述符|页描述符紧接上篇文章【ARM Cache 系列文章 7 – ARMv8/v9 MMU 页表配置 01 】 Translation table descriptor</...
Mysql搭建主从同步,docker方式(一主一从)
服务器:两台Centos9 用Docker搭建主从 使用Docker拉取MySQL镜像 确保两台服务器都安装好了docker 安装docker请查看:Centos安装docker 1.两台服务器都先拉取mysql镜像 docker pull mysql 2.我这里是在 /opt/docker/mysql 下创建mysql的文件夹用来存…...
【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来
Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了,所以今天就没有写一点验一点,而是在写完获取博客列表功功能,验证完它的后端后,了解完令牌的基本使用以及Jwt的基本使用方式——…...
【Linux 网络编程】网络的基础知识详解!
文章目录 1. 计算机网络背景2. 认识 "协议" 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; 🍎局域网(LAN----Local Area Network): 计算机数量更多了, 通过交换机和路由器连接。 🍎 广域网WAN: 将…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
