Cosine Similarity,即余弦相似度,又叫余弦相似性。是一个中学数学的概念,即用两个向量之间的夹角余弦值代表这两个向量之间的相似度

Cosine Similarity虽然简单,但广泛应用在AI模型中,比如CLIP计算图像embedding和文本embedding之间的相似性等。

【AI数学】余弦相似性(含python实现)-LMLPHP
Python实现(Pytorch版本)

import torch

def norm(t):
	return t / t.norm(dim=1, keepdim=True)

def cos_sim(v1, v2):
	v1 = norm(v1)
	v2 = norm(v2)
	return v1 @ v2.t()

a = torch.Tensor([[1, 2, 3, 88]]) # 1x4
b = torch.Tensor([[1, 2, 3, 11], [4, 5, 6, 7]]) # 2x4

similarity = cos_sim(a, b) # 1x2
print(similarity)
# tensor([[0.2679, 0.1768]])

在代码实现中,通常先分别计算 A ⃗ ∣ A ∣ \vec{A} \over{\vert{A}\vert} AA B ⃗ ∣ B ∣ \vec{B} \over{\vert{B}\vert} BB ,再将它们乘起来得到两个向量的余弦相似度。通过上面代码,我们可以计算出向量ab中两个向量的余弦相似度分别为0.26790.1768

12-06 04:08