三个 7-8B 开源模型合写查询,免手调 prompt 让 NQ 的 BM25 涨 14.9 分

MERGE: Multi-LLM Ensemble for Retrieval via Generative Enrichment

Tzu-I Ho, Yung-Yu Shih, Shang-Yu Su, Dongzhe Wang, Yun-Nung Chen

cs.IR, cs.CL

2026-09-29

MERGE 让三个异构 7-8B 开源模型各自扩写查询,再由 14B 模型合成一条送给 BM25;五个 BEIR 基准上 nDCG@10 相对原查询提升 2.1 到 14.9 分,prompt 用检索分数自动调。

这篇在解决什么

Query2Doc 和 HyDE 会让 LLM 把短查询扩成伪文档或假想答案,再交给 BM25 去填「用户怎么问」和「文档怎么写」之间的词表缺口。单模型扩写带着训练数据和架构留下的固定口味:漏同义说法、编造细节,或者把一条歧义查询锁死在一种解读上。控制这个口味几乎全靠手写 prompt,而且 Qwen2.5 上好用的指令搬到 Llama-3.1 或 Mistral 上通常要重写。模型加一台,调 prompt 的人力就加一截,多模型 ensemble 在检索里很难划得来。

这不是假问题。检索栈每换一次生成模型,扩写风格和能用的 prompt 往往一起失效。

MERGE 同时下手两处:三个异构 7-8B 开源模型各自扩写,一个 14B 模型再合成一条查询;每一条 prompt 都用下游 BM25 分数自动调。

方法

推理时走两级。

合成结果当作普通文本送给固定 BM25,语料不改、索引不重建、不做 rank fusion(多路排序列表的合并)。按常见 BM25 习惯,原查询会重复若干次再拼上扩写。输出是纯文本,理论上也能喂稠密检索,实验只跑了 BM25。

prompt 用 task-grounded APO 离线搜。框架起点是 SPO:优化器 LLM 改写 prompt,评估器 LLM 两两比较输出。MERGE 把评估器换成真检索,在训练数据固定 20% 子集上跑同一套 BM25,用 nDCG@10 打分。每轮是一场小淘汰赛:第 0 轮从种子 prompt 采样两套扩写,分高的当冠军;之后优化器根据当前冠军写出新草稿,生成器再采两套,三方比分。挑战者赢了就整包替换(扩写、分数、prompt);冠军连续两轮没被掀翻就停。优化器能看到分差、95% 置信区间、p 值,以及挑战者改对和改错的检索例子。默认的 MERGE (APO) 只看当轮信号;MERGE (APO w/ history) 额外喂最近五轮轨迹。APO 先调完三个生成器,再冻住它们去调 Stage-2。多数淘汰赛不到 10 轮就停,单卡 H100 上每个 (stage, model) 通常不到一小时,一次性成本摊到后续全部检索流量上。

结果

五个 BEIR 任务覆盖开放域问答、科学论断、金融意见、论辩检索和实体检索,指标一律 nDCG@10。所有方法共用 BM25,只改查询怎么被改写。docT5query 是监督式、要过整库文档的基线;Exp4Fuse 对原查询和 LLM 伪文档各跑一路 BM25 再融合。相关数字引自 Liu and Zhang (2025),MERGE 没有重跑。

方法NQSciFactFiQATouché-2020DBPedia
Vanilla BM2530.4867.6223.8544.2331.99
docT5query38.1067.5025.2034.7033.10
BM25+Exp4Fuse39.1068.8024.7051.2036.10
docT5query+Exp4Fuse42.8071.3026.3039.9038.90
MERGE w/o APO34.5267.7919.4138.6933.59
MERGE (APO)45.4271.4025.5950.1637.94
MERGE (APO w/ history)42.5070.0125.9151.6737.84

相对原查询,五套全涨:+14.9(NQ,30.48→45.42)、+7.4(Touché-2020)、+6.0(DBPedia)、+3.8(SciFact)、+2.1(FiQA,23.85→25.91)。相对 BM25+Exp4Fuse 五套全赢,NQ 多 6.3 分,Touché-2020 只多 0.5。相对更强的 docT5query+Exp4Fuse,NQ 赢 2.6、Touché-2020 赢 11.8、SciFact 基本持平(+0.1),FiQA 输 0.4、DBPedia 输 1.0。

无监督扩写基线五场全过;叠了监督文档扩写的强基线,五场里三场打平或更好。

手写种子 prompt 会帮倒忙:FiQA 相对原查询掉 4.4,Touché-2020 掉 5.5。加上 APO 后五套全正,相对无 APO 版本,更好的那个变体还能再涨 10.9(NQ)、3.6(SciFact)、6.5(FiQA)、13.0(Touché-2020)、4.4(DBPedia)。NQ、SciFact、DBPedia 这类实体查询更吃不带 history 的 APO;FiQA 和 Touché-2020 面更宽,带 history 更好。

Stage-2 合成不是摆设。NQ 上三条 Stage-1 扩写分别是 38.79、34.59、41.06,合成后 45.42,比最好单模型再高 4.4;SciFact 再高 0.9,FiQA 再高 0.6。同一条 NQ 查询「the cuban revolt against spain was led by」,Llama 写出何塞·马蒂和 1895-1898,Mistral 给出 1868-1898 的冲突区间,Qwen 几乎只堆「leaders, figures, insurgents」这类空词;14B 合成器把马蒂、戈麦斯、马塞奥和年份并进一条,并标出意识形态领袖与军事领袖的分工。

为什么重要

这是查询侧扩写的工程增量,不是新的检索范式。

对已经在跑 BM25 的搜索栈,它把「换模型就要重写 prompt」收成一次离线淘汰赛,在线只多三次 7-8B 加上一次 14B 调用、一次 BM25。不用给每篇文档跑 T5,也不用改索引或调融合权重。语料一变,docT5query 要重标整库;MERGE 只动查询。

四次 LLM 调用不便宜,APO 还要一块带标注的 dev 子集。更适合查询词和文档词差得远、暂时又不想上稠密检索或重排序的场景。结论里提到合成查询也能喂 dense retriever,表里没有这个数字。

局限与存疑

结论之前没有单独的局限节,缺口要从实验设置里读。

五个主数字全部绑在固定 BM25 上,稠密检索、重排序、文档侧扩写只在结论里口头提到。APO 吃 20% 有标注子集,跟「零样本、无监督扩写」并排放会偏乐观。Exp4Fuse 与 docT5query 的分数是转引,解码设置和模型族是否对齐,正文对不上。推理延迟和 token 成本没有对照表,生产里四次生成会不会把延迟打爆,只能自己估。Qwen2.5-14B 同时当合成器和 APO 优化器,有没有自我偏好,没有消融。优化出来的 prompt 有时读起来像一袋模型专属导向 token,文中也承认;扩写文本仍可读,但 prompt 难以人工审计。两个 APO 变体没有统一赢家,线上要按查询类型切换或再加路由,文中没有规则。Table 2 的 Stage-2 消融只覆盖 NQ、SciFact、FiQA 三个任务。

术语

原文与代码

社区讨论

相关论文

全部论文解读