余弦相似度

余弦相似度(cosine similarity)是一种衡量两个非零向量之间相似性的度量方法。它基于两个向量之间的夹角余弦值来判断它们的方向是否相似。余弦相似度的取值范围在-1到1之间,其中1表示完全相似,-1表示完全相反,0表示不相关。

给定两个向量A和B,它们的余弦相似度cosine_similarity(A, B)可以通过以下公式计算:

cosine_similarity(A, B) = (A·B) / (||A|| * ||B||)

其中,A·B表示向量A和B的点积(内积),||A||和||B||分别表示A和B的范数(模)。

具体的计算步骤如下:

  1. 计算向量A和B的点积(A·B):将A向量的每个对应元素与B向量的对应元素相乘,并将所有乘积求和。

  2. 计算向量A的范数(||A||):将A向量的每个元素的平方求和,然后取平方根。

  3. 计算向量B的范数(||B||):将B向量的每个元素的平方求和,然后取平方根。

  4. 将点积除以范数的乘积,得到余弦相似度值。

余弦相似度常用于文本相似度计算、推荐系统、聚类等领域,它对向量的长度不敏感,更注重方向的一致性。较高的余弦相似度意味着两个向量在方向上更为相似。

计算两个向量之间余弦相似度的代码如下:

# inner product (normalize first and inner product)
  normft = f_t.pow(2).sum(1, keepdim=True).pow(1. / 2)      #L2norm
  outft = f_t.div(normft)                                   #每个元素除以L2范数
  normfs = f_s.pow(2).sum(1, keepdim=True).pow(1. / 2)
  outfs = f_s.div(normfs)
            
  cos_theta = (outft * outfs).sum(1, keepdim=True)
  G_diff = 1 - cos_theta
  loss_kd = (G_diff).sum() / bsz 

你可能感兴趣的:(算法,机器学习,人工智能)