如何引入chunk层级优化RAG性能:从树结构RAPTOR到GEM-RAG加权图方案解读

最近看到一张图,关于现有多模态大模型进展,其一般构造中设计两个预训练组件:大型语言模型(LLM backbone):为VLM提供语言理解能力的组件。视觉编码器(Vision encoder):为VLM提供图像理解能力的组件。

《Molmo and PixMo: Open Weights and Open Data for State-of-the-Art Multimodal Models》 ,https://arxiv.org/html/2409.17146v1,https://arxiv.org/abs/2409.17146,里面提到一张图,对不同VLMs在开放性方面的差异进行对比,可以品一品。

从中可以看到不同VLMs在开放性方面的差异,以及它们是否能够不依赖专有技术完全独立地存在和复现。这个大模型的开放性的定义很有趣,开放性是基于两个属性来描述的:开放权重(Open weights),表示模型的权重参数是否可以公开获取;开放数据和代码(Open data and code),表示模型的训练数据和代码是否可以公开获取。因此,可以从模型是否允许公开访问其权重、数据和代码几个方面进行对比。

本文内容较多,讲多个事情,一个是推荐一个很有趣的大模型矩阵运算示意图,对入门者理解原理很有帮助,可以看看。

另几个是讲讲RAG关于文本组织的前沿方案,基于树跟基于图地方案,实验结果表示有一些提升,供大家一起参考并思考。

一、推荐一个很有趣的大模型矩阵运算示意图

这个有趣,通过excel熟悉下大模型矩阵运算,https://github.com/ImagineAILab/ai-by-hand-excel,其中包括多个步骤:

Basic,包括:Softmax、LeakyReLU

Advanced,包括:Backpropagation、Recurrent Neural Network (RNN)、Transformer、Self-Attention、Mamba

后续也有其他的会放出:Multi Layer Perceptron (MLP)、Generative Adversarial Network (GAN)、Autoencoder (AE)、Variational Autoencoder (VAE)、Residual Network (ResNet)、U-Net、CLIP

其中几个示意图很有趣。

1)Transformer

2)softmax

3)Self-Attention

4)RNN

5)Mamba

6)LeakyReLU

二、GEM-RAG方案-基于树结构RAPTOR方案再回顾

关于RAG进展,为了解决之前chunk平铺的问题,对文本进行层次化组织的方法受到关注,如RAPTOR《Raptor: Recursive abstractive processing for tree-organized retrieval》(https://arxiv.org/abs/2401.18059)

这个工作通过它们的向量嵌入递归地对文本块进行聚类,并生成这些聚类的文本摘要,从下往上构建一棵树。聚在一起的节点是兄弟节点;父节点包含该聚类的文本摘要。

1、构图部分

整个构建过程的目的是为了创建一个能够表示文本在不同层次上的结构,从而在不同的抽象层次上有效地回答各种问题。RAPTOR通过递归地聚类和总结,生成了一个分层的树形结构,该结构能够在处理查询时加载代表文本不同层次的文本块。

1)分割文本:将检索语料库分割成长度为100个token的短文本块,这与一些传统的检索增强技术相似。如果一个句子超过100-token的限制,它会完整地移动到下一个文本块,这样做是为了保持每个文本块内文本的上下文和语义连贯性。

2)嵌入文本块:使用基于BERT的编码器(如SBERT)对这些文本块进行嵌入,形成树结构的叶节点。

3)聚类算法:为了将相似的文本块分组,使用聚类算法。聚类后,使用语言模型对这些分组的文本进行总结。其中使用软聚类,允许节点属于多个聚类。使用UMAP(Uniform Manifold Approximation and Projection)进行降维,以解决高维空间中距离度量可能表现不佳的问题,并通过贝叶斯信息准则(BIC)来确定最佳聚类数目。

4)重复嵌入和聚类:对聚类后的文本总结再次进行嵌入,然后重复聚类和总结的过程,直到无法进一步聚类为止,从而形成从底层向上的分层树结构。

5)构建树:这个过程从叶节点层开始,通过递归地聚类和总结形成更高层次的节点,直到达到根节点。并使用语言模型(如gpt-3.5-turbo)对每个聚类中的节点进行总结,将大量文本转换成简洁、连贯的总结。

2、检索实现

可以回顾下其检索的实现

“Querying” 部分主要介绍了两种通过RAPTOR树结构进行检索的方法:树遍历(tree traversal)和折叠树(collapsed tree),折叠树方法通常表现更好,因为它提供了更大的灵活性,能够根据问题的需要检索到正确粒度的信息。树遍历方法虽然也能工作,但可能不如折叠树方法那样灵活和有效。

1)树遍历(Tree Traversal)

树遍历方法从树的最顶层(根节点层)开始,逐层向下进行,每一层都选择与查询向量最相关的节点。

具体步骤如下:

  1. 开始于根层:计算查询向量与根层所有节点嵌入的余弦相似度。

  2. 选择顶层节点:基于余弦相似度得分,选择前k个最相似的节点,形成节点集合 ( S_1 )。

  3. 逐层选择:对 ( S_1 ) 中的每个节点,考虑其子节点,并计算查询向量与这些子节点嵌入的余弦相似度。

  4. 形成新节点集合:从子节点中选择余弦相似度得分最高的k个节点,形成新的节点集合 ( S_2 )。

  5. 重复过程:重复这一过程,直到达到叶节点层。

  6. 连接结果:将所有选择的节点集合(从 ( S_1 ) 到 ( S_d ))连接起来,形成对查询的上下文信息。

通过调整遍历的深度 ( d ) 和每层选择的节点数 ( k ),树遍历方法可以控制检索信息的详细程度和广度。

2)折叠树(Collapsed Tree)方法

折叠树方法提供了一种更简单的检索信息方式,它将多层树结构折叠成单层,从而在所有层上同时考虑节点。

在这里插入图片描述

具体步骤如下:

  1. 折叠树:将整个RAPTOR树折叠成单层,形成一个新的节点集合 ( C ),包含原树的所有层的节点。

  2. 计算相似度:计算查询向量与折叠后集合 ( C ) 中所有节点嵌入的余弦相似度。

  3. 选择节点:选择余弦相似度得分最高的k个节点,直到达到预设的最大token数,确保不超过模型的输入限制。

折叠树方法的优点在于它提供了更大的灵活性,通过同时搜索所有节点,可以检索到适合特定问题的粒度信息。然而,这种方法需要对树中所有节点执行余弦相似度搜索,这可能需要更高效的相似度搜索库,如FAISS。

三、GEM-RAG实现思路-基于加权图的方案

紧接着,我们来看下基于图地方案,GEM-RAG: 图形主成分记忆增强检索生成,《GEM-RAG: Graphical Eigen Memories For Retrieval Augmented Generation》:https://arxiv.org/pdf/2409.15566,介绍了一种名为GEM-RAG(Graphical Eigen Memories for Retrieval Augmented Generation)的新方法,

该方案旨在通过改进大型语言模型(LLMs)的记忆编码、存储和检索能力,来提升其作为人工智能代理的操作能力,并使其能够更好地适应特定领域,其设计灵感来自人类如何基于信息的相关性和实用性来编码和检索信息

先说具体结论,GEM-RAG 方法虽然在提高性能方面表现出色,但在实际应用中需要考虑其计算成本和复杂度,并根据具体任务需求进行适当的调整和优化。GEM-RAG方法的优势和可能的局限性可做个总结:

从计算复杂度上,GEM-RAG 在构建记忆图时采用了谱分解技术,其计算复杂度为 O(n^3),其中 n 是节点的数量。这意味着随着节点数量的增加,所需的计算资源会显著增加。

成本上,生成实用问题需要调用大型语言模型(LLM),这可能涉及显著的计算成本或经济成本,具体取决于数据集的大小和每个节点生成的实用问题的数量。

预处理上,虽然图的构建是预先计算的,因此在大多数情况下额外的成本是可以接受的,但是在数据更新频繁的场景下,可能需要频繁地重新构建图,这会带来额外的开销。

权衡调整方面,GEM-RAG 涉及的权衡,如生成实用问题的数量和使用的谱成分的数量,需要针对特定任务进行调整。例如,在 QuALITY 数据集的实验中,发现使用两个谱成分和五个实用问题可以获得最佳性能。

灵活性上,GEM-RAG 可以适应不同的任务需求,通过调整超参数来优化性能。

独立性上,生成的图形特征记忆(GEM)不仅是用于 RAG 的方法,还可以作为一个独立的工具,用于任何 LLM 的 QA 工作和数据可视化。

总的来说,

再看GEM的具体实现方式:

下图提供了GEM-RAG(Graphical Eigen Memories for Retrieval Augmented Generation)构建图和检索流程的概览,GEM-RAG 图构建和检索流程的概览:

给定一个文本语料库

文本首先被分组成文本块。然后GEM-RAG使用大型语言模型(LLM)为每个文本块生成实用问题,这里的实用问题指的是可以利用该文本块作为上下文来回答问题。接下来,GEM-RAG利用这些实用问题及其嵌入向量构建一个加权图。然后,使用图的谱分解生成摘要节点,用特征向量表示文本的不同正交模式或“特征主题”。对于检索,GEM-RAG 嵌入问题或提示,并在图中搜索最优的节点或上下文以返回

1、图构建

1)文本分块:给定一个文本语料库,首先将其分成多个文本块,文本分块是RAG中的标准做法,将感兴趣的文本语料库C分割成块,{CHUNK1…CHUNKn},其中每个块CHUNKi包含一些T个标记。

在实践中,文本可以通过字符数或标记数来分割。对于一个文本语料库,首先将文本分成n个块,每个块是T个标记长,n=Nc,其中N是文本中的总标记数。

2)生成实用问题:对于每个文本块,使用大型语言模型(LLM)生成一些实用问题。实用问题是指可以用给定文本块作为上下文来回答的问题。

给定每个文本CHUNKi,提示一个LLM生成一些m个实用问题。这可以由一个函数Q表示,它接受一个文本块和整数m,并生成m个实用问题。形式上,给定CHUNKi,计算Q(CHUNKi,m)给出一组实用问题{qi1,qi2,…,qim}。

此外,还量化每个实用问题彼此之间或与提示的相似性

3)构建加权完全图:使用这些实用问题及其嵌入向量来构建一个加权图。图中的每个节点代表一个文本块,边的权重基于实用问题的相似性。

给定每个文本块的嵌入,以及每个块对应的实用问题及其嵌入,然后生成完全连接的图。对于每一对节点/块i,j,考虑节点i的所有实用问题嵌入与节点j的基础文本嵌入之间的相似性度量之和

更形式化地,设G=(N,E)是记忆图。让节点由以下给出:N={CHUNK1,CHUNK2,…,CHUNKK},其中每个节点t有实用问题Qt={qt1,qt2,…,qtm},和基础文本嵌入vt。

然后,对于(t,v)∈N×N,并且对于每个i∈{1,2,…,m},生成一个边在t和v之间,权重为∑mi=0SIM(vti,vv)。可以使用任何函数来计算相似性,实际上考虑标准的余弦相似性,即,SIM(a,b)=a·b/||a||||b||。

4)主题总结:通过图的谱分解生成摘要节点。谱分解的结果是一组特征向量,每个特征向量代表了文本的不同正交模式或称为“特征主题”(eigenthemes)。

为了构建一个编码系统来编码更高层次的信息,将这个问题表述为一个随机游走或谱分解问题。

直观地说,在这种情况下,每个特征值及其对应的特征向量揭示了图中的一个不同的“主题”或概念维度。通过总结每个特征向量分量的顶部组件节点,使用LLM,可以了解图中最显著的关系和概念群集。

这块比较有趣,可以详细看看:

更具体地说,设S=(sij)n×n为图的相似性矩阵,其中sij是节点i的每个实用问题与节点j之间的mSIM值的总权重。

通过将每个sij附加到加权边eij,可以将相似性矩阵S映射到记忆图G上。因此,可以通过分析G的属性和行为来更好地理解文档中不同文本片段之间的关系。

由于不同文档具有不同的连通性和节点中心性,谱也将在不同的尺度上。为了更好地量化每个节点的影响力而不考虑度偏差,将S转换为归一化的图拉普拉斯L的变体,其中L=D(-1/2)(S-I)D(-1/2),D=diag(di)是度矩阵,I是单位矩阵。

然后通过解L⃗x=λ⃗x来进行谱分解。随着结果的特征值λ1,λ2,…,λn按其大小的非增顺序排列。相应的特征向量⃗x1,⃗x2,…,⃗xn表示主题。然后,对于每个特征向量⃗xk,选择顶部的e个分量,xk1,xk2,…,xke,代表第k个主题的最重要节点。

然后,提示一个LLM,给定与xk1,xk2,…,xke相关的文本段落,来总结文本,总结高层次的信息。

随着产生的总结文本,将其作为新节点引入到图中。最后,产生实用问题的嵌入,实用问题的嵌入,并且按照先前描述的方式将其连接到图中的每个其他节点。

5)检索:对于给定的问题或提示,GEM-RAG首先嵌入问题或提示,然后在图中搜索最优的节点或上下文以返回。

2、检索部分

检索部分很直接,大致流程为:将问题或提示嵌入到向量空间中;在构建好的图(GEM)中搜索与嵌入的问题或提示最相似的实用问题。从与实用问题最相关的节点开始,执行最佳优先搜索,以检索一组节点作为上下文。最后,返回这些节点作为问题的答案的上下文。

最后效果还不错,如下:

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值