趋近智
在数百万乃至数十亿高维向量 (vector)中执行精确最近邻搜索,对于实时语义搜索或检索增强生成 (RAG) 等实际用途而言,通常速度过慢。分层可导航小世界 (HNSW) 作为一种高效且普遍采用的近似最近邻 (ANN) 算法,在搜索速度、召回率(准确性)和内存使用之间取得了很好的平衡。它是一种图算法,其灵感源自可导航小世界 (NSW) 的原理,但加入了一项显著提升:分层结构。
设想一下,在一个大国家里寻找一个具体地址。你不会去每一条本地街道都开一遍。相反,你很可能会先使用高速公路快速接近目的地,然后是区域道路,最后是本地街道来完成旅程的最后一部分。HNSW 采用一种类似的方法,使用多层图。
带有三层的 HNSW 图结构简化示意图。连接存在于层内(实线),点也存在于下层(虚线表示存在,而非直接的层间边)。搜索通常从顶层进入点 (E) 开始并向下导航。
构建 HNSW 图是一个增量过程,点是逐个插入的。当添加一个新向量 (vector) 时:
mL 控制。较高的 mL 会导致上层更稀疏。
efConstruction): 在构建时的这个搜索邻居阶段,会维护一个到目前为止找到的最接近候选点的动态列表(优先级队列)。该列表的大小由参数 (parameter) efConstruction 控制。更大的 efConstruction 意味着在每一步查找更多可能的邻居,可能带来更高质量的图结构(后续有更好的召回率),但会增加索引构建时间。efConstruction),就会在 和这些邻居中的一部分之间建立连接。
Mmax0,通常设置得更高(例如 ),以改进基层连接性。这种分层构建方式,辅以受控连接性 () 和引导式搜索 (efConstruction),旨在构建一个能实现从粗粒度到细粒度有效导航的图。
搜索查询向量 (vector) 的 个最近邻与插入过程类似,但仅关注寻找最接近的点,而不修改图:
efSearch): 与构建过程类似,在跨层搜索期间,会维护一个到目前为止找到的候选最近邻的动态优先级队列。搜索期间此候选列表的大小由参数 (parameter) efSearch 控制。这是调整搜索速度和召回率(准确性)之间权衡的一个重要参数。
efSearch 必须至少为 (请求的邻居数量)。efSearch 会查看图中更多路径,增加了找到真实最近邻的概率(召回率更高),但耗时更长(延迟更高)。efSearch 会导致搜索更快,但可能遗漏一些真实邻居(召回率更低),从而满足于“足够好”的近似邻居。efSearch 标准的搜索完成(例如,优先级队列无法再优化),算法将从最终候选列表中返回找到的 个最接近的向量。有效使用 HNSW 通常需要调整几个重要参数:
M (每层最大连接数): 控制每层内图的密度(层 0 可能除外)。
M 增加图连接性,可能改善召回率和鲁棒性。但它也会显著增加索引的内存占用和图的构建时间。efConstruction (构建候选列表大小): 控制索引构建期间为新点查找邻居时执行的搜索深度。
efConstruction 带来更高质量的图结构(实际搜索期间召回率更好),但会显著增加索引构建时间。与 M 相比,它对索引大小的影响较小。efSearch (搜索候选列表大小): 控制查询时执行的搜索深度。
efSearch 会提高召回率但会减慢查询速度。必须 。mL (层归一化 (normalization)因子): 影响构建期间层分配的概率分布。
调整这些参数对于根据特定数据集特点和应用需求(例如,优先考虑低延迟而非最大化召回率)优化 HNSW 十分重要。
优点:
缺点:
efConstruction 较高时,对于非常大的数据集而言可能很耗时。M、efConstruction 和 efSearch 的最佳组合可能需要细致的实验和评估。HNSW 因其卓越的性能特点而成为现代向量 (vector)搜索的一种重要算法。理解其分层结构、构建过程和搜索机制,对于构建高效且有效的语义搜索和 RAG 系统非常重要。在后续章节中,我们将讨论 IVF 和 PQ 等其他重要的 ANN 技术,并随后讨论它们有时如何与 HNSW 结合以实现进一步优化。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•