张芷铭的个人博客

MRL 用一个模型学习嵌套向量表示,推理时按需选择维度,无需重训。

核心思想

低维向量是高维向量的前缀:$z_{1:8} \subset z_{1:16} \subset \cdots \subset z_{1:2048}$。

训练时每个维度独立具备语义表达能力;推理时动态选择维度。

损失函数

$$L_{MRL} = \sum_{m \in M} c_m \cdot L(m)$$

高效变体 MRL-E

仅学习最大维度头 $W^{(d)}$,对任意 $m$ 取前 $m$ 列,参数量从 $O(L \cdot |M| \cdot d)$ 降至 $O(L \cdot d)$。

典型应用

场景方式
检索系统存储低维索引,查询时升维重排
边缘设备64-128 维粗筛,云端完整维度精算
服务分级免费版 128 维,付费版 512 维

代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class MRLClassifier(nn.Module):
    def __init__(self, nesting_list, num_classes, efficient=False):
        super().__init__()
        if efficient:
            self.head = nn.Linear(nesting_list[-1], num_classes)
        else:
            self.heads = nn.ModuleList([
                nn.Linear(m, num_classes) for m in nesting_list
            ])

    def forward(self, x):
        return {m: self.head(x[:, :m]) if self.efficient
                else self.heads[i](x[:, :m])
                for i, m in enumerate(self.nesting_list)}

最新进展

  • 指令感知 MRL:Qwen3-Embedding、Jina v3 支持维度指令控制
  • 多模态扩展:图像-文本联合 MRL 训练
  • 向量数据库支持:Chroma、Weaviate 原生支持 MRL 索引

Comments