趋近智
近似最近邻(ANN)算法,例如HNSW、IVF或LSH,需要进行配置以优化其性能。这些算法并非神秘的黑盒 (black box);它们会公开一些参数 (parameter),允许用户微调 (fine-tuning)其行为,直接影响搜索准确性(召回率)、查询速度(延迟)、资源消耗(内存、CPU)以及索引构建时间之间的平衡。理解这些参数对于部署一个符合特定需求的有效向量 (vector)搜索系统十分重要。
可以把调优想象成调整机器上的旋钮。调整一个旋钮可能会让机器运行更快,但精度可能降低。另一个旋钮可能会提高精度,但代价是消耗更多能量。同样地,ANN参数也控制着这些权衡。
大多数ANN调优都围绕着前面提到的主要权衡:
通常来说,提高召回率的参数 (parameter)也会增加延迟和资源使用。调优的目标是找到一个“最佳点”,以满足你的应用需求。例如,一个电商推荐系统可能会优先考虑低延迟以获得良好用户体验,接受略低的召回率;而一个用于科学文献搜索的系统则可能优先考虑高召回率,可以容忍略高的延迟。
有些参数是在你初次构建ANN索引时设定的。它们会影响索引本身的结构,并影响构建时间以及潜在的搜索质量。
M:这个参数定义了HNSW图中每个节点在单层内可以连接的最大邻居数(边数)。
M值越高,生成的图越密集,路径也越多。这通常能提高搜索时获得高召回率的可能性,并使索引更有效,但这会增加存储索引所需的内存,并大幅增加构建所需的时间。较低的值可以节省内存并加快构建速度,但可能会限制可达到的最大召回率。典型值范围为8到64。ef_construction:这个参数控制着索引构建期间用于跟踪候选邻居以便链接的动态列表大小。它影响着算法在插入新向量 (vector)时如何检查潜在连接。
M。nlist:这定义了在索引创建期间,向量空间被划分成的聚类(Voronoi单元)的数量。
nlist值越高,每个聚类的向量越少,这可能会加快搜索过程,因为在所选聚类中需要比较的向量更少。但是,如果nlist过高,向量可能会分布过于稀疏,查找查询向量的正确聚类变得更困难,可能降低召回率。较低的nlist意味着每个聚类的向量更多,这会增加聚类内部的搜索时间,但可能提高召回率,因为相关向量更有可能位于被搜索的聚类中。nlist的选择通常取决于数据集大小,旨在达到一个平衡(例如, 到 ,其中 是向量数量,但这只是一个粗略的经验法则)。L)或使用的哈希函数数量(k)等参数。
其他参数是在你执行搜索查询时设定的。它们直接控制着查询时对已构建索引结构的检查。
ef_search (或 ef):这个参数控制着搜索阶段使用的动态列表的大小。它确定了在图中检查多少个入口点或路径以查找查询向量 (vector)的最近邻。
ef_search会使图结构内的搜索更彻底,从而提高召回率,但也会增加查询延迟。降低它会加快搜索速度,但会降低召回率。它的值必须至少是你想要检索的邻居数量(k)。典型值范围从略高于k(例如40)到数百,具体取决于所需的召回率。nprobe:这指定了在搜索期间要检查的附近聚类(Voronoi单元)的数量。在确定最接近查询向量的聚类后,搜索会扩展到包含额外的nprobe - 1个附近聚类。
nprobe(例如1)非常快,但如果查询向量落在聚类边界附近,则可能错过相关向量。增加nprobe可以通过搜索更多潜在相关聚类来提高召回率,但会线性增加搜索延迟,因为需要比较更多的向量。典型值范围从1到nlist的10%左右,具体取决于所需的召回率和可接受的延迟。nprobe类似,检查更多候选桶会增加找到真实邻居(召回率)的机会,但需要更长时间。调优ANN参数 (parameter)通常是一个迭代的、经验性的过程:
ef_search对召回率与延迟的影响,IVF的nprobe对召回率与延迟的影响)有最直接影响的参数。此图显示了查询时参数(HNSW中的
ef_search)与所得召回率和延迟之间的典型关系。增加参数通常会提高召回率,但也会增加延迟,并且通常在参数值较高时,召回率的提升会变得不那么明显。
请记住,最佳参数可能在很大程度上取决于:
因此,为某个数据集或用例调整的参数可能不适合其他情况。使用相关数据进行持续评估对于在向量搜索应用中获得准确性和性能之间的理想平衡是很重要的。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造