UMass对照实验:稀疏检索稳赢稠密,知识蒸馏在8B上不再涨

Scaling Sparse and Dense Retrieval in Decoder-Only LLMs

Hansi Zeng, Julian Killingback, Hamed Zamani

cs.IR

2025-02-21

UMass用Llama-3从1B到8B做系统对照:稀疏检索全面压过稠密向量;知识蒸馏不随规模上涨,8B稀疏Lion-SP在MS MARCO与BEIR上达到当时最优。

这篇在解决什么

用 decoder-only LLM 做检索,最近的工作几乎全押在稠密向量加对比损失上。Llama2-7B 一类的双塔已经能打过 BERT 检索器,Fang 等人也写过稠密检索的 scaling。缺了两块:稀疏检索(词表空间上的高维稀疏向量,可走倒排)有没有同样的规模效应;知识蒸馏这条在小模型上很香的路,放大之后还灵不灵。

稀疏检索还有一个结构问题。因果注意力让第 i 个 token 的隐状态看不到第 i 个词本身,而稀疏检索要把每个位置投影回词表、做 term expansion。不改注意力,这条路很难走通。

方法

UMass Amherst 用 Llama-3 的 1B、3B、8B,在固定算力下做 2×3 对照:稀疏 vs 稠密,对比损失(CL)vs 知识蒸馏(KD)vs 两者相加。训练语料是 MS MARCO 段落(880 万文档、53.2 万 query)。域内测 MS MARCO Dev(MRR@10)和 TREC DL 19/20(nDCG@10),域外测 BEIR 13 个数据集的 nDCG@10。微调一律 LoRA(r=16, α=32),每条 run 大约 40 到 44 小时、4 张 A100。

结构上先把因果 mask 换成双向,再做 LLM2Vec 那套 masked next-token prediction:遮住 20% token,但用前一个位置的表征去预测被遮的词,好接上原来的因果训练。MS MARCO 上最多 1 万步,8B 两张 A100 大约 17 小时。

稠密侧对 token 隐状态做平均池化,得到 D 维向量。稀疏侧用词嵌入表把隐状态投到词表,ReLU、max-pool、log(1+·),再用 FLOP 正则把向量打稀(query 系数 0.05,文档 0.04)。两边的相关性都是点积。

CL 用带硬负例的 InfoNCE。单独做 KD 时教师是 cross-encoder ms-marco-MiniLM-L-6-v2,损失是 MarginMSE。CL 和 KD 一起训时,KD 改成 listwise KL,两项各 0.5。

结果

规模效应几乎只出现在 CL 上。KD 在域内很强:1B 的 KD 模型在 TREC 19+20 上就能打过 8B 的 CL。但放到 BEIR,KD 开始过拟合,8B 的 sparse-KD 和 dense-KD 都低于各自的 CL 对照。稠密+KD 在 3B 和 8B 的 BEIR 上甚至往下掉。

稀疏在所有目标和所有规模上都压过稠密,域外差距更大。8B 时 sparse-KD 比 dense-KD 高 10.5%,sparse-CL 比 dense-CL 高 4.3%(都是 BEIR nDCG@10)。

CL+KD 是最好的折中。1B 和 3B 上,三个评测集相对单用 CL 或单用 KD 都涨。8B 稀疏 CL+KD:

集合1B3B8B
MS MARCO Dev0.4100.4170.417
TREC 19+200.7490.7590.762
BEIR0.5350.5440.552

8B 稀疏相对纯 CL:Dev +0.5%,TREC +3.2%,BEIR −0.9%。稠密 CL+KD 的 8B BEIR 只有 0.501,相对纯 CL 掉 6.2%。

他们还用教师模型去重排各检索器在 BEIR 上的结果。稀疏-CL 在 3B 已经超过教师(+1.3%),8B 到 +7.4%(0.557)。稠密-CL 要到 8B 才超过教师(+3.1%)。带上 KD 之后,稀疏仍然稳超教师,稠密 CL+KD 在三个规模上分别落后教师 1.8%、2.4%、1.4%。

对外叫 Lion。和公开 SOTA 比:

模型MARCO DevTREC-19TREC-20BEIR-13
ColBERTv20.3970.7500.7460.499
Lion-SP-1B0.4100.7470.7510.535
RepLLaMA0.4120.7430.7210.551
Lion-SP-8B0.4170.7580.7660.552
Lion-DS-8B0.4170.7550.7590.501

Lion-SP-1B 相对 ColBERTv2:Dev +3.2%,BEIR +7.2%。Lion-SP-8B 相对 ColBERTv2 的 BEIR 高 10.6%,相对 RepLLaMA 的 TREC 19+20 高 4.1%。稠密 8B 在域内能跟上,BEIR 只有 0.501,掉出第一档。

为什么重要

两件事对训练检索器的人直接有用。第一,decoder-only 上稀疏检索不是复古,是更稳的范式:域外更好,对有噪声的教师更不敏感,8B 时甚至能反过来当教师。第二,蒸馏不是免费的软标签。教师是 MiniLM 量级的 cross-encoder 时,学生一过教师能力,KD 就会把模型锁在域内、伤害 BEIR。小模型吃蒸馏,大模型要靠 CL,合在一起才两边都顾上。

工程上,稀疏向量仍然走倒排,不必上 ANN。代价是要先做双向化+MNTP,不是拿 chat checkpoint 直接对比学习。

这是一篇把变量拆开的对照研究,不是新损失函数。结论依赖 Llama-3 和 MS MARCO 这一对,但方向足够清楚:别默认「更大的稠密双塔 + 蒸馏」是缩放检索的正路。

局限与存疑

作者承认只试了一个教师。换更大的 cross-encoder,KD 的规模曲线可能改写。论文没做这件事。

算力固定意味着大模型看更少 step 或更小 batch,scaling 曲线和「同样数据量」不是一回事。文档截断 128、BEIR 才放到 512,长文档集合可能偏向稀疏的词法匹配。BEIR 上 Lion-SP-8B 的 0.552 相对 RepLLaMA 的 0.551 只高 0.001,SOTA 声明主要靠 TREC 和「全面不掉点」,不是域外拉开身位。稠密 8B 的 BEIR 只有 0.501,和 1B 的 0.500 几乎一样,说明这篇里稠密+混合损失并没有真正 scale。负例策略、硬负例挖掘细节写得很少,复现时这块会成为隐藏变量。

术语

原文与代码

社区讨论

相关论文

全部论文解读