每来一个query向量,首先计算其与nlist(聚类中心)个粗聚类簇心的距离,然后选择距离最近的nprobe(查找的聚类中心)个簇, 参数 nlist:聚类中心的个数; 也是倒排文件中的列表数。 增加nlist可以提高召回率,但会增加索引的内存占用和搜索时间。 index.nprobe:查找聚类中心的个数,默认为1个。 index.nprobe 越大,search...
这个索引有两个重要参数:nlist和nprobe,前者表示向量数据集一共被划分为多少cell区域,后者表示查询时要检索的cell区域个数。 2.3 存询优化IndexIVFPQ 图3 把向量按维度进行切分 假设,入库向量数据为50k个1024维embedding。此索引先按维度进行切分,如上图1024维被切成8个128维。 图4 子向量聚类 然后,每个50k*128...
nprobe 执行搜索访问的单元格数(不包括nlist) nprobe参数始终是调整结果速度和准确度之间折中的一种方式。设置 nprobe = nlist 将给出与蛮力搜索(但会更慢)相同的结果。 import numpy as np import faiss import time def demo_IndexIVFFlat(): d = 64 # 向量维度 nb = 200 # 向量集大小 nq = 10000 ...
nprobe (一次搜索可以访问的单元格数量,默认为1)。 搜索时间大致随着 nprobe 的值加上一些由于量化产生的常数,进行线性增长。 还是不好理解,用已有但知识类比一下,就是 nlist类似于kmeans中的k的数量,即k个类, nprobe类似于每一次查询我只查kmeans中的n个类,n<k. 代码 import numpy as np d = 64 # d...
搜索方法有两个参数:nlist(单元格数),nprobe(执行搜索访问的单元格数(nlist以外)) 对于nprobe = 1,结果如下: 结果和上面的强力搜索类似,但是不同(见上文)。这是因为一些结果不在完全相同的Voronoi细胞。因此,访问更多的单元格可能是有用的。 设置nprobe = 10,结果如下: ...
nprobe参数用于指定在IVF索引中搜索时,需要访问的倒排列表数量。nprobe越大,搜索结果的准确性越高,但搜索时间也会相应增加。在实际应用中,需要根据数据规模和查询需求来选择合适的nprobe值。 4. nlist nlist参数用于指定IVF索引中的聚类中心数量。nlist越大,索引的准确性和搜索效率都会提高,但索引的内存占用也会相应...
index=faiss.IndexIVFPQ(quantizer,d,nlist,m,bits)# 训练索引 index.train(sentence_embeddings)# 添加向量 index.add(sentence_embeddings) 现在准备开始使用新索引进行搜索。 代码语言:javascript 复制 index.nprobe=10# align to previous IndexIVFFlat nprobe value%%timeD,I=index.search(xq,k)print(I)#[[...
当查询向量请求时,会用查询向量与多个质心先比较,根据距离最小的或最小的几个召回一系列cell区域。然后再用查询向量与cell区域中的向量数据进行距离计算,排序,输出即可。这个索引有两个重要参数:nlist和nprobe,前者表示向量数据集一共被划分为多少cell区域,后者表示查询时要检索的cell区域个数。
FAISS之所以能够适应各种复杂的搜索场景,很大程度上得益于其灵活可调的参数设置。张晓指出,合理调整算法参数是优化搜索性能的有效手段之一。在FAISS中,有许多关键参数可供用户根据具体需求进行定制化配置,如索引类型、分桶数量(nlist)、搜索时访问的桶数(nprobe)等。
nprobe参数始终是调整结果速度和准确度之间折中的一种方式。设置 nprobe = nlist 将给出与蛮力搜索(但会更慢)相同的结果。 import numpy as npimport faissimport timedef demo_IndexIVFFlat():d = 64 # 向量维度nb = 200 # 向量集大小nq = 10000 # 查询次数np.random.seed(1234) # 随机种子,使结果可...