faiss不是单一支持某个算法的库,而是一组ANN算法的实现集合.
faiss支持brute force,lsh,hnsw等索引,最主要支持的还是维诺图(voronoi cells),用kmeans做了聚类训练之后生成voronoi cells,然后根据nprobes去检索对应的cell,类似于lsh,好处是索引小(lsh哈希函数越多索引越大),而且很容易预训练(kmeans聚类).
这里在建立索引阶段,需要判断属于哪个cell,想到的办法应该是类似构造一个kd-tree那样的结构,在o(r * logn)时间内可以判断出属于哪个cell (r维向量,n个cell)
此外,高维向量还可以用pca方法做压缩,大大降低索引大小.