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

如何从PostgreSQL余弦相似度查询中获取相似度得分?

获取PostgreSQL向量搜索的余弦相似度得分

首先说明:你当前使用的<=>是pgvector扩展中的欧氏距离运算符,如果需要获取余弦相似度得分,需根据向量是否归一化选择对应计算方式,同时可以调整排序逻辑以匹配余弦相似度的排序需求:

情况1:向量已归一化(L2范数为1)

此时欧氏距离与余弦相似度存在固定转换关系,可基于<=>的结果计算得分,同时保留原排序逻辑:

cursor.execute(
    "SELECT text, 1 - (embedding <=> %s::vector)^2 / 2 AS cosine_similarity FROM tbl_embeddings ORDER BY embedding <=> %s::vector LIMIT 1;",
    (get_embedding(txt), get_embedding(txt)),
)

执行后,通过fetchone()获取结果,第二个元素即为余弦相似度得分(范围0~1,值越大表示文本越相似)。

情况2:向量未归一化

推荐使用pgvector提供的<#>运算符,它直接计算负余弦相似度(结果范围[-1,0],值越小,实际余弦相似度越高),取反后即可得到标准余弦相似度得分,同时用该运算符排序更准确:

cursor.execute(
    "SELECT text, -(embedding <#> %s::vector) AS cosine_similarity FROM tbl_embeddings ORDER BY embedding <#> %s::vector LIMIT 1;",
    (get_embedding(txt), get_embedding(txt)),
)

同样,fetchone()返回的第二个元素就是目标得分,范围为0~1。

提取结果示例

查询执行完成后,可通过以下代码获取匹配的文本和对应的相似度得分:

result = cursor.fetchone()
if result:
    matched_text = result[0]
    similarity_score = result[1]

内容的提问来源于stack exchange,提问作者D. Seah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:25:34