趋近智
近似最近邻 (ANN) 算法,如 HNSW 和 IVF,比精确搜索提供了显著的速度提升,但其有效性取决于仔细选择的参数。这些参数控制着索引的内部结构和搜索过程,直接影响搜索速度(延迟)、准确度(召回率)、内存使用和索引构建时间之间的权衡。了解系统性能对这些参数的敏感程度,是调整优化的根本。
本节详细说明如何分析 HNSW 和 IVF 索引重要参数的影响。进行敏感度分析包括系统地改变参数并观察它们对性能指标的影响,从而使您能够针对特定的应用需求和数据特性做出明智的决策。
分层可导航小世界 (HNSW) 构建多层图结构。其性能主要受控制构建期间图连接性和搜索期间图遍历程度的参数影响。
M 和 efConstructionM (每层最大连接数): 此参数定义了一个节点在单层上(除了底层,底层通常有 2M 个连接)可以拥有的最大邻居数量。
M 值会创建更密集的图,可能具有更好的导航路径,这可以提高召回率。然而,这会增加索引大小(存储更多边)、内存消耗和索引构建时间。较低的 M 值会导致更稀疏的图,更快的构建速度和更小的索引,但可能会略微降低最大可达到的召回率或需要在搜索时进行更广泛的查找。efConstruction (构建搜索深度): 此参数控制在索引构建期间为新节点查找邻居时使用的动态候选列表的大小。它决定了算法为每个正在插入的节点搜索最佳邻居的彻底程度。
efConstruction 值会导致构建阶段的搜索更彻底,从而产生更高质量的图结构。这通常能在给定搜索工作量 (efSearch) 下提高搜索时召回率。代价是索引构建时间显著增加。较低的 efConstruction 值会加快索引构建速度,但可能生成欠佳的图,之后可能需要更大的 efSearch 值才能达到相同的召回率。M 的值。efSearchefSearch (搜索深度): 类似于 HNSW 中的 efConstruction,此参数控制查询向量搜索过程中维护的动态候选列表的大小。它决定了有多少入口点被检查以及图在每一层被遍历的深度。
efSearch 允许算法查找更多潜在的候选邻居,从而增加找到真实最近邻的可能性(更高的召回率)。然而,这会增加计算量,从而导致更高的搜索延迟。降低 efSearch 会使搜索更快,但会增加遗漏位于未搜索单元中相关邻居的风险(较低的召回率)。efSearch 必须至少为 k,其中 k 是您请求的最近邻数量。系统测试包括固定 M 和 efConstruction(例如,从常用值 M=16,efConstruction=200 开始),构建索引,然后使用不同 efSearch 值运行查询。记录每个 efSearch 值的 Recall@k 和平均查询延迟。绘制这些结果有助于直观呈现针对您的数据和索引构建参数的权衡曲线。
efSearch、召回率和延迟在 HNSW 中的关系。增加efSearch可提高召回率但会增加延迟。曲线在较高的efSearch值处通常趋于平坦,表明召回率提升的边际效益递减。
倒排文件 (IVF) 索引,通常与乘积量化 (IVFPQ) 或标量量化 (IVFSQ) 结合使用,利用聚类中心划分向量空间,并只搜索与查询相关的部分分区(单元)。
nlistnlist (列表/聚类中心数量): 此参数决定了在索引构建期间使用 k-means 等算法将向量空间划分为多少个聚类(沃罗诺伊单元)。
nlist 会创建更小、更多的分区。这可以导致更细粒度的分区,可能会减少在所选单元中需要扫描的向量数量(如果 nprobe 小,则可提高速度)。然而,这需要更多内存来存储聚类中心和相关的倒排列表。它还增加了真实最近邻可能落入 nprobe 未选单元的风险。较小的 nlist 会导致更大的分区,需要更少的探测次数 (nprobe) 来覆盖空间的重要部分,但会增加每个被探测单元内的距离计算数量。找到适当的平衡很重要。nlist 设置在 4N 和 16N 之间,其中 N 是向量总数,但这需要经验验证。nprobenprobe (探测次数): 此参数决定了在查询时,选择多少个离查询向量最近的沃罗诺伊单元(分区)进行搜索。算法计算查询向量与 nlist 聚类中心之间的距离,然后搜索 nprobe 个最近单元内的向量。
efSearch,nprobe 直接控制查询时召回率-延迟权衡。增加 nprobe 会导致搜索检查更多单元,增加找到真实最近邻的可能性(更高的召回率)。这自然会增加执行的距离计算数量,导致更高的延迟。降低 nprobe 会显著加快搜索速度,但会增加遗漏位于未搜索单元中相关向量的机会(较低的召回率)。nlist 的一部分。从较小的值开始(例如 1、5、10),并在测量性能的同时增加,是一种常用方法。当 IVF 使用量化(如 PQ 或 SQ)时,与量化方法本身相关的额外参数变得重要:
m (子向量数量), nbits (每个子量化器的比特数,通常为 8)。nbits (每个标量值的比特数)。
这些主要影响索引大小、内存使用以及距离近似的准确性,从而间接影响通过近似距离找到候选后重新计算精确距离后的最终召回率。分析这些通常涉及内存占用与在考虑 nprobe 之前可达到的基线准确度之间的权衡。类似的实验设置也适用于 IVF。固定 nlist(根据数据集大小和初步测试)以及任何量化参数。构建索引。然后,使用不同 nprobe 值运行查询,记录 Recall@k 和平均延迟。
nprobe、召回率和延迟在 IVF 中的关系。增加nprobe通常以更高延迟为代价提高召回率。有效性也很大程度上取决于所选的nlist值。
进行敏感度分析通常包括以下步骤:
efSearch 时,保持 M 和 efConstruction 不变。efSearch 从 32 到 512,以2的幂次递增;nprobe 从 1 到 64)。M,最优 efSearch 可能会改变)。通过系统地分析参数敏感度,您可以从默认设置转向针对您的特定向量搜索工作负载优化的配置,从而有效地平衡准确度、速度和资源消耗之间相互竞争的需求。这种经验方法对提升您的高级向量搜索系统的性能是必不可少的。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
nlist和nprobe参数的实用建议和指南,为敏感性分析提供了具体指导。© 2026 ApX Machine Learning用心打造