VLM2Vec
统一多模态 embedding 框架,用视觉语言模型实现图文视频文档跨模态检索,MLM RAG 场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
统一多模态 embedding 框架,用视觉语言模型实现图文视频文档跨模态检索,MLM RAG 场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你在一个知识库里有图片、视频、PDF 文档,想用一句话描述找到最相关的那条内容——这正是 VLM2Vec 要解决的问题。这个由 TIGER-AI-Lab 推出的研究项目,刚刚在 TMLR 2026 发表 V2 版本,将视觉语言模型的强大能力迁移到了大规模多模态 embedding 任务中,在 MMEB-V2 基准上取得了 SOTA 成绩。
传统的 embedding 模型往往只能处理单一模态——要么是文本,要么是图片。当你想同时检索图片、视频和 PDF 文档时,往往需要部署多个专用模型,既增加系统复杂度,也难以捕捉跨模态的语义关联。
VLM2Vec 的核心思路是:既然视觉语言模型(VLM)已经能同时理解图像和文本,为什么不把它们 fine-tune 成一个统一的 embedding 模型呢?项目基于 Qwen2-VL 作为 Backbone,通过指令引导的对比学习(Instruction-Guided Contrastive Learning),让模型学会为任意组合的图文视频文档输出一个统一的高维向量表示。

图1:VLM2Vec 训练框架示意 — 将 VLM 通过对比学习转化为统一 embedding 模型
项目采用模块化设计,代码结构清晰,主要分为以下几个层次:
模型层(src/model/)
model.py:核心 MMEBModel 类,封装 VLM encoder、pooling 策略和 temperature 归一化。模型支持 late-interaction 机制(类似 ColPali),即 query 和 document 通过独立编码后在相似度计算时交互,显著提升细粒度匹配能力。
processor.py:支持多种 VLM backbone 的预处理器,包括 Qwen2-VL、Qwen2.5-VL、LLaVa-Next、Phi3-V、InternVideo2、ColPali 等。核心在于将不同模型的输出 token 映射到统一的 embedding 空间。
biencoder_gc.py:双编码器实现,用于 query 和 document 的独立编码。
训练层(src/trainer/)
trainer.py(约 35KB):支持 Gradient Cache 机制,可在有限显存下训练大模型;支持分布式多卡训练(DeepSpeed/FSDP),以及 WandB 日志集成。
loss.py:InfoNCE 等对比损失函数的实现。
数据层(src/data/)
支持多种数据格式和 collator,包括训练阶段的对比学习数据打包和评估阶段的 pair 数据构建。
已在 src/data/eval_dataset/ 中注册了 78 个评估任务,覆盖图像检索、视频检索、文档检索等多个类别。
评估层(eval.py)
eval.py 约 19KB,实现了完整的 RAG-style 评估流程:
| 特性 | 说明 |
|---|---|
| 统一多模态 embedding | 图像、视频、PDF 文档共享同一 embedding 空间 |
| Late-interaction 机制 | 查询与文档独立编码,交互计算时再匹配,兼顾效率和精度 |
| 多 backbone 支持 | Qwen2-VL、Qwen2.5-VL、LLaVa-Next、ColPali 等一键切换 |
| LoRA 微调 | 支持低秩适配器 fine-tune,降低训练成本 |
| Token Selection | 通过 UI Graph 等策略优化视觉 token 选择,减少冗余 |
| Gradient Cache | 梯度缓存机制,突破单卡显存限制 |

图2:VLM2Vec 在 MMEB 基准上的评测结果
MMEB-V2 是项目配套发布的大规模多模态 embedding 评测基准,包含 78 个任务,覆盖:
VLM2Vec-V2 在该基准上取得了全面 SOTA,超越了 Google 的 ColPali、复旦大学 GME 等强基线。值得注意的是,项目在 V1 阶段(ICLR 2025)就已证明,基于 Qwen2-VL-7B 的 VLM2Vec 可在 MMEB 上达到 65.8 分,刷新当时的 SOTA。
推理示例(基于 HuggingFace Transformers):
from transformers import AutoModel
from PIL import Image
model = AutoModel.from_pretrained('VLM2Vec/VLM2Vec-V2.0')
# 编码图像
image = Image.open('example.jpg')
image_emb = model.encode(image)
# 编码文本
text_emb = model.encode('a cat sitting on a couch')
# 计算相似度
import torch
score = torch.cosine_similarity(image_emb, text_emb, dim=-1)
训练自定义模型:
python train.py --config experiments/release/vlm2vec_v2.yaml
训练配置完全由 YAML 文件管理,支持切换 backbone、调整学习率、指定数据集等。项目提供了 experiments/release/ 下的公开配置,覆盖主流训练场景。
部署门槛较高:项目定位为研究框架,无 Docker 支持,需要手动配置完整的 Python + CUDA + 分布式训练环境。多卡设置、Gradient Cache 调参均需一定经验。
资源消耗巨大:即使使用 Gradient Cache,Qwen2-VL-7B 级别的训练仍需多卡 A100/H100。V2.0 的 Qwen2-VL-2B 版本相对轻量,是入门首选。
文档侧重基准:README 侧重于发布模型和基准数据,微调教程和推理最佳实践相对简略,初次使用需要参考代码理解细节。
VLM2Vec 的出现代表了多模态 embedding 研究的一个重要趋势:从单模态专用模型向统一多模态模型的演进。随着 VLM 能力的持续提升(GPT-4V、Qwen-VL 系列),将 VLM fine-tune 为 embedding 模型正在成为 RAG、知识库、视频理解等场景的新范式。
项目已与 vLLM 完成集成,意味着可以在生产环境中以更高吞吐量部署多模态 embedding 推理。结合 late-interaction 机制,VLM2Vec 有望在企业知识库、医学影像检索、电商视觉搜索等场景中发挥作用。

图3:VLM2Vec 应用示例 — 图像-文本语义匹配
VLM2Vec-V2 是当前最具影响力的开源多模态 embedding 框架之一,通过指令引导的对比学习将视觉语言模型转化为统一的 embedding 模型,在图文视频文档检索任务上取得了 SOTA 表现。虽然纯 CLI 的部署方式对非专业用户不够友好,但其模块化的代码设计、丰富的 backbone 支持和全面的基准评测,使其成为多模态 embedding 研究和应用的重要参考实现。