以下代码用到了 numpy 包。代码实现的功能是计算两个向量之间的余弦相似度。
我们可以把两个向量想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。
import numpy as np
def cos_sim(vector_a, vector_b):
"""
计算两个向量之间的余弦相似度
:param vector_a: 向量 a
:param vector_b: 向量 b
:return: sim
"""
vector_a = np.mat(vector_a)
vector_b = np.mat(vector_b)
num = float(vector_a * vector_b.T)
denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
cos = num / denom
sim = 0.5 + 0.5 * cos
return sim
参考
关于余弦相似度的解释可以看一下TF-IDF与余弦相似性的应用(二):找出相似文章
网友评论
num = float(vector_a * vector_b.T)
报错信息:TypeError: only length-1 arrays can be converted to Python scalars
正确的心法应该是去掉float:
num= vector_a*vector_b.T
或者写成numpy形式:
num = np.matmul(vector_a,vector_b.T)