速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

所见即所得:多模态 RAG 正在向我们走来

  • 2024-10-25
    北京
  • 本文字数:4990 字

    阅读完需:约 16 分钟

所见即所得:多模态RAG正在向我们走来

2024 年可以算得上是多模态大模型取得井喷的一年,5 月发布的 GPT-4o,让多模态大模型进一步走进了我们的视野,如果说在 2023 年,多模态的应用还停留在传统的简单图像搜索,到 2024 年,则真正开始了对多模态数据的理解。下图是 24 年涌现的多模态大模型代表,既有商业,也有开源。可以看到,从对图像的理解角度来看,2024 年已经取得了长足进步。



随之而来的,就是多模态 RAG,是否也会开始落地并产生价值?我们先来看看多模态 RAG 的都有哪些使用场景。所谓多模态 RAG 的概念并不稀罕 ,在 2023 年 RAG 概念刚火热起来不久,就有了多模态 RAG 的场景描述,例如针对个人相册,企业宣传素材的搜索需求,然而,这种搜索需求更多是把存在很久的向量搜索的使用场景如图像搜索、以图搜图等安插到了多模态 RAG 之上,并没有真正从业务角度来逐步挖掘多模态 RAG 的场景价值。随着 RAG 技术在 2024 年快速发展,更多的企业,已经把 RAG 看成是大模型在 B 端应用的标准配置。来自于企业内部的文档问答,已经解锁出大量使用需求和场景。在这些文档中,有相当一部分包含各类复杂的图表内容,它们本质上就是各种多模态数据,如何对这些数据进行有效问答,成了挖掘企业内部数据金矿的刚性需求来源之一。


针对这类数据,一种解决方案是采用视觉模型,利用广义上的 OCR 技术,把这些多模态文档的布局首先识别出来,再根据不同语义区块,调用相应的模型来做处理,如下图所示。



这个流程中,得到的图片和表格,都属于典型的多模态数据,因此,采用相应的模型,将它们转成文本数据,就解决了对多模态数据的理解问题。从原理上来说,这样的技术也分为 2 代:


第一代是采用各类视觉模型,针对不同类型的图表数据分别进行训练,将它们转化为文字。例如针对表格处理的,有表格识别模型,针对流程图,饼图柱状图等企业图表,也需要相应的模型来处理。这些视觉模型,本质上是个分类模型。


第二代则采用生成式模型,不同于流行的 LLM 采用的 Decoder Only 架构,基于 Transformer 的多模态生成式模型,通常采用 Encoder-Decoder 架构,Encoder 的输入端是各种图表,Decoder 的输出就是各类文本。


依托于这种广义的 OCR 技术,可以把一个多模态 RAG 系统变成一个标准的 RAG 系统。在我们的开源和商业版的 RAGFlow 中,分别基于这两类技术提供了相应的实现。


另一种解决方案,则直接依托于多模态模型本身,简称 VLM(Vision Language Model)。输入文字和图像,输出得到基于图像和文字内容理解得到的答案文字。



如前文所提到,VLM 在 2024 年取得了显著进展,它们已经大大超越了过去图像搜索这种简单的场景。我们先以 Google 在 7 月开源的 PaliGemma 为例,看看对一个复杂的多模态文档理解的效果【参考资料 1】。上传一张包含柱状图、饼图以及各类文本的复杂 PDF 截图,然后针对图表进行提问,可以看到,PaliGemma 给出了准确的回答。



而近期阿里开源的 Qwen2-VL-7B【参考资料 2】,也在视觉图像理解上达到了更好的效果。如何将这些 VLM 应用于针对大量企业内部 PDF 文档的多模态 RAG,同样是今年 7 月公开的 ColPali【参考资料 3】,则是一个堪称里程碑的工作。ColPali,全称叫 Contextualized Late Interaction over PaliGemma,是一个基于 PaliGemma 的延迟交互模型。PaliGemma 是一个结合了视觉和语言模型的混合模型,它使用 SigLIP 视觉编码器生成的图像块 (Image Patch) Embedding,并将这些 Embedding 输入到 Gemma 文本语言模型中,以获得上下文化的语言模型输出 Embedding。



而 ColPali 则在 PaliGemma 基础上添加了一个 Col Adaptor,它负责将 PaliGemma 的 Embedding 输出映射到一个更低维度(128 维)的向量空间,并采用延迟交互模型来计算文本和文档之间的相似度。所谓 ColPali 的"Col",跟最知名的用于文本排序的延迟交互模型 ColBERT,是一个含义,它是用来在 RAG 系统中解决文档排序的一种标准方法的总称。也就是说,我们可以在任何模型基础之上来新增一个 Col Adaptor,同时辅之以训练的正负样本对数据,就可以得到各种 ColXX 模型,它们都是采用延迟交互模型,可以用来捕获查询和文档之间的上下文相似度。



在 RAG 常用的排序模型中,主要有 3 类架构:


  1. 双编码器(Dual Encoder)。以 BERT 模型为例,它针对查询和文档分别编码,最后再经过一个 Pooling 层,使得输出仅包含一个向量。在排序阶段,只需要计算两个向量相似度即可。由于双编码器针对查询和文档分别编码,因此无法捕获查询和文档的 Token 之间的复杂交互关系,在语义上会有很多损耗。

  2. 交叉编码器(Cross Encoder)。Cross-Encoder 使用单编码器模型来同时编码查询和文档,它能够捕捉查询和文档之间的复杂交互关系,因此能够提供更精准的搜索排序结果。Cross-Encoder 并不输出查询和文档的 Token 所对应的向量,而是再添加一个分类器直接输出查询和文档的相似度得分。它的缺点在于,由于需要在查询时对每个文档和查询共同编码,这使得排序的速度非常慢,因此 Cross-Encoder 只能用于最终结果的重排序。例如针对初筛结果的 Top 10 做重排序,仍然需要耗时秒级才可以完成。

  3. 延迟交互编码器(Late Interaction Encoder)。以 ColBERT 为例,相比于交叉编码器,ColBERT 仍采用双编码器策略,将查询和文档分别采用独立的编码器编码,因此查询的 Token 和文档的 Token 在编码时互不影响,这种分离使得文档编码可以离线处理,查询时仅针对 Query 编码,因此处理的速度大大高于交叉编码器,这样带来的好处就是延迟交互编码,可以放到数据库内部执行,不仅可以大大降低成本,更重要在于它可以针对更多的文档排序(例如 Top 100 甚至 Top 1000),从而大大提升最终的查询精度;相比于双编码器,ColBERT 输出的是多向量而非单向量,这是从 Transformer 的最后输出层直接获得的,而双编码器则通过一个 Pooling 层把多个向量转成一个向量输出,因此丢失了部分语义。



延迟交互编码器,是面向未来的 RAG 排序模型,它既有交叉编码器的排序质量,又具备较高的性能,解决了 RAG 检索过程中语义损耗的问题。正因为此,ColPali 算是延迟交互编码器在多模态 RAG 检索的应用,它的出现,对于提升多模态 RAG 的检索精度,具有显著的价值。下图是 ColPali 在文章中对比采用传统视觉模型的广义 OCR 实现的多模态 RAG,可以看到在查询精度上,领先优势很大。甚至在整体的数据写入速度上,也大大领先。



下图是 ColPali,对比不采用延迟交互模型的 BiPali(就是采用双编码器的 PaliGemma,对查询和文档分别用 PaliGemma 编码),在查询精度上的领先优势:平均 nDCG 从 50 多到 80 多,这在产品上几乎就是可用和不可用之间的差异。



随着 ColPali 的出现,更多的将延迟交互模型用于多模态 RAG 检索的模型也出现了,例如将 Col Adaptor 用于 Qwen2-VL-2B 的 ColQwen2,在 ViDoRe Benchmark 榜单上,近期已经跑到了第一名,它的平均 nDCG 指标,比 ColPali 还领先了 5 个百分点。ViDoRe,全称是 Visual Document Retrieval Benchmark,类似适用于标准 RAG 的 MTEB Benchmark,ViDoRe 可看作是多模态 RAG 的 MTEB。下图是 ViDoRe 的典型评测样本:



并且可以看到,在 ViDoRe Benchmark 上,排名前列的模型,全都是延迟交互模型:



那么如何将 ColPali,应用到企业级的多模态文档知识库系统中呢?我们先来看 ColPali 模型,它会把每张图片,具体来说,就是 PDF 的某一页,看作是 32*32=1024 个 Image Patches,每个 Patch 都会生成 128 维向量。因此,一页图片,就可以用这 1024 个向量来表示。在查询的时候,查询的每个 Token,也都会生成一个 128 维向量,根据 ColPali 模型,查询和一页图片的相似度,是查询每个 Token 的每个向量,跟所有 Patch 的向量之间内积之和的叠加,这就是 MaxSim。因此可以看到,我们需要这样的基础组件,来完成基于 ColPali 搜索的产品化:


  1. 需要有 Tensor 类型,就是多向量,来表示一页。

  2. 需要有效的支撑 MaxSim 算法。MaxSim 的计算并不是难事,但由于 Tensor 类型的引入,它带来 2 个问题:其一是 MaxSim 的查询复杂度较高;其二是 Tensor 的空间复杂度很高。一页 PDF 的 Tensor 需要 1024*128 = 128KB,对于大量的 PDF 来说,这是很高的空间开销。

  3. 在实际使用中,我们发现,单纯采用 ColPali,确实可以解读图表,但对于一些文本内容,仍然无法有效召回。因此,标准 RAG 所必备的能力:全文搜索和多路召回,仍然不可或缺。


在我们的开源 AI 原生数据库 Infinity 中,就已经提供了以上支持,针对第二点,主要优化在于:


  1. 我们首先试验了 Tensor Index 的必要性。在实现了 SOTA 的 Tensor Index 后,我们在文本排序上做了对比,发现 Tensor 类型,MaxSim 计算仅放在 Reranker 即可。下图是在一个基于文本的排序评测上,分别对比了采用 Tensor Index,普通搜索 +Tensor Reranker,以及基于 Tensor 的暴搜,可以看到,基于 Tensor Reranker 的结果,甚至高于采用 Tensor Index。



  1. 基于以上结论,采用 Tensor Reranker 即可达到效果,而 Tensor Reranker 可以采用更多的优化空间,例如采用二值量化,也就是把向量的每个维度的浮点数,用一个 bit 来表示,这样存储空间可以降低为原来的 1/32,同时计算复杂度也大大降低。

  2. 基于以上结论,采用 Tensor Reranker 来实现 MaxSim,那我们在前边的粗筛,同样离不开向量搜索。只是不同之处在于,我们需要这种向量搜索,也具备多向量的能力,意思是,向量搜索是以 Patch Embedding 为单元,但我们期望返回的结果,是以 PDF Page 为单元。



因此,采用 Infinity 数据库,将可以很好的支持多模态 RAG。


以上我们提到了 2 种技术路线,一个是基于广义 OCR,另一个是基于 VLM,分别用于实现多模态 RAG。那么这两种技术路线,哪种更有前景呢?在 ColPali 的论文中,已经给出了针对前者的比较,只是这种比较,主要是针对采用简易的 OCR 技术。在【参考资料 4】中,也针对这两种方法进行了对比,结论如下图所示:



看起来似乎采用 ColPali 这样的延迟交互模型,已经具备足够的领先优势。然而,在前文已经提到,即使是广义的 OCR,也已经演进到了下一代基于 Transformer 的生成式模型架构,这在本质上跟 VLM 没有区别,所不同的是,前者直接输出文字,后者则输出 Embedding,而对于网络结构来说,都是 Encoder-Decoder 架构。面对企业级的多样化需求,在查全和查准都要兼顾的前提下,我们很难说哪种一定会占据优势,因此,最佳的选择是,两者都要有:


  1. 在文字更容易表达,或者精确处理更加重要的场景,例如表格,我们可以采用更加准确的图像直接生成文字的做法,把整个表格精准的还原,然后让大模型准确回答问题。

  2. 在文字表达不容易,如其他图表类场景,我们交给 VLM 来处理,这样效率更高。

  3. 多模态 RAG 系统,需要考虑各种情况,需要有个统一的任务管理模块,来针对用户数据的不同类型,分别调用相应的模块来进行处理。


随着 Encoder-Decoder 架构在工程上的渐趋成熟,Image Patch 的语义表达更加精细,多模态模型已经不再是未来,而是当下,以它为基础的多模态 RAG,也早已摆脱了图片搜索等上一代 AI,它们已经或者即将解锁企业内部的大量非结构化文档数据的深度理解,这将大大扩充 RAG 的使用场景,也大大增加大模型在企业端的应用价值。作为同时开发端到端 RAG 产品和下一代 RAG 配套数据库的我们,也在密切跟进相关领域的发展,不论是产品侧,还是模型以及 Infra 侧。欢迎大家关注我们的端到端开源 RAG 产品 RAGFlow(https://github.com/infiniflow/ragflow),也欢迎关注我们面向未来 RAG 需求的开源数据库产品 Infinity(https://github.com/infiniflow/infinity



参考资料


1. https://huggingface.co/spaces/big-vision/paligemma-hf


2. https://huggingface.co/spaces/GanymedeNil/Qwen2-VL-7B


3. ColPali: Efficient Document Retrieval with Vision Language Models. https://arxiv.org/abs/2407.01449


4. MMLongBench-Doc: Benchmarking Long-context Document Understanding with Visualizations. https://arxiv.org/abs/2407.01523


今日好文推荐


字节澄清大模型遭攻击,实习生嫁祸背刺同事?IBM老员工被无端解雇后举报董事长;年薪40万美元因滥用25美元餐补被裁!| Q资讯


国产编程语言MoonBit发布原生后端,比Java快15倍,拥抱 RISC-V


37signals“下云”计划完美收官:成本节约比当初估算的还要多,5年狂省千万美元


没见过这么荒谬的开源要求!20 多年老牌软件仅开源一个月就删除了全部代码


2024-10-25 12:339558

评论

发布
暂无评论
发现更多内容

阿里巴巴云原生 etcd 服务集群管控优化实践

阿里巴巴云原生

容器 运维 云原生 k8s 存储

想来百万流量技术公众号发布文章吗? InfoQ 开放内容平台了!

InfoQ写作社区官方

热门活动

Modus串行链路系统电气特性:2线-Modus、4线-Modus、RS232-Modus和RS485-Modus的特性

不脱发的程序猿

通信协议 4月日更 Modus 串行链路 RS232、RS485

1小时破千万点击量!阿里巴巴首发:Java核心框架指导手册

Java架构追梦

Java 阿里巴巴 架构 面试 核心框架

iOS--面试题:多线程

ios 面试 多线程

JVM-技术专题-方法区中常量池分析

洛神灬殇

JVM 常量池

HikariCP-技术专题-配置介绍和使用

洛神灬殇

想来百万流量技术公众号发布文章吗? InfoQ 开放内容平台了!

xiaotan

InfoQ 的朋友们 热门活动

全球案例 | NTT:Atlassian 帮助我们重塑危机中的可能性

Atlassian

敏捷 团队协作 数字化转型 Atlassian Jira

HDFS的垃圾桶机制

五分钟学大数据

hadoop 4月日更

LeetCode题解:剑指 Offer 49. 丑数,三指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

硬核!阿里内部这份《Java面试核心知识手册》在Github上已获赞高达89.7K!

Java架构之路

Java 程序员 架构 面试 编程语言

Modbus协议在串行链路上的实现

不脱发的程序猿

通信协议 物联网常用协议 4月日更 Modbus 串行通信

APM-技术专题-监控系统选型

洛神灬殇

APM 监控

PHP自动加载原理

Sakura

4月日更

Flume高阶自定义组件

大数据技术指南

大数据 flume 4月日更

7年Java经验|面20+家公司|已拿16个offer|面经总结|

Java架构追梦

Java 架构 面试 20+大厂面经

Android面试送分题:大厂经典高频面试题体系化集合,实战篇

欢喜学安卓

android 程序员 面试 移动开发

博云入选2021爱分析·产业数字化厂商全景报告

BoCloud博云

云计算 云原生 PaaS 博云

应对海量时序数据,华为云GaussDB(for Influx)有妙招

华为云开发者联盟

云原生 数字化转型 时序数据 华为云GaussDB

重读《重构2》- 提炼变量

顿晓

重构 4月日更

非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer

码农之家

Java 编程 程序员 互联网 面试

智慧城市:大数据运营中心 IOC —— Web GIS 地图应用

一只数据鲸鱼

WebGIS ioc 数据可视化 智慧城市 数据运营

《采访彩食鲜 CTO 乔新亮:如何从一名程序员晋阶为CTO》(采访提纲)

石云升

28天写作 4月日更 调查采访能力考核

第一篇测试

童童

架构训练营

最全 MongoDB 基础教程

若尘

数据库 mongodb mongo

入门物联网嵌入式才是关键!

cdhqyj

技术 编程语言 物联网 嵌入式 系统

android热修复基本原理,15分钟的字节跳动视频面试,满满干货指导

欢喜学安卓

android 程序员 面试 移动开发

小厂逆袭美团|5年经验|一二三面经,已拿offer|

Java架构追梦

Java 架构 面试 美团Offer

云原生势不可挡,华为云GaussDB加速企业数字化转型

华为云开发者联盟

华为云 GaussDB

「 留言参与 」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

所见即所得:多模态RAG正在向我们走来_生成式 AI_张颖峰_InfoQ精选文章