RAPTOR:树结构的索引和检索系统的递归抽象处理

论文地址:https://arxiv.org/pdf/2401.18059.pdf

摘 要

增强型检索语言模型能够更好地适应世界状态的变化,并整合长尾知识,然而现有大多数方法仅能从检索语料库中检索到较短的连续文本片段,这限制了对整个文档上下文的整体理解。我们引入一种新颖的方法,即递归地嵌入、聚类及总结文本块,自下而上构建一个包含不同层次抽象的树状结构。在推理阶段,我们的RAPTOR模型会从这个树中检索信息,跨过冗长文档的不同抽象层次进行信息整合。受控实验表明,在多个任务上,采用递归摘要进行检索相较于传统的增强型检索语言模型有显著的性能提升。在涉及复杂、多步骤推理的问答任务上,我们展示了最先进的结果;例如,通过将RAPTOR检索与GPT-4相结合,我们在QuALITY基准测试上实现了绝对精度提升20%,达到了新的最佳性能水平。

概述

在构建检索增强生成(Retrieval-Augmented Generation, RAG)系统的过程中,文档分块是一个关键步骤,它影响着系统能否检索到足够的信息来回答用户的问题。目前,大多数系统采用滑动窗口方法进行分块,并通过调整窗口大小来优化分块效果。然而,这种方法存在一个主要缺点:检索到的往往是短且连续的文本块,这对于需要理解整个文档才能回答的问题来说,可能无法提供足够的信息。

论文指出,分块策略应该根据用户查询的具体需求来定制。有些查询可能只需要一个或几个特定的文本块,或者甚至只需要块中的某一部分。此外,文本通常包含多个主题,并且具有层次化的结构,这意味着分块策略需要能够捕捉到文本的这种复杂性。

为了解决这些问题,作者提出了RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)系统,这是一个树结构的索引和检索系统。RAPTOR的设计目的是捕捉文本的多尺度、不同层次的信息。系统通过对文本块进行总结,为大型语言模型(Large Language Models, LLMs)提供不同层次的信息,从而增强模型对复杂问题的理解和回答能力。

总结来说,RAPTOR系统通过其递归抽象处理和树形组织检索的设计,旨在改进现有RAG系统的分块策略,以更好地适应不同查询的需求,并提高对多层次、多主题文本的理解和检索效率。

RAPTOR方法介绍

RAPTOR系统通过在文本块的基础上构建一个递归的树结构来组织信息,树中的每个节点都代表了不同粒度的语义信息。

RAPTOR的基本流程

  1. 分块与嵌入
    1. 文本首先按100个词的大小进行分块。如果某个句子超过100个词,则整个句子作为一个独立的文本块,以确保块内的语义连贯性。
    2. 每个文本块都会被转换成嵌入向量(embedding)。
  2. 递归构建RAPTOR树
    1. 文本块及其对应的嵌入向量作为树的叶子节点。
    2. 通过聚类算法将相似的文本块聚集在一起。
  3. 生成总结与新的嵌入
    1. 利用语言模型为每个簇内的文本生成总结。
    2. 为每个生成的总结再次生成嵌入向量,并将这些总结作为树的新节点。
  4. 递归执行
    1. 上述过程会递归进行,不断细化信息粒度,构建出具有多层次的RAPTOR树。
  5. 查询策略
    1. Tree Traversal Retrieval:遍历RAPTOR树的每一层,剪枝并选择最相关的节点。
    2. Collapsed Tree Retrieval:评估整个树中每个节点的相关性,找到最相关的几个节点。

总结来说,RAPTOR通过递归的方式构建了一个层次化的文本表示,每个层次都为不同粒度的信息提供了索引。这种结构不仅能够捕捉文本的细节,还能够抽象出更高层次的概念,从而提高检索系统的灵活性和效率。在查询时,RAPTOR提供了两种策略来检索相关信息,一种是逐层遍历,另一种是全局评估,这两种策略都旨在找到与查询最相关的文本块。

RAPTOR树构建流程

RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)树构建流程是一个旨在提高长文档检索效果和上下文理解能力的技术方案,具体步骤如下:

  1. 文本分块与初步嵌入
    1. 首先,将检索语料库中的长文档分割成长度约为100个标记的连续文本块,若某句子超过这个限制,则将整句移到下一个块中,保证每个块内的语境和语义连贯性不受破坏。
    2. 使用基于BERT的Sentence-BERT(SBERT)编码器(如multi-qa-mpnet-base-cos-v1版本)对这些文本块进行嵌入,将每个块转化为一个稠密向量,这些向量和对应的文本块共同构成树结构的基础——叶子节点。
  2. 层次聚类
    1. 应用聚类算法对这些嵌入向量进行处理,将语义相似的文本块聚集在一起形成簇。
    2. 选择合适的聚类方法(未指定具体类型,但通常可能包括K-means、层次聚类等)以确保相关的内容能够有效地组合在一起。
  3. 摘要生成与重新嵌入
    1. 对每个形成的聚类,使用语言模型(如UnifiedQA等)生成一个对该簇内文本内容的简洁概括或摘要。
    2. 生成的摘要随后再经过SBERT嵌入,形成新的向量表示。
    3. 重复此嵌入、聚类、摘要生成的过程,直到无法进一步合理地进行聚类为止,由此形成一个多层、结构化的树状表示,其中包含了原始文档从详细信息到高级主题的递归抽象。
  4. 构建递归树结构
    1. 经过上述循环,将低层次的摘要作为更高层次聚类的输入,逐级向上构建树的中间节点和根节点,使得树的每一层代表了不同程度的抽象级别。
  5. 两种不同的检索策略
    1. 树遍历检索:从顶层节点开始,逐层向下遍历树结构,根据查询的相关性剪枝并选择每个层次的节点。
    2. 折叠树检索:跨越所有层次一次性评估节点的相关性,找出最具相关性的节点。

通过这一系列流程,RAPTOR能够建立一个高度结构化、具备层次主题理解和细节保留特点的检索树,当面临复杂的问答和检索任务时,模型可以在树的不同层级中检索相关信息,从而大大增强了对长文档的理解和检索性能。此外,论文强调了RAPTOR在构建效率上的优势,无论是令牌消耗还是构建时间,都保持了与文档长度的线性关系,这意味着即使面对大规模、复杂的文本库,也能实现高效处理。

RAPTOR树的两种查询策略

RAPTOR树设计了两种不同的查询策略,分别是树遍历方法和折叠树方法,这两种策略都是用来在构建好的多层结构树中寻找与给定查询最为相关的文本信息。

  1. 树遍历方法
    1. 在这一策略中,检索过程是从RAPTER树的顶层(即最抽象的层)开始,逐层向下搜索。
    2. 对于每一层,计算查询向量与当前层节点(即该层的摘要或嵌入表示)之间的余弦相似度。
    3. 选择相似度最高的前k个节点,并将它们标记为待进一步考虑的节点集合。
    4. 在下一层中,仅针对上一步骤选出的节点的子节点重复上述相似度计算和选择过程,直到抵达叶子节点(最底层的原始文本块)。
    5. 最后,将所有在遍历过程中选中的节点所对应的文本合并起来,形成针对查询请求的检索上下文。
  2. 折叠树方法
    1. 折叠树方法不同于逐层遍历,它采取了一种更为综合的方式来评估树中所有节点的相关性。
    2. 在这种方法中,不是分别考虑每一层,而是将整棵树的所有节点视为一个整体集合,一次性计算查询向量与所有节点(不论在哪一层)的相似度。
    3. 基于这些相似度得分,不分层级地选择与查询最为匹配的节点。
    4. 由于跳过了逐层筛选的过程,这种方法可能会更快地收敛到最有价值的信息,但也可能丧失了通过层次结构进行细粒度控制的优势。

通过这两种查询策略,RAPTOR可以根据应用场景和查询复杂度的需求,灵活地选择适合的检索路径,在RAPTER树的多层抽象表示中快速定位所需信息,从而在处理复杂问题和长文档检索时展现出卓越的性能。

整个流程很简洁,方法也很直观。其中比较重要的环节不言而喻:聚类。

RAPTOR系统在构建检索树的过程中采用了软聚类技术,让每个文本节点能够同时属于多个聚类,这充分考虑到实际文本数据中,单一文本片段常常含有与多种主题相关的多元信息,因此允许节点出现在多个摘要中。具体的聚类算法选用的是基于高斯混合模型(GMM)的方法,它具有灵活性,并且在一个概率框架下运行,假设数据点由多个高斯分布的混合生成。

为了克服高维文本嵌入空间中距离度量可能导致相似性估计不准确的问题,研究人员采用了统一流形近似和投影(UMAP),这是一种适用于高维数据降维的流形学习技术。通过调整UMAP中的最近邻数量参数,算法首先识别全局聚类,然后在这些全局聚类内部执行局部聚类,形成一个分层聚类结构,从而捕捉到文本数据之间从宽泛主题到具体细节的广泛联系。

在确定最优聚类数量时,使用了贝叶斯信息准则(BIC)。BIC不仅惩罚模型复杂度,还奖励拟合优度,依据BIC选择出来的聚类数目能够在平衡模型复杂性和数据拟合质量的基础上,有效地划分文本数据。一旦通过BIC得到最优簇的数量,接下来采用期望最大化(EM)算法来估计GMM的参数,包括各个高斯分布的均值、协方差矩阵以及混合权重。

尽管GMM中的高斯假设可能并不完美匹配文本数据的稀疏和偏斜分布特性,但实验观察显示,GMM在此情境下仍是一种有效的聚类工具。为进一步验证这一点,研究团队进行了消融研究,比较了GMM聚类与连续文本块直接摘要的效果,并在附录B中提供了详细对比结果。

总结

对于查询,在不考虑性能和其他问题的条件下,最理想的块应该是文本中与查询最相关的那段话、几句话甚至一句话,类似抽取式的文本摘要。

以下是RAPTOR模型构建和检索过程中各个步骤的具体做法:

  • 文本分块与嵌入
    • 将原始文档划分为若干个文本块。
    • 使用预训练的BERT变种SBERT(multi-qa-mpnet-base-cos-v1)作为编码器,将每个文本块转换为固定维度的密集向量表示,这有助于保留文本块的语义和上下文一致性。
  • 层次聚类与摘要生成
    • 根据文本块的向量表示应用高斯混合模型(GMM)进行软聚类,允许单个文本块归属于多个聚类中心,体现了文本块内容通常与多个主题相关的特点。
    • 对于每个形成的聚类簇,使用大型语言模型进行摘要生成,产生对簇内文本内容的概括性描述。
    • 摘要文本再次被转换为向量表示,并进入下一个迭代循环,继续进行嵌入、聚类和摘要生成,直到无法进一步有效聚类为止。
  • 构建RAPTOR树
    • 这一系列嵌入、聚类和摘要操作形成了一个多层级的树状结构。其中,底层包含原始文本块及其向量表示,上层则是对下层节点内容的不断抽象和总结,直至达到最顶层根节点。
    • 在树的构建过程中,通过对不同参数(如局部和全局邻域数量)的调整以及使用贝叶斯信息准则(BIC)来确定最优聚类数目,确保算法既能捕获文本数据间的广泛关系,又能关注具体细节。
  • 检索策略
    • 树遍历检索:针对查询,从树的顶层开始,按层次逐级向下检索,基于查询向量与各节点的余弦相似度选取每层的top-k节点。这个过程是递归进行的,形成多个集合S1到Sd,最终将这些集合拼接起来以提供与查询相关的上下文信息。
    • 折叠树检索:另一种方式是将多层级的树结构“折叠”成单层,计算查询向量与所有节点的相似度,直接选择最高相似度的top-k节点。
  • 效率评估与优化
    • 对于RAPTOR树构建过程的计算效率,进行了实证研究,结果表明其时间和令牌消耗随着文档长度呈线性增长,证明了该系统在普通硬件上的可行性和可扩展性。

总之,RAPTOR模型通过递归地嵌入、聚类和生成摘要来创建一个多层树结构,然后在推理时利用这个结构来进行多层次、灵活且具有上下文敏感性的检索,从而有效地提升了检索增强语言模型在处理长篇文档和复杂推理任务时的表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习之父Richard Sutton:通往AGI的另一种可能

2019年,强化学习之父、阿尔伯塔大学教授Richard Sutton发表了后来被AI领域奉为经典的The Bitter lesson,这也是OpenAI研究员的必读文章。 在这篇文章中,Richard指出,过去 70 年来,AI 研究的一大教训是过于重视人类既有…

文件包含一-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

演示案例: 文件包含-原理&分类&利用&修复黑盒利用-VULWEB-有无包含文件白盒利用-CTFSHOW-伪协议玩法 #文件包含-原理&分类&利用&修复 1、原理 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时&#xff0c…

Webman全局异常捕获处理

最近在使用webman这个框架做项目开发,涉及到需要统一处理异常捕获。由于官网给的并不详细,于是自己实现了一下全局异常处理类。 一、配置效果 例如:我要在项目中统一返回json 格式数据,并不想在业务层写try,catch逻辑。 或者在业务…

下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法

下载安装Anaconda 首先需要下载Anaconda,可以到官网Anaconda官网或者这里提供一个镜像网站去下载anaconda镜像网站 安装步骤可参考该文章:Anaconda安装步骤,本篇不再赘述 注意环境变量的配置,安装好Anaconda之后一定要在环境变量…

使用POI以OLE对象的形式向excel中插入附件(pdf为例)

前言: 最近在使用easyExcel操作excel文件时,一直想找到一个方法可以往excel中填充附件,但是目前只发现POI可以插入附件,于是将方法记录如下: 实现: 这个方法主要是使用 Apache POI 的 HSSFWorkbook 类来…

【Java初阶(四)】数组的定义和使用

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1.前言2.数组的概念2.1数组的初始化2.2数组的使用2.2.1数组元素访问2.2.2遍历数组 3.数组是引用类型3.1实例3.2 认识null 4.数组的应用4.1 二分查找4.2…

AQS源码分析

前言 AbstractQueuedSynchronizer是抽象同步队列,其是实现同步机器的基础组件,并发包中的锁的底层就是使用AQS实现的。AQS中 维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞…

MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)

MySQL面试题--事务https://mp.csdn.net/mp_blog/creation/editor/136947072 MySQL面试题--MySQL内部技术架构https://blog.csdn.net/Timebro/article/details/136946046?spm1001.2014.3001.5501 MySQL面试题--最全面-索引https://blog.csdn.net/Timebro/article/details/136…

计算机实体安全

计算机实体安全定义: 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件:环境条件,使用条件&#xff0…

软件高级:软件架构评估-基于场景的评估方法

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Android Studio 和 lombok 的版本适配、gradle依赖配置、插件安装及使用

文章目录 Intro注意事项Android Studio 和 lombok 的版本选择及下载下载链接 在 Android Studio 中安装一次 lombok 插件在每个 gradle 项目中添加 lombok 相关依赖(如要用到)使用ref Intro 用惯了 JavaMavenIDEA 开发后端服务,突然有一天用 JavaGradleAndroidStud…

C# WPF编程-事件

C# WPF编程-路由事件 路由事件概要路由事件的三种方式 WPF事件WPF最重要的5类事件:生命周期事件 鼠标事件键盘事件多点触控输入原始触控 路由事件概要 路由事件是具有更强传播能力的事件,它们可在元素树中向上冒泡和向下隧道传播,并沿着传播…

端口的学习

端口是什么口?【网络常识3】_哔哩哔哩_bilibili 简化后的数据包: 软件和端口是1对多的关系。 http默认端口是80 https默认端口是443

智慧工地解决方案,智慧工地项目管理系统源码,支持大屏端、PC端、手机端、平板端

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最线实现项目对人、机、料、法、环的全…

神级工具之git (一): git 基操

一切都从:Git User Manual开始,或者中文版的Git中文手册 核心概念 工作区 工作区我们可见的,可以进行修改的目录树。我们可以在目录树中进行文件的查看,修改。通常我们会使用一个神级编辑器Vim。我给她取了个名字,就…

2024年C语言最新经典面试题汇总(1-10)

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程…

【测试开发学习历程】认识Python + 安装Python

1 认识 Python 人生苦短,我用 Python —— Life is short, I use Python 1.1 Python 的起源 Python 的创始人为吉多范罗苏姆(Guido van Rossum),江湖人称“龟叔” 1989 年的圣诞节期间,吉多范罗苏姆为了在荷兰首都阿姆…

mac 安装 nvm 【真解决问题】

前提 没有node环境已有git 下载 我用的gitee极速下载 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags配置 1. 配置变量 在用户的目录下新增文件 .zshrc export NVM_DIR"$HOME/…

unity学习(67)——控制器Joystick Pack方向

1.轮盘直接复制一个拖到右边就ok了,轮盘上是有脚本的。(只复制) 2.上面的显示窗也可以复制,但是要绑定对应的轮盘(unity中修改变量),显示窗上是有脚本的。(复制改变量) 3…

康奋威科技邀您到场参观2024长三角快递物流展

参展企业介绍 杭州康奋威科技股份有限公司创立于2005年,由国家“万人计划”专家任天挺先生创立并担任法人,是一家专业从事智能装备研发与制造的国家级高新技术企业。专注于自动化控制、机械设计、信息化方面的技术研究,主要为太阳能光伏、智…