faiss.METRIC_INNER_PRODUCT 和faiss.METRIC_L2使用中注意事项与代码实现
faiss.METRIC_INNER_PRODUCT
- 定义:表示使用向量的内积(点积)来度量相似度。内积越大,表示两个向量越相似。
- 应用场景:通常用于处理归一化(单位长度)的向量,因为内积在这种情况下等价于余弦相似度。余弦相似度衡量的是向量之间的夹角,而不是它们的长度。
faiss.METRIC_L2
- faiss.METRIC_L2 表示使用欧几里得距离(L2 范数)来度量相似度。欧几里得距离越小,表示两个向量越相似。
- 应用场景:适用于一般的向量相似度度量,不要求向量归一化。
代码示例
dim, measure = Vector_numpy_array.shape[1], faiss.METRIC_INNER_PRODUCT #Vector_numpy_array.shape[1]表示向量维度 #faiss.METRIC_L2
param = 'HNSW64'
faiss_index = faiss.index_factory(dim, param, measure)
faiss_index.add(Vector_numpy_array)
file_path = os.path.join(index_path, str(collection_name) + "_HNSW64.index")
faiss.write_index(faiss_index,file_path) #生成索引文件
faiss_index = faiss.read_index(file_path) #读取索引文件
注释:m3e向量化模型需要先执行faiss.normalize_L2()【将输入的向量转换为单位长度(即 L2 范数为 1),在使用内积(inner product)或余弦相似度(cosine similarity)进行相似度度量时】,bge_m3向量化模型不需要,与向量化模型训练有关?
区别:
度量方式:faiss.METRIC_INNER_PRODUCT 使用内积,而 faiss.METRIC_L2 使用欧几里得距离。
相似度方向:内积越大表示越相似,而欧几里得距离越小表示越相似。
归一化要求:内积通常用于归一化的向量,而欧几里得距离没有这个要求。