目录
简介
余弦相似度(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代码,我们可以计算这两个词嵌入向量的余弦相似度,从而定量地评估它们的语义相似性。
总结
余弦相似度是一种简单而有效的方法,用于衡量两个向量之间的相似性。它在自然语言处理和其他领域中广泛应用。通过计算点积和向量的模,并将其代入余弦相似度公式,可以轻松评估两个对象之间的相似程度。希望这份文档能帮助你更好地理解和应用余弦相似度。