AI 基建
0%
第六部分 · 编排 · 第 45 章

嵌入与表示学习

作者Changkun Ou
阅读时长约 17 分钟

第 44 章 的检索,倚靠的是一个把查询与文本块映射进同一个向量空间的模型,即双编码器,而交叉编码器重排器与 ColBERT 的后期交互则是它更具表达力的表亲。那一章用了这些模型,却没说它们是如何学会把相关的文本放到彼此近处的。这里缺失的机制是表示学习:生成器的隐藏状态不适合作为度量空间;对比目标通过对齐与均匀在球面上的权衡修复这一点;查询与文档交互的位置定下成本与质量的取舍;负样本的选择是核心训练变量。现代嵌入器则把同一个模型拉到多种任务与多种向量尺寸上,而数据路径也从网上挖掘文本对,走到由大语言模型生成样本对、再到解码器即嵌入器。

2026-06-23T18:50:32.771067 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 0.0 0.2 0.4 0.6 0.8 1.0 嵌入维度 1 0.0 0.2 0.4 0.6 0.8 1.0 嵌入维度 2 小猫 发票 收据 困难负样本
图 45.1. 嵌入平面的示意图,展示簇、近邻与困难负例。表示学习的核心是塑造距离,让检索与迁移使用正确的几何。理想化位置,非实测嵌入。

一个可比较的几何

语言模型以预测下一个词元为训练目标,而这个目标里没有任何东西要求意思相同的两段文本落到彼此近处。更深的问题在几何。一个训练好的语言模型,其隐藏状态是各向异性的:它们并不铺开在表示空间里,而是挤进一个狭窄的锥体,于是随意取两段文本,它们已经指向几乎相同的方向。Ethayarajh 直接量了这一点,把各向异性定义为均匀随机的两个词表示之间的期望余弦相似度,其中 00 是各向同性,而趋近 11 则是一个退化的锥体。在 GPT-2 的最后一层,这个期望相似度接近 0.990.99,而即便是双向的掩码模型 BERT,在其高层也落在 0.60.60.70.7 上下 (Ethayarajh 2019)。当每一对都已经近乎平行时,余弦相似度便几乎不剩什么动态范围,来把相关的与不相关的分开,而这恰是检索要它去做的事。

「锥体」这个词下藏着两个不同的现象,值得把它们分开。第一个是表示退化:在一个以似然训练、且输入与输出嵌入绑定的模型里,对稀有词元的 softmax 所产生的梯度,把它们的嵌入向量推向一个共同的方向,使静态嵌入矩阵塌向低秩 (Gao et al. 2019)。第二个是上面那种上下文各向异性,它是逐词元隐藏状态的一种属性,逐层增长,而在 Ethayarajh 的解读里,它内在于上下文化这一动作本身。单单自回归并不是罪魁,因为双向的 BERT 也各向异性;更大的问题是,语言模型式的训练产出的空间,其距离并不追踪意义。把一个解码器的状态池化起来之所以只能得到一个平庸的检索器,正是这个缘故,而其修法不是换一个架构,而是换一个目标。

检索需要的恰是生成的反面。它需要一个空间,在其中一个单一的距离,算一次、建好索引,就能把一百万个文本块对一个查询排序。嵌入模型的存在,正是为了学到那个空间,而它是被直接训练出来的,而非从一个生成器那里借来的。

对比目标

其原理是把一个正样本对拉近,把负样本推远。InfoNCE,为对比预测编码而提出 (Oord et al. 2018),把一个查询 qq 对它的正样本 d+d^{+} 与一组负样本 {dj}\{d^{-}_j\} 打分,写成相似度上的一个 softmax,带一个温度 τ\tau。softmax 把一行分数变成一组为正、且加起来等于一的权重,于是它们读起来就是概率,而温度 τ\tau 是一个除数,把这些权重调尖或摊平。其中 qq 是查询嵌入,d+d^{+} 是应该被检索到的正样本文档,djd^{-}_j 是竞争的负样本:

L=logexp(sim(q,d+)/τ)exp(sim(q,d+)/τ)+jexp(sim(q,dj)/τ)\mathcal{L} = -\log \frac{\exp(\operatorname{sim}(q, d^{+})/\tau)} {\exp(\operatorname{sim}(q, d^{+})/\tau) + \sum_j \exp(\operatorname{sim}(q, d^{-}_j)/\tau)}

模型靠的是判别,而非重建:它从不需要把文档生成出来,只需把对的那一个排到错的之上。在其最优处,这个打分恢复成一个密度比,sim(q,d)logp(dq)p(d)\operatorname{sim}(q,d) \propto \log \frac{p(d \mid q)}{p(d)},而原论文是从信息论来读它的:在 NN 个候选下,这个损失从下方界住了查询与正样本之间的互信息(知道其中一个,能为另一个减少多少不确定),I(q;d+)logNLI(q; d^{+}) \ge \log N - \mathcal{L} (Oord et al. 2018)。这条不等式有一个清晰的实践含义。它的下界被 logN\log N 封顶,因此要估出足够大的相关性,唯一的办法是一次对许多负样本打分,这正是批大小与负样本数量贯穿下文每一种配方的头一个理由。

互信息这套说法激励了这个损失,却没解释它的嵌入为何好,而把一个更紧的互信息界当作目标,甚至会让表示更差 (Wang and Isola 2020)。站得住的解释是几何的。Wang 与 Isola 证明,在许多负样本的极限下,作用在 2\ell_2 归一化向量上的对比损失,分解成单位超球面上两个可度量的属性 (Wang and Isola 2020)。用大白话说,前一个量看的是相关的一对最终有没有落到彼此近处,后一个量看的是无关的文本有没有用满整个球面、而不是挤作一团。对齐要求一个正样本对落得近,

Lalign=E(x,y)ppos[f(x)f(y)2α],\mathcal{L}_{\text{align}} = \mathbb{E}_{(x,y)\sim p_{\text{pos}}} \big[\, \lVert f(x) - f(y) \rVert_2^{\alpha} \,\big],

而均匀要求无关文本的嵌入,均匀地铺开在球面上,而非塌进一个锥体,

Luniform=log  Ex,ypdata[etf(x)f(y)22].\mathcal{L}_{\text{uniform}} = \log \; \mathbb{E}_{x,y\sim p_{\text{data}}} \big[\, e^{-t \lVert f(x) - f(y) \rVert_2^{2}} \,\big].

这两个标量,每一个都能在训练好的模型上直接量出来,能预测下游质量,而单独优化它们就能与 InfoNCE 持平。这个框架也精确地点出了上一节里出错的是什么:一个预训练的语言模型有不错的对齐,却有很差的均匀性,即被量化了的那个各向异性锥体。SimCSE 把这层联系做成了机械的。它的分析表明,均匀项从上方界住了嵌入 Gram 矩阵各元素之和,而经由那个和它又界住了最大的特征值,于是把它最小化便抹平了嵌入空间的奇异值谱,把锥体撑开 (Gao et al. 2021)。事后修法从外侧针对同一个各向同性,对表示做白化 (Su et al. 2021),或用一个归一化流把它们映到高斯 (Li et al. 2020),但这些是以对齐为代价换来均匀,这正是为什么一个能在改进均匀的同时保住对齐的对比目标,会赢过它们两者。

温度是这个目标里最后一个控制参数,而它比看上去更要紧。一个负样本上的梯度按 exp(sim/τ)\exp(\operatorname{sim}/\tau) 增长,于是惩罚是「知道难度的」:更近的负样本被推得更狠,而一个小的 τ\tau 把几乎所有梯度都集中到单个最难的负样本上,在极限处恢复成一个间隔损失,而一个大的 τ\tau 则把梯度摊匀、无视难度 (Wang and Liu 2021)。同一个控制参数内部还藏着一组拉扯。一个小的 τ\tau 换来均匀,却也把语义上相近的邻居一并推开,侵蚀了让嵌入对相似度有用的那种局部结构,于是有一个均匀与容忍的两难,而一个可用的模型活在 τ\tau 的一个中间带里,对文本检索而言常在 0.050.050.10.1 附近。

深入一步:读 InfoNCE 的两种方式

对比损失有两种读法。信息论的读法(最大化 I(q;d)I(q;d) 的一个下界)是历史上的动机,它经由 logN\log N 的封顶解释了为什么更多负样本有用。几何的读法(联合优化对齐与均匀)才是真正预测嵌入质量、并把这个目标接回各向异性问题的那一个。主线只需要几何这一读法;互信息界是它的来历,不是那个起作用的解释。

查询与文档在何处相遇

三种架构以不同方式回答同一个问题:查询与文档被允许在哪一点上交互?这个答案定下了成本与质量的取舍,因为发生得早的交互无法被预先算好。

一个交叉编码器把查询与文档拼成一个序列,让全部词元到词元的注意力跨着两边跑。它是最准的评分器,但它对文档的表示依赖于查询,于是什么都建不了索引:对一个有 NN 篇文档的语料评分,每个查询要花 NN 次 transformer 前向。Sentence-BERT 给这道限制记了个数:用一个 BERT 交叉编码器在一万个句子里找出最相似的一对,要花上约五千万次推断、数十个小时 (Reimers and Gurevych 2019)。因此交叉编码器被限在对一个短候选清单做重排上,也就是它在 第 44 章 里扮演的角色。

一个双编码器,或称双塔编码器,越过了那道限制:它把查询与文档各自独立地编成一个向量,以余弦或点积相比较。因为文档向量并不依赖于查询,整个语料便被离线地编一次、建好索引;唯一的在线成本是编码查询与一次向量搜索。Sentence-BERT 把这做成一个权重共享的孪生网络,外加一个在 BERT 词元输出上做平均池化的层,这一选择在它的消融里胜过了 [CLS] 向量与最大池化,而那个作为交叉编码器要花数小时的一万句搜索,便缩短到数秒 (Reimers and Gurevych 2019)。这份可分解性,是以放弃两边之间的交叉注意力换来的,而那份失去的交互,正是这一领域余下的力气都花在设法以低成本把它找回来上。

ColBERT 介于两者之间。它把每一边各自独立地编成一袋逐词元的向量,再以后期交互评分:对每个查询词元,取它对所有文档词元的最大相似度,再求和,这个操作叫 MaxSim (Khattab and Zaharia 2020)。文档的词元向量仍只依赖于文档,因而仍可预先算好、建好索引,只有那个低成本的 MaxSim 汇聚在线上跑,于是以每查询低上几个数量级的计算,换来近乎交叉编码器的质量。代价在存储,是每个词元一个向量、而非每篇文档一个,ColBERTv2 用对聚类中心的残差压缩、与从交叉编码器去噪蒸馏来对付它,把索引砍小六到十倍,质量反而更好 (Santhanam et al. 2022)。

cluster_CE 交叉编码器(仅重排) cluster_BE 双编码器(语料搜索) cluster_LI 后期交互(ColBERT) q1 查询 cat 拼接 + 全注意力 q1->cat s1 分数 cat->s1 d1 文档 d1->cat q2 查询 eq 编码器 q2->eq vq 1 个向量 eq->vq dot 点积 vq->dot d2 文档(离线) ed 编码器 d2->ed vd 1 个向量(已建索引) ed->vd vd->dot s2 分数 dot->s2 q3 查询 tq 逐词元向量 q3->tq mx MaxSim 求和 tq->mx d3 文档(离线) td 逐词元向量(已建索引) d3->td td->mx s3 分数 mx->s3
图 45.2. 查询与文档交互的三种放置。交叉编码器用全注意力把两边混在一起,什么都预先算不了。双编码器把每一边各自独立地编成一个向量,于是文档可离线建索引。ColBERT 保留逐词元的向量,经由 MaxSim 在后期交互,在仍可建索引的同时找回交叉编码器的大部分质量。取材自 Reimers 与 Gurevych(2019)及 Khattab 与 Zaharia(2020)。
下层约束

服务层选了架构。一个检索器在大规模下每个查询能花的成本,正是不准交叉编码器去做第一阶段搜索、并逼出双编码器那种独立编码的东西,也是同一份压力让 ColBERT 的逐词元索引成了一项要被压掉的真实成本。第 44 章 在检索时所画的那条双编码器对交叉编码器之分,在训练时是一个关于「语料的服务预算会让两段文本在何处相触」的决定。

负样本是设计变量

正样本是给定的,真正的设计空间在于如何选择负样本。在一个双编码器里,模型只会从它被给看的负样本里学,于是负样本的分布、而非损失的公式,才是那个主导的设计变量,而各家配方就是一部不断找到更难者的历史。

第一招是让负样本几乎不增加编码成本。批内负样本,由 Dense Passage Retrieval 大规模引入,把一个训练批次里其余的正样本,当作每个查询的负样本:一个 BB 对的批次产出一个 B×BB \times B 的相似度矩阵,其中每个查询的正确段落是它的正样本,其余 B1B-1 个段落则是负样本,不花额外编码就被复用 (Karpukhin et al. 2020)。于是更大的批次几乎不增加编码成本就获得更多负样本,并直接抬升检索质量,这正是嵌入训练把批大小推到数万的缘故。DPR 还在其上为每个问题加了一个用 BM25 挖来的难负样本,报告出相对 BM25 高出九到十九个点的绝对 top-20 准确率。

不过批内负样本大多是容易的,而一个容易的负样本教不了多少。一旦模型像样了,一个随机负样本就已离查询很远,于是它的 softmax 概率近乎零、梯度也近乎消失。ANCE 把这一论证讲精确了,并引出推论:去挖真正难的负样本,方法是从一个铺在整个语料上的近似最近邻索引里,检索出当下排名靠前却不相关的文档,而这个索引从一个较近的检查点异步刷新,好让负样本随模型变强而跟上 (Xiong et al. 2021)。有了真正难的负样本,一个点积检索器便近乎追平了一个贵得多的交叉编码器级联。RocketQA 把两个方向都再推了一步,把负样本跨着数据并行的批次收集起来,让每个查询见到的远多于一台设备所容,并加了一个去噪步 (Qu et al. 2021)。

那个去噪步治的是整套方案里最深的隐患,即假负样本。检索语料的标注是稀疏的:一个查询可能有许多相关段落,却只有一个被标注,于是任何把所有未标注者都叫作负样本的方案,都会恰在那些难的、高相似度的候选里,把真正的正样本误标成负样本,并因模型答对而惩罚它。RocketQA 用一个交叉编码器为候选难负样本打分,丢掉那些最自信地相关的,只留下自信地不相关的 (Qu et al. 2021)。在许多查询上对损失取平均,随着负样本被拉近到查询,看它如何攀升,这正是更难的负样本携带更多梯度的信号。

图 45.3. 一个查询、它的正样本,以及一团负样本。拖动难度滑块,把负样本拉向查询:它们的相似度升高,softmax 的分母随之增大,损失也跟着攀升,这正是难负样本比远处那种容易负样本携带更多梯度的信号。温度决定单个最难的负样本主导得有多尖锐。示意性。
import numpy as np
rng = np.random.default_rng(0)
d = 32

def infonce(q, dpos, dnegs, tau=0.05):
    sims = np.array([q @ dpos] + [q @ x for x in dnegs]) / tau
    sims -= sims.max()                        # 数值稳定性
    p = np.exp(sims) / np.exp(sims).sum()
    return -np.log(p[0])                       # 损失 = -log P(正样本)

def unit(v): return v / np.linalg.norm(v)

def mean_loss(hardness, n, trials=300):        # hardness 0=随机, ->1 趋向查询
    total = 0.0
    for _ in range(trials):
        q = unit(rng.normal(size=d))
        dpos = unit(q + 0.4 * rng.normal(size=d))
        negs = [unit(hardness * q + (1 - hardness) * rng.normal(size=d)) for _ in range(n)]
        total += infonce(q, dpos, negs)
    return total / trials

for h in [0.0, 0.3, 0.6]:
    print(f"negative hardness {h:.1f}: mean loss = {mean_loss(h, 16):.3f}")
print("harder negatives (closer to the query) -> larger loss -> stronger signal")

样本对的另一边,即正样本,在标注稀缺时才是瓶颈,而有两条路把它造出来。SimCSE 把同一个句子在不同的 dropout 掩码下编码两次,以此构成它的正样本对,这一几乎不增加成本的扰动出奇地有效,而它的有监督形式则从自然语言推理的蕴含对里取正样本,并把矛盾对用作带标注的难负样本 (Gao et al. 2021)。Contriever 根本不用任何标注就造出正样本,从一篇文档里裁出两段,或把一个句子与它周围的上下文配对,而负样本存在一个动量队列里,好让它们的数目与批大小脱钩;不靠监督,它就已在 BEIR 套件的大多数上胜过 BM25 (Izacard et al. 2022)。第三条路转移的不是数据而是准确度:把交叉编码器的判断蒸馏进一个双编码器。因为不同架构在不同的尺度上打分,关键是匹配一个正样本与一个负样本之间的间隔、而非原始分数,即 Margin-MSE 目标 (Hofstätter et al. 2020),而 TAS-B 把它与按主题的批采样相结合,让每个批次都从一个查询簇里抽,好让批内负样本在主题上是难的,从而在单卡上就训出一个强劲的稠密检索器 (Hofstätter et al. 2021)。

一个模型,多种任务与多种尺寸

一个嵌入器被要求同时服务搜索、聚类、分类与去重,而有两个想法把一个模型在这一范围上拉开。第一个把嵌入条件在一个任务指令上。Instructor 在前面拼上一段对任务的简短自然语言描述,编码这个拼接、并只在文本词元上池化,于是同一套权重、同一个输入句子,会因所声明的任务是检索还是相似度而落到不同的点上,无需逐任务微调;在一个带书面指令的 330 数据集混合上训练,它在七十个任务上、其中多数未曾见过,胜过了此前最佳 (Su and others 2022)。TART 把同一个想法带进检索本身,让用户在查询旁声明意图,在推进零样本检索的同时胜过了数倍于它的模型 (Asai et al. 2023)。两者的动作是同一个:把许多任务专用的嵌入器,合并成一个由提示参数化的模型。

第二个想法把向量尺寸本身变成一个控制参数。Matryoshka 表示学习这样训练,使嵌入的前 mm 维本身就是一个可用的嵌入,办法是对每一个嵌套的前缀都挂一个损失、并把它们相加,

minθ,{W(m)}  imML(W(m)f(xi)1:m,  yi),\min_{\theta,\,\{W^{(m)}\}}\; \sum_{i} \sum_{m \in \mathcal{M}} \mathcal{L}\big( W^{(m)} \cdot f(x_i)_{1:m}, \; y_i \big),

于是每一个靠前的切片都被显式地逼着自己就有判别力 (Kusupati and others 2022)。那些靠前的坐标出来时,与一个在那个尺寸上原生训练出来的一样准确,且不增加任何训练成本,这把截断变成了一等的操作:把完整向量存一次,再按查询用一个短前缀建一个低成本的候选清单,之后用完整向量重排。这正是各家 API 嵌入器如今宣传可截断维度的缘故,也是一个服务成本反向传导、重塑训练运行被要求产出之物的清楚例子。

训练样本对从何而来

瓶颈很少在损失;它在查询与文档样本对的供给,而这一领域近来的历史,就是对那个供给问题的两个回答。第一个把样本对大规模地从网上挖掘出来。E5 攒起一个「巨量且经过过滤」的自然出现样本对语料,来自 Reddit 的帖子与评论、来自 Stack Exchange 的问答对、来自 Wikipedia 与 Common Crawl 的标题与段落,用一个基于一致性的过滤器把约十亿个噪声样本对滤到几亿,在其上做对比预训练,再跑一小段有监督微调;它是第一个在 BEIR 上胜过 BM25 的无监督模型,并在登上基准之巅的同时,把参数远多于它的模型比了下去 (Wang et al. 2022)。GTE (Li et al. 2023) 与 BGE / C-Pack 一家 (Xiao et al. 2024) 沿用同样的多阶段形状,先挖出数以亿计的样本对,再做一个有监督阶段,其中 C-Pack 贡献了中文的资源与一个从掩码自编码器预训练起步的三阶段配方。

如今领先的那条路从一个生成器自举,而它是分几步到来的。先是把骨干放大:Sentence-T5 与 GTR 把一个 T5 模型的编码器放大到数十亿参数,并表明一个大的双编码器在域外泛化得出奇地好、只用一小部分带标注的数据 (Ni et al. 2022; Ni et al. 2022)。接着是生成器接管了数据。E5-mistral 提示一个专有的大语言模型,去跨数十种语言合成多样的检索任务及其查询与文档样本对,再用一段简短的低秩适配把 Mistral-7B 本身微调成那个嵌入器,以极少的人工标注数据登上基准榜首 (Wang et al. 2023)。生成模型训练了检索模型,这是 第 23 章 那个合成数据回路的一个清楚实例。

一旦嵌入器是一个解码器模型,一个具体的架构论证便随之而来:生成器所需的那个因果掩码(即每个位置只能注意到排在它之前的位置这条规则),对一个本应一次看到全文的编码器而言是个累赘。LLM2Vec 用三个无监督步骤把任一解码器变成编码器,先启用双向注意力,再用掩码下一词元预测来适配,然后做一遍 SimCSE 式的对比 (BehnamGhader et al. 2024)。NV-Embed 做了同样的双向动作,并加了一个学习得来的潜在注意力池化层,它胜过平均与末词元池化,仅靠公开数据就登上了 MTEB 之巅 (Lee et al. 2025)。前沿的嵌入器延续了这条线:Gemini Embedding 从 Gemini 初始化、双向地跑、登上多语言基准之巅 (Lee et al. 2025),而 Qwen3 的嵌入模型则以若干尺寸把这套配方公开放出 (Zhang et al. 2025)。这条贯穿的线索,是一次稳步迁移,从找到样本对,到生成样本对,再到让语言模型本身成为嵌入器,其间池化从平均转到末词元、再转到学习得来的注意力,而解码器的因果掩码则一路被刻意移除。

这一领域的形状

两条线索贯穿这一演化,一条是解释何为好的嵌入空间的理论线索,一条是以越来越低的成本学到这样一个空间的工程线索,而它们在现代这种由 LLM 自举的嵌入器处相遇。

lineage cpc InfoNCE 2018 互信息界 au 对齐+均匀 2020 为何有效 cpc->au sbert Sentence-BERT 2019 孪生双编码器 cpc->sbert e5m E5-mistral 2023 LLM 生成的对 au->e5m dpr DPR 2020 批内负样本 sbert->dpr colbert ColBERT 2020 后期交互 e5 E5 2022 网上挖掘来的对 colbert->e5 ance ANCE 2021 难负样本 dpr->ance dpr->e5 rocketqa RocketQA 2021 去噪负样本 ance->rocketqa rocketqa->e5m e5->e5m llm2vec LLM2Vec / NV-Embed 2024 解码器即编码器 e5m->llm2vec
图 45.4. 嵌入思想的演化线索。一条理论线索(InfoNCE,再到对齐与均匀)解释了那个目标;一条架构线索定下查询与文档在何处交互;一条负样本线索磨利训练信号;而一条数据线索从孪生的句子对,穿过网上挖掘来的样本对,走到 LLM 生成的样本对与解码器即嵌入器,诸线索在此汇聚。

这些线索最后收束到同一组取舍上。一个交叉编码器是最准的评分器,也是最不可扩展的;一个双编码器最可扩展,却放弃了最多的交互;后期交互以索引存储换回质量。更难的负样本携带更多信号,却冒着需要一个去噪器来对付的假负样本之险。一个更大的骨干泛化得更好,服务起来却更贵,而同一个 Matryoshka 向量在 256 维上索引成本低,却不如完整的 1024 维准确。这里的每一个增益,都在别处付了账,通常是在服务时,而那正是下一个框带来的视角。

争议所在

单个通用嵌入器能否一统天下,尚无定论。MTEB 在分类、聚类、检索、重排与语义相似度上为嵌入器打分,发现没有任何单一模型能赢下每一项任务,而它的多语言后继 MMTEB 把这一点说得更清楚:截至那项研究,最强的可公开获取的模型,是一个五亿六千万参数的多语言编码器,把比它大上一个数量级的解码器 LLM 比了下去 (Muennighoff et al. 2023; Enevoldsen and others 2025)。此后座次已经翻转,到 2026 年,多语言榜首换成了 Qwen3-Embedding-8B 这样数十亿参数、基于解码器的嵌入器 (Zhang et al. 2025),这非但没有平息争论,反而让要点更清楚:哪种几何获胜,本身就是榜单所加权的任务组合的属性。一派把这种此起彼伏读作暂时的,一个足够强的、由 LLM 自举的嵌入器终将在所有任务上一并泛化;另一派把它读作结构性的,因为为聚类把主题分开的那种几何,并不是为检索把答案排序的那种几何,对称的相似与不对称的相关把这个空间拉向不同方向,而这恰恰是指令条件化存在的理由。还有两重疑虑随之而来。BEIR 表明稠密检索器在域外泛化得不如 BM25,于是一个在分布内赢下的基准未必迁移得过去 (Thakur et al. 2021),而一旦一个榜单成了靶子,模型便会漂向去拟合它。再者,指令遵循的检索仍大体未解:FollowIR 发现当下的检索器把指令当作一袋关键词、而非约束来用,尽管微调能把这门本事教会 (Weller et al. 2024)。把一个嵌入榜单分数当作受任务塑形的,直到在自己的检索分布上测过为止。

下层约束

向量索引会反向影响表示是如何训练的。检索的服务成本随嵌入维度乘以语料规模而增长(第 44 章),而这份成本,在每个查询上永远地付,正是一开始就为可截断性而训练的理由:Matryoshka 之所以存在,是因为一个 1024 维的向量铺在十亿个文本块上,昂贵到「能在不重训的情况下降到 256 维」这件事值得专门去设计。同一条约束,在上面两节定了架构,在上面一节定了挖负样本的预算。检索层的成本,决定了训练运行被要求产出的那个向量的形状、尺寸,乃至训练信号。

延伸阅读

评论

登录后评论