微信扫码
与创始人交个朋友
我要投稿
今天是2024年9月29日,星期日,北京,天气晴。
最近看到一张图,关于现有多模态大模型进展,其一般构造中设计两个预训练组件:大型语言模型(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
关于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)
树遍历方法从树的最顶层(根节点层)开始,逐层向下进行,每一层都选择与查询向量最相关的节点。
具体步骤如下:
通过调整遍历的深度 ( d ) 和每层选择的节点数 ( k ),树遍历方法可以控制检索信息的详细程度和广度。
2)折叠树(Collapsed Tree)方法
折叠树方法提供了一种更简单的检索信息方式,它将多层树结构折叠成单层,从而在所有层上同时考虑节点。
具体步骤如下:
折叠树方法的优点在于它提供了更大的灵活性,通过同时搜索所有节点,可以检索到适合特定问题的粒度信息。然而,这种方法需要对树中所有节点执行余弦相似度搜索,这可能需要更高效的相似度搜索库,如FAISS。
紧接着,我们来看下基于图地方案,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是文本中的总标记数。
给定每个文本CHUNKi,提示一个LLM生成一些m个实用问题。这可以由一个函数Q表示,它接受一个文本块和整数m,并生成m个实用问题。形式上,给定CHUNKi,计算Q(CHUNKi,m)给出一组实用问题{qi1,qi2,...,qim}。
此外,还量化每个实用问题彼此之间或与提示的相似性
给定每个文本块的嵌入,以及每个块对应的实用问题及其嵌入,然后生成完全连接的图。对于每一对节点/块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)中搜索与嵌入的问题或提示最相似的实用问题。从与实用问题最相关的节点开始,执行最佳优先搜索,以检索一组节点作为上下文。最后,返回这些节点作为问题的答案的上下文。最后效果还不错,如下:
本文主要回顾了GEM-RAG、基于树结构RAPTOR方案,并推荐了一个很有趣的大模型矩阵运算示意图,这些都对我们理解其技术细节有帮助。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-23
FastRAG半结构化RAG实现思路及OpenAI O1-long COT蒸馏路线思考
2024-11-23
检索增强生成(RAG):解密AI如何融合记忆与搜索
2024-11-23
如何提高RAG系统准确率?12大常见痛点及巧妙解!
2024-11-23
RAG 2.0性能提升:优化索引与召回机制的策略与实践
2024-11-22
RAG技术在实际应用中的挑战与解决方案
2024-11-22
从普通RAG到RAPTOR,10个最新的RAG框架
2024-11-22
如何使用 RAG 提高 LLM 成绩
2024-11-21
提升RAG性能的全攻略:优化检索增强生成系统的策略大揭秘 | 深度好文
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21