要解决的问题:把查询和文档拼在一起送进大模型打分(cross-encoder)效果最好,但每个「查询-文档」对都要跑一遍完整网络,成本高到无法用于大规模召回;而单向量双塔(bi-encoder)虽然能离线预计算,却把整段文本压成一个点,细粒度信息损失严重。
做法
ColBERT 提出 late interaction(晚期交互):查询和文档分别用 BERT 独立编码,各自保留每个 token 的上下文向量;真正的「交互」推迟到检索时,只做一个廉价的逐词相似度匹配来合成相关性分数。因为交互被推迟但不被丢弃,文档表示可以离线算好并建索引,查询时只需编码查询并做向量匹配。
代价
每个文档要存几十到上百个向量,索引体积远大于单向量方案,存储与内存开销是主要门槛;工程上通常配合向量压缩或专门的索引结构。
适用边界
适合对召回质量敏感、且能承担存储成本的中大规模检索与重排序;纯成本优先的场景单向量嵌入仍更划算。