You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FAISS中IndexFlatL2如何获取向量间真实欧氏距离

原因说明

faiss.IndexFlatL2 设计上默认返回的是平方L2距离(欧氏距离的平方值),不会自动执行开根号操作,因此返回数值和你计算的标准欧氏距离存在差异。
你观察到的数值偏差完全符合这个规律:

  • 测试向量1与训练向量9的FAISS返回距离为0.0025,开根号后是0.05,和你用spacy算出的0.050000011920928955完全吻合(微小差异来自浮点计算精度)
  • 测试向量0与训练向量3的FAISS返回距离为0.6087429,开根号后约为0.7802,和你记录的0.7802197337150574一致
  • 其余返回值均满足「FAISS返回值 = 真实欧氏距离的平方」的对应关系

FAISS这么设计是因为开根号属于单调运算,不会改变向量间距离的大小排序,检索时直接用平方距离计算可以省去开根号的运算开销,提升检索速度。

解决方法

对FAISS返回的距离数组做开平方运算,即可得到标准欧氏距离,代码示例:

import numpy as np
import faiss

# 原有索引构建、检索逻辑保持不变
index = faiss.IndexFlatL2(10)
index.add(train)
squared_l2_dist, indices = index.search(test, 3)

# 开平方得到真实欧氏距离
euclidean_dist = np.sqrt(squared_l2_dist)

执行后得到的距离值就和spacy的计算结果完全一致了。

内容的提问来源于stack exchange,提问作者NineWasps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:42:36