照片搜索里,CLIP 召回之后再让大模型 rerank,到底值不值?

500 张真实照片、Open Images 官方标注做 ground truth、CLIP 真跑、百炼 qwen3.6-35b-a3b 真判。 下面每一个数字都是跑出来的,包括不利于这个结论的那些。

左右对照:同一次搜索,rerank 前 vs 后

预置搜索词
召回模型
重排算力
试你自己的 同一 IP 每小时 5 次

CLIP 召回原序

语义缓存-rerank优化后

标注确认有猫 标注确认没有猫 置灰打叉=被大模型判定为不匹配、不再展示 鼠标悬停看模型给的判定理由

上游还有一步:意图理解

上面演示的是「重排」,但小米方案的第一个大模型介入点在更上游——把搜索词送进 CLIP 之前, 先用端侧小模型拆成结构化槽位。这一步的价值不在多认几个字,而在修掉小模型 NLU 的结构性错误: 传统 Bert 会把「日本豆腐」里的「日本」抽成地点槽位,这类错误不是调参能解决的。 下面这个框真跑百炼云端的 qwen-plus(本 demo 全链路走云端,不依赖任何本地模型)。

试试这些
或自己输入 云端 qwen-plus · 每小时 30 次
诚实说明:这里没有 LoRA 微调,只用 PROMPT 引导,所以演示的是能力形态、不是效果收益。 小米材料里最关键的一条证据恰恰是:在 search_phrase 槽位上,Qwen3-1.7B 裸模型只有 0.27、 Qwen3-4B 0.51、MiMo-7B 0.37,三者全部低于现网 Bert 的 0.56;加了 LoRA 之后才到 0.63。 也就是说收益来自领域微调,不是模型规模——直接拿裸大模型换掉现网 NLU 会更差。 这条对我们的含义是:NLU 这一步的成本大头在标注与微调,不在推理。

评测语料

按真实相册的形态构造:猫是少数。三档难度全部由官方标注客观切分,不含我的主观判断。

指标

只统计与 ground truth 语义严格等价的搜索词。「橘猫」「家里的宠物」这类更窄或更宽的词只供体验、不计分。 用「有没有猫」去判「是不是橘猫」的对错,会得出完全错误的结论。

SigLIP2 能不能直接换掉现网 CLIP

小米方案提出用 SigLIP2 做统一 ViT backbone,同时服务图文检索与标签分类。其材料给的结论是 「未微调 SigLIP2 即优于 OS2 达 15%」——但那个比较基线是已被淘汰两代的 OS2。 这里在本站同一套 500 张标注语料上独立复现:只比召回质量,不掺 rerank,看纯检索谁更强。

ReTag:让大模型回头校验标签,会付出什么代价

小米方案的第三个介入点在建库侧:先用小模型给照片打标签,再用 VLM 逐个复核、重估置信度。 它给的三个输出样例全都表现为「剔掉细粒度标签、留下泛化标签」—— 我据此判断它会削弱长尾检索能力,但那只是从三个样例做的推断。 这里在 400 张真实照片、1157 个标签上跑了一遍,把这条推断变成可量化的结论。

大模型到底修好了什么

CLIP 的错误高度结构化,不是随机的:混进来的几乎全是「猫的形象」——画、雕塑、邮票、包装图案。 向量相似度分不出「真猫」和「猫的图案」,这不是靠换更大的 CLIP 能解决的。

代价

rerank 只作用于 top-30,与库大小无关:库从 500 张涨到 50 万张, 这部分成本不变,变的是 CLIP 检索那一段(向量检索,毫秒级)。

这个 demo 不能证明什么

rerank 提升不了召回率。它只能重排 CLIP 已经捞出来的那 30 张。CLIP 没捞进来的猫(小目标、被遮挡、藏在灌木丛里的), rerank 一张也救不回来;上表 P@30 前后完全不动,正是这个原因。要提召回得改召回侧,加 rerank 没用。

它也会误伤。「一只猫的照片」那一栏,过滤把召回集里的真猫也删掉了几张。精度换召回,这笔账要按产品场景算。