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

Hugging Face Transformers FAISS索引scores含义、计算及阈值应用问询

关于Hugging Face FAISS索引返回分数的说明

1. FAISS分数的含义与计算逻辑

你看到的FAISS分数其实是L2欧氏距离,这是Hugging Face add_faiss_index方法默认使用的度量标准。

L2距离的计算公式为:
L2(x, y) = sqrt(Σ(x_i - y_i)²)
其中x是你的查询向量,y是数据集中的样本嵌入向量。

从你的结果能看出规律:余弦相似度越高(向量越相似),对应的L2距离越小——比如余弦相似度最高的0.9983,对应FAISS分数75.67(最小的距离值),完全符合这个逻辑。

如果想让FAISS直接返回和余弦相似度一致的分数,可以在创建索引时指定内积作为度量(前提是你的嵌入向量已经做了归一化,此时内积等价于余弦相似度):

import faiss
train_ds['train'].add_faiss_index("embedding", metric=faiss.METRIC_INNER_PRODUCT)

此时返回的scores就是内积值,和你计算的余弦相似度趋势完全一致(值越高代表向量越相似)。

2. 如何通过阈值筛选搜索结果

get_nearest_examples本身没有直接的阈值参数,但可以手动对返回结果进行过滤,步骤如下:

  1. 先获取足够多的候选结果(k值设得比实际需要大)
  2. 根据使用的度量方式,设定阈值并筛选符合条件的条目

示例1:默认L2距离下筛选(保留距离小、相似度高的结果)

scores, samples = train_ds.get_nearest_examples("embedding", query_embedding, k=100)  # 先取足量候选
filtered_scores = []
filtered_samples = {key: [] for key in samples.keys()}

for idx, score in enumerate(scores):
    if score <= 100:  # 设定L2距离阈值,值越小越相似
        filtered_scores.append(score)
        for key in samples.keys():
            filtered_samples[key].append(samples[key][idx])

示例2:内积/余弦相似度下筛选(保留分数高、相似度高的结果)

scores, samples = train_ds.get_nearest_examples("embedding", query_embedding, k=100)
filtered_scores = []
filtered_samples = {key: [] for key in samples.keys()}

for idx, score in enumerate(scores):
    if score >= 0.99:  # 设定内积/余弦相似度阈值,值越大越相似
        filtered_scores.append(score)
        for key in samples.keys():
            filtered_samples[key].append(samples[key][idx])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:48:38