第三周-第四周:文本向量化及向量库搜索研究
Faiss向量数据库搭建初览
参考:向量数据库-Faiss详解 - 知乎 (zhihu.com)
向量数据库Faiss是Facebook AI研究院开发的一种高效的相似性搜索和聚类的库。它能够快速处理大规模数据,并且支持在高维空间中进行相似性搜索。
安装faiss向量数据库:
conda create -n faiss
conda activate faiss
#pip install faiss-cpu
#GPU版本
#pip install faiss-gpu
conda install -c conda-forge faiss-cpu
导入faiss向量数据库
import numpy as np
import faiss
随机数据作为向量数据库
d = 128 # dimension
nb = 10000 # database size
np.random.seed(1234) # make reproducible
xb = np.random.random((nb, d)).astype('float32')
创建索引
-
索引是Faiss进行高效搜索的关键。
- 选用暴力检索的方法FlatL2
- L2代表构建的index采用的相似度度量方法为L2范数,即欧氏距离
index = faiss.IndexFlatL2(d) # build the index
print(index.is_trained)
将数据添加到索引中
index.add(xb) # add vectors to the index
print(index.ntotal)
检索TopK相似query
- 此时向量数据库已经准备好可以进行搜索了。
- 生成5个查询向量,并且我们希望找到每个查询向量的最近的4个向量
nq = 5 # number of query vectors
k = 4 # we want 4 similar vectors
Xq = np.random.random((nq, d)).astype('float32')
D, I = index.search(Xq, k) # sanity check
print('Xq is:\n',Xq)
print('result is')
print(I)
print(D)