多模态RAG:通用框架方案调研汇总

news2025/3/3 4:33:04

阅读原文
多模态检索增强生成是一种新兴的设计范式,允许AI模型与文本、图像、视频等存储进行交互。在介绍多模态 RAG 之前,我们先简单了解一下传统的检索增强生成 (RAG)。

标准 RAG

RAG 的理念是找到与用户查询相关的核心信息,然后将该信息注入Prompt中并将其传递给大语言模型(LLM)从而生成回答。

RAG 系统的检索通常是通过Embedding来实现的。为了对某些内容进行Emebdding,通常使用复杂的 AI 模型将信息转换为纯数字的向量。

检索过程基于一组候选文档和用户query,通过计算它们的向量相似度来完成,与用户query距离最小的文档则被视是为最相关的。 一旦 RAG 系统检索到足够的相关信息,就会使用用户query和相关文档来构建增强的Prompt,然后将其传递给LLM进行生成。

"Answer the customers prompt based on the following context:
==== context: {document title} ====
{the most relevant document content retrievaled by RAG}

...

prompt: {prompt}"

这种通用系统通常假设整个知识库由文本组成,但许多知识来源不止文本,可能还有音频、视频、图像等,这就是多模态 RAG(Multimodal RAG) 的作用所在。

在讨论多模态 RAG 之前,让我们先简单探讨一下多模态的概念。

多模态

在数据科学中,“模态”本质上是一种数据类型。文本、图像、音频、视频、表格,这些都可以被视为不同的“模态”。这些能够理解多种类型数据的模型通常被称为“多模态模型”。

多模态模型的理念通常围绕“联合Embedding”这一理念展开。联合Embedding是一种建模策略,它迫使模型同时学习不同类型的数据。该领域的一篇里程碑式论文是 CLIP,它创建了一个能够执行与图像和文本相关的任务的强大的多模态模型。自 CLIP 以来,已经出现了各种建模策略,以某种方式对齐图像和文本。

多模态RAG

多模态 RAG 的理念是允许 RAG 系统以某种方式将多种模态的信息注入多模态模型。因此,多模态 RAG 系统不仅可以根据用户问题检索文本片段,还可以检索图像、视频和其他不同模态的数据。

目前,基于LLM大模型,有三种MM-RAG的模式:

Option 1:

  • 使用多模态LLM对文本和图片进行embedding
  • 基于embedding对文本和图片进行相似检索
  • 将检索到的原图片和文本输入LLM获取Answer

Option 2:

  • 使用多模态LLM给图片生成文本摘要
  • 对文本和生成的文本摘要进行embedding和检索
  • 将检索的文本和文本摘要输入LLM获取Answer

Option 3:

  • 使用多模态LLM对图片生成文本摘要
  • 对文本和生成的文本摘要进行embedding
  • 将检索的的文本和摘要对应的原始图片输入LLM获取Answer

Other Option:

  • 除此之外,还有另外一种模式,就是为每一种模态构建一个Embedding模型,每种模态数据单独检索,适用于有很多不同模态的数据场景,且需要对每种模态进行单独优化的场景,但缺点是复杂度高、维护成本高。

一些多模态RAG具体方案

以下是一些多模态RAG的相关工作,这些多模态RAG的框架基本上都是上述的几种Option中的一种,大同小异。

1. Beyond Text: Optimizing RAG with Multimodal Inputs for Industrial Applications

这篇文章里面讲了来两种MM-RAG框架,分别对应上面的Option 1 和 3

主要证明了几个点:

  1. 图片summary检索比图片Embedding检索效果好
  2. 多模态检索比单模太检索性能好
  3. 图片检索领域还需要继续优化

2. ColPali

文档通过一个Vision Encoder(PaliGemma-3B)直接切成patch,然后输入给一个Vision LLM(SigLIP-So400m)获得Patch Embedding,然后输入到一个Language Model(Gemma 2B)获得高维的上下文Embedding,最后通过一个Projector映射成128的低维向量。

检索的时候,在输入query后,会获取query每个token的embedding,每个token去检索最相似的patch,然后将所有token最相似的pathc的相似分加起来作为文档的相似分。

3. LLM2CLIP:Powerful Language Model Unlocks Richer Visual Representation

这篇文章其实是讲了一个新的多模态表征的方法,将LLM和经典的CLIP结合起来,用LLM强大的文本表示能力来增强CLIP的文本表示能力。(推荐做Embedding的使用此模型,在CoCo数据集上准确率90%+)

先是证明了LLM虽然理解文本的能力很强,但是其输出的embedding的区分性很低:MS-COCO数据集,每个图片有5个caption,随机选取两个作为 pair,同一个图片的两个caption作为positive sample,其它图片的caption作为negative sample。比如图片$ i_1 $的两个caption $ <c^1_1, c^1_2> 和图片 和图片 和图片 i_2 的连个 c a p t i o n 的连个caption 的连个caption <c^2_1, c^2_2> 是正样本,而 是正样本,而 是正样本,而 <c^1_1, c^2_2>$则可以视作负样本。 Caption Retrieval Accuracy(CRA),LLM直接对给定的caption检索其对应的另一个caption,准确率,Caption Retrieval Accuracy(CRA)在5%-10%左右。

然后通过caption-to-caption对比学习优化LLM的输出,使其具有区分性,微调后,LLM的CRA到80%以上,充分释放了LLM的语言处理能力。

最后用训练好的LLM替换CLIP原有的文本处理模块,并对CLIP的视觉部分进行微调。微调时,LLM的参数冻结,并且各添加一个Projector模块来实现对齐。

4. M3DocRAG: Multi-modal Retrieval is What You Need for Multi-page Multi-document Understanding

使用ColPali的文档embedding方法获取embedding,然后计算query和文档之间的相似度(MaxSim)取top-K,然后使用Qwen2-VL进行回答问题。本质上没有太多的创新点。提供了一个新的Benchmark。

5. FIT-RAG: Are RAG Architectures Settling On A Standardised Approach?

FIT-RAG 由五个组成部分组成:

  1. 基于相似性的检索器
  2. 双标签文档评分器
  3. 双面自我知识识别器
  4. 子文档级标记减少器
  5. 提示构建模块

双标签文档评分器使用双标签学习进行训练,其中涉及两个标签,Has_Answer标签表示该文档是否包含问题的答案,而LLM_Prefer标签表示该文档是否有助于LLM生成准确的答案。

  1. 事实信息 ( Has_Answer )
  2. LLM 偏好(LLM_Prefer)

其中提到了CRAG,一个轻量的RAG质量评估方案,感觉还不错就放这里了,不用过多讲了,看图就能很清楚了。

最后安利一些不错的开源Demo

1. kotaemon

性能非常不错,目前见到的最满意的多模态的Demo了。支持图片、url、pdf等文件,还支持GraphRAG(待探索),还提供API接口。kotaemon

2. clip_blip_embedding_rag

是一种基于CLIP/BLIP模型的嵌入服务,该服务支持文本和图像的嵌入生成与相似度计算,为多模态信息检索提供了基础能力。clip_blip_embedding_rag

阅读原文

Reference

https://github.com/langchain-ai/langchain/blob/master/cookbook/Multi_modal_RAG.ipynb

https://arxiv.org/pdf/2410.21943

https://github.com/pydaxing/clip_blip_embedding_rag

https://github.com/Cinnamon/kotaemon

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

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

相关文章

《HTML 的变革之路:从过去到未来》

一、HTML 的发展历程 图片: HTML 从诞生至今&#xff0c;经历了多个版本的迭代。 &#xff08;一&#xff09;早期版本 HTML 3.2 在 1997 年 1 月 14 日成为 W3C 推荐标准&#xff0c;提供了表格、文字绕排和复杂数学元素显示等新特性&#xff0c;但因实现复杂且缺乏浏览器…

游戏交易系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 题目&#xff1a;游戏交易系统设计与实现 摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询…

Mac mini m4本地跑大模型(ollama + llama + ComfyUI + Stable Diffusion | flux)

安装chat大模型&#xff08;不推荐&#xff0c;本地运行的大模型只能聊废话&#xff0c;不如网页版使用openAI等高效&#xff09; 首先下载ollama的安装包 https://ollama.com/ 点击启动访问&#xff1a;http://localhost:11434 Ollama is running 代表已经运行起来了&#x…

精品C++项目推荐:分布式kv存储系统

项目代码直接开源到Github&#xff1a;https://github.com/youngyangyang04/KVstorageBaseRaft-cpp 欢迎去star&#xff0c;fork&#xff01; 项目背景相关 背景 在当今大规模分布式系统的背景下&#xff0c;需要可靠、高可用性的分布式数据存储系统。 传统的集中式数据库在…

Milvus中如何实现全文检索(Full Text Seach)?

在前两篇文章中&#xff08;Milvus python库 pymilvus 常用操作详解之Collection&#xff08;上&#xff09; 和 Milvus python库 pymilvus 常用操作详解之Collection&#xff08;下&#xff09;&#xff09;&#xff0c;我们了解了Milvus基于dense vector和sparse vector实现的…

unity打包web,如何减小文件体积,特别是 Build.wasm.gz

unity打包WebGL&#xff0c;使用的是wasw&#xff0c;最终生成的Build.wasm.gz体积很大&#xff0c;有6.5M&#xff0c;有几个方法可以稍微减小这个文件的大小 1. 裁剪引擎代码&#xff1a; 此步可将大小从6.5减小到 6.2&#xff08;此项默认开启&#xff0c;只是改了裁剪等级…

STM32 CubeMx HAL库 独立看门狗IWDG配置使用

看门狗这里我就不多介绍了&#xff0c;能搜到这篇文章说明你了解 总之就是一个单片机重启程序&#xff0c;设定好超时时间&#xff0c;在超时时间内没有喂狗&#xff0c;单片机就会复位 主要应用在单片机异常重启方面&#xff0c;比如程序跑飞&#xff08;注意程序跑飞时你就…

Selenium:强大的 Web 自动化测试工具

Selenium&#xff1a;强大的 Web 自动化测试工具 在当今的软件开发和测试领域&#xff0c;自动化工具的重要性日益凸显。Selenium 就是一款备受欢迎的 Web 自动化测试工具&#xff0c;它为开发者和测试人员提供了强大的功能和便利。本文将详细介绍 Selenium 是什么&#xff0c…

幼儿园学校养老院供电安全解决方案

一、 电气火灾每年以30%的比例高居各类火灾原因。以50%到80%的比例高居重特大火灾。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。2021年“119”消防日&#xff0c;国家应急管理部消防救援局公布了2021年1至10月份全国火灾形势报告。数据显示&#xff0c;从火灾种类来…

UnityShaderLab-实现沿y轴溶解效果

实现思路&#xff1a; 实现思路同UnityShaderLab-实现溶解效果-CSDN博客 ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; 效果&#xff1a; 未完待续。。。

5G Multi-TRP R16~R18演进历程

提升小区边缘用户的性能&#xff0c;在覆盖范围内提供更为均衡的服务质量&#xff0c;NR中引入了多TRP协作传输的方案。多TRP协作传输通过多个TRP之间进行非相干联合传输&#xff08;Non Coherent-Joint Transmission&#xff0c;NC-JT&#xff09;、重复传输&#xff0f;接收或…

deepin 搭建 hadoop singlenode

deepin 搭建 hadoop singlenode 一、准备 1、升级软件 sudo apt updatesudo apt -y dist-upgrade2、安装常用软件 sudo apt -y install gcc make openssl libssl-dev libpcre3 libpcre3-dev libgd-dev \rsync openssh-server vim man zip unzip net-tools tcpdump lrzsz ta…

计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

pythonbug修复案例----修复 Python数据分析程序中的持续 Bug

在 Python 编程的世界里&#xff0c;Bug 就像隐藏在暗处的幽灵&#xff0c;时不时地跳出来捣乱。而持续出现的 Bug&#xff0c;则更是让人头疼不已。今天&#xff0c;就让我们一同踏上修复一个 Python 持续 Bug 的征程。 假设我们正在开发一个简单的数据分析程序&#xff0c;其…

YOLOv8改进,YOLOv8引入U-Netv2分割网络中SDI信息融合模块+GSConv卷积,助力小目标

理论介绍 完成本篇需要参考以下两篇文章,并已添加到YOLOv8代码中 YOLOv8改进,YOLOv8引入GSConv卷积+Slim-neck,助力小目标检测,二次创新C2f结构YOLOv8改进,YOLOv8引入U-Netv2分割网络中SDI信息融合模块,助力小目标检测下文都是手把手教程,跟着操作即可添加成功 目录 理…

双指针解题

双指针的使用范围 对于暴力解法的时间复杂度来说&#xff0c;双指针一般可以将暴力解法的时间复杂度降低一个量级. 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是左右指针. 快慢指针 ⼜称为⻳兔赛跑算法&#xff0c;其基本思想就是使⽤两个移动速度…

Linux安装Python2.7.5(centos自带同款)

卸载已安装的python,防止版本兼容问题 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 删除残余文件 whereis python |xargs rm -frv 安装前提是已安装gcc和g gcc --version g --version 下载安装python2.7.5 https://www.python.org/downloads/release/pyt…

Linux多进程开发-常用命令

进程 进程是计算机中正在运行的程序的实例。每个进程都有自己的地址空间、内存、文件和设备、线程以及其他系统资源。操作系统通过调度和管理进程来实现多任务处理&#xff0c;使得多个进程可以同时运行并与用户交互。在操作系统中&#xff0c;进程是基本的资源分配单位&#x…

appium学习之二:adb命令

1、查看设备 adb devices 2、连接 adb connect IP:端口 3、安装 adb install xxx.apk 4、卸载 adb uninstall 【包名】 5、把对应目录下的1.txt文件传到手机sdcard下 adb push 1.txt /sdcard 6、进入对应的设备里 adb shell 7、切入sdcard目录 cd /sdcard 8、ls 查…

Redis篇-3--原理篇2--Redis事务

1、概述 Redis 提供了简单的事务机制&#xff0c;Redis 事务的本质是一组命令的集合。当执行redis事务时&#xff0c;即一次性按照添加顺序依次执行这些命令&#xff0c;中间不会被打断或者干扰。 Redis 的事务机制并不像关系型数据库中的事务那样提供完整的ACID特性&#xf…