【RAG】RAG性能提升之路-RAPTOR:一种构建递归文档树的增强检索方法

背景

检索增强型语言模型(RALMs)在处理需要不断更新的知识和大量信息的文档时确实展现出了优势。然而,现有的方法在处理长篇文档时存在局限性,主要是因为它们通常只能检索较短的文本片段,这限制了对整体文档上下文的全面理解。在NLP中,长篇文档的检索和理解一直是一个挑战,因为传统检索方法往往难以有效处理长文档中的复杂结构和信息,可能导致检索结果不准确或遗漏关键信息。

为了解决这一问题,RAPTOR模型提出了一种创新的策略。它**通过递归地进行文本片段的向量化、聚类和摘要生成,构建了一个树状索引结构。**这种结构不仅捕捉了文档的高层次主题,还保留了低层次的细节,允许基于语义相似性而非仅仅是文本顺序对节点进行分组。这样的树状结构使得RAPTOR能够在不同的抽象层次上加载文档的上下文片段,从而有效地回答不同层次的问题。

方法

一、RAPTOR 树的构建

RAPTOR 树的构建是该模型的核心部分,通过递归的方式创建了一个多层次的树状结构,便于更好地理解和检索长文本信息。以下是 RAPTOR 树构建的步骤:

  1. 文本分块
    RAPTOR 首先将长文本分割成较短的、连续的文本块。每块文本的长度被限制在100个标记(tokens)以内。如果一个句子的标记数超过这个限制,它会完整地被移动到下一个文本块中,以保持语义的连贯性。

  2. 文本向量化
    使用SBERT(multi-qa-mpnet-base-cos-v1)对每个文本块进行embedding,生成文本的向量表示,这些嵌入向量将形成树结构的叶节点。

  3. 文本聚类
    通过文本聚类算法,将语义相似的文本块分组。RAPTOR 使用软聚类方法,允许文本块根据其语义相关性属于多个不同的聚类。聚类算法基于高斯混合模型(GMMs),并采用均匀流形近似和**投影(UMAP)**技术进行降维处理,以更好地捕捉文本数据的局部和全局结构。

    • 软聚类(Soft Clustering):与传统硬聚类不同,软聚类允许文本片段属于多个聚类,增加了灵活性。

    • 高斯混合模型(Gaussian Mixture Models, GMMs): 假设数据点是从多个高斯分布的混合中生成的。
      对于给定的文本向量 ( x ),其属于第 ( k ) 个高斯分布的概率表示为:
      P ( x ∣ k ) = N ( x ; μ k , Σ k ) P(x|k) = \mathcal{N}(x; \mu_k, \Sigma_k) P(xk)=N(x;μk,Σk)
      其中 N \mathcal{N} N 是多元高斯分布, μ k \mu_k μk是均值向量, Σ k \Sigma_k Σk 是协方差矩阵。
      整体概率分布是一个加权组合:
      P ( x ) = ∑ k = 1 K π k N ( x ; μ k , Σ k ) P(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x; \mu_k, \Sigma_k) P(x)=k=1KπkN(x;μk,Σk)

      π k \pi_k πk表示第 k k k 个高斯分布的混合权重。

    • 降维处理(Dimensionality Reduction)
      由于向量嵌入的高维性,使用传统的距离度量可能在高维空间中表现不佳。采用 UMAP技术进行降维。

    • 层次聚类结构
      UMAP 中的最近邻参数 n 邻居决定了局部和全局结构的平衡。算法通过变化 n 邻居来创建层次聚类结构,首先识别全局聚类,然后在这些全局聚类内部执行局部聚类。

    • 模型选择(Model Selection)
      使用贝叶斯信息准则(Bayesian Information Criterion, BIC)来确定最优的聚类数量。

      • BIC 公式为:
        BIC = ln ⁡ ( N ) ⋅ k − 2 ln ⁡ ( L ^ ) \text{BIC} = \ln(N) \cdot k - 2 \ln(\hat{L}) BIC=ln(N)k2ln(L^)
        其中 N N N 是文本片段(或数据点)的数量, k k k 是模型参数的数量, L ^ \hat{L} L^ 是模型似然函数的最大值。

    小结:通过聚类算法,RAPTOR 能够有效地组织文本片段,形成具有不同层次的树状结构,从而在检索时能够提供更准确和全面的上下文信息。

  4. 文本摘要生成
    对于每个聚类,使用GPT-3.5生成该聚类的文本摘要。这些摘要随后被重新嵌入,形成树的上一层节点。

    GPT使用的文本摘要prompt如下:

  5. 递归构建
    上述过程(3 聚类和 4 摘要生成)递归地重复执行,直到无法进一步聚类或达到预设的层数限制,从而构建出一个从底向上的多层次树状结构。在这个结构中,父节点包含子节点的文本摘要,而子节点是原始文本块或下一级的摘要。

  1. 树的深度和广度
    • 树的深度取决于文本的复杂性和长度,以及聚类过程何时变得不可行。
    • 树的广度则取决于每个聚类中文本块的数量。

二、树的检索

构建好的 RAPTOR 树可以在推理时用于检索。有两种检索策略:树遍历和折叠树。树遍历逐层检索树,而折叠树则将所有层展平为单层进行检索。


上图展示了树遍历折叠树检索机制的示意图。树遍历从树的根级别开始,根据与查询向量的余弦相似度检索顶层的 top-k (这里为 top-1) 节点。在每一层,它根据与查询向量的余弦相似度从上一层的 top-k 节点的子节点中检索 top-k 节点。这个过程一直重复,直到达到叶节点。最后,将所有选定节点的文本连接起来形成检索到的上下文。折叠树方法将整个树压缩成单一层,然后根据与查询向量的余弦相似度评估所有层的节点,直到达到设定阈值。

通过树检索信息的例子:

树遍历算法

  1. 初始化:从树的最底层(即叶子节点层)开始。
  2. 相似度计算:对于当前层中的每个节点,计算它与查询向量的余弦相似度。
  3. 选择Top-k节点:根据余弦相似度,选择每个层中与查询最相关的k个节点。
  4. 递归访问子节点:对于选定的节点,查看其子节点,并重复步骤2和3,直到达到树的根节点。
  5. 结果整合:将所有选定的节点文本进行拼接,形成检索到的上下文。
折叠树算法

  1. 树的扁平化:首先,将整个树结构扁平化为一个单一的节点集合,忽略节点之间的层级关系。
  2. 相似度计算:对于扁平化后的每个节点,计算它与查询向量的余弦相似度。
  3. 选择Top-k节点:根据余弦相似度,选择与查询最相关的k个节点。
  4. 限制Token数量:在添加节点到结果集中时,确保不超过模型输入限制的最大Token数量。
  5. 结果拼接:将选择的节点文本进行拼接,形成检索到的上下文。

小结:通过这种递归构建的树状结构,RAPTOR 能够将长篇文档分解成不同层次的摘要,从而在检索时提供更准确和全面的上下文信息,这对于处理需要综合多部分信息的复杂查询尤为重要。

实验

相关数据集实验

检索效率

RAPTOR 树构建成本与每个数据集的文档长度成线性比例。

对于最大长度为80,000个Tokens的文档,RAPTOR树的构建时间确实与文档长度成正比例关系。这意味着无论文档的实际内容如何,构建树所需的时间都会随着文档长度的增加而线性增加。
这种线性关系表明RAPTOR模型具有良好的可扩展性,能够高效地处理不同长度的文档。这一点非常重要,因为它确保了即使是较长的文档,RAPTOR也能够在合理的时间内完成索引结构的构建。

简易使用

设置LLM

import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"from raptor import RetrievalAugmentation# Initialize with default configuration. For advanced configurations, check the documentation. [WIP]
RA = RetrievalAugmentation()

创建文档树

with open('sample.txt', 'r') as file:text = file.read()
RA.add_documents(text)

进行问答

question = "How did Cinderella reach her happy ending?"
answer = RA.answer_question(question=question)
print("Answer: ", answer)

保存文档树

SAVE_PATH = "demo/cinderella"
RA.save(SAVE_PATH)

加载文档树问答

RA = RetrievalAugmentation(tree=SAVE_PATH)
answer = RA.answer_question(question=question)

总结

综上所述,RAPTOR模型通过其递归抽象处理方法,有效地解决了现有方法在长篇文档检索中的局限。通过构建树状索引结构,RAPTOR不仅提升了对长篇文档的理解,还增强了检索的准确性和效率,为处理知识密集型任务提供了新的可能。

参考文献

  • paper:RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL,https://arxiv.org/pdf/2401.18059
  • code:https://github.com/parthsarthi03/raptor

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

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

相关文章

云原生应用开发培训,开启云计算时代的新征程

在云计算时代,云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域,我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布(CI/CD&#…

22 CRT工具安装流程

22 CRT工具安装流程 SecureCRT 9.5 说明书 SecureCRT 9.5是一款由VanDyke Software开发的终端仿真程序。它为Windows、Mac和Linux操作系统提供了强大的SSH(Secure Shell)客户端功能。SecureCRT 9.5提供了对Telnet、RLogin、Serial和X.509等协议的支持&…

域内攻击 ----> DCSync

其实严格意义上来说DCSync这个技术,并不是一种横向得技术,而是更偏向于权限维持吧! 但是其实也是可以用来横向(配合NTLM Realy),如果不牵强说得话! 那么下面,我们就来看看这个DCSyn…

SAP Web IDE 安装使用

For training SAP Web IDE 是基于 Eclipse 内核的在线开发 IDE,可以使用在线的试用版本,但服务器在德国,访问的网速特别慢。也可以使用 Personal Edition,在本机启动和编写代码。 打开官网下载WEBIDE工具包,包含 Tri…

CP AUTOSAR标准中文文档链接索引(更新中)

AUTOSAR标准的核心组件包括通信、诊断、安全等,这些组件通过模块化结构进行组织。系统被划分为多个模块,每个模块负责特定的功能。模块之间通过接口进行通信,接口定义了模块之间的交互规则。AUTOSAR标准支持模块的配置,可以根据不…

html实现粘贴excel数据,在页面表格中复制

录入数据时&#xff0c;有时候需要把excel中的数据一条条粘贴到页面中&#xff0c;当数据量过多时&#xff0c;这种操作很令人崩溃。本篇文章实现了从excel复制好多行数据后,可在页面粘贴的功能 具体实现代码 <!DOCTYPE html> <html lang"en"> <head…

KEIL5.39 5.40 fromelf 不能生成HEX bug

使用AC6 编译,只要勾选了生成HEX。 结果报如下错误 暂时没有好的解决办法 1.替换法 2.在编译完后用命令生成HEX

怎么提高音频的播放速度?提高音频播放速度的四种方法

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是在处理音频文件时经常需要面对的问题。音频播放速度的调整可以带来多种应用场景和效果&#xff0c;例如加快语音记录的回放速度以节省时间、提高听力理解和语速训练的效果等。然而&#xff0c;对于不同的音频播放工具和…

wms海外仓系统什么价格?中小海外仓怎么选到高性价比wms系统

随着海外仓业务复杂度的逐渐提升&#xff0c;现在中小海外仓对wms海外仓系统的需求也越来越强烈。但是对于预算有限的中小海外仓企业来说&#xff0c;怎么才能选到性价比比较高的wms海外仓系统呢&#xff1f; 今天我们就来聊一下这个问题&#xff0c;希望对有类似需求的海外仓…

ZnO电阻片在低电场区域的泄漏电流及其电阻的负温度系数

在低电场区域,流过ZnO非线性电阻的泄漏电流小于1mA.泄漏电流不仅与施加的电压幅值有关,而且与温度高低有关。图2.6表示温度对泄漏电流的影响,温度越高,电子在电场作用下定向的运动就越激烈,导致泄漏电流增大。因此温度升高将导致电阳值下降,即ZnO 电阻呈现负温度特性。 一般以…

二开版视频CMS完整运营源码/新版漂亮APP手机模板/集成员分销功能等

一个二开的影视CMS&#xff0c;直接上传源码至网站根目录&#xff0c;访问网站域名即可安装。 测试环境&#xff1a;Nginx 1.20.1—MySQL 5.6.50–PHP-7.2&#xff08;安装拓展/fileinfo&#xff09; 上传源码&#xff0c;访问域名直接安装 后台地址&#xff1a;域名/MDadmi…

DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

2.nginx常用命令

使用nginx命令需要进入nginx目录里面执行。 /usr/local/nginx/sbin/ 查看nginx的版本号 启动nginx ./nginx 关闭nginx ./nginx -s stop 查看nginx的是否运行的命令 重新加载nginx 针对配置目录中配置文件nginx.cnf修改后需要重新加载 /usr/local/nginx/conf/nginx.cnf …

易于上手的bs4,帮助开发者从复杂的网页结构中提取有价值的数据

先来看一段bs4的应用实例&#xff1a; 结果输出如下&#xff1a; 代码逐行解释如下&#xff1a; 1. 首先&#xff0c;我们导入了re模块和BeautifulSoup类。 2. 然后&#xff0c;我们定义了一个包含多个链接的HTML文档字符串html_doc。 3. 接着&#xff0c;我们创建了一个Beauti…

pytest配置文件配置并通过allure生成报告

之前已经学习了使用pytestrequests实现各种方式的调用和一些脚本的执行&#xff0c;今天来学习下如何使用pytest.ini配置文件来管理用例的执行以及如何使用allure生成测试报告。 1.pytest.ini文件配置 在项目目录下新建pytest.ini文件&#xff0c;然后进行配置&#xff0c;pyt…

MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)

目录 前言1. 授予权限2. 撤销权限3. 查询权限4. Demo 前言 公司内部的数据库权限一般针对不同人员有不同的权限分配&#xff0c;而不都统一给一个root权限 1. 授予权限 授予用户权限的基本命令是GRANT 可以授予的权限种类很多&#xff0c;涵盖从数据库和表级别到列和存储过…

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

使用adb通过wifi连接手机

1&#xff0c;手机打开开发者模式&#xff0c;打开无线调试 2&#xff0c;命令行使用adb命令配对&#xff1a; adb pair 192.168.0.102:40731 输入验证码&#xff1a;422859 3&#xff0c;连接设备&#xff1a; adb connect 192.168.0.102:36995 4&#xff0c;查看连接状态:…

Web后端开发(三层架构)

三层架构 controller &#xff1a;控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据。 service &#xff1a;业务逻辑层&#xff0c;处理具体的业务逻辑。 dao &#xff1a;数据访问层 (Data Access Object) &#xff08;持久层&#xf…

AGP4+ 打包运行闪退,AGP7+ 正常(has code but is marked native or abstract)

问题 安装应用&#xff0c;点击图标启动立马闪退&#xff01; 诡异的闪退&#xff1a;AGP4 打包运行闪退&#xff0c;AGP7 正常 unity 导出的 Android 日志两个主要点&#xff1a; com.android.boot.App 是 Android 的 application 子类&#xff0c;程序入口 java.lang.Class…