Faiss (Facebook AI Similarity Search) 是一个用于高效相似向量搜索的库,特别适合处理大规模向量数据。
- 它的核心功能是给定一个向量数据库,为当前的query vector(s) 寻找Top-K个相似向量。
- 此外也支持KNN聚类,PCA降维,数据量化等模块。
- 官方文档:https://github.com/facebookresearch/faiss/wiki
|
|
1. 相似Top-K查找
Faiss通过构建一个Index(索引)对象,用于建立可实现快速相似搜索的数据结构。
常见的索引类型:
IndexFlatL2
: 暴力搜索,精度高,速度慢(L2距离)IndexFlatIP
: 暴力搜索,适用于内积(dot product)IndexIVFFlat
: IVF (Inverted File Indexing) 可加速搜索IndexIVFPQ
: PQ (Product Quantizer) 可降低缓存需求IndexHNSWFlat
: HNSW (Hierarchical Navigable Small World): fast and accurate
Basic indexes 介绍了全部的index类型;
Guidelines to choose an index 介绍下选择index的参考标准。
1.1 暴力搜索
|
|
1.2 IVF方式举例
IVF通过事先将数据库的向量分为若干个类群(Voronoi cells),然后计算query vector与每个类群质心的距离度量,可降低搜索范围,加快速度。其中有两个关键参数
nlist
: 分为多少个类群nprobe
: 最终选取多少Top类群,作为搜索范围
|
|
暴力搜索是最精确的方式,其它所有方式都会或多或少损失一定精度,以最求其它方面的提升(速度/显存)。PS:每种方式都有自己的参数。
1.3 联合datasets使用
|
|
2. 聚类降维
2.1 K-means聚类
|
|
2.2 PCA降维
|
|