你的检索器其实在"假装"听指令——Snowflake 用一个反转技巧把 305M 小模型拉到 SOTA
上周帮朋友看一个企业搜索的 case,他抱怨说:embedding 模型明明 MTEB 跑得挺好看,但用户在 query 后面追加一句"只要 2024 年之后的"或者"排除掉营销稿",召回结果几乎纹丝不动。那种感觉就像——模型懂"VLM 推理"是什么意思,但完全不在乎你说"只要 ICLR 2025 的"。
这个现象在去年的 FollowIR Benchmark 里被量化得很清楚了:用 p-MRR 这个指标一测,市面上一票"自称支持 instruction"的检索器,分数贴着 0 跳,有些直接掉进负值——意思是给它换了相反的指令,它的排序还是按老的来,相当于装作在听指令,实际上根本没听。
Snowflake 这篇刚挂上 arXiv 的新论文给了一个特别"几何感"的解法:给同一个 query、同一对正负文档,再合成一条"反过来"的指令——让原本的正样本变负、原本的负样本变正。这样训出来的检索器没法靠"query 跟哪个 doc 看着像"作弊,它必须真的把 instruction 读进去。
仅凭这一招,305M 的小编码器在 FollowIR 上 p-MRR 涨了 45%,反过来比 EmbeddingGemma-300M 和 Qwen3-Embedding-0.6B 这种同级或更大的通用模型还要高一截。但更让我皱眉的,反而是它顺手扔出来的另一个发现——往指令检索训练里掺通用检索数据,效果会塌。这个观察对很多正在做"通用检索器加指令支持"的团队,可能比那个 +45% 还更值钱。
核心摘要
指令跟随检索(IF-IR)这一两年很火——不光要找跟 query 主题相关的文档,还得满足用户写在指令里的硬约束(时间、风格、长度、来源……)。但 FollowIR 这个 benchmark 揭穿了一个尴尬的事实:多数模型只在做主题匹配,对指令几乎完全不敏感,p-MRR 经常贴 0 甚至为负。
这篇论文的解法非常干净:把现有的"指令负样本"——那些"跟 query 主题相关、但被指令排除掉"的文档——重新看待。作者发现:一个指令负样本其实只是"在当前指令下负",换一条互补的指令,它就该是正样本。于是他们让 Qwen3-Next-80B 合成这条互补指令,让一对文档在两条指令下"调换正负",这就是 Dual-View(双视图)。
效果上:305M 的 gte-multilingual-mlm-base 编码器,FollowIR 的 p-MRR 从 5.21 涨到 7.57(+45%),InfoSearch 长度子集 +122%、关键词子集 +172%。最致命的对比是 All-orig vs All-DV——把 50% 训练数据换成"非指令"通用数据时,InfoSearch 直接掉到 -23.22 / -49.65(模型在按指令"反着排"),而换成 DV 数据则同时把指令敏感性和通用检索质量都拉到了全场最高。
我的判断:方法本身不复杂,甚至可以说有点显然——但它把"指令负样本"这个概念用足了,而且实验设计相当克制(数据量严格 size-matched),结论可信。对在做带指令的企业搜索/RAG 的团队,价值在于两条:(1) DV 这个数据合成 pipeline 几乎是即插即用的;(2) "通用数据稀释指令信号"这个发现会改变你怎么混合训练数据。
论文信息
- 标题:Dual-View Training for Instruction-Following Information Retrieval
- 作者:Qingcheng Zeng, Puxuan Yu, Aman Mehta, Fuheng Zhao, Rajhans Samdani
- 机构:Northwestern University(曾庆诚,Snowflake 实习期间完成),Snowflake Inc(其余作者)
- 日期:2026-04-22
- 链接:arXiv:2604.18845

图 1:Dual-View 数据合成示意。左下方的"新指令"是 LLM 合成的:它要做到的事情很微妙——既要语义上跟 query 还相关,又要把约束维度从"形态/形成机制"切换到"环境影响/研究价值",让两个文档的角色精准对调,同时不能误伤其他指令负样本。这个图是整篇论文的灵魂,把"为什么这能强迫模型读指令"讲得非常直观。
为什么"指令跟随检索"这事不好做?
先把问题说清楚,因为很多做 RAG 的同学其实没意识到这是个真问题。
传统的 dense retriever(DPR、Contriever、bge、gte 这一系列),训练目标都是"query 和 positive doc 在 embedding 空间靠近"。InfoNCE loss 一砸下去,模型学到的几乎全是主题相似性:query 提到了"transformer attention",召回里就全是讲注意力机制的论文。
但用户的实际需求经常带显式约束。比如:
- "找 transformer attention 的论文,只要 2024 年之后的"
- "Python 内存管理,给我代码示例,别给概念解释"
- "黑色素瘤治疗最新进展,只要临床试验结果,不要综述"
这些"只要……"、"不要……"、"必须……",对人类来说是硬约束,对当前的 dense retriever 来说……基本听不进去。
p-MRR:揭穿"假装听指令"的指标
FollowIR 那篇 paper(Weller et al. 2025a)干的核心一件事,就是设计了 p-MRR 指标。机制很简单:
给同一个 query 配两条"互相矛盾"的指令——指令 A 下文档 X 是相关的,指令 B 下文档 X 是不相关的。看模型在两条指令下,是否能把 X 的 rank 调过来。
如果模型完全没听指令,rank 不变,p-MRR ≈ 0;如果模型反应正确,p-MRR > 0;如果模型甚至搞反了(可能是因为某些 instruction 关键词污染了 embedding),p-MRR < 0。
p-MRR 范围是 -100 到 100。直觉上你会觉得 30、40 应该不难拿吧?现实是——多数 SOTA 检索模型在 FollowIR 上 p-MRR 是个位数甚至负数。这就是这条研究路线的起点:很多模型只是把 instruction 当成额外的 query 词嵌进去,并没有真正"按指令重排候选集"。
Promptriever 的尝试:引入"指令负样本"
去年 ICLR 的 Promptriever(Weller 2025b)走出了第一步:把指令负样本(instruction negatives)写进训练数据。
什么叫指令负样本?文档 D 跟 query 主题上很相关,但被指令的某个约束排除了——比如 query 是"transformer attention",D 讲的就是 transformer attention,但写于 2020 年,用户指令是"只要 2024 年之后的",那 D 就成了"指令负样本"。
Promptriever 把这种样本作为 hard negative 灌进 InfoNCE,强迫模型学到"光主题相关不够"。这条路确实有效,但有个我一开始没意识到的问题——Promptriever 把指令负样本当作"永远的反派"用了:每个 instruction negative 在训练里只扮演一个角色,就是被推远。
而这篇 Dual-View 论文的关键洞察是:这个文档"被推远"只是因为当前这条指令排除了它。换一条指令,它就该被拉近。
这就有了腾挪空间。
方法核心:极性反转,让同一对文档"换边坐"
整篇论文的方法部分,其实就是图 1 那张图加一段流程描述。简单到让人怀疑"就这?"——但实验数据告诉你它就是 work。
数据合成:让 LLM 写一条互补的指令
形式化讲:给定一个 query \(q\)、一个原指令 \(I_{orig}\)、一个正样本 \(D^+\)、一个指令负样本 \(D^-\),让 LLM 合成一条新指令 \(I_{new}\),要求是:
- \(I_{new}\) 跟 \(q\) 还得在主题上对得上
- 在 \(I_{new}\) 下,\(D^-\) 变成正样本,\(D^+\) 变成负样本
- 不能误伤其他指令负样本(如果它们在 \(I_{new}\) 下也变正了,就破坏了对比的"干净度")
这个 prompt 在论文 Appendix A 里写得很细,分了 5 步——profile passages、choose reversal levers、diversity requirement、sanity checks、conciseness——核心思路是:找一个能"既正向选中 \(D^-\) 的某个属性、又用一个硬约束排除 \(D^+\)"的角度。
可用的"反转杠杆"包括:领域收窄、地域、时间窗口、受众层级、风格/格式("只要等式"、"只要项目清单")、方法论、要求的工件类型("必须有可运行的 X 语言代码")、显式排除等。
听起来很难合成?作者用 Qwen3-Next-80B-A3B-Instruct 跑了一遍,人工抽查 100 个样本,99% 以上可用,于是干脆没做额外过滤。这个数据相当能打,说明"极性反转"对当下的开源 LLM 已经不是什么 hard task。
训练目标:一对文档,两条指令,同时拉近又同时推远
在对比训练阶段,每个 query 配一个正样本和一组负样本(30 个 hard negative,其中 1-3 个是指令负样本)。对于 DV 增强的样本,同一对正负文档会被以"原视图"和"反转视图"两次喂给模型——也就是 \(D^+\) 和 \(D^-\) 在两条不同指令下交换标签。
模型必须做到:
- \(\text{sim}(q \oplus I_{orig}, D^+) \gg \text{sim}(q \oplus I_{orig}, D^-)\)
- \(\text{sim}(q \oplus I_{new}, D^-) \gg \text{sim}(q \oplus I_{new}, D^+)\)
注意这里 \(\oplus\) 表示拼接,query 和 instruction 拼接后一起编码(document 单独编码)。
为什么这个目标会逼模型读 instruction?想想看:如果 query 编码器对 \(q \oplus I_{orig}\) 和 \(q \oplus I_{new}\) 几乎输出同一个向量(即"我不关心你 instruction 部分写了啥"),那它就不可能同时让 \(D^+\) 在第一组里更近、又在第二组里更远。这是一个数学上不可能的约束——除非编码器真的把 instruction 的语义吃进了输出向量。
这就是这个方法最漂亮的地方:它不靠 loss 正则、不靠新架构、不靠多任务,直接用数据结构让模型"无法偷懒"。
架构本身:什么都没改
backbone 用了两个:
- gte-multilingual-mlm-base(305M,主实验)——Snowflake 自家 Arctic-Embed 2.0 medium 版本的基础编码器,Alibaba 出的多语言模型
- bge-m3-retromae(更大)——用来做 cross-backbone 验证
训练框架是 Snowflake 自家开源的 ArcticTraining。InfoNCE loss,温度 \(\tau = 0.02\),30 个 hard negative,max length 512。所有 DV 实验跟 baseline 严格 size-matched——这一点很重要,待会儿讲实验部分会展开。
实验:从一个数字开始——FollowIR p-MRR 涨 45%
实验设计相当干净,就两张表,分别在两个 backbone 上跑同一组对照。先看主表(gte-multilingual-mlm-base, 305M):
| 训练数据 | FollowIR p-MRR ↑ | FollowIR Score ↑ | InfoSearch Length ↑ | InfoSearch Keyword ↑ | MAIR IFEval ↑ | MAIR InstructIR ↑ |
|---|---|---|---|---|---|---|
| Ins-orig | 5.21 | 21.33 | 4.06 | 2.06 | 32.14 | 89.16 |
| Ins-DV(本论文) | 7.57 | 19.73 | 9.02 | 5.61 | 36.13 | 87.97 |
| All-orig | 5.27 | 20.85 | -23.22 | -49.65 | 24.33 | 85.54 |
| All-DV(本论文) | 8.30 | 21.38 | 31.91 | 12.13 | 34.08 | 90.74 |
四条对比:
- Ins-orig:480k 条 Promptriever 原始指令样本
- Ins-DV:240k 原指令 + 240k DV 合成样本(总量 = Ins-orig)
- All-orig:440k 原指令 + 440k 对应的非指令版本(总量 = ~880k)
- All-DV:440k 原指令 + 440k DV 合成样本(总量 = ~880k)
第一组对比:Ins-orig vs Ins-DV——指令信号的纯粹增益
同样 480k 数据,把一半换成 DV 样本,FollowIR p-MRR 从 5.21 → 7.57(+45%),InfoSearch 两个子集 +122% / +172%,MAIR IFEval 从 32.14 → 36.13。所有跟"指令敏感性"相关的指标全涨。
参照系:EmbeddingGemma-300M 在 FollowIR 上 p-MRR 是 5.61,Qwen3-Embedding-0.6B 是 5.09。305M 的 Ins-DV 模型 7.57,把这两个通用大模型都打过了。
但代价也清楚——FollowIR Score 从 21.33 掉到 19.73。Score 是 MAP@1000 / nDCG@5 这种"传统检索质量"指标,掉 1.6 个点不算小。论文给的解释是:DV 样本是"用同一文档对生成的不同指令",所以训练里的 unique context 减少了,多样性降低。
这给了下一步实验一个很清晰的假设——多样性是维持通用检索质量的关键。
第二组对比:All-orig vs All-DV——"加通用数据反而崩了"
如果你信"多样性能救通用质量",那么把训练集 scale 到 880k,加 440k 非指令通用数据应该是合理的——这就是 All-orig。
结果是灾难。
| 指标 | Ins-orig | All-orig | Δ |
|---|---|---|---|
| FollowIR p-MRR | 5.21 | 5.27 | +0.06 |
| InfoSearch Length | 4.06 | -23.22 | -27.28 |
| InfoSearch Keyword | 2.06 | -49.65 | -51.71 |
| MAIR IFEval | 32.14 | 24.33 | -7.81 |
注意那两个加粗的负数。p-MRR 是负的,意思是模型把指令读反了——给它说"只要 X 类型",它把 X 类型的 doc 排得更靠后。
这太反直觉了。你只是加了一倍的通用检索数据,居然把指令跟随能力打成负的?
论文给的解释(在 Discussion 里有一段我特别喜欢的"梯度视角"):非指令样本提供的梯度信号在奖励"跟 query 相关就拉近",当混合比例到 50/50,这个信号会压过指令信号。指令敏感性不是"训练数据量多就涨"的能力,它是个脆弱的、需要持续监督才能维持的属性。
我的第一反应是——这跟我之前调多任务训练时碰到的 catastrophic interference 简直一模一样。两个目标如果在 representation 上互相矛盾,更"容易"的那个目标会赢。"忽略 instruction 只看 query" 显然比"读懂 instruction 再判断"容易得多。
All-DV:DV 怎么把这个塌方救回来
把那 440k 通用数据换成 440k DV 数据,相同的 880k 总量:
| 指标 | All-orig | All-DV | Δ |
|---|---|---|---|
| FollowIR p-MRR | 5.27 | 8.30 | +3.03 |
| FollowIR Score | 20.85 | 21.38 | +0.53 |
| InfoSearch Length | -23.22 | 31.91 | +55.13 |
| InfoSearch Keyword | -49.65 | 12.13 | +61.78 |
| MAIR IFEval | 24.33 | 34.08 | +9.75 |
| MAIR InstructIR | 85.54 | 90.74 | +5.20 |
所有指标全涨,且每一个都是全场最高。FollowIR p-MRR 8.30 是全表第一,Score 21.38 也是全表第一。
更值得品的是 All-DV 跟 Ins-DV 的对比——All-DV 数据量翻倍但都是带 instruction 的(要么原始要么合成),Score 从 19.73 涨到 21.38(+1.65),同时 p-MRR 从 7.57 涨到 8.30。这说明 Ins-DV 的 Score 下降的"罪魁祸首"确实是数据多样性不足,而不是 DV 方法本身有问题。
把这个发现翻译成工程语言:
数据量确实是通用检索质量的主要驱动,但前提是每个训练样本都带 instruction 信号——你不能为了凑量去掺非指令数据,那会把指令敏感性彻底干废。
跨 backbone 验证:bge-m3-retromae
Table 2 在更强的 bge-m3 编码器上做了同一组对照,结论完全复制:
| 训练数据 | FollowIR p-MRR | InfoSearch Keyword |
|---|---|---|
| Ins-orig | 9.40 | 4.18 |
| Ins-DV | 11.47 | 48.42 |
| All-orig | 8.84 | -62.04 |
| All-DV | 13.92 | 49.62 |
InfoSearch Keyword 子集上从 4.18 直接拉到 48.42,All-orig 那个 -62.04 也很惨烈。两个发现(DV 提升 IF / 混合非指令数据塌方)都是 backbone-agnostic 的。
这给我的信心是——这不是某个特定模型的偶然现象,而是个范式级的观察。
我对这篇论文的判断
亮点:方法-实验-发现三个层面都有真东西
方法层:极性反转这个 idea 真的漂亮。它把"指令负样本"从一次性的反派变成了"双视图训练对"的一半,每个数据点的信息密度直接翻倍——而且不是简单复制,是结构上的对偶。这种"用数据结构强迫模型不能偷懒"的思路,比加新的 loss 项要 elegant 很多。
实验层:size-matched 这条原则做得非常严格。Ins-DV 不是"在 Ins-orig 基础上加 DV",而是"用 DV 替换掉一半 Ins-orig",这样你才能区分出"是 DV 信号有用"还是"单纯数据多了所以好"。All-orig vs All-DV 也是同一个数据预算下的公平对比。这种克制在很多 paper 里其实做不到,多数论文喜欢"加点东西总会涨"的乐观对比。
发现层:那个"50/50 混合非指令数据导致 p-MRR 变负"的观察,在我看来比 +45% 还更有冲击力。它解释了一个长期困扰的现象——为什么大厂一直在堆通用 embedding 模型的规模,但在 FollowIR 这种 benchmark 上始终上不去:因为它们的训练数据里指令信号被通用数据稀释了。这个观察是有政策意义的,会改变很多团队怎么混合数据。
问题:边界条件没探得很清
但说实话,这篇论文也有几个我会皱眉的地方。
第一,DV 比例没消融。论文只跑了 50%/50% 一种混合比例(Ins-DV 是 240/240,All-DV 是 440/440 替换非指令)。如果把 DV 的占比从 10% 一路扫到 90%,曲线长什么样?最优点在哪?这是个很自然的消融,但论文没做。我猜是出于算力预算,但缺了这个,工程落地时怎么调比例只能靠盲试。
第二,"互补指令"的合成质量假设。整个方法的根基是 LLM 能合成出"语义合理且能反转极性"的指令。论文说人工 check 了 100 条,99% 可用,但 100 条样本量挺小,而且没有给"哪些场景容易失败"的细分。我猜对那些约束维度本身就很窄的 query(比如纯数值类、纯日期类),合成空间会很有限。
第三,跟 InF-IR(Zhuang 2025)的对比缺位。论文 Discussion 里提到 InF-IR 用 38k 特化三元组就达到了"竞争性的"IF 表现,并把这个引用为"信号纯度比数据量更重要"的支持证据。但 Table 1/2 里没把 InF-IR 跑一遍做直接对比。我会很想看到 Ins-DV vs InF-IR 的 head-to-head,毕竟两条路线哲学不同——InF-IR 是"少而精",DV 是"用现有数据榨取双视图"。
第四,仅限 bi-encoder。论文坦诚说了这一点,但 cross-encoder 上是不是同一回事,会不会因为 cross-encoder 本来就更擅长"细粒度交互"而效果变小?这是个开放问题。
工程启发:能直接抄回去用的两条
如果你正在做带指令的检索/RAG 系统,这篇论文有两条直接可落地的:
第一条,DV 数据合成 pipeline 可以直接拷贝。Appendix A 那个 prompt template 就是现成的,换成你领域的 LLM(哪怕是 GPT-4o-mini 这个量级)应该都能复现 99% 的可用率。如果你已经有指令负样本(很多 RAG 评测数据集里有),加个 LLM 调用就能把数据集"翻倍"成 DV 版本。
第二条,重新审视你的训练数据混合策略。如果你在做"通用检索 + 指令理解"的 dual-purpose 模型,不要无脑混合通用数据和指令数据。要么全指令(可能损失通用质量),要么用 DV 让通用数据本身也带 instruction 信号——后者明显是更优解。50/50 混合可能是最差的选择。
这篇论文在赛道上的位置
往大了说,这篇论文不是底层突破,它是在 Promptriever / FollowIR / InF-IR 这条路线上的一个漂亮的工程整合。它没有发明新的 loss、新的架构、新的 metric,但它把"指令负样本"这个已有概念用足了,做了一个之前没人做的"对偶视图"操作。
我觉得这种"小而锋利"的论文在 LLM 时代会越来越多——不再是"我有一个新算法",而是"我看到了一个数据/训练上没人注意的角度,做对了它"。这种工作的价值在于它跑得通、好复现、容易迁移到工业系统里。
对于做企业搜索、RAG、多模态检索的团队,FollowIR 这条路线值得跟。指令跟随检索很可能是下一个被卷起来的 embedding 子方向——就跟两年前 long-context 一样。Snowflake 这边明显在押注这个方向,从 Arctic-Embed 2.0 到这篇 DV 训练,是一个很清晰的产品级 roadmap。
结尾的一点延伸思考
这篇论文给我最大的启发其实不是 +45% 那个数字,而是它揭示的一个更深层的现象——模型能力的"出现"和"消失"是不对称的。
你想想看:
- 加 50% DV 数据 → 指令敏感性涨 45%(提升是渐进的、可叠加的)
- 加 50% 非指令数据 → 指令敏感性塌方到负值(破坏是断崖式的、压倒性的)
这跟我们在 RLHF / SFT 里看到的"对齐税"特别像——某些能力一旦被竞争性的训练信号干扰,就不是"少一点"而是"几乎为零"。
这意味着,对于某些"脆弱的能力",我们需要的不是更多数据,而是更纯净的数据信号。Dual-View 的本质是把数据扩增的方式从"加更多样本"换成了"让每个样本都携带正确的信号"。
这条思路其实可以推广到很多场景。比如多模态对齐、工具调用、长程推理——任何一个"模型容易偷懒走捷径"的能力,是不是都能找到一个"对偶视图"的设计,让模型无法偷懒?
我猜接下来一两年会看到这类"对偶式数据合成"的工作铺开。值得跟。
参考资料
- 原论文:Dual-View Training for Instruction-Following Information Retrieval
- FollowIR Benchmark:Weller et al. 2025a, NAACL
- Promptriever:Weller et al. 2025b, ICLR
- InfoSearch(Beyond Content Relevance):Zhou et al. 2025, ICLR
- InF-IR:Zhuang et al. 2025
- Arctic-Embed 2.0:Snowflake
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我