知行札记
专题数据与信息系统搜索、索引与检索

学习表示、双塔与多向量匹配

解释对比学习、稀疏词项扩展、嵌套维度和迟交互怎样改变检索表示及成本。

表示的结构决定哪些计算可以提前完成

检索模型把查询和文档转为可比较的数值表示。稠密单向量为一段输入保存一个固定维数的向量;稀疏词项向量在词表或其他约定坐标中保存少量非零权重;多向量表示为一段输入保留多个向量,例如每个词元一个向量。

这些结构决定存储什么、怎样匹配,以及查询来临后还要做多少工作。一个模型可以提供多种表示,采用哪种表示还需要对应的索引与评分。向量维度和非零数量都是结构属性,不能直接代替相关性效果评价。

双塔将查询与文档独立编码

双塔(bi-encoder)用 EqE_q 编码查询,用 EdE_d 编码文档,例如以

s(q,d)=Eq(q)TEd(d)s(q,d)=E_q(q)^\mathsf{T}E_d(d)

计算内积分数。两个编码器可以共享权重,也可以分别训练。独立编码意味着文档向量可以在查询到达前计算;在线只计算查询表示,再到已有向量中搜索。DPR 原论文 §3展示了这一结构及训练方法。

一种常见的对比目标给每个查询一个正例 d+d^+ 和一组负例 N\mathcal N:

L=−log⁡exp⁡(s(q,d+)/τ)exp⁡(s(q,d+)/τ)+∑d−∈Nexp⁡(s(q,d−)/τ)\mathcal L=-\log \frac{\exp(s(q,d^+)/\tau)} {\exp(s(q,d^+)/\tau)+\sum_{d^-\in\mathcal N}\exp(s(q,d^-)/\tau)}

τ>0\tau>0 是温度,影响分数差别怎样转为相对权重。损失促使正例在这组候选中的分数相对更高。负例可以随机采样,也可以选择当前模型容易混淆的难负例。损失中的相对权重用于训练,不能解释为文档内容真实的概率。

批内负例复用同一批次中其他查询的正例。若批次含 BB 组查询与文档,分别编码后可以组成 B×BB\times B 的两两分数矩阵;无需为每一对重新编码文档。矩阵计算、内存和批次编码仍有成本,增大批次不能写成计算量不变。其他查询的正例也可能对当前查询相关,此时会形成假负例,需要检查标签、采样和屏蔽规则。

上述损失约束分数之间的关系,没有规定打分器必须是双塔。采用独立编码,是为了复用表示与减少查询时联合处理;交叉编码也能用候选间的相对训练目标。文档信息集中在一个向量中后,查询时仅凭这个向量进行比较,原文中精确代号、否定、多个条件之间的关系需要在目标语料中专门检查。

稀疏学习表示怎样进入倒排索引

稀疏词项模型输出词表各坐标的权重,查询与文档在同坐标上匹配。SPLADE 利用掩码语言模型的词表输出层:输入词元的隐藏表示被投影到词表,为每个可能词项产生分数。这个输出层原用于预测被遮住的词;检索时利用其词表预测能力形成表示,并不需要把当前输入逐词遮住。

原始求和形式可写为:

wj(x)=∑ilog⁡(1+max⁡(0,aij(x)))w_j(x)=\sum_i\log(1+\max(0,a_{ij}(x)))

aija_{ij} 是输入位置 ii 对词表坐标 jj 的输出分数。负分数截为 0,对数使较高分数的增幅趋缓,再跨输入位置聚合,得到整个输入在该词项上的权重。查询与文档采用兼容词表,相关分数是两组稀疏权重的内积。

原始 SPLADE 用求和聚合;后续版本研究了最大值聚合和其他训练改进。稀疏正则项约束非零权重及常见词项的整体负载,使表示适合倒排访问。查询时读取非零词项对应的倒排列表,并累加查询权重与文档权重的乘积。机制与版本区别分别见 SPLADE,§3和 SPLADE v2,§3。

由于输出层覆盖词表,原文没有直接出现的相关词也可能取得权重。构造示意里,“无法登录”可以在索引表示中增加“认证”的权重,使“认证失败”的查询有匹配坐标。能否产生该扩展取决于模型与语境;扩展词不等于原文包含该事实,展示与引用仍要返回原文。

BM25 根据词频、文档频率和长度给已有词项加权。SPLADE 的词项权重来自学习模型,可能包含扩展词;两者都能使用倒排结构,但计算规则不同。稀疏程度、倒排列表长度和模型编码成本会共同决定资源消耗,稀疏输出维数很大也不表示每个维度都实际存储。

BGE-M3 提供稠密、词项稀疏和多向量输出,说明三种表示可以共享部分编码计算。其稀疏分支按输入中出现的词元学习权重,并不等同于 SPLADE 对整个词表进行扩展。原论文 §3.2给出这一区别及按场景加权的混合评分。三种输出并存的索引成本取决于长度、维数、压缩和后端,不能按分支数推成固定倍数。

嵌套维度需要训练支持

Matryoshka Representation Learning(MRL,嵌套表示学习)在同一向量的多个前缀维度上安排训练目标。例如对 64、128、256 和完整维度的表示分别计算任务损失,使这些前缀也能用于比较。一般形式可以写成各维度损失的加权和:

Lnested=∑m∈McmLm(z1:m)\mathcal L_{\mathrm{nested}}=\sum_{m\in\mathcal M}c_m\mathcal L_m(z_{1:m})

M\mathcal M 是所选维度集合,z1:mz_{1:m} 是向量前 mm 个坐标,cmc_m 是对应权重。具体任务还会带入分类器或成对表示。MRL 原论文 §3 与 §4.3说明训练方式和先低维取候选、再高维重排的应用。

低维前缀减少比较和存储的向量载荷,但会改变排序能力。普通向量的前半部分没有自动获得这一训练条件;服务提供可调维数,也要核对接口契约、模型与允许维度,不能仅凭接口名字推断其内部训练方式。使用余弦或单位向量内积时,截断后的范数可能改变,需要按模型约定重新归一化。

如果低维召回后用完整维度重排,需要保留或取得完整表示。只存低维向量无法凭空恢复被省略的坐标;低维阶段漏掉的候选也无法在重排中找回。表示维数、首阶段候选数和最终指标应共同评价。Sentence Transformers 的 Matryoshka 说明给出训练与使用中的维度取舍,没有为所有语料承诺同一性能保留比例。

多向量把细粒度交互留在编码之后

ColBERT 分别编码查询与文档,保留词元级向量。查询到达后,每个查询向量与文档各向量比较,取其中最大相似度,再对查询向量求和:

s(q,d)=∑i=1nqmax⁡1≤j≤ndqiTdjs(q,d)=\sum_{i=1}^{n_q}\max_{1\le j\le n_d}q_i^\mathsf{T}d_j

这里假定所使用的向量已按模型规则归一化;nqn_q 和 ndn_d 分别是保留的查询与文档向量数。MaxSim 让不同查询词元在文档中找到各自最匹配的表示。交互发生在独立编码之后,称为迟交互(late interaction)。ColBERT 原论文 §3解释了评分、重排与全集合检索。

例如查询含两个条件,一个文档只有第一个条件取得高相似度,另一个文档对两个条件都取得较高相似度,求和可以区分这两种覆盖。最大值可以来自不同文档位置,也可以让多个查询向量匹配同一位置,因此这个分数没有保证两个条件在原文中具有指定的逻辑关系。联合条件仍需任务评价或更细的比较。

离线保存多向量可复用文档编码,同时增加向量数量与查询时匹配工作。设一个单位保存 ndn_d 个 rr 维 float32 向量,仅向量载荷为 4ndr4n_dr 字节;还需位置、ID、索引结构等开销。它与单向量的比值依长度、维数和压缩决定,不是固定的 10 到 100 倍。

多向量模型可以只重排一组候选,也可以通过词元向量索引先产生候选,再计算文档级分数。压缩与词元剪枝分别减少载荷和表示数量,需要核对对匹配的影响。ColBERTv2 的残差压缩与去噪监督是具体设计:用中心向量与量化残差表示词元向量,减少存储载荷,相关监督另外处理训练标签的噪声。

ColBERT-Zero 的预训练与训练配方比较研究另一组条件:比较仅做蒸馏、先做多向量监督训练再蒸馏、完整多向量预训练等安排。在其模型与数据设置下,监督阶段有助于缩小仅蒸馏与完整训练的差距,训练和使用的提示形式也影响结果。这些结论处理表示学习,索引大小仍由保存的向量和压缩方式决定。

表示是检索任务的可计算近似。查询模板、编码器、词表、池化、维数和归一化规则共同确定空间;更换其中一项时需要核对已有表示是否仍可比。表示质量与索引候选覆盖是不同层的评价,准确的近邻搜索也可能取得对任务无用的文本。

最后更新于

本页目录