HNSW
HNSW (Hierarchical Navigable Small World) 索引是一种高效的近似最近邻 (Approximate Nearest Neighbor, ANN) 搜索算法
它主要用于大规模数据集中的高效查询。HNSW 索引的核心原理基于图论和小世界网络(Small World Network)的概念。<br>
构建过程:<br>
初始化:首先,对数据点进行排序,然后选择一个固定大小的邻居窗口,将每个数据点与其邻居连接起来,形成一个初始的邻接列表。<br>构建层次结构:递归地将这个邻接列表扩展为多层,每一层包含更远的邻居。相邻层之间的节点通过随机重采样连接,形成小世界结构。<br>添加新节点:当有新数据加入时,会根据其与现有节点的距离插入到适当的层次中,并调整邻接关系。<br>
搜索过程:<br>
查询:对于一个查询点,从根节点开始,沿着层次结构向下搜索,找到最接近的邻居节点。搜索过程中,如果遇到分支点,会优先考虑距离更近的分支。<br>
扩散策略:为了提高搜索精度,HNSW 使用扩散策略,即从当前节点开始,不仅查看直接邻居,还会查看其邻居的邻居,直到达到预设的深度或找到足够数量的候选结果。
<br>优点:<br><br>高效:HNSW 在处理大规模数据时非常高效,因为它使用了局部性原理,即相似的数据点在图中通常很接近。<br>可扩展性:可以动态添加和删除数据,而无需重建整个索引。<br>内存效率:由于采用了小世界结构,HNSW 可以在内存有限的情况下处理大量数据。
<br>缺点:<br><br>精度与空间复杂度:随着图的层数增加,精度提高但空间复杂度也增大。需要权衡搜索精度和内存使用。<br>不适合高维数据:对于高维数据,HNSW 的性能可能会下降,因为高维空间中的“近似”可能不直观。