本文介绍Lindorm向量检索中返回值_score
的计算方式,帮助您理解Lindorm向量检索的评分机制。
前提条件
已安装Python环境,且Python版本为3.10及以上版本。
准备工作
在运行前您需要安装以下依赖:
pip install numpy
稠密向量
说明
稠密向量(Dense Vector)是指向量中大部分元素为非零元素的向量。
向量检索的原理:通过计算两个向量之间的距离,来判断它们的相似程度。两个向量的距离越近,相似度越高。Lindorm搜索引擎兼容开源Elasticsearch,_score
得分越大,表示检索效果越好,匹配结果越相关。
在向量检索领域中,余弦相似度是最主流的相似性计算方法。因此,本示例将以余弦相似度为例,说明如何计算得分_score
的值。实际使用时,仅需将代码中的示例向量 vector1
和 vector2
替换为您的原始向量,即可获得对应的得分。
该示例可以帮助您判断如何设置合理的min_score阈值,从而过滤掉不相关的检索结果。
import numpy as np
def cosine_distance(vector1, vector2):
# 将输入向量转换为NumPy数组
A = np.array(vector1)
B = np.array(vector2)
# 计算余弦相似度,范围是[-1, 1]
cosine_similarity = np.dot(A, B) / (np.linalg.norm(A) * np.linalg.norm(B))
print(f"cosine_相似度{cosine_similarity}")
# 计算余弦距离[0, 2]
cosine_distance = 1 - cosine_similarity
return cosine_distance
def get_score(distance:float):
if distance >= 0:
return 1 / (1 + distance);
return -distance + 1;
# 示例向量
vector1 = [0.00807,0.00651,0.01601]
vector2 = [0.01029,0.01977,0.01501]
# 计算余弦距离
distance = cosine_distance(vector1, vector2)
print(f"Cosine Distance: {distance}")
score = get_score(distance)
print(f"Score {score}")
通过上述公式可以得出基本结论:在Lindorm向量检索中如果使用余弦距离,得分_score
范围为[1/3, 1]
。
以上示例将返回如下结果:
cosine_相似度0.8819894016413957
Cosine Distance: 0.11801059835860428
Score 0.8944459037044368
稀疏向量
说明
稀疏向量(Sparse Vector)是指向量中大部分元素为0,只有很少一部分非零元素的向量。
在处理稀疏向量时,仅支持使用内积(Inner Product,IP)作为相似度或距离的计算方式。
def sparse_inner_product(indices1, values1, indices2, values2):
# 创建一个字典来存储向量1的非零值
vector1_dict = dict(zip(indices1, values1))
# 初始化内积结果
inner_product = 0.0
# 遍历向量2的非零维度,检查是否也存在于向量1中
for idx, value in zip(indices2, values2):
if idx in vector1_dict:
inner_product += vector1_dict[idx] * value
print(f"inner_product: {inner_product}")
return inner_product
def calculate_distance(inner_product):
print(f"1 - inner_product {1 - inner_product}")
return 1 - inner_product
def get_score(distance):
if distance >= 0:
return 1 / (1 + distance)
else:
return -distance + 1
def calculate_score(indices1, values1, indices2, values2):
# 计算内积
ip = sparse_inner_product(indices1, values1, indices2, values2)
# 计算距离
distance = calculate_distance(ip)
# 计算得分
score = get_score(distance)
return score
# 示例输入
indices1 = [30, 3301, 16722, 148212, 158835, 164691]
values1 = [0.2204025, 0.23698522, 0.29177716, 0.30742973, 0.3072948, 0.21784203]
indices2 = [30, 3715, 7499, 9421, 11140]
values2 = [0.11099276, 0.09458554, 0.23360626, 0.06949466]
# 计算得分
final_score = calculate_score(indices1, values1, indices2, values2)
print("Score:", final_score)
以上示例将返回以下结果:
inner_product: 0.0244630817859
1 - inner_product 0.9755369182141
Score: 0.5061915020570749
相关文档
不同SDK获取向量相似度得分_score
的方式如下:
该文章对您有帮助吗?