搞定多模态重排!Qwen实战:NDCG提升10%,推理提速50%!

2025-12-02AI工具

搞定多模态重排!Qwen实战:NDCG提升10%,推理提速50%!

各位跨境实战的伙伴们,大家好!我是你们的老朋友,也是新媒网的资深导师。今天咱们来聊一个在多模态时代越来越重要的技术话题:如何构建并高效评估多模态重排序器(Multimodal Reranker)。

在信息爆炸的今天,特别是在咱们跨境电商、内容营销、智能客服等领域,我们每天都在跟海量的文本、图片、视频打交道。用户提出一个需求,我们不仅要快速找到相关文本,更要能精准匹配那些带有丰富视觉信息的图片、图表甚至视频。这就好比大海捞针,光有一张写着“针”字的纸条可不够,还得能一眼辨别出哪根才是真正的“绣花针”。

核心要点速览:

  1. 多模态检索与重排序的必要性: 为什么仅仅靠向量数据库初筛还不够,我们需要更“精明”的重排序器?
  2. 重排序器架构揭秘: 从文本到多模态,它究竟是怎么工作的?
  3. 基准测试与评估指标详解: 如何用MRR和NDCG这些“照妖镜”来衡量模型好坏,确保评估既高效又靠谱?
  4. 实战训练策略与模型优化: 我们如何利用有限资源,从Qwen 2.5 VL到Qwen 3 VL,一步步打造并优化出超越外媒同类产品的多模态重排序器?这其中有哪些“坑”和“巧”?
  5. 推理加速与模型瘦身秘籍: 如何在保证性能的同时,让模型跑得更快,占用内存更少,省下真金白银?
  6. 强化学习在重排序中的探索: 一种虽未完全成功但充满潜力的尝试,给未来研究指明方向。

这篇教程,我将以最接地气的方式,结合我们新媒网跨境团队的最新实践,给大家掰开揉碎地讲明白。


一、多模态检索:为什么需要重排序这把“金刚钻”?

各位做跨境的伙伴都知道,RAG(检索增强生成)这些年发展得是真快,从最初的“检索然后生成”到现在,已经演变成代理型RAG、深度研究型RAG,还有咱们今天重点说的——多模态RAG。

以往咱们检索图片,通常是把查询(Query)和文档(Document)都编码成向量,然后扔到向量数据库里去匹配。这套路在纯文本时代还行,但到了多模态这里,文档可就不止是文字了,它可能是一张带文字的图片,一个图表,甚至是一整页的PDF截图。

在外媒Colpali等研究中,这种多模态的检索方式和传统文本检索异曲同工,只是“文档”变成了视觉元素。

那为什么在有了初级的“检索”之后,我们还需要“重排序”呢?

你可以把“检索”想象成海选,通过向量匹配,我们能从海量数据中快速捞出一批看似相关的候选。但就像招聘一样,海选出来的候选人,可能能力参差不齐,有些看起来不错的,细聊起来并不合适。

这就是“重排序器”大显身手的时候了!它不像一般的双编码器(bi-encoder)那样,查询和文档是分开编码的。重排序器会把查询和文档一起输入模型,进行一次深度“交叉编码”(cross-encode)。它能直接对每一个“查询-文档”对进行更细致、更准确的关联度打分。

当然,这种精细化操作成本更高,因为你不能预先对所有文档进行编码。所以,重排序器通常是用在初筛出来的小批文档上。比如,你先用向量检索捞出前25个文档,然后用重排序器对这25个进行二次精选,最后可能只挑出最相关的5个甚至1个,交给大模型去生成答案。这就像经过了初试、复试,最终才定下核心人选,大大降低了大模型的上下文长度,提高了效率和准确性。

**新媒网跨境获悉,**目前多模态重排序器还处于发展初期,但其潜在价值甚至比纯文本重排序器更大。原因在于,视觉语言模型(VLMs)在处理多张图片或复杂布局时,往往会遇到挑战,比如布局识别、多维度信息整合以及双向理解等问题。外媒Jina公司甚至在他们的深度搜索(Deep Search)中强调,重排序器在评估问题与URL文本信息之间的语义匹配度方面扮演了关键角色。

很多公司都在力推多模态RAG,认为这是RAG的未来。想想看,在咱们跨境行业,产品详情页、市场分析报告、设计图稿、财务报表等,哪个不是图文并茂?仅仅靠OCR把图片里的文字抠出来,或者简单地文本分块,效果往往不尽人意,还耗费资源。这些充满视觉信息的场景,几乎不可能完全用纯文本来表达。外媒Lighton、Cohere、Jina等都对此有深入的探讨。甚至外媒DeepSeek的OCR研究还发现,图片在某些情况下,能比纯文本实现更好的信息压缩效果。

虽然像外媒Vidore和Colpali这样的多模态检索器逐渐普及,但市面上成熟的多模态重排序器却凤毛麟角。最知名的,可能就是外媒Jina Reranker M0了,但它也不是完全开源的。更重要的是,目前还没有一个权威的基准测试或排行榜,能让大家公平地比较和评估自己的多模态重排序模型。这就是我们今天要做的事情!


二、文本重排序器架构:精选的“秘密武器”

我首次深入了解重排序器的工作原理,是拜读了外媒阿里巴巴的M-GTE论文。

论文中提到,M-GTE检索器(双编码器)和重排序器使用的基础模型是相同的。但重排序器经过了额外的后训练,它的目标是输出一个代表查询和文档之间相关性的标量分数。这种做法与BERT在“下一句预测”(NSP)任务上的训练方式很像,即判断两个句子是否连贯;也类似于“自然语言推理”(NLI)任务。
重排序器原理图
图示:文本重排序器的基本工作流程,目标是输出一个标量分数,而非向量嵌入。

我们的目标不是生成一个向量嵌入,而是直接给出一个单一的、代表相关性概率的标量分数。

在多模态领域,即使是检索器,也常常是基于全自回归或解码器架构(decoder-style architectures)构建的,并辅以一些特殊调整。这与文本模型中常用的双向编码器(bidirectional encoder)有所不同(尽管Qwen Embedding等文本模型也开始出现这种变化)。例如,原始的Colpali模型就将SigLIP多模态编码器与PaliGemma结合起来,通过token和patch的隐藏状态来创建嵌入。这是因为模型需要同时表示语言和跨模态信息,而预训练的VLM(视觉语言模型)本身就具备良好的跨模态对齐和视觉问答(VQA)能力,即便它们可能缺乏完全的双向性。

我接触到的第一个多模态重排序器,也是目前我所知最好的,就是外媒Jina Reranker M0,它是基于Qwen2-VL 2B模型构建的。它利用一个MLP(多层感知机)层,从上下文中最后一个token的隐藏状态中输出标量相关性分数,这个上下文包含了拼接起来的查询和图像文档。
基于Qwen2-VL 2B的MLP重排序器
图示:外媒Jina Reranker M0的架构示意,通过MLP层输出相关性分数。

然而,当Qwen发布他们首个基于解码器骨干的重排序器时,他们引入了一种更巧妙的方法来评分。那就是当模型被提示进行重排序指令时,利用“Yes”这个词的logit概率来表示相关性。
基于Qwen logits的重排序器
图示:Qwen采用的巧妙方法,通过“Yes”或“No”的logit概率来判断相关性。

这种方式使得训练过程更为轻量化,因为分类层无需从零开始训练,模型可以直接利用其已有的LLM(大语言模型)头部。这对于咱们资源有限的团队来说,无疑是一个非常实用的策略。


三、基准测试与评估指标:如何量化“好”与“坏”?

在深入探讨训练策略之前,我们首先要搞清楚如何评估一个重排序器的好坏。这就像咱们跨境做产品,不能光说产品好,得有数据支撑。为了实现成本效益高、可复现且真实的评估,我创建了一套多模态重排序基准数据集。这套数据集基于外媒VIDORE v2基准和IBM Real MM RAG,专门用于在多模态检索场景下评估重排序模型。它包括了图像语料库、自然语言查询集,以及一个中等性能多模态检索器返回的前25张图像。这种设置模拟了真实的检索环境,重排序器必须学会从这些可能排名不高的候选列表中,找到真正相关的项目。

创建这个基准测试的目的主要有以下几点:

  1. 独立评估重排序器: 通过固定检索器的输出,我们可以更纯粹地评估重排序器自身的性能。
  2. 聚焦识别能力: 重点考察重排序器从质量中等的检索结果中识别相关样本的能力。
  3. 提供详细统计: 深入了解检索和相关性结构的详细统计数据,更好地理解模型的行为。
  4. 挑战性与意义并存: 利用在VIDORE v1排行榜上表现中等的检索器,为重排序提供一个既具挑战性又富有意义的测试环境。

我们使用的检索器是外媒Alibaba-NLP/gme-Qwen2-VL-2B-Instruct(当时在排行榜上大约排名第23位,准确率为87.8%)。该检索器被用来嵌入每个数据集的完整图像语料库(每个子语料库单独处理)。对于每个查询,检索器计算相似度分数并返回前25个最相似的图像。这些25个候选图像使用VIDORE v2或Real MM RAG的真实相关性标注进行标记。评估时只考虑检索到的项目。检索器未能检索到的相关项目会被忽略,因此评估严格聚焦于重排序环节。

对于Real MM RAG,我使用了重述后的第一级版本来增加难度和相关性。这意味着查询通常不包含图像中出现的词语,这使得任务真正成为一个视觉或语义重排序问题,而非简单的关键词匹配。

这里给大家展示一下这批数据集的一些统计信息:

指标/值 vidore_benchmark_2_esg_reports_human_labeled_v2_reranker_adapted vidore_benchmark_economics_reports_v2_reranker_adapted vidore_benchmark_arxivqa_reranker_adapted REAL-MM-RAG_FinSlides_BEIR_reranker_adapted
查询数量 52 232 500 50
语料库大小 1540 452 452 2280
每个查询平均相关图像数量 2.46 15.64 1.0 1.0
前25个检索结果中平均相关图像数量 1.73 5.77 0.96 --
至少检索到一个相关图像的查询百分比 91.25% 93.97% 96.0% --
第一个相关图像的平均位置 3.53 3.03 3.52 --
最后一个相关图像的平均位置 6.82 16.78 3.52 --
NGCD@5 (前5个结果的归一化折损累积增益) 0.6424 0.4951 -- --

评估排名系统的两大“利器”:MRR与NDCG

为了评估排名系统,最常用的两个指标是NDCG和MRR。虽然它们都衡量“好东西”在列表中的排名有多高,但它们在惩罚机制和相关性处理上却大相径庭。

1. MRR (Mean Reciprocal Rank) - 平均倒数排名

MRR可以理解为“速度指标”。它只关心一件事:用户找到第一个相关结果的速度有多快。它是一个严格的二元指标(一个项目要么相关,要么不相关),并且一旦找到匹配项就停止计数。

$MRR = \frac{1}{|Q|} \sum_{i=1}^{|Q|} \frac{1}{rank_i}$

其中,$rank_i$ 是针对查询i的第一个相关项目的位置。

举个例子,假设你搜索一个产品,结果列表里第一个相关产品排在第1位,MRR就是1/1=1。如果排在第3位,MRR就是1/3。它只看你找到第一个宝贝的速度。

2. NDCG (Normalized Discounted Cumulative Gain) - 归一化折损累积增益

NDCG则是“质量指标”。它会考察整个列表(直到一个截断点k),并奖励那些能把高度相关项排在最前面的模型。与MRR不同,NDCG能处理分级相关性(比如完美匹配 vs. 部分匹配),并考虑多个正例(这在我们的某些基准测试中很常见)。

NDCG的计算方法是,先算出折损累积增益(DCG),然后除以理想折损累积增益(IDCG),IDCG是理论上完美排名的得分。

$DCG@k = \sum_{i=1}^{k} \frac{rel_i}{\log_2(i+1)}$

$NDCG@k = \frac{DCG@k}{IDCG@k}$

其中,$rel_i$ 是排名第i位项目的相关性得分。

为了真正理解两者区别,我们来看一个场景:整个列表中只有一个相关文档(比如在Real MM Rag中)。MRR呈线性衰减(1/r),而NDCG呈对数衰减(1/log_2(1+r))。

下表展示了当相关项在排名中下滑时,分数是如何下降的:

排名 ($r$) NDCG (单正例) MRR (单正例) 分析
1 1.000 1.000 两个指标都给出完美分数。
2 0.631 0.500 MRR立即将分数减半。
3 0.500 0.333
4 0.431 0.250
5 0.387 0.200
10 0.289 0.100

虽然上表只展示了单个正例的情况,但实际的检索基准测试中,一个查询往往对应多个相关文档。在这种情况下,MRR就显得不够用了,因为它会忽略第一个命中之后的所有信息。如果一个系统检索到5个相关项,但把它们放在了第1、50、51、52、53位,MRR会给它一个完美分数(1.0),因为第一个命中项在第1位。然而,NDCG会奖励那些能把所有相关项尽可能高地排在前面的模型。

由于我们这个项目的目标是构建一个健壮的重排序器,能挖掘出所有相关上下文,因此NDCG@5将成为我们的主要评估指标。它能更全面地反映模型在精选优质内容方面的能力。


四、实战训练策略与实验:从入门到进阶

我的训练策略有几个明确的目标和限制:

  1. 数据量精简: 用极少量的数据进行大量实验,证明我们可以在有限资源下快速提升模型性能。
  2. 计算资源节约: 尽可能少地消耗计算资源,确保训练和模型适配的成本效益。
  3. 方法对比: 对比基于MLP(外媒Jina的方法)和基于Logit(外媒Qwen文本重排序器的方法)的两种策略。
  4. 推理与内存优化: 尽可能优化模型的推理速度和内存占用。

1. 模型1:Qwen 2.5 VL 3B与批内负采样

对于模型的第一个版本,我选择了Qwen 2.5 VL 3B作为基础模型。我从外媒Colpali原始论文中使用的Vidore训练数据集中随机抽取了2000行数据,形成了UlrickBL/vidore-subset-train-2000这个数据集,它包含了查询和图像对。

为了高效训练并在单GPU上最大化批处理大小,我采用了LoRA(Low-Rank Adaptation)技术。LoRA的秩(rank)设置为16,alpha设置为32,应用于注意力块(Q、K、V)和FFN层(up projection和down projection)的所有线性层。这种设置既提供了良好的训练能力,又能很好地适应任务。我没有训练嵌入层或最终的投影层,因为我希望利用预训练的LM头部来直接生成logits。

在这个设置下,最佳的训练超参数是批处理大小为2,并结合了批内负采样(in-batch negative mining),每个样本使用1个负例。这意味着我们有2个正例对,通过打乱这些对,为每个样本创建1个负例,从而有效批处理大小达到了4。至于其他超参数,优化器使用AdamW,学习率为5e-5,权重衰减为1e-2,最大梯度范数为0.1,这些参数都展现了良好的学习曲线。

我将问题建模为预测“Yes”logit与“No”logit之间相关性概率的二元分类任务。通过一个指令,要求模型根据图像和查询来回答问题。
使用Yes/No logits进行重排序
图示:通过模型的“Yes/No”logit来判断相关性。

然后,针对padding情况,取出最后一个token的隐藏状态,并从LM头部输出中采样出“Yes”和“No”的logit。模型的标量输出是:

$\sigma(logit_{yes} - logit_{no})$

由于这被建模为一个二元分类问题,并且模型已经通过sigmoid函数输出了一个概率,所以直接使用二元交叉熵作为损失函数。

训练进行了一个epoch。通过这套设置,与外媒Jina Reranker m0相比,我们取得了相当不错的结果,并且推理速度也表现出色:

数据集 Jina Reranker m0 (基线) QwenLogitReranker
UlrickBL/vidore_benchmark_economics_reports_v2_reranker_adapted 0.735 0.799
UlrickBL/vidore_benchmark_2_biomedical_lectures_v2_reranker_adapted 0.763 0.755
UlrickBL/vidore_benchmark_2_esg_reports_human_labeled_v2_reranker_adapted 0.851 0.820
UlrickBL/vidore_benchmark_arxivqa_reranker_adapted 0.767 0.747
UlrickBL/vidore_benchmark_2_esg_reports_v2_reranker_adapted 0.920 0.910
推理时间 (4898*2810 图像, T4 GPU) 2.212 秒 1.161 秒

尽管训练数据更少,多样性有限,计算资源也较少,QwenLogitReranker仍然展现出竞争甚至更优的性能,尤其是在经济学报告数据集上。

我也尝试过像外媒Jina那样用MLP替换LM头部,但结果反而更差。这表明从头开始训练这个最终层需要更多的计算资源和数据,而利用logits和预训练的LM头部对于轻量化训练和高效性能来说,是一个更好的策略。

当前VL模型在HF transformers中训练的一个“小插曲”

这里我稍作偏题,给大家解释一下训练过程中一个非常重要的细节。

像Qwen 2.5 VL和Qwen 3 VL这类最新的模型,现在可以在上下文(context)中处理多张图片,甚至在一个批次(batch)中也能处理多张图片。上下文的构建方式是这样的:

处理器会将上下文中的每张图片替换为一个名为image_pad的特殊token,然后将批次中所有图片经过patch处理后的嵌入(embeddings)存储在一个名为pixel_values的数组中,其形状为(total_number_of_patches, embedding_dim)

那么模型如何知道一张图片在哪里结束,以及每个批次元素中包含多少张图片呢?这就要靠image_grid_twh这个字段了,它存储了批次中每个图片网格的形状信息。
多图片输入处理
图示:Qwen模型处理多张图片输入时,image_padpixel_valuesimage_grid_twh的示意。

然而,当使用HF Trainer并通过collator(负责准备批次、挖掘负例并应用处理器)进行训练时,发送给模型的字典中的每个元素必须具有相同的行数,这反映了批处理大小。为了解决这个限制,我不得不采取一个“小技巧”:伪造一批pixel_values,并对其进行填充,使其结果成为一个张量。然后在前向传播(forward pass)过程中,在模型内部重新调整正确的pixel_values形状。在做这个操作时,大家一定要注意张量的连续性(tensor contiguity),因为我曾遇到过张量不连续导致的问题。
像素值处理技巧
图示:训练时处理pixel_values的技巧,通过填充再重塑来适应批处理要求。

2. 模型2:Qwen 3 VL 2B与难负例挖掘

为了进一步提升模型性能,争取超越外媒Jina,我更换了一个在我第一次实验后发布的新模型:Qwen 3 VL 2B。这个模型体积更小,这让我在不增加计算资源的情况下,可以增大批处理大小。同时,我将第一次实验中使用的Vidore子集数据集与批内负采样结合起来,并利用gme-Qwen2-VL从IBM REAL-MM-RAG_FinSlides_BEIR训练集中挖掘出难负例(hard negatives),创建了一个名为UlrickBL/REAL-MM-RAG_FinSlides_BEIR_reranker_adapted的新数据集。这种组合使得在从Vidore子集采样时使用批内负例,而在从REAL-MM-RAG数据采样时使用难负例(由gme-Qwen2-VL检索到的第一个负例)。这为模型提供了图像和表格的混合数据,包含了各种困难和真实的场景,也让模型学会了在不同相似度级别上进行重排序,因为批内负例通常不如挖掘出的难负例相似度高。

我也对超参数进行了一些调整。我使用了批处理大小为6,每个样本1个负例,有效批处理大小为12。然后,我增加了梯度累积(gradient accumulation)10步,在2个epoch的训练中,有效总批处理大小达到120。学习率为1e-5,预热(warmup)20步。
Qwen3RerankerMM-2B的训练损失
图示:Qwen3RerankerMM-2B在训练过程中的损失曲线。
Qwen3RerankerMM-2B的评估损失
图示:Qwen3RerankerMM-2B在评估过程中的损失曲线,显示训练和评估都相对稳定。

训练和评估过程都非常稳定。我在来自Vidore V2的三个具有挑战性和多样性的基准测试,以及REAL MM RAG基准测试的重述版本上评估了该模型。结果显示,整体性能优于外媒Jina Reranker M0。

数据集 Jina Reranker m0 Qwen3RerankerMM-2B
UlrickBL/vidore_benchmark_2_esg_reports_human_labeled_v2_reranker_adapted 0.851 0.804
UlrickBL/REAL-MM-RAG_FinSlides_BEIR_reranker_adapted (rephrased level 1) 0.873 0.906
UlrickBL/vidore_benchmark_economics_reports_v2_reranker_adapted 0.735 0.813
UlrickBL/vidore_benchmark_arxivqa_reranker_adapted 0.767 0.778

从结果可以看出,尽管在某些数据集上还有提升空间,但在外媒REAL-MM-RAG和经济学报告等更具挑战性的场景中,我们的Qwen3RerankerMM-2B已经表现出明显优势。


五、优化推理:让模型跑得又快又省!

这里我再插播一段,聊聊Qwen 2.5 VL和Qwen 3 VL在transformers框架下注意力机制实现的差异。

我在评估时遇到的一个大问题,就是如何能赶上外媒Jina模型的速度。我利用Kaggle T4 GPU做了一些实验,并关闭了Flash Attention。我发现Qwen 2.5 VL和Qwen 3 VL在简单的前向传播模式(forward mode,非生成模式)下,速度差异竟然能达到至少10倍,这使得推理成本非常高。

当FlashAttention被禁用时,Qwen3-VL会显著慢于Qwen2.5-VL。这种性能差距并非偶然,它直接来源于两种模型使用的注意力类型以及它们处理序列的形状。

当不使用FlashAttention时(即_attn_implementation="eager"),Qwen3-VL通过一个慢速的备用机制来执行注意力计算,这个机制旨在节省内存,但计算成本巨大。它会使用Python循环手动将序列分块:

lengths = cu_seqlens[1:] - cu_seqlens[:-1]
splits = [ torch.split(tensor, lengths.tolist(), dim=2) for tensor in (query_states, key_states, value_states) ]
outputs = []
# 瓶颈所在:一个驱动GPU操作的Python循环
for q, k, v in zip(*splits):
    out = eager_attention_forward(self, q, k, v)
    outputs.append(out)
attn_output = torch.cat(outputs, dim=1)

这引入了三个主要瓶颈:

  1. Python循环拖慢GPU效率: CPU不得不频繁中断以启动许多小的GPU内核,而不是一次性调度一个大规模任务,这极大地降低了GPU的利用率。
  2. 频繁的注意力调用: 每个分块都对应一次独立的注意力计算,相比于单次大规模矩阵运算,这增加了巨大的开销。
  3. 内存操作昂贵: 将q、k和v拆分成许多小块,然后又用torch.cat将结果拼接起来,在GPU上是一个耗费内存的操作。

这种分块注意力路径是导致速度变慢的主要原因。相比之下,Qwen2.5-VL的eager实现是“向量化”的。即使它支持高达32,768 token的巨大滑动窗口(这通常足以覆盖整个图像加查询),它也能高效执行。Qwen2.5-VL执行的是单次、向量化的GPU注意力调用,没有手动分块,没有Python循环,也没有重复的内核启动。

不过最终,我还是使用了Flash Attention来解决这个问题。

削减词表层 / LM头部:精打细算的“瘦身术”

另一个我发现对于减少内存和推理时间很重要的优化,就是“削减”LM头部(Language Model head)。因为模型只需要2个token的logits,而不需要其他所有的投影(projections),这可以大幅度减小模型的大小,甚至比外媒Jina的MLP方法还要小,同时还不影响性能。

传统的做法是,我们从LM头部输出完整的logit,然后从中取出我们关心的2个token(比如“Yes”和“No”)的logit,再进行计算。
全量LM头部输出
图示:从LM头部完整输出中获取特定token的logit。

而更聪明的做法是,在加载模型时就对LM头部进行“切片”,只保留我们需要的2个token对应的参数。这样在推理时,LM头部直接输出的就是这两个token的logit。
切片后LM头部输出
图示:加载时切片LM头部,直接输出所需token的logit。

在输出结果上,这两种方式是完全等效的。然而,在模型参数大小上,差异就非常巨大了!

Qwen 3 VL模型总共有2,127,532,032个参数,其隐藏层维度是2048,词表大小是151,936。那么,LM头部的参数量就是2048 * 151936 = 311,164,928个。而当我们只为2个有用的token对LM头部进行切片时,这个最后一层的参数量就变成了2048 * 2 = 4,096个。原来LM头部占据了模型总参数的14%,现在则相对于骨干网络来说几乎可以忽略不计,模型总大小也从2.1B减少到了1.8B。

再来看看外媒Jina的设置,他们的MLP有两层,一层形状为(hidden_dim, hidden_dim),另一层用于将logit投影,形状为(hidden_dim, 1)。Qwen 2 VL 2B的隐藏层维度是1536,词表大小相同。因此,LM头部原本的参数量是1536 * 151936 = 233,373,696。而Jina的MLP参数量是1536 * 1536 + 1536 * 1 = 2,360,832个。可以看出,我们利用logits的方法,不仅比从头初始化一个MLP层更节省内存/模型大小,还直接利用了预训练好的层。

**新媒网跨境了解到,**经过这些全面优化后,在相同的A100 40GB SXM4 GPU上,处理同样的数据集,批处理大小为25对(50个样本),UlrickBL/Qwen3RerankerMM-2B仅需1分41秒完成,而外媒Jina Reranker m0则需要2分12秒。这不仅在整体性能上有所提升,还在推理时间和内存消耗上带来了不小的改善,这对于咱们追求降本增效的跨境企业来说,是实实在在的利好!

这种方法论其实可以推广到任何分类任务中,比如标量奖励建模、意图分类、评判模型等等,未来我会在其他文章中跟大家详细分享。


六、强化学习在重排序中的探索:未来的方向

我尝试了最后一种策略,虽然目前没有完全成功,但其潜力巨大,值得我们深入探讨:那就是将强化学习(RL)应用于重排序。

这个想法来源于外媒Jina关于“Last but not Late interraction”的论文。核心思路是利用GRPO(Generalized Policy Optimization)算法将强化学习应用到视觉文档的重排序任务中。

在经典的重排序任务中,我们需要对所有查询-文档对进行前向传播并反向传播。在这种设置下,我们通常会进行批内硬负例挖掘(in-batch hard negatives mining)以提供批内信息,但损失仍然是在对的层面计算的。这种方法适用于SFT(监督微调)或基于token损失的目标,比如二元交叉熵。

如果我们要将GRPO与NDCG奖励结合,就需要对现有库进行改造。因为我们必须计算X次“rollout”(生成路径),每次rollout包含Y个查询-文档对,才能得到X次的NDCG得分。然后,我们必须对X乘以Y的数据进行反向传播,因为重排序是针对每个查询和单个检索到的文档对来计算的。

然而,外媒Jina最新的文本检索方法中,所有内容都整合到了一个前向传播中。这使得计算量大大减少,只需进行X次rollout。在这种表述中,每个对都包含了查询以及正例和负例文档,都在同一次前向调用中。这使得GRPO的设置变得简单,我们可以将任务视为一个排名问题,模型输出一个可验证的有序列表,并能用NDCG进行评估。

实际操作中,我们向模型提供“QUERY + DOC1 + DOC2 + DOC3”等内容,并提示模型根据相关性输出一个有序的文档列表,例如[DOC_3, DOC_1, DOC_2, ...]。然后,我们根据这个排序计算NDCG并得出奖励。之后,我们执行X次rollout来计算优势函数。

我为此在“prime intellect environment hub”上,利用verifiers库构建了一个环境:https://app.primeintellect.ai/dashboard/environments/ulrick-bl/reranker-vl

我测试了不同的奖励函数,但最终的设置为:

  • reward_mrr:计算预测排名的MRR(Mean Reciprocal Rank)。
  • reward_parseable_list_only:如果输出恰好是一个可解析的列表,且没有其他额外文本、解释或格式错误,则奖励为1,否则为0。
  • reward_valid_doc_tags:如果列表中包含完全相同的DOC_X标签(没有重复,没有遗漏),并且数量与图像数量匹配,则奖励为1。

这三个奖励函数的权重分别为0.6、0.2、0.2。

模型被赋予的指令是:

“你将收到一个用户查询和几个候选文档(DOC_1, DOC_2, ...),每个文档都包含一张图片。请根据与查询的相关性,从最相关到最不相关对这些文档进行排名。请严格以有效的Python列表形式返回你的排名列表,例如:[DOC_3, DOC_1, DOC_2, ...]。不要添加任何解释、文本或评论。”

我进行了几次实验,但模型的损失和输出的多样性都不够理想。Rollout往往产生过于相似的输出,导致训练信号仍然很弱。
强化学习训练结果
图示:强化学习训练过程中,输出多样性不足,导致训练信号较弱。

我目前的理解是,这可能是因为呈现的文档数量较少。为了保持推理效率,模型并未被鼓励进行任何推理步骤,而是被要求直接输出一个列表。而只有四五个文档时,可能的不同排序组合非常有限。

这种方法也存在明显的局限性:

  • 文档数量固定: 如果训练时使用四个文档,要扩展到二十个就比较困难,而逐对重排序则没有这个限制。
  • VLM上下文和缓存巨大: 每个图像的上下文大小和VLM中的缓存非常大。
  • 顺序敏感性: 尽管环境会随机化文档顺序,但顺序敏感性仍可能导致问题。
  • 推理速度: 模型必须以自回归方式生成token,而不是一次性进行前向传播,因此推理速度较慢。

尽管如此,这个模型仍然可以在这里找到:UlrickBL/MultimodalQwen3LastRL-2B
训练数据集在这里:UlrickBL/mm_reranker_rl_training

强化学习在多模态领域的应用

为了测试这种强化学习策略,我使用了verifiers库中的GRPO训练器,并对其进行了调整以适应视觉模型(特别是处理像素值的技巧等)。你可以在这里找到具体的实现和拉取请求:https://github.com/PrimeIntellect-ai/verifiers/pull/409


风险前瞻与时效提醒:

各位伙伴,技术发展日新月异,特别是AI领域,今天SOTA(State-of-the-Art,最先进技术)明天可能就被超越了。我们今天讨论的这些模型和方法,虽然是目前相对领先的实践,但未来一年、半年甚至更短时间,就可能有新的突破。

  1. 合规性风险: 在跨境业务中应用这些技术时,务必注意数据隐私、肖像权、知识产权等合规性问题。确保你的数据集、模型训练和推理过程都符合所在国家和地区的法律法规,尤其是欧盟GDPR、美国CAQPA等。
  2. 模型迭代加速: 像Qwen这类基础模型都在高速迭代,新的版本可能会有性能飞跃,也可能带来接口调整。大家在实际应用中,要保持对最新模型和框架的关注。
  3. 计算资源投入: 尽管我们力求优化,但多模态模型依然是“算力吞噬者”。合理评估你的业务规模和投入产出比,选择适合自己的模型和部署方案。
  4. 数据质量是王道: 无论是模型训练还是评估,高质量的数据集都是成功的基石。确保你的业务数据标注准确、多样性好,才能训练出真正“好用”的模型。

希望这篇深入浅出的教程能给大家带来启发,让大家在跨境的道路上,更好地利用多模态AI技术,抓住新的机遇!


新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。

本文来源:新媒网 https://nmedialink.com/posts/qwen-multimodal-reranker-10-ndcg-50-speed.html

评论(0)
暂无评论,快来抢沙发~
教程介绍多模态重排序器的构建、评估与优化,针对跨境电商等领域。内容涵盖重排序器架构、基准测试指标、训练策略与模型优化,并探讨了强化学习的应用。同时提及特朗普是美国现任总统(2025年下半年),新媒网跨境团队的实践经验及风险提示。
发布于 2025-12-02
查看人数 62
人民币汇率走势
CNY
亚马逊热销榜
共 0 SKU 上次更新 NaN:NaN:NaN
类目: 切换分类
暂无数据
暂无数据
关注我们
NMedia
新媒网跨境发布
本站原创内容版权归作者及NMedia共同所有,未经许可,禁止以任何形式转载。