跳到主要内容

多模态 Embedding

问题

什么是多模态 Embedding?CLIP 模型如何实现图文跨模态检索?

答案

一、多模态 Embedding 概念

多模态 Embedding 将不同模态(文本、图像、音频等)映射到同一向量空间,使跨模态检索成为可能:

二、CLIP 模型

CLIP(Contrastive Language-Image Pre-training)是多模态 Embedding 的里程碑模型:

训练过程

核心训练目标

L=1Ni=1Nlogesim(Ii,Ti)/τj=1Nesim(Ii,Tj)/τ\mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N}\log\frac{e^{\text{sim}(I_i, T_i)/\tau}}{\sum_{j=1}^{N}e^{\text{sim}(I_i, T_j)/\tau}}

对角线上的图文对是正样本,其余是负样本。

使用示例

from transformers import CLIPModel, CLIPProcessor
from PIL import Image

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

# 编码图片和文本到同一空间
image = Image.open("cat.jpg")
texts = ["一只猫", "一条狗", "一辆汽车"]

inputs = processor(
text=texts,
images=image,
return_tensors="pt",
padding=True
)

outputs = model(**inputs)
# image_embeds: [1, 512] — 图像向量
# text_embeds: [3, 512] — 文本向量

# 计算图文相似度
similarity = outputs.logits_per_image # [1, 3]
# → [0.92, 0.15, 0.03] "一只猫"最相似

三、主流多模态 Embedding 模型

模型模态维度特点
CLIP图+文512/768开山之作,生态丰富
SigLIP图+文768/1152Sigmoid 损失,效果更好
Chinese-CLIP图+文512/768中文优化
ImageBind图+文+音+视+深+热1024Meta,6 种模态
Jina CLIP v2图+文1024多语言,长文本
Nomic Embed Vision图+文768开源,统一模型

四、应用场景

场景描述示例
以文搜图文本查询检索图片电商"红色连衣裙"搜索
以图搜图图片查询检索相似图片拍照识物
以图搜文图片查询检索文本描述图片自动标注
零样本分类用文字标签对图片分类无需训练数据的图片分类
多模态 RAG文档中的图片也参与检索技术文档图文混合检索

五、多模态 RAG

在 RAG 系统中处理图文混合文档:


常见面试问题

Q1: CLIP 的核心创新是什么?

答案

  • 使用对比学习在 4 亿图文对上训练,不需要人工标注类别
  • 图像和文本共享向量空间,实现零样本迁移
  • 预训练后无需微调即可完成分类、检索等多种任务

Q2: 多模态 Embedding 在 RAG 中怎么用?

答案

  1. 文档处理:将文档中的图片和文本分别提取
  2. 双路编码:文本用文本 Embedding,图片用 CLIP 图像编码器
  3. 统一存储:图文向量存入同一个向量数据库,附带元数据区分类型
  4. 混合检索:查询同时检索文本和图片
  5. 多模态生成:将检索到的文本和图片一起送入多模态 LLM(如 GPT-4o)生成答案

Q3: 文本 Embedding 和 CLIP 文本编码器有什么区别?

答案

  • 文本 Embedding(BGE/E5):专为文本-文本匹配优化,文本语义检索效果更好
  • CLIP 文本编码器:专为图文对齐优化,跨模态检索效果更好
  • 实践建议:纯文本检索用文本 Embedding,涉及图片时用 CLIP

相关链接