计算余弦相似度

目录

简介

余弦相似度公式

具体步骤

计算点积

计算向量的模

计算余弦相似度

Python 实现

应用示例

总结


简介

余弦相似度(Cosine Similarity)是一种用于衡量两个非零向量之间夹角余弦值的方法。它广泛应用于自然语言处理、信息检索、推荐系统等领域,用来评估两个对象(如单词、句子或用户偏好)之间的相似性。余弦相似度的值范围在-1到1之间:

  • 接近1表示非常相似;
  • 接近-1表示非常不相似;
  • 接近0表示无相关性。

余弦相似度公式

余弦相似度的数学公式为:

其中:

  • vA​ 和 vB 分别是两个向量。
  • vA⋅vB​ 表示两个向量的点积。
  • ∥vA∥和 ∥vB​∥ 分别表示两个向量的模(即向量的长度)。

具体步骤

计算点积

点积是两个向量对应元素相乘后的和。假设我们有两个向量 vA 和 vB:

vA=[a1,a2,...,an]

vB=[b1,b2,...,bn]

点积计算公式为:

vA⋅vB=a1×b1+a2×b2+...+an×bn

计算向量的模

向量的模(长度)是向量各元素平方和的平方根。对于一个向量 v,其模计算公式为:

计算余弦相似度

 最后,将点积除以两个向量模的乘积,得到余弦相似度:

Python 实现

以下是一个使用Python计算余弦相似度的完整示例:

import numpy as np

def cosine_similarity(v_A, v_B):
    # 计算点积
    dot_product = np.dot(v_A, v_B)
    
    # 计算向量的模
    magnitude_v_A = np.linalg.norm(v_A)
    magnitude_v_B = np.linalg.norm(v_B)
    
    # 计算余弦相似度
    if magnitude_v_A == 0 or magnitude_v_B == 0:
        return 0.0  # 避免除以零错误
    
    cosine_sim = dot_product / (magnitude_v_A * magnitude_v_B)
    return cosine_sim

# 示例:计算“猫”和“狗”的余弦相似度
v_cat = np.array([-0.0103, 0.0172, -0.0002, ..., 0.3895])  # 用你的完整向量替换...
v_dog = np.array([0.0054, 0.0213, -0.0034, ..., 0.3912])   # 用你的完整向量替换...

# 计算余弦相似度
similarity = cosine_similarity(v_cat, v_dog)
print("余弦相似度:", similarity)

应用示例

假设我们有两个单词“猫”和“狗”,它们的嵌入向量分别为:

  • 猫:[ [-0.0103, 0.0172, -0.0002, ..., 0.3895] ]
  • 狗:[ [0.0054, 0.0213, -0.0034, ..., 0.3912] ]

通过上述Python代码,我们可以计算这两个词嵌入向量的余弦相似度,从而定量地评估它们的语义相似性。

总结

余弦相似度是一种简单而有效的方法,用于衡量两个向量之间的相似性。它在自然语言处理和其他领域中广泛应用。通过计算点积和向量的模,并将其代入余弦相似度公式,可以轻松评估两个对象之间的相似程度。希望这份文档能帮助你更好地理解和应用余弦相似度。