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

关于similarity_search_with_score()的分数计算逻辑与文档重排机制的问询

关于similarity_search_with_score()的分数计算、原理与重排逻辑

分数计算方式

similarity_search_with_score()返回的分数本质是向量间的距离值,而非直接的相似度——具体取决于你使用的向量数据库默认的距离度量:

  • 多数默认场景(比如FAISS、Chroma)用余弦距离:分数 = 1 - 余弦相似度,范围在0到2之间。0表示两个向量完全一致(语义完全匹配),2表示向量完全不相似。
  • 如果用欧氏距离(L2距离):分数就是两个向量在高维空间中的直线距离,数值越小代表向量越接近,语义相似度越高。
  • 部分存储支持自定义距离(比如内积),此时分数会对应相应的距离计算结果,需参考具体存储的文档。

背后的数学原理

整个检索的核心是语义嵌入的空间相似性:文本被转换成高维向量后,语义相似的文本向量在空间中位置更近。具体的距离计算逻辑:

  • 余弦相似度与余弦距离:
    对于两个向量A和B,余弦相似度的计算公式为:
    cos_sim(A,B) = (A · B) / (||A|| * ||B||)
    
    其中A·B是向量点积,||A||、||B||是向量的L2范数(模长)。余弦相似度范围是-1到1,值越大代表向量方向越一致(语义越相似)。为了适配“越小越相似”的排序逻辑,转换成余弦距离:distance = 1 - cos_sim(A,B)。
  • 欧氏距离:
    计算公式为:
    euclidean(A,B) = sqrt( sum( (A_i - B_i)^2 ) )
    
    直接衡量两个向量在空间中的直线距离,数值越小代表向量越接近。

基于分数的重排逻辑

similarity_search_with_score()的重排流程非常直接:

  1. 将输入的查询文本转换成对应的嵌入向量;
  2. 在向量数据库中,计算该查询向量与所有文档嵌入向量的距离(即返回的分数);
  3. 对所有计算出的分数进行升序排序——因为分数越小代表距离越近、语义相似度越高;
  4. 取出排序后前top_k个结果,返回对应的文档内容和分数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:20:01