RAG 学习笔记:多模态嵌入技术实战

RAG多模态CLIPBGE图文检索

RAG 学习笔记:多模态嵌入技术实战

前言

现代 AI 的一项重要突破,是将简单的词向量发展成了能统一理解图文、音视频的复杂系统。本文将深入探讨多模态嵌入技术,特别是 CLIP 模型和 bge-visualized-m3 的核心原理与实践应用。


一、为什么需要多模态嵌入?

核心原因

原因说明影响
打破模态墙传统文本嵌入无法理解图像查询支持图文混合检索
语义对齐将不同模态映射到统一向量空间实现跨模态语义理解
应用拓展支持图像搜索、图文问答等场景扩大 RAG 应用范围

直观理解

想象一下,一段描述”一只奔跑的狗”的文字,其向量会非常接近一张真实小狗奔跑的图片向量。这就是多模态嵌入的魔力——它打破了文本和图像之间的”模态墙”,让机器能够理解不同模态数据之间的语义关联。


二、CLIP 模型浅析

2.1 核心架构

CLIP (Contrastive Language-Image Pre-training) 采用双编码器架构

图像编码器 (ViT/ResNet)     文本编码器 (Transformer)
        ↓                           ↓
    图像向量                    文本向量
        ↓                           ↓
        └────────→ 共享向量空间 ←─────┘

2.2 对比学习原理

训练目标

  • ✅ 最大化正确图文对的向量相似度
  • ❌ 最小化错误配对的相似度

核心思想:“拉近正例,推远负例”

2.3 零样本识别能力

CLIP 能将传统分类任务转化为”图文检索”问题:

任务:判断图片是否为猫
方法:计算图片向量与 "a photo of a cat" 文本向量的相似度
优势:无需针对特定任务微调

三、bge-visualized-m3 模型详解

3.1 核心特性(M3)

特性说明优势
多语言性 (Multi-Linguality)支持 100+ 语言跨语言图文检索
多功能性 (Multi-Functionality)密集检索、多向量检索灵活的检索范式
多粒度性 (Multi-Granularity)短句到 8192 token 长文档覆盖广泛应用需求

3.2 技术架构

视觉编码器 (EVA-CLIP)

    图像 Patch Token

    映射到文本维度

    与文本 Token 联合编码

    统一向量表示

四、环境准备

4.1 安装依赖

# 进入 visual_bge 目录
cd code/C3/visual_bge

# 安装 visual_bge 模块及其依赖
pip install -e .

# 返回上级目录
cd ..

4.2 下载模型权重

# 运行模型下载脚本
python download_model.py

模型会自动下载到 ../../models/bge/ 目录。


五、代码实战

5.1 基础示例

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
import torch
from visual_bge.visual_bge.modeling import Visualized_BGE

# 加载模型
model = Visualized_BGE(
    model_name_bge="BAAI/bge-base-en-v1.5",
    model_weight="../../models/bge/Visualized_base_en_v1.5.pth"
)
model.eval()

# 多模态编码
with torch.no_grad():
    # 纯文本编码
    text_emb = model.encode(text="datawhale开源组织的logo")
    
    # 纯图像编码
    img_emb_1 = model.encode(image="../../data/C3/imgs/datawhale01.png")
    
    # 图文联合编码
    multi_emb_1 = model.encode(
        image="../../data/C3/imgs/datawhale01.png", 
        text="datawhale开源组织的logo"
    )
    
    img_emb_2 = model.encode(image="../../data/C3/imgs/datawhale02.png")
    multi_emb_2 = model.encode(
        image="../../data/C3/imgs/datawhale02.png", 
        text="datawhale开源组织的logo"
    )

# 计算相似度
sim_1 = img_emb_1 @ img_emb_2.T
sim_2 = img_emb_1 @ multi_emb_1.T
sim_3 = text_emb @ multi_emb_1.T
sim_4 = multi_emb_1 @ multi_emb_2.T

print("=== 相似度计算结果 ===")
print(f"纯图像 vs 纯图像: {sim_1}")
print(f"图文结合1 vs 纯图像: {sim_2}")
print(f"图文结合1 vs 纯文本: {sim_3}")
print(f"图文结合1 vs 图文结合2: {sim_4}")

5.2 运行结果

=== 相似度计算结果 ===
纯图像 vs 纯图像: tensor([[0.8318]])
图文结合1 vs 纯图像: tensor([[0.8291]])
图文结合1 vs 纯文本: tensor([[0.7627]])
图文结合1 vs 图文结合2: tensor([[0.9058]])

5.3 结果分析

对比项相似度分析
纯图像 vs 纯图像0.8318两张相似图像的向量接近
图文结合 vs 纯图像0.8291图文联合编码与纯图像编码相似度高
图文结合 vs 纯文本0.7627图文联合编码与纯文本编码相似度适中
图文结合1 vs 图文结合20.9058相同文本的不同图像图文联合编码最相似

六、核心概念对比

6.1 编码方式对比

编码方式输入特点适用场景
纯文本编码文本保持原始 BGE 文本嵌入能力文本检索
纯图像编码图像使用 EVA-CLIP 视觉编码器图像检索
图文联合编码图像 + 文本融合图文特征到统一空间多模态检索

6.2 应用场景矩阵

场景推荐编码方式原因
文本到图像检索纯文本编码 + 纯图像编码跨模态匹配
图像到图像检索纯图像编码同模态相似度
图文组合查询图文联合编码融合多模态信息
多模态知识检索图文联合编码精准语义理解

七、技术要点

7.1 模型参数说明

Visualized_BGE(
    model_name_bge="BAAI/bge-base-en-v1.5",  # 底层 BGE 文本嵌入模型
    model_weight="../../models/bge/Visualized_base_en_v1.5.pth"  # 预训练权重
)

参数解析

  • model_name_bge:指定底层 BGE 文本嵌入模型,继承其强大的文本表示能力
  • model_weight:Visual BGE 的预训练权重文件,包含视觉编码器参数

7.2 相似度计算原理

# 使用矩阵乘法计算余弦相似度
similarity = vector1 @ vector2.T

关键点

  • 所有嵌入向量都被标准化到单位长度
  • 确保相似度值在合理范围内(0-1)
  • 值越接近 1 表示越相似

八、实践建议

8.1 最佳实践

实践说明重要性
模型选择根据任务选择合适的编码方式⭐⭐⭐⭐⭐
批量处理批量编码提升效率⭐⭐⭐⭐
GPU 加速使用 GPU 加速编码过程⭐⭐⭐⭐
向量缓存缓存常用向量避免重复计算⭐⭐⭐

8.2 常见问题

问题 1:模型加载失败

  • 解决:检查模型路径和网络连接

问题 2:内存不足

  • 解决:减小批量大小或使用 CPU

问题 3:相似度计算异常

  • 解决:确保向量已归一化

九、学习收获

核心认知

  1. 多模态嵌入打破模态墙:将文本和图像映射到统一向量空间,实现跨模态理解
  2. CLIP 定义了有效范式:双编码器架构 + 对比学习成为主流方案
  3. bge-visualized-m3 更全面:多语言、多功能、多粒度的现代多模态嵌入模型

下一步计划

  • 实践使用 bge-visualized-m3 构建图文检索系统
  • 对比不同多模态嵌入模型的性能
  • 探索多模态 RAG 应用场景
  • 学习其他多模态模型(如 BLIP, ALIGN)

结语

多模态嵌入技术为 RAG 系统打开了新的大门,使其能够处理文本、图像等多种模态的数据。掌握这项技术,将帮助你构建更强大、更智能的 AI 应用。

关键要点:多模态嵌入的核心是跨模态对齐,CLIP 和 bge-visualized-m3 是当前最优秀的代表模型,选择合适的编码方式是成功的关键。