faiss的安装及简单使用

pip安装

直接使用pip安装pip install faiss

在python环境中import faiss会报错

使用如下的命令安装可以成功

pip –default-time=1000 install -i https://pypi.tuna.tsinghua.edu.cn/simple faiss-cpu

conda安装

只安装cpu版本

$ conda install -c pytorch faiss-cpu

安装gpu+cpu版本

$ conda install -c pytorch faiss-gpu

指定cuda版本

$ conda install -c pytorch faiss-gpu cudatoolkit=10.2 # for CUDA 10.2

faiss的简单使用

构建数据集

使用xb矩阵建立索引,xb的每一行都是被检索的对象,维度是(nb,d) 。xq矩阵,是用来检索的向量集合的矩阵,对其中的每个向量,需要找到它的前K个相似向量,维度是(nq,d)。当只检索一个向量的时候,nq=1

import numpy as np
d = 64                           # dimension
nb = 100000                      # database size
nq = 10000                       # nb of queries
np.random.seed(1234)             # make reproducible
xb = np.random.random((nb, d)).astype('float32')
xb[:, 0] += np.arange(nb) / 1000.
xq = np.random.random((nq, d)).astype('float32')
xq[:, 0] += np.arange(nq) / 1000.

建立索引并加入向量

Faiss中有多种类型的索引,使用最简单的索引类型:IndexFlatL2,这是暴力检索L2距离,也就是最常规的计算距离的方式。对于大部分索引类型而言,在建立它们时都包含训练阶段,但是对于IndexFlatL2这个索引,可以跳过这一步。 当索引被建立和训练之后,可以调用add和search这两种方法。 还可以使用两种查找索引状态的方法 is_trianed,来表明索引是否已经被训练过。ntotal来得到当前索引中向量的个数。对于一些类型的索引来说,还可以存储每个向量对应的整数ID(IndexFlatL2不行),如果没有提供ID,那么索引就是的第一个向量索引为0,第二个向量索引为1,以此类推。

import faiss                   # make faiss available
index = faiss.IndexFlatL2(d)   # build the index
print(index.is_trained)
index.add(xb)                  # add vectors to the index
print(index.ntotal)
  • 第一个print的结果:True,已经经过训练,IndexFlatL2不需要训练,因此为True
  • 第二个print的结果:10000,xb得维度是10000

检索

对于每个检索向量,都能从索引中得到前K近个向量。

k = 4                          # we want to see 4 nearest neighbors
D, I = index.search(xb[:5], k) # sanity check
print(I)
print(D)
D, I = index.search(xq, k)     # actual search
print(I[:5])                   # neighbors of the 5 first queries

参考

faiss包安装_Alicesla的博客-CSDN博客_faiss包安装

Faiss库使用方法(一) – 知乎 (zhihu.com)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注