多模态检索增强生成的简单介绍

原文地址:An Easy Introduction to Multimodal Retrieval Augmented Generation 

2024 年 3 月 20 日 

图像和文本的装饰图像被输入计算机并产生合成输出。

如果检索增强生成(RAG) 应用程序可以处理多种数据类型(表格、图形、图表和图表)而不仅仅是文本,那么它的实用性就会呈指数级增长。这需要一个能够通过连贯地解释文本、视觉和其他形式的信息来理解并生成响应的框架。 

在这篇文章中,我们讨论了应对多种模态和方法来构建多模态 RAG 管道的挑战。为了使讨论简洁,我们只关注两种模态:图像和文本。 

为什么多模态很难?

企业(非结构化)数据通常分布在多种模态中,无论是充满高分辨率图像的文件夹还是包含文本表格、图表、图表等的混合的 PDF。 

在处理此类模态传播时,需要考虑两个要点:每种模态都有其自身的挑战以及如何管理跨模态的信息?

每种模态都有其自身的挑战

例如,考虑图像(图 1)。对于左侧的图像,重点更多地放在一般图像上,而不是微小的细节上。注意力只集中在池塘、海洋、树木和沙子等几个关键点上。 

一系列图像,从基本视觉效果到更详细的插图,简洁表达的信息水平不断提高。

图1. 图像中信息表达简洁程度的提高

报告和文档可能包含信息密集的图像,例如图表和图表,其中有许多兴趣点和可以从图像中得出的其他上下文。无论您构建什么管道,都必须捕获并解决这些细微差别,以有效地嵌入信息。

您如何跨模态管理信息?

另一个重要方面是跨不同模态表示信息。例如,如果您正在处理文档,则必须确保图表的语义表示与讨论同一图表的文本的语义表示一致。

多模态检索方法

了解了关键挑战后,以下是构建 RAG 管道以应对这些挑战的具体细节。

构建多模态 RAG 管道有几种主要方法:

  • 将所有模态嵌入到同一向量空间中
  • 将所有模态归结为一种主要模态
  • 对于不同的方式有单独的 stores

为了使讨论简洁,我们只讨论图像和文本输入。

将所有模态嵌入到同一向量空间中

对于图像和文本,您可以使用CLIP等模型在同一向量空间中对文本和图像进行编码。这使得您可以在很大程度上使用相同的纯文本 RAG 基础设施并更换嵌入模型以适应另一种模态。对于生成过程,您可以将所有问答的大语言模型(LLM) 替换为多模态 LLM (MLLM)。

这种方法简化了管道,因为通用检索管道中所需的唯一更改是交换嵌入模型。 

在这种情况下,需要权衡的是获得一个模型,该模型可以有效地嵌入不同类型的图像和文本,并且还可以捕获所有复杂的信息,例如图像中的文本和复杂的表格。

将所有模态归结为一种主要模态

另一种选择是根据应用程序的重点选择主要模态,并将所有其他模态置于主要模态中。 

例如,假设您的应用程序主要围绕 PDF 上基于文本的问答。在这种情况下,您可以正常处理文本,但对于图像,您可以在预处理步骤中创建文本描述和元数据。您还可以存储图像以供以后使用。 

在推理过程中,检索主要根据图像的文本描述和元数据进行,并根据检索的图像类型,通过 LLM 和 MLLM 的混合生成答案。 

这里的主要好处是,从信息丰富的图像生成的元数据对于回答客观问题非常有帮助。这也解决了调整嵌入图像的新模型以及构建重新排序器以对不同模态的结果进行排序的需要。主要缺点是预处理成本和丢失图像的一些细微差别。 

对于不同的方式有单独的stores

排名-重新排名是另一种方法,您可以为不同的模态提供单独的存储,查询它们以检索前N个块,然后让专用的多模态重新排名器提供最相关的块。 

这种方法简化了建模过程,因此您不必调整一个模型即可使用多种模态。然而,它以重新排序器的形式增加了复杂性,以排列现在最上面的M * N块(每个来自M种模态)。 

生成多模态模型

LLM旨在理解、解释和生成基于文本的信息。经过大量文本数据的训练,LLM可以执行一系列自然语言处理任务,例如文本生成、摘要、问答等。

MLLM 可以感知的不仅仅是文本数据。MLLM 可以处理图像、音频和视频等模态,这通常是现实世界数据的组成方式。他们将这些不同的数据类型结合起来,对信息进行更全面的解释,从而提高预测的准确性和稳健性。 

这些模型可以执行广泛的任务:

  • 视觉语言理解和生成
  • 多模态对话
  • 图像字幕 
  • 视觉问答(VQA) 

这些都是 RAG 系统在处理多种模态时可以受益的任务。要更深入地了解 MLLM 如何处理图像和文本,需要了解这些模型的构建方式。 

MLLM 的流行子类型之一是Pix2Struct,这是一种预训练的图像到文本模型,可以通过其新颖的预训练策略对视觉输入进行语义理解。顾名思义,这些模型生成从图像中提取的结构化信息。例如,Pix2Struct模型可以从图表中提取关键信息并以文本形式表达。

了解了这一点后,您可以按照以下步骤构建RAG 管道。

构建多模态 RAG 管道

为了展示如何处理不同形式的数据,我们将引导您完成索引多个技术帖子的应用程序,例如使用 NVIDIA H100 GPU 打破 MLPerf 训练记录。这篇文章包含复杂的图像,这些图像是带有富文本、表格数据,当然还有段落的图表和图形。 

以下是开始处理数据和构建 RAG 管道之前所需的模型和工具:

  • MLLM:用于图像字幕和 VQA。
  • LLM:一般推理和问题回答。
  • 嵌入模型:将数据编码为向量。
  • 矢量数据库:存储编码矢量以供检索。

解释多模态数据并创建矢量数据库

构建 RAG 应用程序的第一步是预处理数据并将其作为向量存储在向量存储中,以便您可以根据查询检索相关向量。 

对于数据中存在的图像,下面是一个通用的 RAG 预处理工作流程(图 2)。 

演示用于处理包含图像的数据的 RAG 预处理工作流程,展示从数据摄取到处理和分析的步骤顺序。

图 2. 带图像的数据的一般 RAG 预处理工作流程

该帖子包含几个条形图,如图 3 所示。要解释这些条形图,请使用 Google 的DePlot,这是一种视觉语言模型,与LLM结合使用时能够理解图表和绘图。该模型可在 NGC 上找到。

有关在 RAG 应用程序中使用 DePlot API 的更多信息,请参阅使用优化的 DePlot 模型查询图。

要使用 MLLM 分析的条形图图像

图 3. PDF 中的条形图示例,包括标题

此示例重点介绍图表和绘图。其他文档可能包含可能需要模型定制来处理专门图像的图像,例如医学图像或示意图。这取决于用例,但您有多种选择来解决图像中的这种差异:调整一个 MLLM 来处理所有类型的图像,或者为不同类型的图像构建模型集合。 

为了使解释简单,这是一个包含两个类别的简单集成案例: 

  • 使用DePlot处理带有图形的图像
  • 其他要使用 MLLM(如KOSMOS2)处理的图像

在这篇文章中,我们扩展了预处理管道,以更深入地处理管道中的每种模态,利用自定义文本拆分器、自定义 MLLM 和 LLM 来创建 VectorDB(图 4)。

该图显示了提取文本、分离图像和文本、构建图像描述、将表格线性化为文本、分割文本以及其他处理步骤。

图 4. 使用定制 MLLM 处理不同类型图像的 RAG 预处理工作流程

以下是预处理工作流程中的一些关键步骤:

  • 分离图像和文本
  • 根据图像类型使用 MLLM 对图像进行分类
  • 在 PDF 中嵌入文本
分离图像和文本

目标是将图像转化为文本形式。首先提取和清理数据以分离图像和文本。然后,您可以着手处理这两种模态,最终将它们存储在向量存储中。

根据图像类型使用 MLLM 对图像进行分类

MLLM 生成的图像描述可用于将图像分类,无论它们是否是图形。根据分类,对包含图形的图像使用 DePlot 来生成线性化的表格文本。该文本在语义上与常规文本不同,这给在推理过程中执行搜索时检索相关信息带来了挑战。

我们建议使用线性化文本的摘要作为块存储在向量存储中,并将自定义 MLLM 的输出作为元数据,您可以在推理期间使用。

在 PDF 中嵌入文本

您可以根据正在使用的数据探索各种文本分割技术,以实现最佳 RAG 性能。为简单起见,将每个段落存储为一个块。

与您的矢量数据库对话

通过此管道,您可以成功捕获 PDF 中存在的所有多模态信息。以下是当用户提出问题时 RAG 管道的工作方式。

当用户向系统提出问题时,简单的 RAG 管道会将问题转换为嵌入,并执行语义搜索以检索一些相关的信息块。考虑到检索到的块也来自图像,在将所有块发送到 LLM 以生成最终响应之前,请执行一些额外的步骤。

图 5 显示了如何使用从图像和文本中检索为块的信息来处理用户查询并进行回答的参考流程。 

该图显示了从 Slack 界面、用户查询、NeMo Guardrails、矢量存储和嵌入模型开始的工作流程,分解为相似的块,分离为图像、图表/绘图中的文本和纯文本,最后进入 LLM 进行最终处理回复。

图 5. 使用定制 MLLM 从多模态数据检索信息的 RAG 推理工作流程

下面是一个示例问题,提示支持多模态 RAG 的机器人可以访问感兴趣的 PDF,“具有 3D U-Net 的 NVIDIA A100 和 NVIDIA H100(v2.1) 之间的性能差异是什么?”

该管道成功检索了相关图形图像,并准确地解释了它,在 3D U-Net 基准测试中,NVIDIA H100 (v2.1) 每个加速器的相对性能比 NVIDIA A100 高出 80%。

该示例展示了 RAG 管道能够回答涉及 NVIDIA 开发人员博客文章中的文本和图像的问题。

图 6. 问题示例以及从NVIDIA 开发者博客的条形图中提取的答案

以下是执行搜索并检索前五个相关块后处理问题所涉及的一些关键步骤: 

  • 如果块是从图像中提取的,MLLM 会将图像和用户问题一起作为输入来生成答案。这只不过是一个 VQA 任务。然后,生成的答案将用作LLM做出响应的最终上下文。
  • 如果从图表或图中提取块,请调用存储为元数据的线性化表,并将文本作为上下文附加到 LLM。
  • 最后,来自纯文本的块按原样使用。

所有这些块以及用户问题现在都已准备好供LLM生成最终答案。根据图 6 中列出的来源,机器人参考了显示不同基准上的相对性能的图表,以生成准确的最终响应。 

扩展 RAG 管道

这篇文章涉及使用跨多种模态的数据来回答简单的基于文本的问题的场景。为了进一步发展多模态 RAG 技术并扩展其功能,我们建议进行以下研究领域。

解决包含不同模态的用户问题

考虑一个由包含图表和问题列表的图像组成的用户问题,需要对管道进行哪些更改才能适应这种类型的多模态请求?

多模态反应

基于文本的答案提供了代表其他模态的引文,如图 6 所示然而,书面解释可能并不总是用户查询的最佳结果类型。例如,多模态响应可以进一步扩展以根据请求生成图像,例如堆叠条形图。

多模态Agents

解决复杂的问题或任务超出了简单的检索的范围。这需要规划、专用工具和摄取引擎。有关更多信息,请参阅LLM 代理简介。

概括

由于 多模态模型的进步以及对 RAG 驱动的工具和服务的需求增加,生成式 AI 应用中的未来多模态功能还有很大的改进和探索空间。 

能够将多模态功能集成到其核心运营和技术工具中的企业能够更好地扩展其人工智能服务和产品,以适应尚未列出的用例。 

获得在 GitHub 中实施多模态 RAG 工作流程的实践经验。

Related resources

  • GTC session: RAG: Overview of Design Systems, Data, and Customization
  • GTC session: 通过多模态检索增强生成解决非结构化企业数据的挑战
  • GTC session: Techniques for Improving the Effectiveness of RAG Systems
  • Webinar: Building Intelligent AI Chatbots Using RAG
  • Webinar: Bringing Generative AI to Life with NVIDIA Jetson
  • Webinar: Fast-Track to Generative AI With NVIDIA

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年全国职业院校技能大赛(网络系统管理赛项)样题三

2023****年全国职业院校技能大赛 GZ073****网络系统管理赛项 赛题第3套 模块A:网络构建 ​ 目 录 任务清单… 1 (一)基础配置… 1 (二)有线网络配置… 1 (三)无线网络配置… 3 &#…

华为OD七日集训第4期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 3 期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、矩阵第4天、深度优先搜索dfs算法第5天、回溯法第6天、二分查找第7天、正则表达式 大家好,我是…

5个适用于 Windows/PC 的水印去除软件(视频/图像)

水印是文本、徽标、印记、图像或签名,通常叠加在视频、其他图像或具有较高透明度的 PDF 文档上。当您免费使用某些产品(例如视频编辑器)时,最终输出通常带有代表您使用的编辑器的水印。您可能需要出于您的目的从此类媒体文件中删除…

继承和多态(1)(继承部分)

继承 继承的概念 上文就是继承的概念。 必须记住父类也可以称为基类,超类。 子类也可以称为派生类。 继承的语法 在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下: 修饰符 class 子类 extends 父类 {//…

德邦物流上门取件,寄重货和大件物品时,实际费用比预估的要贵,难道被坑了吗?

实际并不是哈!温馨提示:快递物流计费标准:实际体积和重量两者取最大值,哪个大按哪个计费。 体积重量(kg)换算公式长(cm) x宽(cm)x高(cm) 抛比系数如果邮寄一个长100cm、宽58cm、高60cm的纸箱。 寄德邦快递…

Spring Cloud五:Spring Cloud与持续集成/持续部署(CI/CD)

Spring Cloud一:Spring Cloud 简介 Spring Cloud二:核心组件解析 Spring Cloud三:API网关深入探索与实战应用 Spring Cloud四:微服务治理与安全 文章目录 一、Spring Cloud在CI/CD中的角色1. 服务注册与发现:自动化管理…

Android14之模板类StaticString16解析(二百零一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(四)

概览 从上一篇博文: Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(三)我们学到了 Swift 中完全自己撸码实现 SwiftHook 类似功能的基本思路、提出了两个“难关”,并首先解决了其中第一道难题。 在这一篇中,我们将会继续克服各种“艰难险阻”,…

绝地求生:PUBG七周年庆典开启!参与周年话题投稿赢丰厚奖励

为庆祝七周年,闲游盒PUBG官方准备了众多活动与奖励,一起在庆典中创造难忘的回忆吧!七周年庆典期间游玩PUBG,参与 #乐在7中鸡味无穷# 周年话题投稿,即有机会赢取魔力甜心萨莉套装 2奖励。 参与方式 在小黑盒PUBG社区中…

Conda 常用命令合集

Anaconda是一个开源的Python和R语言的分布式发行版,用于科学计算(数据科学、机器学习应用、大规模数据处理和预测分析)。Anaconda旨在提供一个简单的一站式解决方案来进行科学计算的需求。它包括了许多用于科学计算、数据分析的最流行的库和工…

【Qt问题】Qt中文乱码问题解决方案(详细汇总)

【Qt问题】Qt中文乱码问题解决方案(详细汇总) 一、问题描述: 由于Qt对中文的支持不是很好,使用QtCreator进行开发的过程中,经常会出现各种乱七八糟的中文乱码问题,比如我前面遇到的 【Qt问题】初始化菜单…

数据库引论:3、中级SQL

一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join,自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1​,A2​,⋯):使用括号里的属性进行自然连接,除了这些属性之外的共同…

Garnet技术实战测试开发:像使用Redis一样使用Garnet

一、Garnet简介 最近一段时间,看到非常多的文章描述和转发Garnet项目,比如说: .NET的集群Redis实现版本: Garnet – 一种开源、下一代 …Garnet发布 Redis不再是唯一选择 - Setli - 博客园Garnet: 力压Redis的C#高性能分布式存储…

电子电器架构 —— 诊断数据DTC具体故障篇

电子电器架构 —— 诊断数据DTC起始篇 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎…

计算机组成原理 CPU组成与机器指令执行实验

一、实验目的 (1)将微程序控制器同执行部件( 整个数据通路)联机,组成一台模型计算机; (2)用微程序控制器控制模型机数据通路; (3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概…

C#绘制面形图

创建windows窗体应用 ,从工具箱添加Button和Panel using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…

[激光原理与应用-77]:基于激光器加工板卡的二次开发软件的系统软硬件架构

目录 一、1个板卡、1个激光器、1个振镜的应用架构、1个工位 (1)PLC (2)MES (3)加工板卡 (4)激光加工板卡与激光器之间的转接卡 (5)DB25、DB15 &#x…

力扣面试150 x 的平方根 二分 换底法 牛顿迭代法 一题多解

Problem: 69. x 的平方根 思路 👨‍🏫 参考题解 💖 袖珍计算器算法 class Solution {public int mySqrt(int x){if (x 0)return 0; // Math.exp(3):e的三次方int ans (int) Math.exp(0.5 * Math.log(x));return (long) (an…

Java面试题总结200道(四)

76、ApplicationContext 通常的实现是什么? FileSystemXmlApplicationContext :此容器从一个 XML 文件中加 载 beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。ClassPathXmlApplicationContext:此容器也从一个 XML 文件…

Qt程序可执行文件打包

目录 一、新建一个目录二、命令行2.1 添加临时变量2.2 打包命令 三、添加动态库四、普通 Qt 项目打包 Qml 项目打包 笔者写的python程序打包地址(https://blog.csdn.net/qq_43700779/article/details/136994813) 一、新建一个目录 新目录(例如test)用以…