引言
检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合信息检索系统和序列到序列的生成模型,显著提高了生成内容的相关性和准确性。传统RAG主要处理文本数据,但随着应用场景的扩展,多模态RAG系统变得越来越重要,特别是需要处理包含图片的文档。本报告将深入探讨RAG系统如何处理图片数据,包括技术原理、实现方案和实际应用案例。
RAG基本原理
RAG是一种检索增强生成模型,由信息检索系统和seq2seq生成器组成。它的内部知识可以轻松地随时更改或补充,而无需浪费时间或算力重新训练整个模型。RAG的工作原理可以概括为以下步骤:
- 检索阶段:通过检索系统(如搜索引擎或数据库)获取与原始问题相关的文本片段。
- 结合阶段:将检索到的文本片段与原始问题相结合,形成一个新的输入序列。
- 生成阶段:将这个新的输入序列输入到生成模型(如GPT、通义千问等)中,模型利用其强大的语言理解和生成能力,对输入中的信息进行整合、分析和处理,最终生成一个与原始问题紧密相关且包含准确信息的答案或文本输出[1]。
多模态RAG概述
多模态RAG是对传统RAG的扩展,它能够处理包括文本、图像、视频等多种类型的数据。在多模态RAG系统中,图片作为重要的非结构化数据形式,其处理方式成为关键的技术挑战。
多模态RAG的主要技术路径
实现多模态RAG系统主要有以下三种主要技术路径:
-
共享向量空间:使用如CLIP等模型将不同模态的数据(包括文本和图像)嵌入到同一个向量空间中,这样就可以在统一的空间中进行检索。这种方法简化了管道,因为通用检索管道中唯一需要的更改是交换嵌入模型[12]。
-
单一基础模态:将所有模态数据转换为单一模态,通常是文本。这种方法在转换过程中可能会丢失一些信息,但由于其实现较为简单,许多应用中仍能取得良好的效果[12]。
-
独立检索:为不同的数据类型使用专门的检索模型,然后将结果合并。常见的做法是通过"重新排序"模型对不同模态的数据进行综合排序,选择最相关的数据进行增强生成[12]。
CLIP模型:图文嵌入的核心
CLIP(对比语言-图像预训练)是Open AI于2021年开发的一个嵌入模型,是一个在同一空间共享文本和图像嵌入的嵌入模型。CLIP模型在多模态RAG中扮演着关键角色,它通过对比学习将图像和文本映射到同一个潜在语义空间,使得语义相关的配对在向量空间中的距离较近,而不相关的则相距较远[26]。
CLIP模型的架构
CLIP模型主要包括两个重要组成部分:
- 图像编码器:通常采用Vision Transformer (ViT)或ResNet等卷积神经网络架构,将图像转换为固定维度的向量表示。
- 文本编码器:基于Transformer的语言模型(结构类似于BERT或GPT),将文本描述编码为与图像嵌入相同维度的向量表示[26]。
CLIP模型的训练原理
CLIP的核心是"对比学习",即让图像和文字在同一个语义空间中进行对比。在训练过程中,CLIP会对成千上万对图像和文字进行匹配训练,让相关的图像和文字对的数值向量靠近,不相关的则相互远离。这样,CLIP可以理解文字和图片的含义并进行匹配,从而实现"看图识物"或"图文对比"的效果[25]。
OpenAI收集了4亿对图像-文本对(一张图像和它对应的文本描述),分别将图像和文本进行编码,使用metric learning进行训练。在N个文本-图像对的训练batch中,CLIP模型会预测计算出这N²个文本-图像对的相似度(文本特征和图像特征的余弦相似性即为相似度)。对角线上的N个元素因为图像-标签对应正确被作为训练的正样本,剩下的N²-N个元素作为负样本[28]。
多模态RAG中图片处理的实现方案
方案一:基于语义抽取
基于语义抽取的方法旨在将文档中的各种信息,如文本、图片、表格等,在语义层面进行抽取和处理,转化为可供检索和生成的格式。这种方法能够较好地保留图片中的语义信息,但实现复杂度较高[21]。
方案二:基于视觉模型
基于视觉模型的方法利用广义上的OCR技术,首先识别多模态文档的布局,再根据不同语义区块,调用相应的模型进行处理。这种方法可以将图片和表格等多模态数据转换为文本数据,从而解决对多模态数据的理解问题。
从原理上来说,这种技术分为两代:
- 第一代采用各类视觉模型,针对不同类型的图表数据分别进行训练,将它们转化为文字。
- 第二代采用生成式模型,基于Transformer的多模态生成式模型通常采用Encoder-Decoder架构,Encoder的输入端是各种图表,Decoder的输出就是各类文本[18]。
方案三:共享向量空间
共享向量空间方法使用CLIP等模型将文本和图像映射到同一个向量空间中。这种方法允许在统一的空间中进行检索,实现跨模态的理解。CLIP通过学习如何对文本和图像进行对比,实现跨模态的理解,使得相关的文本描述和图像内容在这个空间中的表示彼此靠近,而不相关的则远离[27]。
方案四:多向量检索器
多向量检索器方法为不同的数据类型使用专门的检索模型,然后将结果合并。这种方法在处理图片时准确率较高(可达90%)。根据langchain博客,多向量检索方法的准确率约为90%,而多模态嵌入方法的准确率仅为60%[56]。
实际应用案例
物流理赔业务中的多模态RAG应用
在物流行业,理赔业务经常需要处理客户上传的受损货物图片。阿里妹团队通过多模态RAG技术实现图片查重,结合异步调用方法优化货损识别功能,显著提高了业务处理效率。客服需要审核客户上传的受损货物的图片资料,对受损情况做判定,然后给客户提供赔偿金额。通过多模态RAG技术,系统能够更准确地识别和理解图片内容,提高理赔处理的准确性和效率[50]。
LangChain实现多模态RAG
LangChain是一个流行的LLM应用开发框架,它提供了多种实现RAG的方法,包括多模态处理功能。根据搜索结果,LangChain实现了两种多模态RAG方法:
-
多模态嵌入(使用CLIP Embedding):使用Open CLIP Embeddings,这是一个在同一空间共享文本和图像嵌入的模型。这种方法的实现步骤包括从PDF中提取图像,使用unstructured库抽取PDF信息,并创建文本和图像列表,提取的图像需要存储在特定的文件夹中[56]。
-
多向量检索器(with image summary):这种方法的准确率约为90%,比多模态嵌入方法更高。它为不同的数据类型使用专门的检索模型,然后将结果合并[56]。
多模态RAG的技术挑战
多模态RAG面临的主要挑战包括:
-
图片和表格解析困难:图片内容可能比较复杂,影响后续的特征提取和内容理解;而表格的格式可能会各式各样,如何准确地对表格进行结构化提取,也是一个巨大的挑战[15]。
-
嵌入模型的局限性:多模态嵌入方法可能不足以解释图像中的信息,例如在某些情况下,图像中存在与数字相关的信息,或者数据库中的图像类型相似,嵌入无法从数据库中检索相关图像[56]。
-
计算效率与准确率的权衡:多模态嵌入方法计算效率较高(只调用一次GPT-4-Vision),但准确率仅为60%;而多向量检索方法准确率约为90%,但计算成本更高[56]。
设计RAG系统处理图片的方案
基于上述研究,我们可以设计一个处理图片的RAG系统方案。这个方案将结合多种技术,以实现高效、准确的图片处理。
方案概述
-
数据摄取:从PDF或其他格式的文档中提取图像和文本。使用unstructured库等工具来处理PDF文件,提取图像并存储在特定的文件夹中[56]。
-
特征提取:使用CLIP等模型对图像和文本进行特征提取,将它们映射到同一个向量空间中。
-
向量数据库存储:将提取的特征向量存储在向量数据库(如Milvus、FAISS等)中,以便后续的相似度搜索。
-
检索和生成:在查询阶段,使用多向量检索器检索相关图像和文本,然后使用多模态LLM(GPT-4v等)生成响应,同时考虑用户上传的图像和从向量数据库中检索到的类似图像的文本描述[56]。
技术实现细节
-
图像提取:使用unstructured库从PDF文件中提取图像。以下是示例代码:
python
复制
import partition_pdf raw_pdf_elements = partition_pdf( filename="LCM_2020_1112.pdf", extract_images_in_pdf=True, infer_table_structure=True, chunk=True )
-
CLIP嵌入:使用CLIP模型对图像和文本进行嵌入。以下是示例代码:
python
复制
import torch import clip device = "cpu" model, preprocess = clip.load("ViT-B/32", device=device) # 对图像进行预处理和嵌入 image_input = preprocess(Image.open("image.jpg")).unsqueeze(0).to(device) with torch.no_grad(): image_features = model.encode_image(image_input).float()
-
向量数据库存储:将图像和文本的特征向量存储在向量数据库中。以下是使用FAISS的示例代码:
python
复制
import faiss import numpy as np # 创建一个索引 index = faiss.IndexFlatL2(512) # 假设特征向量的维度为512 # 将图像特征向量添加到索引中 index.add(image_features.cpu().numpy())
-
检索和生成:在查询阶段,检索相关图像和文本,然后使用多模态LLM生成响应。以下是示例代码:
python
复制
from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 检索相关图像和文本 retriever = ... # 初始化检索器 # 初始化LLM llm = OpenAI(temperature=0.1) # 创建RAG链 rag_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, input_key="question" ) # 执行查询 result = rag_chain({"question": "查询问题"})
总结与展望
本报告深入探讨了RAG系统如何处理图片数据,包括多模态RAG的基本原理、技术路径、实现方案和实际应用案例。通过研究,我们发现多模态RAG系统在处理图片方面面临诸多挑战,但也看到了多种有效的解决方案。
未来,多模态RAG系统将继续发展,可能的方向包括:
-
模型优化:进一步优化CLIP等嵌入模型,提高图像特征提取的准确性和效率。
-
系统架构创新:设计更高效的多模态RAG系统架构,平衡计算效率和准确率。
-
应用场景扩展:将多模态RAG技术应用到更多的领域,如医疗、教育、金融等,解决更复杂的问题。
通过不断的研究和实践,多模态RAG系统将能够更有效地处理包含图片的文档,提供更准确、更丰富的信息检索和生成服务。
参考文献
[1] 检索增强生成 (RAG)的原理——传统检索LLM生成相结合. https://www.cnblogs.com/bonelee/p/17824538.html.
[12] 多模态检索增强生成(RAG)的简单介绍. https://zhuanlan.zhihu.com/p/688339682.
[15] 利用多模态RAG实现图文并茂的内容生成. https://blog.csdn.net/star_nwe/article/details/144991780.
[18] 所见即所得:多模态RAG正在向我们走来. https://news.qq.com/rain/a/20241022A04GE100.
[21] 利用多模态RAG实现图文并茂的内容生成. https://blog.csdn.net/star_nwe/article/details/144991780.
[25] 一文读懂 CLIP:多模态 AI 的核心原理与应用. https://zhuanlan.zhihu.com/p/5380468189.
[26] 多模态AI核心技术:CLIP与SigLIP技术原理与应用进展. https://new.qq.com/rain/a/20250329A02LV600.
[27] 多模态模型 - CLIP - 知乎. https://zhuanlan.zhihu.com/p/699376156.
[28] CLIP模型原理-CSDN博客. https://blog.csdn.net/zzZ_CMing/article/details/133908101.
[50] 如何结合多模态RAG和异步调用实现大模型内容理解?. https://new.qq.com/rain/a/20250328A01WS000.
[56] LLM之RAG实战(三十六) 使用LangChain实现多模态RAG. https://blog.csdn.net/wshzd/article/details/137143830.
分享
新建对话