2610.10508 讲的是一件很具体的事:给嵌入模型写检索指令,模型未必按你说的做;只要候选池里放一个「查询自己的改写」,它就把答案的位置让给这个冒牌货。
一、改写干扰有多致命
SQuAD、Qwen3-Embedding-0.6B、Recall@1:正常 0.724,加随机干扰 0.685,加改写干扰 0.014。随机干扰几乎无害,只是把候选池变大;语义相近的改写直接把成绩打到地板。Tatoeba 八语种平均更清楚:0.844 到 0.102。ARCChallenge 上 bge-m3 从 0.032 掉到 0.001。
二、大模型不免疫,还更脆
Tatoeba 上 Qwen3-Embedding-0.6B 是 0.977 到 0.500,4B 版本是 0.994 到 0.529——4B 无干扰时更强,加了干扰反而落得更多。真正扛住的是 multilingual-e5-large-instruct(0.994 到 0.954)和 harrier-oss-v1-0.6b(0.988 到 0.956)。
三、微调怎么做的,值得照抄
用改写当查询侧负例。每个正样本配八个随机目标侧负例,其中一半样本把一个负例换成「错任务的目标」;同时把 STS 任务混进来防止灾难性遗忘——同一个改写文本在检索里是查询侧负例,在 STS 里是正例。正常检索几乎没退:0.724 到 0.706;改写档从 0.014 提到 0.470,Recall@5 从 0.778 提到 0.890。改善集中在前 5000 步,约一个 epoch 的三成。
四、不是「多训了任务数据」的功劳
附录 H 单独验过:同样的数据、同样的配方,但不加查询侧负例,改写档原地不动。起作用的是那类负例本身,不是任务微调。
下一根钉子:评测集得自己造改写。论文用 GPT-5.4-mini 给每条查询生成一个保义改写——这套生成器本身的偏好会不会漏掉某些失败模式,没人验过。