摘要

Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 是基于 Qwen3-VL 基础模型构建的多模态检索与排序模型系列,在 MMEB-V2 基准测试中取得了 77.8 分的 SOTA 成绩。本文深入解析其架构设计、训练策略和核心实现,并通过代码实践展示如何在实际场景中应用这些模型。Figure 1: 统一多模态表示空间示意图。Qwen3-VL-Embedding 将多源数据(文本、图像、视觉文档和视频)映射到共同的语义流形

1. 背景与问题定义

1.1 多模态检索的挑战

多模态内容的爆炸式增长,其中充斥着图像、文档截图、视频等多样化数据模态,这要求检索系统能够:

  • 跨模态理解:理解文本与图像/视频之间的语义关联
  • 统一表示空间:将不同模态映射到同一语义空间
  • 细粒度排序:对候选结果进行精确的相关性评分

1.2 现有方案的局限

虽然 CLIP 等模型在图像-文本对齐方面取得了成功,但面对复杂多模态检索任务时仍存在不足:

  • 模态覆盖有限:难以处理 视频、视觉文档 等复杂模态
  • 任务泛化能力弱:在分类、QA、检索等不同任务间性能不平衡
  • 部署效率低:缺乏灵活的维度选择和量化支持

Qwen3-VL-Embedding 系列通过基于 VLM 的统一架构和多阶段训练策略,有效解决了这些问题。

2. 架构设计

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. 核心实现解析

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 embeddings

3.2 Reranker 模型实现

Reranker 模型的核心在于如何计算 Query-Document 对的相关性分数:

3.2.1 相关性分数计算

设计原理

  • 利用语言模型 head 中 “yes” 和 “no” token 的权重差
  • 通过 sigmoid(logit_yes - logit_no) 计算相关性概率
  • 相比直接分类,这种方式能更好地利用预训练模型的语义理解能力
3.2.2 输入格式化

Reranker 需要将 Query 和 Document 组合到同一序列中:

4. 训练策略

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 中蒸馏相关性判别能力

流程

  1. 蒸馏:使用 Reranker 生成细粒度相关性分数,指导 Embedding 模型训练
  2. 模型合并:将蒸馏后的模型(s2)与 Stage 2 模型(s1)合并,平衡检索和分类/QA 任务性能

4.2 数据合成策略

Figure 3 & 4: 训练数据中不同类别的分布(左)和数据合成种子池的分布(右)

4.2.1 种子池构建
  1. 质量过滤:过滤低分辨率、异常宽高比的素材
  2. 结构优化:视频场景切分、去除静态/损坏片段
  3. 细粒度标注:使用 Qwen3-VL-32B 生成类别标签
  4. 跨模态对齐:使用 GME 模型过滤低置信度或视觉-文本不对齐的样本
  5. 类别重平衡:确保各类别数据分布均衡
4.2.2 任务特定数据合成

图像任务

  • 分类:图像 + 分类指令 → 类别标签
  • 问答:图像 + 问题 → 答案
  • 检索:搜索文本 → 候选图像

视频任务

  • 分类:视频 + 分类任务 → 类别
  • 问答:视频 + 问题 → 答案
  • 检索:文本描述 → 候选视频
  • 时刻检索:文本query + 关键帧 → 视频片段

4.3 硬负样本挖掘

硬负样本在对比学习中至关重要:关键参数

  • threshold_positive:正样本分数阈值
  • margin:安全边距,避免误判负样本

5. 高效推理技术

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. 性能评估

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

虽然多模态能力带来了一定的文本性能损失,但仍在可接受范围内。

7. 在 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_results

7.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_results

MRL 维度选择

  • 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 candidates

7.4 总结

Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 为 GUI-Agent 提供了强大的多模态知识检索能力,通过统一的表示空间和精确的排序机制,能够有效提升 Agent 的理解和操作能力。在实际落地中,需要重点关注知识库构建、查询优化、性能调优等方面,结合 GUI-Agent 的特点进行定制化设计。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐