免文档蒸馏多向量视觉检索,149M 学生保 95% 且快 26 倍

ColNanoVDR: Document-Free Query Distillation for Multi-Vector Visual Document Retrieval via Optimal Transport

Zhuchenyang Liu, Ziyi Wang, Yao Zhang, Yu Xiao

cs.IR, cs.CL, cs.CV

2026-09-28

Aalto 提出 ColNanoVDR:用带可学习权重的最优传输把多向量视觉检索蒸馏成 149M 文本学生,在 ViDoRe v1–v3 上保留约 95% 教师 NDCG@5,单线程 CPU 编码最多快 26 倍。

这篇在解决什么

视觉文档检索(VDR)拿文本查询直接匹配页面图像,不走 OCR。最强系统把查询和文档编码器都建在 2B 到 9B 的视觉语言模型上,用多向量 late interaction:两边各出一组 token 向量,每个查询 token 在页面里找最像的那个再求和,即 MaxSim。页面离线入索引,查询编码器却每条请求都要跑。几十亿参数的 VLM 坐在在线路径上。

查询侧蒸馏只换查询编码器,教师的文档编码器和页面索引不动。标准做法 score distillation 让学生复现教师在候选页上的 MaxSim,于是每张训练页都要教师先编码。高分辨率页面能吐出一千多个 token 向量。论文估算 ColVec1.1 上一百万对大约要 2 TiB 缓存页 token,换教师还得重建。NanoVDR 已经能只拿教师查询 embedding 训练,完全不碰页面,但只覆盖单向量。ViDoRe v3 上,论文评估的多向量教师比最强单向量高出 15 到 19 个 NDCG@5。免文档蒸馏若不接到多向量,小查询编码器就进不了现有的最强索引。

卡点有两个。师生分词器不同,token 数量和切分对不上,没法逐 token 回归。MaxSim 还要对页面 token 取最大,对齐查询能不能管住从没见过的页面分数,事先不清楚。

方法

ColNanoVDR 把查询看成单位球面上的一组带权 token。教师用均匀权重 1/Kt。学生用线性头从 query 上下文预测每个 token 的权重,softmax 归一化。训练查询上学生平均 17 个 token,教师 29 个,一个学生 token 往往要顶好几个教师 token。

对齐用带熵正则的最优传输,目标叫 OTW(Optimal Transport with Learned Weights)。代价是余弦距离 1 − ⟨si, tj⟩。传输计划像机器翻译里的词对齐矩阵,不要求一一对应:一个学生 token 可以覆盖若干教师 token。损失就是这个软对齐代价。权重头没有额外监督,靠近很多教师 token 的学生 token 会拿到更大质量。熵项让计划可微,log-domain Sinkhorn 求解,反向只走最后一步。查询规模大约 17×29,训练速度和 score distillation 相当。

定理 1 证明,这个对齐代价是师生 MaxSim 分数差在任意非空有限页面上的上界,包括训练没见过的页。只对齐查询在原则上就够。

推理时丢掉教师查询编码器,学生 token 按权重缩放,用标准 MaxSim 打教师索引。学生是 Ettin 纯文本编码器,主结果 Ettin-150M 加两个线性头共 149M。训练数据是 NanoVDR 的 711,603 对加 777,649 条机翻查询。教师查询 token 缓存一次,训练不再跑教师。

结果

五个教师、同一个 149M 骨架,各自打自己教师的索引(括号为保留率):

教师v1v2v3
ColQwen3.5-4.5B90.7 (99.0%)60.0 (94.2%)55.1 (93.8%)
Tomoro-ColQwen3-8B90.0 (99.3%)60.6 (93.3%)54.9 (93.0%)
Vultron-4.5B91.3 (99.4%)65.0 (96.1%)58.3 (95.5%)
ColVec1.1-4b90.3 (99.5%)64.0 (96.1%)59.1 (95.8%)
ColVec1.1-8b90.9 (99.3%)65.4 (96.5%)60.1 (96.0%)

v1 几乎贴教师,更难的 v2 和偏企业域的 v3 也在 93.0%–96.5%。参数少 30 到 60 倍。单向量 NanoVDR-S(69M)在 v3 是 43.5,ColModernVBert(259M)是 17.4。教师在 v3 上领先这些单向量基线 15 到 19 分,学生把这笔领先大部分保住了。

CPU 单线程 batch size 1:ColNanoVDR 编码一条查询 87 ms,ColQwen3.5 教师 2290 ms,约 26 倍。所有 2B–9B 的 VLM 检索器都要一秒以上。GPU 上差距缩到 1.3–2.2 倍;ColQwen3.5 的 110.7 ms 走了 hybrid linear-attention 的 Torch fallback。Ettin-32M 在 v3 已能保住教师 87%,从 32M 到 400M 保留率单调上升,增益主要落在 v2 和 v3。

同样数据和优化下,OTW 和最强依赖文档的 Listwise KL 基本打平:ColQwen3.5 上 v2 落后 1.2 分(60.0 vs 61.2),v1、v3 持平;Tomoro-ColQwen3-8B 上三条都领先,v3 高出 5.0 分(54.9 vs 49.9)。InfoNCE 更弱,v3 掉到 47.1 和 46.2。去掉可学习权重的 OT-uniform 在 ColQwen3.5 上只差 1.7 分以内,在 Tomoro 上掉 4.7 到 9.2 分。分词差得远时,权重头是稳压件。

OTW 只读查询 token,缓存教师数据 27 GiB;score distillation 还要读页面 token 和 in-batch negatives,共 343 GiB,差 12.6 倍。ColVec1.1-4b 的 v3 索引用层次 token pooling 做 9 倍压缩后,师生保留率从 95.8% 掉到 95.3%。

为什么重要

给已经建好多向量 VDR 索引的人:页面表示继续用 4B–9B 教师,查询改成单线程 CPU 能跑的 149M 文本编码器,不用重编索引。换新教师只编码训练查询。训练也不再为每张页缓存上千个 token。

索引压缩和原生小模型都没碰这块:索引一旦固定,在线路径上还坐着大查询编码器。和 token pooling 可以一起用。

这是查询侧工程蒸馏,不是新检索范式。索引体积没减,搜索代价只因查询变短才降。学生是英文中心文本编码器,页面理解完全借教师。

局限与存疑

学生全部来自 Ettin 一个家族,每组配置一个 seed,没有方差。ColQwen3.5 上免文档目标最多差两分,v1 差距单次实验分不出来。目标函数对照只做了两个教师,另外三个只训了 OTW,score distillation 和固定权重变体在它们上面怎么排没测。训练查询虽不读配对页,但都来自配对数据集,未配对查询日志没试过。理论界大约松 8 倍,区分不了学生权重的不同设法;不优化这个界的 score distillation 检索质量也差不多。ViDoRe v3 有法语子集,训练里有机翻查询,结果没按语言拆。

149M 学生对 ColQwen3.5 在 v3 是 55.1,教师 58.7。企业场景如果卡那 3 到 4 个 NDCG 点,这个学生未必够。400M 学生 v3 到 56.7,更贴一点,CPU 编码从 87 ms 升到 286 ms。

术语

原文与代码

社区讨论

相关论文

全部论文解读