Cosine Similarity,即余弦相似度,又叫余弦相似性。是一个中学数学的概念,即用两个向量之间的夹角余弦值代表这两个向量之间的相似度。
Cosine Similarity虽然简单,但广泛应用在AI模型中,比如CLIP计算图像embedding和文本embedding之间的相似性等。
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} ∣A∣A 、 B ⃗ ∣ B ∣ \vec{B} \over{\vert{B}\vert} ∣B∣B ,再将它们乘起来得到两个向量的余弦相似度。通过上面代码,我们可以计算出向量a
和b
中两个向量的余弦相似度分别为0.2679
、0.1768
。