首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Elasticsearch 如何自动调整向量量化以达到您的召回目标

Elasticsearch 如何自动调整向量量化以达到您的召回目标

作者头像
点火三周
发布2026-07-27 16:12:50
发布2026-07-27 16:12:50
1340
举报

Elasticsearch 如何自动调整向量量化以达到您的召回目标

想要亲身体验向量搜索?您可以尝试我们为搜索AI提供的自定进度实践学习课程。现在就可以开始免费云试用,或者在您的本地机器上试用 Elastic。

什么样的向量存储才是好的?

一个无需调优就能实现良好性能的向量存储,比一个需要专家手动调优的更有价值。事实上,我们认为,一个需要专家花费一周时间手动调优才能达到卓越性能的数据存储,其实用性不如一个开箱即用就能持续超越它的数据存储。换句话说,轻松实现良好性能是首要特性,而非锦上添花。从我们的遥测数据中可以清楚地看到这一点。绝大多数用户永远不会调优 向量搜索的内部参数,他们也没有理由这样做:它只是他们试图构建的功能的实现工具。

这就是自动校准等功能背后的必然性。整个系统应该根据您的数据和质量目标,为您选择合适的参数。我们认为这是一个双赢的局面,因为系统拥有比我们对外公开的更细致的信息来进行这些选择。

为了精确地定义“良好性能”,我们需要明确表征任何向量搜索系统的三个属性,因为它们之间存在权衡,并且在不固定其他属性的情况下无法讨论其中一个:

  1. 1. 性能: 吞吐量(QPS)、延迟等。
  2. 2. 硬件成本: 公平的比较总是固定成本。通过投入硬件来提高 QPS 或改善召回率是轻而易举的;有趣的问题是您每投入一美元能实现什么。
  3. 3. 搜索质量: 召回率、nDCG 以及其他衡量是否返回正确结果的相关指标。

这三者构成了一个边界。固定预算下,提升其中一个,就必须牺牲另一个。任何对不同方法的诚实比较都会固定其中两个,然后测量第三个。本文描述的机制,正是我们为固定召回预算选择量化参数的方法。这是实现一个能够全面自我配置的向量存储的漫长旅程中的一步。

为什么召回率是向量搜索的正确质量指标

搜索质量很棘手,因为“正确”的结果取决于您在索引时通常没有的相关性标签。因此,我们依靠召回率作为安全的替代指标。这个论点很简单:召回率衡量了近似索引在多大程度上重现了**相同嵌入**上的精确搜索结果。如果召回率很高,那么您就没有降低相对于底层模型能够实现的搜索质量;您可以确信您忠实地保留了基线。您可能仍然希望有一个更好的嵌入模型,我们已经为您考虑到了,但这与索引没有损害模型已提供的内容是两个独立的问题。

这就是为什么控制召回率如此重要,以及为什么您应该警惕任何不能可靠控制召回率的系统。如果供应商无法控制召回率,他们可能会悄无声息地降低您的搜索体验,在返回更差结果的同时实现令人印象深刻的 QPS 数字,而您在没有标注评估集的情况下将无从知晓。本文介绍的方法旨在在牢牢、可预测地控制质量的同时,最大化性能

为什么向量量化参数必须在索引时选择

真正让问题变得困难的是,向量在索引时就被量化了,因此决定质量的参数(多少位,重排深度,是否预处理)必须在我们看到数据最终布局之前进行评估。我们不能先索引所有内容,然后测量召回率,再进行迭代;到那时,量化已经确定了。

所以我们需要从一个小的样本中,廉价且提前地估计我们需要什么。幸运的是,Elasticsearch 为我们提供了这样做的自然时机:段合并正是这样的机会。当段合并时,我们无论如何都必须重写数据,因此可以评估数据并(重新)选择参数。正如我们将看到的,对小随机样本进行模型拟合,可以极好地估计我们实际需要控制的量。它们通常足以一次性设置参数,并留有少量余量,然后随着索引的增长而信任这些参数。

向量量化如何影响最近邻召回率

有了这些背景,我们开始深入探讨细节。

向量量化是实现大规模近似最近邻(ANN)搜索经济实惠的关键组成部分;这是我们过去创新的领域。我们不是存储和比较全精度嵌入,而是存储有损、压缩的表示,并在此基础上进行搜索。但问题在于:有损表示会改变距离,因此在量化距离下“最近”的邻居不总是真正的最近邻居,从而导致召回率下降。

标准的解决方案是过度检索并重新排序。我们使用廉价的量化距离来获取前 nnn 个候选,然后对这 nnn 个候选重新计算精确距离,并保留最好的 kkk 个。只要真正的 kkk 个最佳结果存在于检索到的前 nnn 个中,重排就能精确地恢复它们。

重排并非没有代价,我们必须从磁盘获取高精度向量。然而,我们可以仅根据硬件特性精确地描述重排的性能。这重新定义了整个问题。问题不再是抽象地“量化对距离的扭曲程度如何?”,而是与我们关心的属性相关的问题:

给定一个具有一定误差幅度的量化方案,以及 nnn 个候选的重排预算,我们应该期望的 recall@kkk 是多少?作为一个直接的结果,最便宜的参数组合是什么,能够达到我们的召回目标?

本文推导了一个模型,它精确地回答了这个问题。其核心是一个单一、令人惊讶的简洁思想:如果我们能够描述到第 kkk 个最近邻居的距离分布,并且我们有一个量化误差分布的模型,那么我们就可以以封闭形式(直至一个一维积分)计算重排后的预期召回率。所有其他因素——比特数、重排深度、是否预处理——都变成了对一个可以通过小样本廉价拟合的模型进行搜索,而不是对使用这些参数构建的完整索引进行昂贵的经验性扫描。

我们将分三个阶段来构建这个模型:最近邻距离的几何形状,由此产生的缩放定律,以及将量化误差与给定重排预算的召回率联系起来的召回模型。请注意,接下来的内容会有点复杂,但为了让您对正在发生的事情有一个直观的理解,请观看下面的视频。

动画展示向量量化误差如何导致最近邻距离偏离,以及重排到深度 n 如何通过重新评分具有精确距离的候选来恢复召回率

量化和重排如何影响召回率的图示

量化误差与最近邻距离差距

固定一个查询 q,并按其真实距离排序数据库向量:R_{(1)} \le R_{(2)} \le \dots,其中 R_{(i)} 是到第 i 个最近邻居的距离。当第 k 个真实邻居没有被量化噪声推到超过 n 的排名时,重排前 n 个候选才能成功。

有两个相互竞争的量决定了这一点:

  • 量化误差: 对于给定的方案和数据集,它基本上是固定的:它取决于嵌入维度、向量分布和比特数,但与索引大小无关。
  • • 临界差距 \Delta_{k,n} = R_{(n)} - R_{(k)}:这是第 k 个和第 n 个最近邻居之间的距离。这是我们吸收误差的余量。关键是,它随着索引的增长而缩小:将更多向量打包到同一区域,邻居就会挤在一起。

这里有一个细节我们将为了演示而忽略:对于 IVF 风格的索引,我们正在量化来自聚类质心的残差。这实际上将量化误差与索引大小耦合起来,但我们可以像处理到第 i 个最近邻居的距离一样处理它。

为了让重排恢复因量化而损失的召回率,我们需要误差很少超过这个差距。如果我们能够写下 \Delta_{k,n} 的分布和误差的分布,我们就可以将这个陈述量化。第一个任务是估计最近邻距离的分布。

推导最近邻距离分布

真实嵌入不会填满其环境空间;它们集中在一个较低维度的流形上。然而,在查询附近,我们可以做一个温和的局部假设:在查询周围的一个小邻域 \Omega \subset \mathbb{R}^d 中,数据密度大致均匀。这里 d 是流形的内在维度;它是未知的,并且通常远小于嵌入维度。如何估计它将在第 4 节讨论。

\mathcal{X} = {X_i} 是落在 \Omega 中的 N 个向量,建模为在 \Omega 上独立同分布的均匀分布,并定义 q 到其最近邻居的距离:

R = \min_{X_i \in \mathcal{X}} \lVert X_i - q \rVert.

为了获得 R 的分布,我们使用标准的顺序统计技巧:不问最小值在哪里,而是问它超过某个半径 r 的概率。事件 {R > r}rd 维球 B_r(q) 之外的事件。

单个点落在 B_r(q) 内的概率等于球的体积与区域体积 V 的比率:

P(X_i \in B_r(q)) = \frac{\omega_d, r^d}{V}, \qquad \omega_d = \frac{\pi^{d/2}}{\Gamma(d/2 + 1)}\text{,} \tag{1}

其中 \omega_d 是单位 d 维球的体积。(我们假设 N 足够大,使得相关的 r 很小,因此球不会溢出 \Omega,并且边界效应可以忽略不计。)由于点的位置被假定为独立的,因此生存函数为:

P(R > r) = \left(1 - \frac{\omega_d, r^d}{V}\right)^{N}\text{.} \tag{2}

我们真正感兴趣的是 R 平均行为。为了计算这一点,我们使用非负随机变量的期望等于其生存函数的积分这一恒等式,E[R] = \int_0^\infty P(R > r), dr

\boxed{;\mathbb{E}[R] \approx \left(\frac{V}{\omega_d, N}\right)^{1/d};}

(精确积分带有一个额外的 \Gamma(1 + 1/d) 因子;它是一个 O(1) 常数,我们可以将其折叠到稍后拟合的系数中,因此这里省略。)

冰川式缩放:为什么邻居距离随着索引增长几乎不变

考虑这个公式告诉我们距离如何随数据集大小变化是很有趣的:\mathbb{E}[R] \propto N^{-1/d}。指数是 -1/d,在高的内在维度中,这是一个非常小的数字。这是该方法所依赖的一个特性,所以值得代入一些数字:

  • • 如果 d=2,那么 N 翻倍会使 \mathbb{E}[R] 乘以 2^{-1/2} \approx 0.707,因此距离下降约 30%。
  • • 如果 d=50,那么 N 翻倍会使 \mathbb{E}[R] 乘以 2^{-1/50} \approx 0.986,因此距离下降略超过 1%。

在高维度中,即使您添加大量数据,邻居距离也几乎不会移动;称之为冰川式缩放。这就是为什么我们可以从一个微小的样本中一次性选择量化参数,并留有少量安全余量,并相信它们即使在下一次重新量化之前索引大幅增长后仍然有效。

第 k 个邻居的期望距离和临界差距

我们实际上关心的是整个顺序统计量序列 R_{(k)}R_{(n)},而不仅仅是最小值。有一种简单的方法可以得到它们。

通过定义 U_i = \frac{\omega_d, R_i^d}{V},将每个半径映射到它所包含的累积体积。

根据(1),每个 U_i 正好是落在半径 R_i 内的概率,所以 {U_i}[0,1] 上是均匀分布的。均匀分布的顺序统计量是教科书内容:N 个均匀分布中第 i 小的遵循 Beta 分布:

U_{(i)} \sim \mathrm{Beta}(i, N - i + 1), \qquad \mathbb{E}[U_{(i)}] = \frac{i}{N+1}.

反转体积映射,R_{(i)} \propto U_{(i)}^{1/d},给出第 i 个邻居距离的缩放:

\mathbb{E}[R_{(i)}] \propto \left(\frac{i}{N}\right)^{1/d}.

这就是我们计算期望差距所需的全部:

\begin{align*} \mathbb{E}[\Delta_{n,k}] &= \mathbb{E}[R_{(n)}] - \mathbb{E}[R_{(k)}] \ &\approx \alpha\left(\left(\tfrac{n}{N}\right)^{1/d} - \left(\tfrac{k}{N}\right)^{1/d}\right) \ &= \mathbb{E}[R_{(k)}]\left(\left(\tfrac{n}{k}\right)^{1/d} - 1\right)\text{.} \tag{3} \end{align*}

最后一种形式更直观:第 k 个和第 n 个邻居之间的差距是到第 k 个邻居的距离,乘以 ((n/k)^{1/d} - 1)。相对于 k 扩大重排深度 n 会增大差距;更高的内在维度 d 会缩小差距(指数 1/d(n/k)^{1/d} 推向 1)。

为什么期望差距足以预测召回率

只有当差距在其周围没有剧烈波动时,使用期望值才合理。它不会剧烈波动,因为测度集中性定理拯救了我们。将Delta 方法应用于 R_{(k)} \propto U_{(k)}^{1/d},并使用 Beta 分布的 \mathrm{Var}(U_{(k)}) \approx k/N^2,经过一些代数运算得到:

\mathrm{Var}(R_{(k)}) \approx \frac{\mathbb{E}[R_{(k)}]^2}{d^2, k}\text{.}

因此,变异系数约为 \frac{1}{d\sqrt{k}}。对于任何合理的内在维度,这都是可以忽略不计的,这证明了仅对期望距离进行建模的合理性。(如果您担心 Delta 方法的近似,可以通过数值检查结果:Delta 方法方差和由此产生的 1/(d\sqrt{k}) 变异系数与精确表达式在几个有效数字内匹配。)

将模型扩展到余弦相似度和内积搜索

该推导是针对欧几里得度量的,但其他常见的度量可以归结为它:

  • • 对于余弦相似度,等距曲面是查询周围的球体与单位球体的交集。这被称为超球面帽,其体积对于小 \theta 来说,近似按 \sin(\theta)^{d-1} \approx \theta^{d-1} 缩放。因此,分析在常数范围内保持不变,维度减一。
  • • 对于 MIPS(最大内积),需要额外注意,因为最近邻居不限于紧凑区域。如果一个遥远的向量的范数足够大,它仍然可以在内积上胜出,因此差距实际上由范数分布的尾部决定。然而,有一个简洁的解决方案,即使用 Neyshabur–Srebro 变换。这将向量提升到 d+1 维单位超球面上。在此操作之后,就变成了余弦情况。

从小样本中拟合内在维度和尺度

方程(3)具有已知的函数形式,但有两个未知参数:内在维度 d 和尺度 \alpha。两者都很容易拟合,并且从原始邻居距离而不是直接从差距拟合它们更方便。

从大小为 N_i = |D_i| 的数据库向量子集 {D_i} 中采样,以及一组查询向量 Q。对于每个查询 q \in Q 和每个子集,测量 r_{i,j}(q),即 qD_i 中到第 j 个最近邻居的距离。对缩放定律 \mathbb{E}[R_{(j)}] \approx \alpha (j,/,N_i)^{1/d} 取对数使其线性化:

\log\left(\frac{1}{|Q|}\sum_{q \in Q} r_{i,j}(q)\right) \approx \log\alpha + \frac{1}{d}\Big(\log j - \log(N_i/N_0)\Big)\text{.}

具体来说,这在 \log j\log(N_i/N_0) 中是线性的,因此普通最小二乘法可以恢复 \hat{\alpha}\hat{d}。改变子集大小 N_i 是估计 d 的关键:它正是距离随数据量缩小的速率。利用拟合参数,整个索引的期望差距为:

\mathbb{E}[\Delta_{n,k}] \approx \hat\alpha\left(\frac{kN_0}{N}\right)^{1/\hat d}\left(\left(\frac{n}{k}\right)^{1/\hat d} - 1\right)\text{.} \tag{4}

图 1 展示了这种拟合在实践中的良好程度(而且效果非常显著):在各种数据集和度量下,预测的第 k 个邻居平均距离与实际平均距离的 R^2 介于 0.996 和 0.999 之间。

在六个数据集和度量下,估计的与实际的最近邻距离,显示向量量化距离模型拟合的 R² 介于 0.996 和 0.999
在六个数据集和度量下,估计的与实际的最近邻距离,显示向量量化距离模型拟合的 R² 介于 0.996 和 0.999

在六个数据集和度量下,估计的与实际的最近邻距离,显示向量量化距离模型拟合的 R² 介于 0.996 和 0.999

图 1 第 k 个最近邻居估计的平均距离的拟合优度。每个面板代表一个不同的数据集/度量;点是(实际,估计)平均距离。

将向量量化误差建模为高斯分布

在建立了最近邻距离模型之后,第二个组成部分是量化误差分布。对于我们使用的每个度量,量化距离估计值与真实距离之间的误差是许多独立维度贡献的总和。根据中心极限定理,这个总和趋向于高斯分布,因此我们将误差建模为正态分布,其方差通过经验估计:

\sigma_b^2 = \frac{1}{Z}\sum_{q \in Q}\sum_{i,j}\big(r_{i,j}(q) - \tilde{r}_{i,j}(q \mid b)\big)^2\text{,}

其中 \tilde{r}_{i,j}(q \mid b) 是使用 b 比特向量的量化距离估计值,Z 是我们样本集中(查询,邻居)对的总数。换句话说:采样、量化、测量平方距离误差,然后取平均值。

图 2 展示了高斯假设的经验基础:测量到的量化误差密度与各种数据集上的最佳拟合高斯分布对比。拟合效果良好,这使得模型的其余部分能够保持解析。

在六个数据集上以 1 比特精度进行的向量量化误差密度直方图,并叠加高斯拟合,证实了召回模型中使用的中心极限定理预测
在六个数据集上以 1 比特精度进行的向量量化误差密度直方图,并叠加高斯拟合,证实了召回模型中使用的中心极限定理预测

在六个数据集上以 1 比特精度进行的向量量化误差密度直方图,并叠加高斯拟合,证实了召回模型中使用的中心极限定理预测

图 2 量化误差密度图(查询比特 1,文档比特 1),叠加最佳拟合高斯分布。接近高斯形状是 CLT 论证所预测的。

我们可以在这里停下来,采用一种最小最大的观点:使用期望差距(4)对抗误差尺度 \sigma_b,来阈值化第 k 个和第 n 个邻居交换的概率。但这控制的是最坏情况事件,而我们真正想要控制的是平均召回率。结果将是过于保守的量化参数,我们将付出一些性能代价。下一节将正确估计期望召回率。

预测重排后的期望召回率

结合距离模型和误差模型,可以得到重排后期望召回率的封闭形式估计。将第 i 个真实邻居的带噪声距离建模为以其真实距离为中心的高斯分布:

X_i = \mathcal{N}\big(R_{(i)}, \sigma_b\big)\text{.}

如果少于 n 个其他向量具有更小的带噪声距离,则第 i 个邻居在重排后存活,即落在检索到的前 n 个中。条件化于 X_i = x,并计算比 x 更近的竞争者:

S(x) = \sum_{j \ne i} \mathbf{1}(X_j < x)\text{.}

那么召回邻居 i 的概率是其自身带噪声距离落在何处的积分:

P(\text{recall}(i)) = \int_0^\infty P\big(S(x) < n\big), f_{X_i}(x), dx\text{.}

S(x) 的各项是独立的伯努利变量,但并非同分布,因为每个邻居 j 都位于不同的真实距离 R_{(j)},所以每个邻居都有自己侵入前 k 集合的概率:

p_j(x) = P(X_j < x) = \Phi!\left(\frac{x - R_{(j)}}{\sigma_b}\right)\text{,} \tag{5}

其中 \Phi 是标准正态累积分布函数。这使得 S(x) 成为一个泊松二项式变量。由于我们对它们进行了大量求和(因为 N \gg n),Lyapunov CLT 适用,我们近似为:

S(x) \sim \mathcal{N}\big(\mu_S(x),, \sigma_S^2(x)\big)\text{,}

具有标准泊松二项式矩:

\mu_S(x) = \sum_{j \ne i} p_j(x), \qquad \sigma_S^2(x) = \sum_{j \ne i} p_j(x)\big(1 - p_j(x)\big)\text{.}

那么生存概率有一个简洁的封闭形式:

P\big(S(x) < n\big) \approx \Phi!\left(\frac{n - \mu_S(x)}{\sigma_S(x)}\right)\text{.}

这正是本文到目前为止的两个部分最终结合的地方。我们不需要知道单个的 R_{(j)},因为第 3 节的流形缩放定律提供了它们:R_{(j)} = \alpha,(jN_0/N)^{1/d}。因此,这些矩变成了对排名的显式求和,我们在一个安全的截止点(例如 10n,因为遥远的邻居贡献可忽略不计)将其截断:

\mu_S(x) \approx \sum_{j=1}^{10n} \Phi!\left(\frac{x - \alpha(jN_0/N)^{1/d}}{\sigma_b}\right)\text{,}

\sigma_S^2(x) \approx \mu_S(x) - \sum_{j=1}^{10n} \Phi!\left(\frac{x - \alpha(jN_0/N)^{1/d}}{\sigma_b}\right)^{2}\text{.}

最后,给定重排深度 n 的平均 recall@k 汇总了前 k 个邻居的每个邻居召回率:

\boxed{;P(\text{recall}@k \mid n) = \sum_{i=1}^{k} P(\text{recall}(i) \mid n) \approx \sum_{i=1}^{k} \int_0^\infty \Phi!\left(\frac{n - \mu_S(x)}{\sigma_S(x)}\right)\phi!\left(\frac{x - R_{(i)}}{\sigma_b}\right) dx.;}

这里 \phi 是标准正态密度。每个积分都是平滑的一维积分,因此 Gauss-Legendre 求积法可以在微秒内评估它。对一组候选参数进行整个召回预测只需进行少量求积评估,而无需构建索引和运行基准测试。

图 3 验证了端到端模型:在许多参数设置和多个数据集下,预测的平均召回率与实际测量的召回率相比,R^2 = 0.982

在四个数据集上预测的与实际的平均向量量化召回率,R² = 0.982,验证了端到端召回预测模型
在四个数据集上预测的与实际的平均向量量化召回率,R² = 0.982,验证了端到端召回预测模型

在四个数据集上预测的与实际的平均向量量化召回率,R² = 0.982,验证了端到端召回预测模型

图 3 在一系列参数设置和数据集上的估计与实际平均召回率。点保持接近理想对角线。

召回模型如何选择向量量化参数

有了快速的召回预测器,参数选择就变成了一个廉价的有序搜索。给定一个目标召回率和重排预算 n(通常表示为 k 的倍数),我们可以找到满足目标的最小文档和查询比特数以及其他旋钮。有几点在实践中很重要:

  1. 1. 冰川式缩放提供了安全余量,因为即使在中等内在维度下,R_{(k)}N 的变化也非常缓慢。计算中的小余量意味着即使在下次重新估计参数之前添加了大量向量,所选参数仍然有效。
  2. 2. 如果 nk 的固定倍数,那么小的 k 是最坏情况。 差距 \mathbb{E}R_{(k)}^{1/d} - 1) 对于小的 k 最小,所以如果一个参数选择在 k=10 时满足召回目标,那么对于更大的 k 也会满足。
  3. 3. 我们可以将量化视为一个黑盒,因为误差模型只需要经验误差方差。这意味着我们可以以相同的方式测试任何配置,包括预处理,并且我们可以简单地按索引和查询成本递增的顺序排列候选参数元组,并在第一个达到目标召回率的选择处停止。对于 (查询比特数, 文档比特数, 重排深度, 预处理) 的元组,一个合理的搜索序列首先增加查询精度,然后文档精度:(1,1), (2,1), (3,1), (4,1), (2,2), (3,3), (4,2), (4,4), (7,4) 和 (7,7),每个都与重排深度(如 1.5k, 2k, 3k)和预处理 \in{\text{true}, \text{false}} 结合(通过外积 \otimes),一旦达到目标就退出。

结果:跨数据集的自动选择量化参数和召回率

在本节中,我们将讨论端到端行为的初步实验结果。作为与 Elasticsearch 完全集成工作的一部分,我们已经进行了一些进一步的改进,我们将在另一篇文章中讨论。

下表显示了自动选择的参数,目标召回率为 0.97,通过暴力搜索测量,因此该数字反映了仅由量化引起的损失(64 个查询聚类,目标文档聚类大小为 384,这与 DiskBBQ 的设置匹配)。

数据集

查询比特

文档比特

预处理

深度

召回率

FiQA E5 small

4

2

false

30

0.97

FiQA arctic

2

2

false

30

0.95

FiQA GTE

2

1

true

30

0.98

MNIST

3

1

true

30

0.99

Fashion MNIST

3

1

true

30

0.99

Quora E5 small

2

2

false

30

0.99

Quora arctic

2

1

false

30

0.97

Quora GTE

1

1

false

30

0.98

Dbpedia E5 small

4

2

false

30

0.99

Dbpedia arctic

2

1

false

30

0.94

Dbpedia GTE

2

1

false

30

0.96

Wiki Cohere

2

2

false

30

0.99

Hotpot E5 small

4

2

false

30

0.97

Hotpot GTE

2

1

false

30

0.96

Glove 100

4

2

false

30

0.87

Glove 200

4

2

false

30

0.89

SIFT128

4

4

false

20

0.99

有几点值得强调:

  • 召回率对重排深度非常敏感。 这就是为什么我们几乎总是选择可用的最大深度:重排深度从 20 提高到 30 通常能让我们用更少的比特数达到召回目标,而我们更喜欢更少的比特数。在实际系统中,我们根据更具代表性的重排成本调整了这种行为。
  • Glove 表现不佳,部分原因是我们用语料库中的随机样本近似查询分布,但 Glove 也比其他数据集更不符合模型特征。一个合理的解释是,第 2 节中近似均匀局部密度的假设对于 Glove 嵌入不太可靠,这会表现为查询之间更高的召回率方差。然而,Glove 嵌入不代表我们需要存储的实际向量。
  • FiQA GTE 的预处理选择是一个临界情况: 预处理只产生了微小的预期召回率改进,但预测恰好位于召回率截止点,并允许我们将查询从 3 比特降至 2 比特。如果我们更希望只在预处理效果明显时才保留它,我们可以强制设置一个最小提升阈值。这种决策逻辑的微调不会影响估计召回率的所有繁重工作。

关键要点:从第一性原理自动调优向量量化

我们提出了一种方法,用于选择最佳量化参数以实现目标召回率。它基于两个清晰组合的模型:

  1. 1. 邻居距离的几何模型,它源于局部均匀密度假设。我们用它推导了最近邻距离、期望距离的 N^{-1/d} 冰川式缩放定律,以及期望距离分布 R_{(j)} = \alpha(jN_0/N)^{1/d}。我们展示了通过简单的对数线性回归拟合语料库中小型随机样本的平均距离,可以得到一个极其准确的预测模型。
  2. 2. 高斯量化误差模型,由中心极限定理证明。其唯一参数 \sigma_b 是一个经验方差,我们通过比较语料库样本的量化和原始向量相似性来估计它。

最后,我们展示了可以将估计的距离模型输入到入侵前 k 集合的泊松二项式邻居计数中。应用 Lyapunov CLT,经过深度为 n 的重排后,期望的 recall@k 作为一个一维积分出现,我们通过求积法对其进行评估。

结果是一个准确的(R^2 > 0.95

我们已将整个机制构建到 Elasticsearch 中,并利用段合并作为重新评估量化选择的机会。除了带来安心(无论您投入何种向量,都能实现良好的召回率)之外,它还使我们能够从性能角度选择接近最优的参数。这与我们最初的目标——开箱即用的接近最优性能,至少在量化方面——形成了闭环。我们对基于模型的调优能给向量搜索带来的优势感到非常兴奋,并期待在不久的将来分享我们在这方面的其他工作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • Elasticsearch 如何自动调整向量量化以达到您的召回目标
    • 什么样的向量存储才是好的?
      • 为什么召回率是向量搜索的正确质量指标
      • 为什么向量量化参数必须在索引时选择
    • 向量量化如何影响最近邻召回率
    • 量化误差与最近邻距离差距
    • 推导最近邻距离分布
      • 冰川式缩放:为什么邻居距离随着索引增长几乎不变
    • 第 k 个邻居的期望距离和临界差距
      • 为什么期望差距足以预测召回率
      • 将模型扩展到余弦相似度和内积搜索
    • 从小样本中拟合内在维度和尺度
    • 将向量量化误差建模为高斯分布
    • 预测重排后的期望召回率
    • 召回模型如何选择向量量化参数
      • 结果:跨数据集的自动选择量化参数和召回率
    • 关键要点:从第一性原理自动调优向量量化
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档