Qwen3-VL-Embedding和Reranker是基于Qwen3-VL的多模态检索与排序模型,采用双塔和单塔架构,在MMEB-V2基准测试中取得77.8分SOTA成绩。支持文本、图像、视频等多模态输入,通过MRL和QAT技术实现高效推理。文章详细解析了模型架构、训练策略和实现细节,并在GUI-Agent知识增强场景中展示了落地应用。
摘要
Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 是基于 Qwen3-VL 基础模型构建的多模态检索与排序模型系列,在 MMEB-V2 基准测试中取得了 77.8 分的 SOTA 成绩。本文深入解析其架构设计、训练策略和核心实现,并通过代码实践展示如何在实际场景中应用这些模型。Figure 1: 统一多模态表示空间示意图。Qwen3-VL-Embedding 将多源数据(文本、图像、视觉文档和视频)映射到共同的语义流形
- 背景与问题定义
1.1 多模态检索的挑战
多模态内容的爆炸式增长,其中充斥着图像、文档截图、视频等多样化数据模态,这要求检索系统能够:
- 跨模态理解:理解文本与图像/视频之间的语义关联
- 统一表示空间:将不同模态映射到同一语义空间
- 细粒度排序:对候选结果进行精确的相关性评分
1.2 现有方案的局限
虽然 CLIP 等模型在图像-文本对齐方面取得了成功,但面对复杂多模态检索任务时仍存在不足:
- 模态覆盖有限:难以处理视频、视觉文档等复杂模态
- 任务泛化能力弱:在分类、QA、检索等不同任务间性能不平衡
- 部署效率低:缺乏灵活的维度选择和量化支持
Qwen3-VL-Embedding 系列通过基于 VLM 的统一架构和多阶段训练策略,有效解决了这些问题。
- 架构设计
2.1 整体架构
Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 采用双塔(Dual-Tower)和单塔(Single-Tower)两种架构,分别服务于召回和精排两个阶段:
模型规格:
| 模型类型 | 参数量 | 层数 | 序列长度 | Embedding维度 | 量化支持 | MRL支持 |
|---|---|---|---|---|---|---|
| Qwen3-VL-Embedding-2B | 2B | 28 | 32K | 2048 | ✅ | ✅ |
| Qwen3-VL-Embedding-8B | 8B | 36 | 32K | 4096 | ✅ | ✅ |
| Qwen3-VL-Reranker-2B | 2B | 28 | 32K | - | - | - |
| Qwen3-VL-Reranker-8B | 8B | 36 | 32K | - | - | - |
2.2 Embedding 模型:双塔架构
Embedding 模型采用双塔架构,分别对query和文档进行独立编码,适合大规模检索场景:
核心特点:
- 独立编码:query和文档可独立编码,支持离线索引构建
- 高效检索:通过余弦相似度快速计算相关性
- 灵活输入:支持文本、图像、视频及其组合
输入模板:
<|im_start|>system{Instruction}<|im_end|><|im_start|>user{Instance}<|im_end|><|endoftext|>2.3 Reranker 模型:单塔架构
Reranker 模型采用单塔架构,通过交叉注意力机制进行深度交互:
核心特点:
- 深度交互:Query 和 Document 在同一序列中进行交叉注意力计算
- 精确评分:通过预测 “yes”/“no” token 的概率计算相关性分数
- 细粒度判断:能够捕捉微妙的语义差异
输入模板:
<|im_start|>systemJudge whether the Document meets the requirements based on the Query and the Instruct provided. Note that the answer can only be "yes" or "no".<|im_end|><|im_start|>user<Instruct>: {Instruction}<Query>: {Query}<Document>: {Document}<|im_end|>- 核心实现解析
3.1 Embedding 模型实现
基于代码分析,Embedding 模型的核心实现包含以下几个关键组件:
3.1.1 模型封装类
设计要点:
- 继承
Qwen3VLPreTrainedModel,复用 Qwen3-VL 的视觉-语言理解能力 - 直接返回 hidden states,不进行生成任务的前向传播
3.1.2 特征提取与池化
Embedding 模型的关键在于如何从模型的 hidden states 中提取固定维度的向量表示:
为什么使用最后一个 token:
<|endoftext|>token 位于序列末尾,聚合了所有上下文信息- 相比平均池化,最后一个 token 能更好地保留序列的语义完整性
- 与训练时的目标一致(使用最后一个 token 的 hidden state)
3.1.3 多模态输入处理
模型支持灵活的输入格式,包括文本、图像、视频及其组合:
def format_model_input(self, text=None, image=None, video=None, instruction=None, fps=None, max_frames=None): """格式化多模态输入为对话格式""" conversation = [ {"role": "system", "content": [{"type": "text", "text": instruction or self.default_instruction}]}, {"role": "user", "content": content} ] # 处理视频输入 if video: if isinstance(video, list): # 帧序列:均匀采样 video_content = sample_frames(video_content, self.num_frames, self.max_frames) elif isinstance(video, str): # 视频文件:按 fps 采样 video_kwargs = {'fps': fps or self.fps, 'max_frames': max_frames or self.max_frames} content.append({'type': 'video', 'video': video_content, **video_kwargs}) # 处理图像输入 if image: content.append({ 'type': 'image', 'image': image_content, "min_pixels": self.min_pixels, # 最小像素数:4×32×32 = 4096 "max_pixels": self.max_pixels # 最大像素数:1800×32×32 ≈ 1.8M }) # 处理文本输入 if text: content.append({'type': 'text', 'text': text}) return conversation关键参数:
- 图像分辨率控制:
min_pixels=4096,max_pixels=1843200(约 1280×1440) - 视频采样策略:默认 1 FPS,最多 64 帧,总像素预算约 786 万像素
- 动态分辨率:保持宽高比的同时限制 token 消耗
3.1.4 完整推理流程
def process(self, inputs: List[Dict[str, Any]], normalize: bool = True): """完整的 Embedding 生成流程""" # 1. 格式化输入为对话格式 conversations = [self.format_model_input( text=ele.get('text'), image=ele.get('image'), video=ele.get('video'), instruction=ele.get('instruction'), fps=ele.get('fps'), max_frames=ele.get('max_frames') ) for ele in inputs] # 2. 预处理:tokenize + 视觉特征提取 processed_inputs = self._preprocess_inputs(conversations) processed_inputs = {k: v.to(self.model.device) for k, v in processed_inputs.items()} # 3. 前向传播 outputs = self.forward(processed_inputs) # 4. 池化:提取最后一个 token 的 hidden state embeddings = self._pooling_last( outputs['last_hidden_state'], outputs['attention_mask'] ) # 5. L2 归一化(用于余弦相似度计算) if normalize: embeddings = F.normalize(embeddings, p=2, dim=-1) return embeddings3.2 Reranker 模型实现
Reranker 模型的核心在于如何计算 Query-Document 对的相关性分数:
3.2.1 相关性分数计算
设计原理:
- 利用语言模型 head 中 “yes” 和 “no” token 的权重差
- 通过
sigmoid(logit_yes - logit_no)计算相关性概率 - 相比直接分类,这种方式能更好地利用预训练模型的语义理解能力
3.2.2 输入格式化
Reranker 需要将 Query 和 Document 组合到同一序列中:
- 训练策略
4.1 多阶段训练流程
Qwen3-VL-Embedding 采用三阶段训练策略,逐步提升模型性能:
Stage 1: 对比预训练(Contrastive Pre-training)
目标:在大规模合成数据上建立基础的相关性理解能力
数据:使用 Qwen3-VL-32B 生成的多模态、多任务合成数据
损失函数:扩展的 InfoNCE 损失
其中 包含:
- 正样本对
- K 个硬负样本
- Batch 内其他query
- Batch 内其他文档
关键技巧:False Negative 掩码机制
当相似度分数过高时,可能是误判的负样本,需要掩码避免错误优化。
Stage 2: 多任务对比学习与监督微调
目标:在高质量数据上提升多任务性能
数据:精选的公开数据集 + 内部数据 + 采样合成数据
改进:
- 使用 Stage 1 训练的模型进行数据挖掘,提升数据质量
- 针对不同任务类型设计专门的对比目标
- 同时训练 Reranker 模型
损失函数调整:移除 query-query 和 document-document 对比项,专注于 query-document 对齐
Stage 3: 蒸馏与模型合并
目标:从 Reranker 中蒸馏相关性判别能力
流程:
- 蒸馏:使用 Reranker 生成细粒度相关性分数,指导 Embedding 模型训练
- 模型合并:将蒸馏后的模型(s2)与 Stage 2 模型(s1)合并,平衡检索和分类/QA 任务性能
4.2 数据合成策略
Figure 3 & 4: 训练数据中不同类别的分布(左)和数据合成种子池的分布(右)
4.2.1 种子池构建
- 质量过滤:过滤低分辨率、异常宽高比的素材
- 结构优化:视频场景切分、去除静态/损坏片段
- 细粒度标注:使用 Qwen3-VL-32B 生成类别标签
- 跨模态对齐:使用 GME 模型过滤低置信度或视觉-文本不对齐的样本
- 类别重平衡:确保各类别数据分布均衡
4.2.2 任务特定数据合成
图像任务:
- 分类:图像 + 分类指令 → 类别标签
- 问答:图像 + 问题 → 答案
- 检索:搜索文本 → 候选图像
视频任务:
- 分类:视频 + 分类任务 → 类别
- 问答:视频 + 问题 → 答案
- 检索:文本描述 → 候选视频
- 时刻检索:文本query + 关键帧 → 视频片段
4.3 硬负样本挖掘
硬负样本在对比学习中至关重要:关键参数:
threshold_positive:正样本分数阈值margin:安全边距,避免误判负样本
- 高效推理技术
5.1 Matryoshka Representation Learning (MRL)
MRL 允许在训练时同时优化多个维度的表示,推理时可根据存储和计算约束灵活选择维度:优势:
- 无需重训练即可调整维度
- 在存储和性能间灵活权衡
- 训练时只需覆盖足够密集的维度集合
5.2 Quantization-Aware Training (QAT)
通过量化感知训练,模型在低精度(int8 或 binary)下仍能保持性能:量化效果:
- int8 量化:性能损失可忽略(< 1%)
- Binary 量化:性能下降明显,但随着维度降低影响增大
Figure 6: 不同嵌入维度和量化方案下的性能分析(MSMARCO 和 VL3-Syn 数据集),展示了 MRL 和 QAT 技术在文本检索和跨模态图像检索任务上的性能表现,可以看到在合理维度范围内,性能下降是可接受的。
- 性能评估
6.1 MMEB-V2 基准测试
Qwen3-VL-Embedding-8B 在 MMEB-V2 基准测试中取得了77.8 分的综合成绩,排名第一:
| 模型 | 参数量 | Image Overall | Video Overall | VisDoc Overall | All |
|---|---|---|---|---|---|
| VLM2Vec-V2 | 2B | 64.9 | 34.6 | 69.2 | 59.2 |
| GME-8B | 8B | 56.0 | 38.4 | 79.3 | 59.1 |
| Ops-MM-embedding-v1 | 8B | 72.7 | 53.8 | 74.4 | 68.9 |
| RzenEmbed | 8B | 75.9 | 55.7 | 81.3 | 72.9 |
| Qwen3-VL-Embedding-2B | 2B | 75.0 | 61.9 | 79.2 | 73.2 |
| Qwen3-VL-Embedding-8B | 8B | 80.1 | 67.1 | 82.4 | 77.8 |
关键亮点:
- 图像任务:80.1 分,在分类、QA、检索、定位等任务上全面领先
- 视频任务:67.1 分,相比其他模型有显著提升
- 视觉文档:82.4 分,在 VDR、VisRAG 等任务上表现优异
6.2 训练阶段性能分析
Figure 7 展示了图像空间分辨率和视频时间/空间粒度对模型性能的影响,可以看到性能随资源消耗增加而提升,但在最高消耗水平时出现轻微回归。
| 模型阶段 | Image Overall | Video Overall | VisDoc Overall | All |
|---|---|---|---|---|
| s0 (预训练) | 65.8 | 57.5 | 74.8 | 66.6 |
| s1 (多任务微调) | 74.8 | 60.3 | 77.1 | 72.1 |
| s2 (蒸馏) | 71.3 | 59.5 | 80.9 | 71.5 |
| s3 (合并) | 75.0 | 61.9 | 79.2 | 73.2 |
观察:
- Stage 2 蒸馏后,检索任务性能显著提升,但分类/QA 任务略有下降
- Stage 3 模型合并成功平衡了各项任务性能
6.3 Reranker 性能
| 模型 | Size | MMEB-v2(Retrieval) | MMTEB(Retrieval) | JinaVDR | ViDoRe(v3) |
|---|---|---|---|---|---|
| Qwen3-VL-Embedding-2B | 2B | 73.4 | 68.1 | 71.0 | 52.9 |
| jina-reranker-m0 | 2B | - | - | 82.2 | 57.8 |
| Qwen3-VL-Reranker-2B | 2B | 75.1 | 70.0 | 80.9 | 60.8 |
| Qwen3-VL-Reranker-8B | 8B | 79.2 | 74.9 | 83.6 | 66.7 |
Reranker 模型相比基础 Embedding 模型有1.7-4.1 分的提升。
6.4 纯文本任务性能
在 MMTEB 多语言基准测试中,Qwen3-VL-Embedding-8B 取得了67.9 分的平均任务分数,与同规模的纯文本 Embedding 模型性能相当:
| 模型 | Size | Mean (Task) | Retrieval | STS |
|---|---|---|---|---|
| Qwen3-Embedding-8B | 8B | 70.6 | 70.9 | 81.1 |
| Qwen3-VL-Embedding-8B | 8B | 67.9 | 69.4 | 75.4 |
虽然多模态能力带来了一定的文本性能损失,但仍在可接受范围内。
- 在 GUI-Agent 中的知识增强落地考量
GUI-Agent(图形界面智能体)作为能够理解和操作图形界面的 AI 系统,其核心挑战在于如何从屏幕截图、UI 元素、文档图像等多模态信息中提取知识,并基于这些知识做出准确的决策。Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 为 GUI-Agent 提供了强大的多模态知识检索与增强能力。
7.1 GUI-Agent 的知识增强需求
GUI-Agent 在执行任务时面临以下知识检索需求:
1. 屏幕理解与上下文检索
- 场景:Agent 需要理解当前屏幕截图,检索相关的操作文档、教程或历史经验
- 挑战:屏幕截图包含复杂的 UI 布局、文本、图标等混合信息
- 解决方案:使用 Qwen3-VL-Embedding 将屏幕截图编码为向量,在知识库中检索相似的操作场景
2. 文档与界面元素的跨模态匹配
- 场景:用户查询"如何登录",需要匹配包含登录界面截图的操作文档
- 挑战:查询是文本,知识库包含截图、PDF 页面等视觉内容
- 解决方案:利用统一的多模态表示空间,实现文本查询与视觉文档的语义对齐
3. 操作步骤的精确排序
- 场景:检索到多个相关操作步骤,需要按相关性排序
- 挑战:需要理解查询意图与候选步骤的细粒度匹配度
- 解决方案:使用 Reranker 模型对候选结果进行精确排序
7.2 架构设计
在 GUI-Agent 中集成 Qwen3-VL-Embedding 和 Reranker 的典型架构:
class GUIAgentKnowledgeBase: """GUI Agent 知识增强系统""" def __init__(self): # 初始化 Embedding 和 Reranker 模型 self.embedder = Qwen3VLEmbedder( model_name_or_path="./models/Qwen3-VL-Embedding-2B", default_instruction="Retrieve relevant GUI operation knowledge." ) self.reranker = Qwen3VLReranker( model_name_or_path="./models/Qwen3-VL-Reranker-2B" ) # 向量数据库(如 Milvus、Qdrant) self.vector_db = None def index_knowledge(self, knowledge_items): """索引知识库:支持文本、截图、PDF 页面等""" for item in knowledge_items: # 多模态输入:文本描述 + 截图/PDF 页面 embedding = self.embedder.process([{ "text": item.get("description", ""), "image": item.get("screenshot", None), "instruction": "Represent GUI operation knowledge." }]) # 存储到向量数据库 self.vector_db.insert(item["id"], embedding) def retrieve(self, query_screenshot, query_text, top_k=10): """检索相关知识""" # 1. 生成查询向量(屏幕截图 + 文本描述) query_emb = self.embedder.process([{ "image": query_screenshot, "text": query_text, "instruction": "Retrieve relevant GUI operation knowledge." }]) # 2. 向量检索 Top-K 候选 candidates = self.vector_db.search(query_emb, top_k=top_k) # 3. Reranker 精排 rerank_inputs = { "query": { "image": query_screenshot, "text": query_text }, "documents": [ { "text": cand["description"], "image": cand["screenshot"] } for cand in candidates ] } scores = self.reranker.process(rerank_inputs) # 4. 返回排序后的结果 ranked_results = sorted( zip(candidates, scores), key=lambda x: x[1], reverse=True ) return ranked_results7.3 关键落地考量
7.3.1 知识库构建
多模态知识组织:
- 操作文档:文本描述 + 关键步骤截图
- 历史经验:成功/失败的操作序列,包含屏幕截图
- UI 组件库:常见 UI 元素的截图与功能描述
- 错误案例:错误截图 + 解决方案文本
索引策略:
# 示例:索引操作文档knowledge_items = [ { "id": "login_guide_001", "description": "用户登录操作指南:点击登录按钮,输入用户名和密码", "screenshot": "screenshots/login_page.png", "category": "authentication", "steps": ["点击登录", "输入用户名", "输入密码", "点击确认"] }, # ... 更多知识项]7.3.2 查询优化
多模态查询构建:
- 屏幕截图:当前 GUI 状态
- 用户意图文本:自然语言描述的操作目标
- 上下文信息:历史操作、错误信息等
Instruction 定制:
# 针对不同场景定制 instructioninstructions = { "operation_guide": "Retrieve GUI operation guides matching the current screen.", "error_solution": "Find solutions for the error shown in the screenshot.", "ui_component": "Identify UI components and their functions in the screenshot."}7.3.3 性能优化
批量处理:
- GUI Agent 可能需要同时处理多个屏幕截图
- 使用批量编码提升吞吐量
def batch_retrieve(self, queries, batch_size=8): """批量检索,提升效率""" query_embs = [] for query in queries: emb = self.embedder.process([{ "image": query["screenshot"], "text": query["text"] }]) query_embs.append(emb) # 批量向量检索 all_results = self.vector_db.batch_search(query_embs, top_k=10) # 批量 Rerank rerank_results = [] for i, candidates in enumerate(all_results): scores = self.reranker.process({ "query": queries[i], "documents": candidates }) rerank_results.append(sorted( zip(candidates, scores), key=lambda x: x[1], reverse=True )) return rerank_resultsMRL 维度选择:
- GUI Agent 场景下,知识库可能包含大量截图
- 使用 MRL 降低存储成本,选择 512 或 1024 维即可
# 使用降维后的 Embeddingembeddings_512 = embeddings[:, :512] # 75% 存储节省,性能损失 < 2%7.3.4 实时性要求
缓存策略:
- 常见屏幕状态的 Embedding 可以缓存
- Reranker 结果可以缓存,避免重复计算
异步处理:
- Embedding 生成和向量检索可以异步执行
- Reranker 仅在需要高精度时调用
import asyncioasync def async_retrieve(self, query): """异步检索,提升响应速度""" # 并行执行 Embedding 和向量检索 query_emb, candidates = await asyncio.gather( self.embedder.process_async([query]), self.vector_db.search_async(query_emb) ) # Reranker 可以按需调用 if len(candidates) > 5: return self.reranker.process(...) return candidates7.4 总结
Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 为 GUI-Agent 提供了强大的多模态知识检索能力,通过统一的表示空间和精确的排序机制,能够有效提升 Agent 的理解和操作能力。在实际落地中,需要重点关注知识库构建、查询优化、性能调优等方面,结合 GUI-Agent 的特点进行定制化设计。
核心优势:
- 多模态统一:文本、截图、PDF 统一编码,实现跨模态检索
- 高精度排序:Reranker 模型确保最相关知识的优先返回
- 工程友好:MRL、量化等特性支持高效部署
落地建议:
- 从核心场景入手,逐步扩展知识库
- 重视知识质量,确保操作文档的准确性和完整性
- 持续优化,基于实际使用反馈迭代改进
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓