前言
传统的单模态RAG只能实现基于文本的检索召回,但是在企业级应用场景中,存在大量文本、图片、表格混排的复杂文档。对于这类文档的检索召回,单模态RAG难以给出精确有效的答案。
比如在工业制造,工程师需要检索某个设备的安装方法,详细的文字描述不如一张安装流程图。或者工程师要检索某个传感器的性能参数,再详尽的文字介绍都不如一张清晰的表格。
不仅是工业制造,包括生物医药、零售快消、汽车、教育等等行业,甚至是面向C端的应用场景,图文并茂的输出内容,都会大大提升用户的体验。比如,当你询问AI大模型“RAG系统的原理是什么”的时候,你是期待一个纯文字的回答,还是一个RAG系统架构图 + 文字介绍的回答呢?
因此,在这样的场景下,多模态RAG将大有可为。
多模态RAG的挑战
相比单模态RAG,多模态RAG的挑战更大,主要体现在以下几个方面:
图片和表格解析困难:图片内容可能比较复杂,影响后续的特征提取和内容理解;而表格的格式可能会各式各样,如何准确地对表格进行结构化提取,也是一个巨大的挑战。
信息关联复杂:提取出的文本、图片和表格等信息之间的关联关系难以准确界定,比如图片对应的文字可能在文档的不同位置,传统的chunk方式势必会出现内容丢失,如何将这些信息正确关联起来,也是一大难点。
多模态数据融合索引:需要找到合适的方法,将文字、图片、图表、甚至音频和视频的索引进行关联和整合,确保在检索时能够高效地查询到相关的多模态数据。
多模态查询理解与转换:如何准确地将用户的文本查询,转换为能够与多模态索引进行匹配的查询向量?例如, “查找包含某产品图片,且描述中提到其功能的文档”,需要将 “产品图片” 和 “功能描述” 等信息准确地转换为图像特征向量和文本查询条件。
跨模态相关性计算:在检索过程中,需要计算文本查询与图片、表格等数据之间的相关性。但是,不同模态数据之间的语义鸿沟,使得相关性计算较为困难,如何定义和计算跨模态的相似度是另一大挑战。
下面,围绕多模态RAG的问题和挑战,风叔介绍三种主流的方法,基于语义抽取、基于视觉模型和基于多模态数据融合。
方案一,基于语义抽取
基于语义抽取,旨在将文档中的各种信息,如文本、图片、表格等,在语义层面进行抽取和处理,转化为可供检索和生成的形式,其核心原理如下图所示。
第一步,文档结构识别
利用计算机视觉技术和自然语言处理技术,对文档进行分析,区分出不同的组成部分。比如通过图像识别算法检测文档中的图形元素,通过文本布局分析确定文本段落的边界和层次结构。
第二步,对象解析与特征提取
对文本、图片和表格分别进行特征提取和解析。
对于图片中的文字内容,通过 OCR 进行提取,并进行语义分析。对于图像部分,利用图像理解模型提取其视觉特征,如颜色、形状、纹理等,以及图像所表达出来的含义。
对于表格,使用表格识别模型来判定单元格边界、识别表头和合并单元格等,将表格内容转化为结构化的数据形式。
第三步,统一语义表示与向量化
将解析得到的各种信息转换为统一的语义表示形式,并通过嵌入模型将其映射到向量空间。
基于语义抽取的方案,其主要优点是:
-
信息全面:能够深入处理文档中的各种模态信息,尽可能全面地抽取和利用文本、图像、表格等多方面的内容,减少信息丢失
-
语义准确:通过对不同模态信息的语义解析和特征提取,可以更准确地把握文档的含义,提高检索和生成结果的准确性和相关性
-
可解释性:在每个处理步骤中都有明确的语义分析和转换过程,使得系统的运行和结果具有不错的可解释性
但是这种方案,也有较为明显的缺陷,包括:
-
处理效率低:涉及多个复杂的处理步骤,计算量较大,处理速度相对较慢,尤其在面对大规模文档数据集时,会导致较长的响应时间。
-
模型复杂度高:需要多种不同模型来处理不同模态的信息,如 OCR 模型、表格识别模型、图像理解模型等,增加了系统的建设和维护成本。
-
复杂文档处理挑战大:对于结构复杂、格式不规范或包含多种特殊元素的文档,准确识别和解析各种模态信息会存在困难,例如不规则表格、嵌套图表。
方案二,基于视觉语言模型VLM
视觉语言模型(Visual Language Model),是一种能够同时处理和理解视觉与语言两种模态数据的AI模型,比如著名的PaLM-E、GPT-4V。
在上图中,左侧表示的是基于语义抽取,而右侧表示的就是基于视觉语言模型,直接由模型理解整页文档内容。基于视觉语言模型主要有以下步骤:
第一步,多模态信息编码
通过视觉编码器将图像转换为向量,例如将图像分割为小块,再用卷积将其转换为特征向量。同时,利用分词器将文本信息转换为标记序列,并通过嵌入层映射为文本向量。
第二步,特征融合与映射
使用视觉适配器(如多层MLP),将视觉编码器输出的图像特征向量映射到与文本向量相同的空间,实现视觉和语言信息在同一向量空间下的融合,便于后续模型处理。
第三步,联合学习与理解
将融合后的多模态向量输入到大模型,对多模态信息进行联合学习和理解,从而能够根据输入的多模态信息生成相应的回答。
视觉语言模型VLM的优点是:
-
强大的多模态理解能力:能够深入理解图像和文本等多种模态信息的语义及其相互关系,从而更全面、准确地处理多模态数据,为用户提供更精准的回答和更丰富的信息。
-
端到端的处理方式:无需针对不同模态分别进行复杂的特征工程和处理流程,而是通过统一的模型架构实现多模态信息的联合处理,简化系统设计和开发流程。
-
可迁移性和泛化能力强:预训练的 VLM 可以在多种不同的多模态任务和领域中进行微调应用,具有较好的可迁移性和泛化能力,能够快速适应新的任务和数据场景。
但是其缺点也非常明显,比如:
-
模型训练和部署成本高:VLM 通常包含大规模的参数,训练和部署需要大量的计算资源。
-
实时性挑战:由于模型结构复杂、计算量大,在处理实时性要求较高的任务时,可能会出现响应延迟较长的问题
-
可解释性不足:VLM 的决策过程和结果相对难以解释,用户可能难以理解模型为什么会生成这样的结果,在一些对可解释性要求较高的领域(如医疗、金融),会受到一定限制。
方案三,基于多模态数据融合
多模态数据融合,顾名思义,是指将不同类型的数据和信息进行整合,以提供更全面的分析能力。多模态数据融合有多种实现方式,其中比较常见的是分离检索方法。
分离检索方法是指针对不同模态的数据,如文本、图像、表格等,使用各自独立的模型或算法进行检索,然后将各个模态的检索结果进行排序和融合,其基本原理如下图所示。
第一步,独立模态处理
为每种模态数据选择专门的处理模型和检索器。对于文本模态,可使用基于词袋模型、TF-IDF 等传统文本检索方法;对于图像模态,利用CNN或ViT提取图像的特征向量,然后通过计算特征向量之间的相似度来进行图像检索;对于表格,可使用专门的表格识别模型。
第二步,结果融合
对不同模态的检索结果进行综合排序,选择最相关的数据进行增强生成。例如,可以根据不同模态检索结果的置信度、相关性得分,通过加权求和、投票等简单策略来确定最终的排序和选择;也可以使用更复杂的融合模型,考虑不同模态之间的语义关联和互补信息,对检索结果进行进一步的处理和融合
分离检索方法是一种非常朴素直接的方法,主要优点包括:
-
充分利用模态特性:能够针对每种模态数据的特点和优势进行专门的处理和检索,充分发挥不同模态数据的价值。这样可以在各自模态内实现更准确的检索,相比于将所有模态统一处理,可能会获得更符合该模态特性的结果。
-
灵活性和可扩展性:易于对单个模态的检索模型进行更新、替换或优化,而不会影响其他模态的处理。同时,也便于添加新的模态数据类型,只需要为新的模态开发相应的检索模块,并设计合适的融合策略即可,系统的扩展性较强。
-
降低模型复杂度:分离检索方法将多模态问题分解为多个单模态的问题进行处理,每个单模态的检索模型相对简单,计算量和模型复杂度较低。这使得模型的训练和部署更加容易。
分离检索方法的主要缺点包括:
-
模态间信息融合有限:虽然在结果融合阶段会考虑不同模态之间的关系,但由于在检索过程中各个模态是独立进行的,可能无法充分挖掘和利用模态间深层次的语义关联和互补信息。例如,图像中的某个物体可能与文本中的特定概念有紧密联系,但独立检索时可能无法直接捕捉到这种跨模态的细粒度关联,导致融合后的结果在综合理解和利用多模态信息方面存在一定的局限性。
-
多模态理解的局限性:分离检索方法在一定程度上缺乏对多模态数据的整体统一理解,可能无法很好地处理一些需要综合多模态信息进行深度理解和推理的复杂任务。
总结
在本篇文章中,风叔介绍了实现多模态RAG的三种方法,基于语义提取、基于视觉语义模型VLM、基于多模态数据融合(分离检索)。当然,没有一种方法是完美的,每种方法都有自己的优势和缺点,准确度高、泛化性好的方案,势必训练成本高。
对于有钱有资源的基座大模型企业,基于视觉语义模型VLM的方案无疑是更合适的选择。而对于面向应用层的初创公司,分离检索方法则更为适合。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。