Faiss 使用方法(Python)
·
Faiss HNSW
安装Faiss库
确保已安装Faiss库及其依赖(如GPU版本需额外配置)。可通过conda或pip安装:
conda install -c conda-forge faiss-gpu # GPU版本
conda install -c conda-forge faiss-cpu # CPU版本
准备数据
生成或加载待索引的向量数据,格式为numpy.ndarray,维度需一致。
import numpy as np
dimension = 128 # 向量维度
num_vectors = 10000
data = np.random.rand(num_vectors, dimension).astype('float32')
初始化HNSW索引
设置HNSW参数并创建索引对象:
import faiss
hnsw_m = 32 # 每个节点的连接数
index = faiss.IndexHNSWFlat(dimension, hnsw_m)
添加数据到索引
将向量数据添加到索引中(可选:在添加前训练索引,但HNSW通常无需训练):
index.add(data)
搜索近邻
执行K近邻搜索,返回相似向量及其距离:
query_vector = np.random.rand(1, dimension).astype('float32')
k = 5 # 返回最近邻数量
distances, indices = index.search(query_vector, k)
保存与加载索引
将索引保存到磁盘或从磁盘加载:
faiss.write_index(index, "hnsw_index.faiss")
loaded_index = faiss.read_index("hnsw_index.faiss")
参数调优(可选)
调整HNSW参数以平衡速度和精度:
efSearch:控制搜索时的候选池大小(越大越精确但越慢)。efConstruction:控制构建时的精度(影响索引质量)。
index.hnsw.efSearch = 32 # 默认值通常为16
index.hnsw.efConstruction = 40 # 默认值通常为40
性能验证
通过查询延迟和召回率评估索引效果:
# 示例:计算查询时间
import time
start = time.time()
index.search(query_vector, k)
print(f"Search time: {time.time() - start:.4f}s")
注意事项
- 确保输入数据为
float32类型。 - HNSW适合高维数据,但内存占用较高,可通过量化(如
IndexHNSWSQ)优化。 - GPU加速需使用
faiss.GpuIndexHNSW(需额外配置)。
更多推荐
所有评论(0)