当前位置: 首页 > news >正文

奇思妙想:多头RAG

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

RAG

检索增强生成 (RAG) 是一种通过集成文档检索系统来增强大型语言模型 (LLMs) 功能的方法。这种集成允许LLMs从外部来源获取相关信息,从而提高生成的响应的准确性和相关性。这种方法解决了传统LLMs方法的局限性,例如需要广泛的培训以及提供过时或不正确信息的风险。RAG的主要优势在于它能够将模型的输出建立在可靠的来源中,从而减少幻觉并确保最新的知识,而无需昂贵的持续培训。

RAG 面临的一个重大挑战是处理需要具有不同内容的多个文档的查询。此类查询在各个行业中都很常见,但会带来困难,因为所需的文档可能具有截然不同的嵌入,因此很难准确检索所有相关信息。这个问题需要一个能够有效地从多个来源获取和组合信息的解决方案。在复杂的场景中,如化工厂事故,从与设备维护、天气状况和工人管理等各个方面相关的文档中检索数据对于提供全面的答案至关重要。

现有的 RAG 解决方案通常使用 Transformer 模型的最后一层解码器模块的嵌入来检索文档。但是,此方法需要充分处理多方面查询,因为它难以检索涵盖明显不同内容方面的文档。当前的一些技术包括 RAPTOR、Self-RAG 和 Chain-of-Note,它们专注于提高检索准确性,但无法有效处理复杂的多方面查询。这些方法旨在优化检索数据的相关性,但需要帮助来处理多方面查询所需的文档内容的多样性。

MRAG

来自苏黎世联邦理工学院、Cledar、巴斯夫欧洲公司和华沙理工大学的研究人员推出了多头 RAG (MRAG) 来解决多方面查询问题。这种新颖的方案利用了 Transformer 模型的多头注意力层的激活,而不是最后一层解码器的激活。研究团队设计了MRAG,利用不同的注意力头来捕获各种数据方面,从而提高复杂查询的检索准确性。<若读者对于多头注意力机制有所忘记的话,可以移步“深入注意力机制”。> 通过利用多头注意力机制,MRAG创建了代表数据在各个维度的嵌入,增强系统跨不同内容区域获取相关信息的能力。

MRAG的关键创新是使用来自多个注意力头的激活来创建嵌入。Transformer 模型中的每个注意力头都可以学习捕获不同的数据方面,从而产生表示数据项和查询各个方面的嵌入。与标准RAG相比,此方法使 MRAG能够更有效地处理多方面查询,而不会增加空间要求。MRAG在数据准备阶段使用来自多头注意力层的激活来构建嵌入。在查询执行期间,这些多方面嵌入允许从不同的嵌入空间中检索相关的文本块,从而解决多方面查询的复杂性。

MRAG背后的关键思想很简单,利用最后一个注意层为最后的Token生成的H个独立激活向量,而不是利用最后一个解码器的前馈层为最后的Token生成的单个激活向量。

对于输入的最后一个Token(𝑥𝑛),在还没有传送到前馈层前,利用多个注意力头的激活向量构造嵌入:S={ek∀k},其中ek = headk(𝑥𝑛),S是输入的最后一个Token(𝑥𝑛)上注意头的所有输出集合。

由于使用多个头进行处理不会改变输出向量的大小,因此S具有与标准 RAG 相同的空间要求。但是,由于在将单独的嵌入与Wo混合之前捕获它们,推测这些向量可以提供有关输入不同部分的关注内容信息,从而有助于捕获更多维的信息。如下图所示,传统的RAG将每个文档块放在一个空间,而MRAG则是将原来的空间切分为更小的子空间。

既然将文本的索引切分到多个子空间,而检索策略需要升级,进而在给定用户查询下从数据库中选择最接近的文本块。通常,MRAG检索策略包括三个步骤。第一,在数据准备期间,为所有h个嵌入空间分配重要性分数。直观地说,这些分数反映了不同空间可能与所用数据的重要性。

头部h的得分 si 由两部分组成,ai 和 bi。向量空间i指的是被刚才算法切分形成的h个子空间的某一个。ai 是向量空间i中所有嵌入的 L2 范数的平均值;它表示给定头部的重要性:范数越大,对该注意力头部的关注就越多。bi 是向量空间i中所有嵌入之间的余弦距离的平均值。直观地讲,bi 是测量向量空间 i 的“分散”。将 si导出为 ai · bi 的乘积可确保奖励具有高平均注意力和高平均分散率的子空间,但同时惩罚相反的子空间。

第二,在查询执行期间,MRAG 对每个嵌入空间分别应用传统的RAG检索。这将返回每个嵌入空间的c个最接近的文本块列表(总共h*C块)。这里需要使用投票策略,使用预先计算的重要性分数从所有 h*c个块中挑选出总体排名前k个。

本次的实验将MTEB排行榜上的两个嵌入模型视为候选模型。SFR-embedding-Model和e5-mistral-7b-instruct均基于Mistral 7B架构,每个多头注意力有32 个解码器块和32个注意力头。

上面是一个示例,最上面为查询的Prompt模板。第二行左一为知识库,左二和左三分别为传统的RAG和MRAG。针对两种算法,实验的结果标记在PROMPT中。

对比结果会发现,MRAG 显著提高了检索相关性,在获取多方面文档方面,其性能比标准 RAG 基线高出 20%。该评估使用了合成数据集和真实世界的用例,证明了 MRAG 在不同场景中的有效性。例如,在涉及多方面维基百科条目的测试中,MRAG 的相关性比标准 RAG 基线提高了 20%。此外,MRAG在法律文件合成和化工厂事故分析等实际任务中的表现也展示了其实际优势。在法律文件综合任务中,MRAG从各种法律框架中检索上下文相关文件的能力尤其值得称赞。

此外,MRAG的优势不仅限于检索精度。该方法经济高效且节能,不需要额外的LLM查询、多个模型实例、增加的存储或对嵌入模型进行多次推理传递。这种效率与增强的检索准确性相结合,使MRAG 成为RAG系统领域的宝贵进步LLMs。MRAG 可以与现有的RAG框架和基准测试工具无缝集成,为复杂的文档检索需求提供多功能且可扩展的解决方案。

相关文章:

奇思妙想:多头RAG

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…...

H323 截包分析辅流问题

辅流问题&#xff08;h264\h264hp\h265&#xff09; 终端1 &#xff1a; 192.168.1.1 入会发送辅流 终端2 &#xff1a; 192.168.1.2 入会接收辅流 问题 &#xff1a; 终端2不显示辅流 1、筛选 h245 h225 协议 分别筛选以下IP进行查看截包内容 (h225 || h245) && …...

低成本和颜值兼顾的 HomeLab 设备:HPE MicroServer Gen10(二)

本篇文章&#xff0c;继续分享另外一台端午假期折腾的设备&#xff0c;HP MicroServer Gen10 一代。同样分享下我的折腾思路&#xff0c;希望能够帮助到有类似需求的你。 写在前面 Gen10 “标准版”&#xff08;第一代&#xff09;和 Plus 版本设计风格一致&#xff0c;同样颜…...

面试题:ArrayList和LinkedList的区别

ArrayList和LinkedList都是Java中实现List接口的集合类&#xff0c;用于存储和操作对象列表&#xff0c;但它们在内部数据结构、性能特性和适用场景上有所不同&#xff1a; 1.内部数据结构&#xff1a; ArrayList&#xff1a;基于动态数组实现。这意味着它在内存中是连续存储…...

【王树森】深度强化学习(DRL)学习笔记

目录 第一部分&#xff1a;基础知识1.机器学习基础2.蒙特卡洛估计3.强化学习基础知识3.1 马尔科夫决策过程马尔可夫决策过程&#xff08;Markov decision process&#xff0c;MDP&#xff09;智能体环境状态状态空间动作动作空间奖励状态转移状态转移概率 3.2 策略策略定义 3.3…...

LLM应用实战:当图谱问答(KBQA)集成大模型(三)

1. 背景 最近比较忙(也有点茫)&#xff0c;本qiang~想切入多模态大模型领域&#xff0c;所以一直在潜心研读中... 本次的更新内容主要是响应图谱问答集成LLM项目中反馈问题的优化总结&#xff0c;对KBQA集成LLM不熟悉的客官可以翻翻之前的文章《LLM应用实战&#xff1a;当KBQ…...

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;上&#xff09;JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;下&#xff09;Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘&#xff1a;L…...

web前端怎么挣钱, 提升技能,拓宽就业渠道

web前端怎么挣钱 在当今数字化时代&#xff0c;Web前端技术已成为互联网行业中不可或缺的一部分。越来越多的人选择投身于这个领域&#xff0c;希望能够通过掌握前端技术来实现自己的职业发展和经济收益。那么&#xff0c;Web前端如何挣钱呢&#xff1f;接下来&#xff0c;我们…...

基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索

Python是一种广泛使用的解释型、高级和通用的编程语言&#xff0c;众多的开源科学计算软件包都提供了Python接口&#xff0c;如计算机视觉库OpenCV、可视化工具库VTK等。Python专用计算扩展库&#xff0c;如NumPy、SciPy、matplotlab、Pandas、scikit-learn等。 开发工具上可用…...

大型语言模型智能体(LLM Agent)在实际使用的五大问题

在这篇文章中&#xff0c;我将讨论人们在将代理系统投入生产过程中经常遇到的五个主要问题。我将尽量保持框架中立&#xff0c;尽管某些问题在特定框架中更加常见。 1. 可靠性问题 可靠性是所有代理系统面临的最大问题。很多公司对代理系统的复杂任务持谨慎态度&#xff0c;因…...

C语言内存管理

1.进程的内存分布 练习&#xff1a;编写一个程序&#xff0c;测试栈空间的大小 #include<stdio.h>#define SIZE 1024*1024*7void main (void) {char buf[SIZE];buf[SIZE-1] 100;printf("%d\n",buf[SIZE-1]); }如果SIZE 大小超过8M(102410248)&#xff0c;…...

AD24设计步骤

一、元件库的创建 1、AD工程创建 然后创建原理图、PCB、库等文件 2、电阻容模型的创建 注意&#xff1a;防止管脚时设置栅格大小为100mil&#xff0c;防止线段等可以设置小一点,快捷键vgs设置栅格大小。 1.管脚的设置 2.元件的设置 3、IC类元件的创建 4、排针类元件模型创建…...

基于MBD的大飞机模块化广域协同研制

引言 借鉴国外航空企业先进经验&#xff0c;在国内&#xff0c;飞机型号的研制通常采用基于模型定义&#xff08;MBD&#xff09;的三维数模作为唯一的设计制造协同数据源&#xff0c;从而有效减少了设计和制造部门之间的模型沟通成本和重构所需的时间&#xff0c;也减少或避免…...

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种&#xff0c;可以根据需求进行二选一&#xff0c;分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码&#xff0c;均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…...

力扣1818.绝对差值和

力扣1818.绝对差值和 把nums1拷贝复制一份 去重排序 对于每个nums2都找到差距最小的那个数(二分) 作差求最大可优化差值去重排序可以直接用set 自动去重排序了 const int N 1e97;class Solution {public:int minAbsoluteSumDiff(vector<int>& nums1, vector<i…...

矩阵练习2

48.旋转图像 规律&#xff1a; 对于矩阵中第 i行的第 j 个元素&#xff0c;在旋转后&#xff0c;它出现在倒数第i 列的第 j 个位置。 matrix[col][n−row−1]matrix[row][col] 可以使用辅助数组&#xff0c;如果不想使用额外的内存&#xff0c;可以用一个临时变量 。 还可以通…...

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源&#xff0c;架构和应用场景&#xff0c;并附上最详细的集群搭建教程&#xff0c;能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…...

力扣算法题:将数字变为0的操作次数--多语言实现

无意间看到&#xff0c;力扣存算法代码居然还得升级vip。。。好吧&#xff0c;我自己存吧 golang&#xff1a; func numberOfSteps(num int) int {steps : 0for num > 0 {if num%2 0 {num / 2} else {num - 1}steps}return steps } javascript: /*** param {number} num…...

vue前段处理时间格式,设置开始时间为00:00:00,设置结束时间为23:59:59

在Vue开发中&#xff0c;要在前端控制日期时间选择器的时间范围&#xff0c;可以通过以下方式实现&#xff1a; 使用beforeDestroy生命周期钩子函数来处理时间范围&#xff1a; 在Vue组件中&#xff0c;可以监听日期时间选择器的变化&#xff0c;在选择开始日期时&#xff0c;自…...

Java 8 新特性全面解读

Java 8&#xff0c;作为一次重大更新&#xff0c;于2014年引入了多项创新特性&#xff0c;极大地改善了Java的编程体验和性能。此版本不仅加入了对函数式编程的支持&#xff0c;还增强了接口的功能&#xff0c;引入了新的API&#xff0c;并优化了语言的整体效率。接下来&#x…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...