AdaWidth: Query-Adaptive Embedding Width for Dense Retrieval
Shubing Yang, Dongfang Zhao
cs.IR
2026-08-25
正交旋转把判别信号集中到前缀,再按查询决定打到第几维,六个检索任务上达到同等NDCG@10时每查询少用55%到84%的坐标。
稠密检索的向量往往有768到4096维,打分成本跟宽度成正比。压缩宽度有两条老路。一条做成可截断表示(Matryoshka及其后处理适配器),所有查询共用一个前缀长度,长度必须迁就最难的查询。另一条为每个查询挑不同坐标(DIME、Learning-to-Select),选出的轴是散的,索引仍要存全宽,打分还得从整条记录里搜集。
同一任务里,查询要多少维才能让排名稳住,差得很远。有的短前缀就定了,有的要吃到很宽。AdaWidth要的是:坐标顺序大家共享,用到第几维按查询定。
编码器冻结,中间加两件东西。
正交前缀适配器用64个Householder反射的乘积做成旋转,查询和文档共用同一个R。正交保证全宽内积不变,全宽行为跟原编码器逐点一致;能改的只是把判别信号从尾巴挪到前缀。训练在64/128/256三个前缀宽度上加多正例对比损失,再用全宽分数当教师,对难分候选做分数对齐和几何保持。F=64、D=2048时适配器只有13万参数,部署时折成显式矩阵,文档离线转一次。
查询路由器先在固定的64维上打完500条短名单(所有方法共用同一份从冻结编码器64维挖出的候选)。它只看已有排序的18个次序统计量:第1/2/10/11名分数、跨截断的分差、top-10熵之类,预测加宽到128或256会不会改变NDCG@10,只对估计会动的ρ比例查询加宽。第一阶段的部分和可以复用,所以平均代价是短名单长度乘平均宽度,不是两次全算。
论文还推了前缀充分性:相关文档掉出top-k,当且仅当至少k个无关文档在该宽度上超过它。所需宽度由截断处的竞争次序统计量决定,随语料规模对数增长,随检索深度对数下降,查询间呈重尾。
六个任务(FiQA、ArguAna、Quora、MS MARCO的200万子集、OK-VQA、A-OKVQA)乘五个冻结编码器(E5-Mistral-7B到Nomic 137M,含文本和Qwen3-VL-2B)。
文本任务上,AdaWidth在几乎所有工作点领先三个重训基线。平均NDCG@10比Matryoshka-Adaptor高5.88,比SMEC高9.94,比Learning-to-Select高15.77。32维时Matryoshka要2.36倍宽度才追平,48维时要3.04倍。AdaWidth 64维已经超过Matryoshka在256维的成绩。绝对数字(能对齐的任务×编码器平均):32维0.431,64维0.534,256维0.597;Matryoshka对应0.377、0.472、0.510。匹配对方NDCG@10时,每查询少用55%到84%的维。
消融更清楚钱花在哪。各宽度平均NDCG:前缀截断0.4027,只开路由0.4158,只开适配器0.6121,两者一起0.6134。适配器吃掉绝大部分增益,路由整体只再加0.13,在超过10万文档的语料上能到0.45。Householder个数从8扫到128,NDCG只晃1.03,F=8的13824参数已经比最强基线高7分以上。宽度随N、k变化的拟合在文本任务上R²为0.926到0.973,符号与理论一致。
已经上线的编码器可以冻住,只在索引前加一个保内积的旋转,再按查询决定打到第几维。前缀是连续的,索引存Nh个数、查询读多少乘多少,比每查询一套散轴干净。对Matryoshka编码器和非Matryoshka编码器都有效,说明不依赖预训练里已经排好的前缀。
这是重排序层的省算,不是从全库ANN里凭空少扫多少维。短名单在64维挖出,漏掉的相关文档后面补不回来。
评测协议是在500条短名单上重排,不是端到端近邻搜索,ANN图或倒排上前缀宽度怎么切,论文没做。路由器要用带标注训练集拟合NDCG增益,无标注场景只剩适配器。适配器加路由相对纯适配器几乎持平,自适应宽度的宣传主要由旋转撑着。正交映射不能提高全宽质量,全宽上限就是冻结编码器。MS MARCO用的是200万抽样。超参在SciFact和NFCorpus上扫完再搬到主表,主表本身不是调参面。