如果说2023年见证了大语言模型的“寒武纪大爆发”,那么2024年则是多模态大模型“元年”。GPT-4o的出现让大家见识到多模态能力引入,给下游应用生态带来的巨大改变。随之而来的,RAG技术也将逐渐从单语言模态的RAG进化到多模态RAG。本文将带大家速览多模态RAG技术的原理及实现。
什么是RAG
什么是RAG:Retrieval Augmented Generation,检索增强生成。是一种结合了信息检索技术和大型语言模型提示功能的框架。它通过从数据源检索信息来辅助LLM生成答案,提高了模型在知识密集型任务中的准确性和可信度。
我们为什么需要RAG:大型语言模型通常基于固定的历史数据集进行训练,这意味着它们的知识是过时的,无法涵盖最新的信息或特定领域的专业知识。RAG的目的是通过引入额外知识库,检索其中的相关信息,并根据检索结果给予用户回答。这也可以显著减少大模型因为并不具备相关知识,而出现的“幻觉”现象。当然我们也可以直接把整个数据库作为LLM的prompt输入,但由于transformer架构O(N2)复杂度的限制,LLM支持的最长输入长度通常有限,多数支持到128k token已经是极限,使得在面临更长知识库输入时,RAG依然是当下唯一可行的解决方案。
如何实现RAG:在实际应用时,我们常需要给定一系列文档,并使用RAG方法,让LLM针对这些文档进行检索与交互。RAG的实现主要包含以下几个步骤:
数据准备阶段:包括数据提取、分块(chunking)、向量化(embedding)、数据入库等环节。数据提取涉及将不同格式的数据(如PDF、Word、数据库等)处理为统一的格式。分块是将大文档分割成较小的、语义完整的单元,以便于后续处理和检索。
检索阶段:系统根据输入查询检索相关文档或信息。这个阶段依赖于搜索算法和索引方法来快速识别大量集合中最相关的数据。
增强阶段:将用户查询和检索到的额外上下文放入一个提示模板中,以增强提示。
生成阶段:使用大型语言模型来针对检索结果,生成对用户的回复。
走向多模态RAG
从RAG的应用可以看出,多数时候,我们需要把一些文档作为RAG的输入,用于检索和生成。而现实应用中,文档通常是以图文交错的形式存在的,比如网页、PDF、PPT文件等等。
通常的做法是,只保留文档中的文本信息。对于PDF文档,则进行OCR文字识别,读取其中的文本。但这样会导致大量图片中至关重要的信息被丢失,以及很多结构化内容的错乱,比如标题、表格、页眉页脚等格式错乱。
改进的做法是,把所有模态信息都转换为纯文本,再进行RAG。我们可以使用多种计算机视觉模型,比如检测模型对文档结构进行识别,然后对文档中不同的模块,使用不同的“广义OCR模型”进行解析。比如对于文本段落,使用OCR模型进行文本识别;对于表格,可以用表格模型进行识别转换为Markdown或LaTeX文本;对于公式,则套用公式识别转换为LaTeX;对于图片,则可使用多模态大模型如GPT-4o进行文本解读(caption),保存为文本描述。有很多开源的工具可以完成这些事情,比如MinerU等。通过解析算法,多模态数据就被完全转换为纯文本的格式了,也就可以照葫芦画瓢套用纯文本的RAG方法了。
图像来源: 张颖峰 | 所见即所得:多模态RAG正在向我们走来
我们注意到,使用上述的方法,信息不可避免会存在丢失,而且依赖过多的解析模型。而时间来到2024年,多模态大模型实现了爆发式的技术突破,高分辨率的视觉输入已经取得了巨大突破,使用单一的多模态大模型做广义OCR也变得非常容易。比如QWen2-VL以及InternVL-2等开源多模态大模型,在文档的广义OCR上都有非常好的效果。
多模态大模型成功,让端到端(end-to-end)的算法已经成为了主流。原生多模态的RAG算法也成为了可能:既然多模态大模型有能力理解文本,那我们其实即无需再把图像转换为文本,而可以直接使用图像,提取embedding去做RAG。
即从图(a)转变为图(b)的模式
DSE
https://arxiv.org/abs/2406.11251
DSE,即Document Screenshot Embedding,是一个不使用广义OCR的多模态RAG方法,直接把原始文档的扫描图片,切片后,使用视觉语言模型的编码器编码。其对query和docunment使用了双编码的架构。验证了这一想法的可行性。
ColPali
https://arxiv.org/abs/2407.01449
ColPali架构也是利用视觉语言模型来从文档页面的图像中产生高质量的上下文化嵌入。ColPali使用了延迟交互(late interaction)技术,大大提高了检索效率,同时在检索性能上超越了现有的文档检索系统,并且具有更快的处理速度和可端到端训练的特点。上图对比了传统的文档RAG与多模态RAG的区别。因为减少了广义OCR的解析过程,使得处理速度也有了质的提升。
CoPali其实从名字上看,就知道灵感来源于两个工作,PaliGemma和CoBERT。PaliGemma 是 Google 开发的一款具有多模态功能的视觉语言模型,它结合了视觉模型 SigLIP 和大型语言模型 Gemma。“Col” 则来自于ColBERT 的延迟交互编码器。ColPali 算是延迟交互编码器在多模态 RAG 检索的应用,并且极大提高了检索召回的精度。
延迟交互编码结合了双编码器和交叉编码器的优点。在这种架构中,query和文档被分别编码成独立的embedding集合,然后通过一个高效的交互机制来计算它们之间的相似度。
延迟交互编码的核心思想是将查询和文档的编码过程分开,这样文档的编码可以离线完成,而查询的编码则在在线阶段进行。这种方法的优点是可以在查询时仅对查询进行编码,从而大大提高了处理速度。此外,由于文档的编码是预先完成的,可以将其存储在数据库中,这样就可以对更多的文档进行排序,从而提高查询的精度。
在延迟交互编码中,一个关键的计算是最大相似性(MaxSim)函数,它计算每个查询Token向量与所有文档Token向量之间的相似度,并跟踪每个查询Token的最大得分。查询和文档的总相似度分数是这些最大余弦相似度分数的总和。这种方法允许模型在保持较高排序质量的同时,也具备较高的性能。
随着多模态大语言模型能力的增强,以它为基础的多模态RAG,也早已突破了传统的图像检索的应用方式,而是真正具备大规模非结构化多模态数据深度理解的能力,将会有更多toB的商业应用价值。
致谢
如果您觉得这篇文章对你有帮助或启发,请不吝点赞、在看、转发,让更多人受益。同时,欢迎给个星标⭐,以便第一时间收到我的最新推送。每一个互动都是对我最大的鼓励。让我们携手并进,共同探索未知,见证一个充满希望和伟大的未来!
技术交流
加入「AI生成未来社区」群聊,一起交流讨论,涉及 图像生成、视频生成、3D生成、具身智能等多个不同方向,备注不同方向邀请入群!可添加小助手备注方向加群!