定义:
采用分而治之思想,将原始数据通过映射方法划分到不同的向量空间,针对大规模的搜索任务,通过映射函数在向量相似的空间进行遍历查询。
常用的几种算法:
基于图的索引量化法:HNSW
基于树:Annoy
基于哈希:SLH
HNSW(Hierarchical Navigable Small World)
是通过贪心算法遍历图,找出当前数据集中的最近邻点(局部最小值),以此作为插入并构建生成层状网络图,通过在下一层中不断寻找最近邻点插入构建,从而完成对特征向量集的维度分层、数据压缩、索引生成。检索时,采用自上而下的搜索方式,即从最顶层开始粗略搜索,然后逐步向下层搜索,直到最底层精确搜索。

根据Benchmark上的ANN算法的测试,HNSW算法在查询速度和精度上优于其他算法,但是占用内存大。

HNSW代码
import hnswlib
import time
import os
import psutil
def get_ann(length,dimen):
start_time = time.time()
pid = os.getpid()
pp = psutil.Process(pid)
info_start = pp.memory_full_info().uss/1024/1024
#向量维度
dim = dimen
num_elements = length
data = X
data_labels = np.arange(num_elements)

本文介绍了两种基于向量的近似最近邻搜索算法——HNSW(Hierarchical Navigable Small World)和Annoy。HNSW利用分层网络图进行高效搜索,而Annoy则采用随机投影树实现快速查找。在内存占用和查询速度方面,HNSW表现出色,但内存需求较大。Annoy则以其小巧的索引和内存效率为特点。通过代码示例展示了这两种算法的实现过程。
最低0.47元/天 解锁文章
320

被折叠的 条评论
为什么被折叠?



