【RAG】浅尝基于多头注意力机制思想设计的Multi-Head RAG(多头RAG)

一、动机

现有RAG设计和评估方法,没有方案或评估方法明确针对具有多方面性的问题。下面解释一下多方面性的问题: "多方面性的问题"是指那些需要理解和整合多个不同领域或主题的知识和信息才能得到完整和准确回答的问题。这类问题的特点在于它们涉及的内容跨度广,可能包括但不限于以下几个方面:

  1. 多样性的主题:问题可能涉及多个不同的主题或领域,例如,一个关于历史事件的问题可能同时关联到政治、社会、经济和技术等多个方面。

  2. 复杂的关系:问题中的不同方面之间可能存在复杂的相互关系,需要对这些关系有深入的理解才能准确回答。

  3. 多源信息:为了回答这类问题,可能需要从多个不同的信息源或文档中检索和整合数据。

  4. 综合回答:需要对检索到的信息进行综合分析,以形成一个全面、准确的回答。

例如,考虑一个问题:“亚历山大大帝是如何影响现代汽车工业的?” 这个问题本身就是高度多方面性的,因为它涉及到古代历史(亚历山大大帝)和现代技术(汽车工业)。要准确回答这个问题,可能需要检索和整合关于亚历山大大帝的历史资料、关于汽车工业的发展史,以及两者之间可能存在的间接联系等多个方面的信息。MRAG的设计使其能够更好地处理这种类型的问题。

这类问题需要在单个查询中结合多个显著不同的方面,这在现有RAG方案中尚未得到解决。文章提出了MRAG,通过利用Transformer的多头注意力层的激活来解决上述问题,而不是使用传统的解码器层激活。作者认为,不同的注意力头可以捕获数据的不同方面,从而在不增加存储需求的情况下,提高对复杂多方面查询的检索准确性。

二、MRAG架构

2.1 解码器架构

在MRAG中,解码器的输入是一个由 n n n个token组成的文本块。解码器的输出是每个attention head对第 i i i个token x i x_i xi的输出。

  • 注意力头输出:
    对于第 i i i个token x i x_i xi,第h个attention head的输出定义为:
    head h ( x i ) = ∑ j w i j v h j \text{head}_h(x_i) = \sum_{j} w_{ij} v_{hj} headh(xi)=jwijvhj
    其中,权重 w i j w_{ij} wij 是通过softmax函数计算得到的:
    w i j = softmax ( q h i T k h j d k ) w_{ij} = \text{softmax} \left( \frac{q_{h_i}^T k_{hj}}{\sqrt{d_k}} \right) wij=softmax(dk qhiTkhj)
    这里, q h i q_{h_i} qhi 是与head h 相关联的可学习query向量, k h j k_{hj} khj 是第j个token的可学习key向量, v h j v_{hj} vhj是第j个token的可学习value向量。 d k d_k dk是key向量的维度,用于softmax的缩放,防止梯度消失或爆炸。

  • 多头注意力输出:
    所有attention head的输出被合并,形成第 i i i个token的多头注意力输出 m u l t i − h e a d ( x i ) multi-head(x_i) multihead(xi)
    multi-head ( x i ) = W o concat ( head 1 ( x i ) , . . . , head h ( x i ) ) \text{multi-head}(x_i) = W_o \text{concat}(\text{head}_1(x_i), ..., \text{head}_h(x_i)) multi-head(xi)=Woconcat(head1(xi),...,headh(xi))
    这里, W o W_o Wo 是一个线性层,用于合并所有attention heads的输出结果。

  • 前馈层:
    多头注意力的输出随后会通过一个前馈神经网络层进一步处理。

2.2 标准RAG

在标准RAG中,嵌入是通过以下步骤生成的:

  • 使用最后一个decoder block的输出。
  • 对最后一个token x n x_n xn 应用feed-forward层。
  • 获取激活向量$ feed-forward(multi-head(x_n))$作为嵌入表示。

2.3 Multi-Head RAG

MRAG的关键思想是使用最后一个attention层生成的多个激活向量,而不是仅使用最后一个feed-forward解码器层的输出。具体来说:

  • 对于最后一个token x n x_n xn,生成一组嵌入 S S S
    S = { e k ∀ k } S = \{ e_k \forall k \} S={ekk}
    其中 e k e_k ek 是第 k k k个头在最后一个token x n x_n xn 上的输出。

  • 这种方法允许MRAG捕获输入数据的多个方面,因为不同的attention heads可能专注于数据的不同特征。

2.4 MRAG pipline

MRAG流程由两个主要部分组成:数据准备(Data Preparation)查询执行(Query Execution)。这两部分都依赖于一个数据存储(Data Store),它是一个向量数据库,用于存储文档或文本片段的嵌入表示。

2.4.1 数据准备(Data Preparation)

数据准备阶段的目的是填充数据存储,使其包含多方面MRAG文本嵌入及其对应的文档或文本片段。

  1. 嵌入模型:选择一个基于解码器的嵌入模型(Embedding Model),用于生成文本片段的多方面嵌入。
  2. 多方面嵌入:为每个文本片段创建多方面嵌入,每个嵌入代表文本的不同方面。
  3. 数据存储:将生成的多方面嵌入及其对应的文本片段存储在数据存储中。
2.4.2 查询执行(Query Execution)

查询执行阶段的目的是使用MRAG处理用户查询,并检索最相关的文档或文本片段。

  1. 查询嵌入:使用与数据准备阶段相同的嵌入模型为输入查询生成多方面嵌入。
  2. 检索策略:使用特殊的多方面检索策略,在数据存储中找到与查询最相关的嵌入及其对应的文本片段。
  3. 评估:可选地,使用特定的评估指标来衡量检索到的数据与多方面需求的匹配程度。
2.4.3 数据存储结构

MRAG在数据存储中以不同于标准RAG的方式存储数据。在MRAG中,每个多方面嵌入由多个单方面嵌入组成,每个单方面嵌入都指向原始文本片段。这意味着数据存储包含多个嵌入空间,每个空间捕获文本的不同方面。

2.4.4 检索策略

MRAG的检索策略包括以下步骤:

  1. 重要性评分:为所有嵌入空间分配重要性分数,以反映不同空间的相关性。

    该算法基于经验启发式方法,旨在评估每个注意力头的相关性。 a i a_i ai 表示头 h i h_i hi 的“重要性”,L2范数越大,表示头 h i h_i hi 越重要。 b i b_i bi 作为衡量嵌入空间“分散度”的代理,余弦距离越大,表示嵌入空间中向量之间的分散度越高。 通过计算 a i a_i ai b i b_i bi 的乘积,算法奖励那些具有高平均关注度和高平均分散度的头,同时惩罚那些具有低关注度或低分散度的头。

  2. 传统RAG检索:对每个嵌入空间分别应用传统RAG检索,返回每个空间中最接近的文本片段列表。

  3. 投票策略:使用投票策略从所有嵌入空间返回的文本片段列表中选择最佳的k个文本片段。这个策略结合了嵌入空间的重要性分数和文本片段在列表中的位置。

2.4.5 方便集成
  • MRAG设计为可以与现有的RAG解决方案和基准框架(如RAGAS)无缝集成,并且可以与不同类型的数据存储一起使用。用户可以选择自己的嵌入模型和查询,MRAG提供了合成数据生成器和查询生成器,用于评估目的。
  • MRAG可以与不同类型的数据存储和最近邻(NN)搜索方法无缝使用。它可以与精确和近似的最近邻搜索结合使用,以找到匹配的(嵌入,文本块)对。

三、总结

标准RAG(Retrieval-Augmented Generation)和Multi-Head RAG(MRAG)都是为了增强大型语言模型(LLMs)能力的框架,但它们在实现方式上存在一些关键差异。下面对标准RAG和MRAG的对比做个小总结:

标准RAG

  1. 嵌入生成:在标准RAG中,嵌入是通过使用解码器层的激活向量来生成的。具体来说,它通常采用最后一个解码器块的输出来创建文档或文本片段的嵌入表示。
  2. 检索:当接收到查询时,标准RAG会构建一个查询嵌入,然后在向量数据库中检索与该嵌入最相似的文档或文本片段。
  3. 应用场景:标准RAG适用于各种场景,但在处理需要多个不同方面信息的复杂查询时可能会遇到挑战,因为相关文档的嵌入可能在嵌入空间中相隔较远。
  4. 局限性:由于它依赖于单一的嵌入空间,标准RAG在处理多方面问题时可能无法有效地检索所有相关的文档。

多头RAG (MRAG)

  1. 嵌入生成:MRAG的核心创新在于使用Transformer的多头注意力层的激活来生成嵌入,而不是解码器层。这种方法利用了多头注意力机制,每个头可以捕获数据的不同方面
  2. 多方面嵌入:MRAG为每个输入生成一组嵌入,每个嵌入代表数据的不同方面。这称为**“Multi-Aspect(多方面)嵌入”**,它由多个“单方面嵌入”组成,每个嵌入对应于注意力层中的一个头。
  3. 数据存储:MRAG在数据存储中为每个文本片段存储多个嵌入,每个嵌入捕捉文本的不同方面。这允许MRAG在多个嵌入空间中进行检索,每个空间代表数据的一个特定方面。
  4. 检索策略:MRAG使用一种特殊的检索策略,它首先为每个嵌入空间分配重要性分数,然后使用投票机制从不同空间检索到的文本片段中选择最相关的片段

参考文献

  • paper:Multi-Head RAG: Solving Multi-Aspect Problems with LLMs,https://arxiv.org/pdf/2406.05085
  • code:https://github.com/spcl/MRAG

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

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

相关文章

Characters 2 01(卡通可爱人物动画模型)

● 包裹● - 26名男子; - 29个女孩。 ● 使用地点 ● - 游戏。针对游戏引擎优化的模型; -乘法; 广告和营销; - 虚拟现实/增强现实。 ● 特点 ● - 你可以很容易地改变物体的颜色 - 使用UV贴图; - 对象逻辑位置的枢轴; - 模型具有逻辑名称。 ● 几何学● 62个独特的资产(…

Objective-C 学习笔记 | Block 对象

Objective-C 学习笔记 | Block 对象 Objective-C 学习笔记 | Block 对象编写并使用 Block 对象Block 对象的返回值匿名 Block 对象外部变量在 Block 对象中使用 self在 Block 对象中无意使用 self修改外部变量 Objective-C 学习笔记 | Block 对象 Block 对象类似于匿名函数&am…

xLua(一) 环境安装笔记

为了方便查阅记录一下xLua的安装地址及方法 1.登录地址下载: https://github.com/Tencent/xLua 2.解压文件 将文件中的这些内容拷贝到项目中的Asset文件夹中 注意 : 工程项目路径不得含有中文 3.将Tools复制到Asset同级目录下 4.导入后会发现有Bug,需要导入工程 5.还有另…

Java:九九乘法表,打印三角形

文章目录 九九乘法表打印三角形改进:控制行数的三角形有空格的三角形 九九乘法表 package com.zhang; /* 打印九九乘法表*/ public class Test8 {public static void main(String[] args) {//i是竖着的 j是横着的for (int i 1; i < 9; i) {for(int j 1; j < 9; j) {i…

IP协议(二)

TOC 一: 网段划分 同一个局域网的主机,要按一定的规则分配IP地址 把一个IP地址分为两部分: 前半部分 ,网络号 >用来表示局域网后半部分,主机号 > 用来区分同一个局域网中的不同主机 同一个局域网内部&#xff0c;主机之间的IP &#xff0c; 网络号相同&#xff0c;主…

FuTalk设计周刊-Vol.039

&#x1f525;AI漫谈 热点捕手 1、AI视频生成工具大PK | Runway Gen-2、Pika、Moonvalley和W.A.L.T的文字生视频对比评测 AI届的学术大牛李飞飞最近推出了用于生成逼真视频的扩散模型W.A.L.T。效果很不错&#xff0c;不过目前还未开放公网的访问。于是我萌生了一个想法&#…

气体流量的换算

测量气体流量时&#xff0c;往往需要进行温压补偿。我们可以选择Nm:/h和m3/h作为测量单位&#xff0c;二者之间如何换算呢?在标准状态下&#xff0c;即温度为0℃℃(273.15K)和压力为1个标准大气压(101.325kPa)时&#xff0c;气体的体积被称为Nm3(标方)&#xff0c;N代表标准条…

rust asyn和await pin unpin加精!!!

15-探讨为什么Pin在Rust异步编程中如此重要 | Databend_哔哩哔哩_bilibili 能不能Pin住&#xff0c;取决于T是否实现了Unpin&#xff0c;如果实现了Unpin&#xff0c;那么Pin不住 Pin不能pin住u32等基础变量 编译器为async和await生成结构体实现了!Unpin 结构体中使用引用要…

HTML+CSS 交互式开关按钮

效果演示 实现了一个交互式开关按钮的效果,包括一个标签和两个选项(Yes和No),当用户点击其中一个选项时,按钮会发生动画效果,同时选中的选项会被高亮显示。整个按钮的样式采用了渐变背景色、圆角边框、阴影等元素,使得按钮看起来更加美观。 Code HTML <!DOCTYPE ht…

下拉框数据被遮挡 且 后续数据无法下拉的 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加空白版2.2 调整z-index2.3 父容器的溢出属性2.4 调整样式属性4. 效果图前言 小程序使用的是Uniapp,原理都差不多,索性标题就不标注Uniapp(小程序) 对于该问题调试了一个晚上,最终解决,对此记录下来 1. 问题所示 执…

图片转pdf在线网站,图片转pdf在线网址,工具软件

在现代办公和学习环境中&#xff0c;图片转PDF的操作已变得日益重要。无论是为了存档、分享还是打印&#xff0c;将图片转换为PDF格式都能带来诸多便利。本文将详细介绍几种常用的图片转PDF方法。 打开 “轻云pdf处理官网” &#xff0c;上传图片。 图片上传完成后&#xff0…

springCloudAlibaba之分布式事务组件---seata

Seata Sea学习分布式事务Seata二阶段提交协议AT模式TCC模式 Seata服务搭建 Sea学习 事务&#xff1a;事务是访问数据库并更新数据库中各项数据的一个程序执行单元。在关系数据库中&#xff0c;一个事务由一组或多组SQL语句组成。事务应该具有4个属性&#xff1a;原子性、一致性…

LabVIEW轴承试验机测控系统

开发了一种基于LabVIEW软件开发的大功率风电机组增速箱轴承试验机测控系统。系统主要用于模拟实际工况&#xff0c;进行轴承可靠性分析&#xff0c;以优化风电机组的性能和可靠性。通过高度自动化的测控系统&#xff0c;实现了对试验机的精确控制&#xff0c;包括速度、振动、温…

Unity 笔试题分享

1. 请回答以下代码片段执行时是否会产生堆内存分配 a. void SetChar(string s){s.Replace(b, d);}b. void Update(Transform t){t.localPosition new Vector3(0, 0, 0);}c、 int Sum(List<int> l){int total 0;foreach (int i in l){total i;} return total;}d…

金融数据中心能力建设指引

金融数据中心能力建设指引 金融数据中心能力建设指引旨在通过高标准的基础设施建设、完善的数据管理、强大的信息安全防护和业务连续性规划&#xff0c;确保数据中心具备高效、安全、可靠的运行能力&#xff0c;支持金融业务的稳定发展。该指引强调技术创新、标准化管理、人才…

大数据湖一体化运营管理建设方案(49页PPT)

方案介绍&#xff1a; 本大数据湖一体化运营管理建设方案通过构建统一存储、高效处理、智能分析和安全管控的大数据湖平台&#xff0c;实现了企业数据的集中管理、快速处理和智能分析。该方案具有可扩展性、高性能、智能化、安全性和易用性等特点&#xff0c;能够为企业数字化…

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程

简介&#xff1a; 最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境&#xff1a;NginxPHP7.0MySQL5.6 ![CYA]CPZMY8NK8YADA.png](https://img-blog.csdnimg.cn/img_convert/1e38b378e1aa6e834f56ec9a83df064c.png)

Django学习(1)Model

模型 1、Django操作指令 2、Django模型字段类型 3、Django模型字段类型属性 4、Django模型Meta属性

计算机组成原理-常见计算题含IEE754

一、补码加减运算 二、溢出判断 采用一位符号位 采用双符号位 三、定点数的移位运算 算术右移 算数左移 反码的算术移位 补码的算术移位 四、浮点数的表示 一个右规的例子 五、IEEE754 移码

读AI未来进行式笔记09职业再造

1. 职业再造 1.1. 着AI向越来越多的行业稳步进军&#xff0c;越来越多的人逐渐被AI技术取代&#xff0c;那么人类接下来所能从事的工作是什么&#xff1f; 1.2. 缺乏专业指导&#xff0c;许多人被发展迅猛的AI替代&#xff0c;连续挫败导致自杀率居高不下 1.2.1. 除了经济收…