当前位置:   article > 正文

Faiss 如何选择索引_hnsw32

hnsw32

Faiss 如何选择索引

flyfish

问题一:是否需要精确结果?
如果是,那么应该使用 “Flat”

能保证精确结果的只有 IndexFlatL2 或 IndexFlatIP(Inner Product). 它们作为其他索引的基线结果.

问题二:是否关心内存?

请记住,所有Faiss索引都存储在RAM中。 以下内容认为,如果不需要精确的结果,则RAM是限制因素,并且在内存限制内,我们优化了精度与速度之间的权衡。

如果不在乎内存,那么应该使用 “HNSWx”
如果你的内存很大,或数据集很小,那么 HNSW 是最好的选择, 它是非常快、精确的索引.

如果稍微有点在意,那么应该使用 “…,Flat”

"…"表示必须事先执行数据集的聚类。 聚类后​​,“Flat”仅将向量安排到存储桶(bucket)中,因此不会压缩它们,保存的是原始数据,存储大小与原始数据集相同。 速度和精度之间的权衡是通过nprobe参数设置的。

如果很在意,那么应该使用 “PCARx,…,SQ8”
如果存储所有的向量开销太大, 那么可以如下两个操作:
1、用主成分分析来减小到x维以减小维度
2、每个向量分量的标量量化为1个字节

如果非常非常在意,那么应该使用 “OPQx_y,…,PQx”

问题三:根据数据集的大小,应该怎么选择?
M=百万个向量
B=十亿个向量

如果小于1M, 应该使用 “…,IVFx,…”
如果在1M-10M, 应该使用 “…,IVF65536_HNSW32,…”
如果在10M-100M,使用"…,IVF262144_HNSW32,…"
如果在100M-1B: “…,IVF1048576_HNSW32,…”

官网针对典型的用户案例进行了详细的说明
Indexing 1M vectors(1百万)
Indexing 1G vectors (10亿)
Indexing 1T vectors (1万亿)

原文地址

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/375658
推荐阅读
相关标签
  

闽ICP备14008679号