本文目录一览:
余弦相似度
简介:余弦相似度,即两物体之间的cos值,值越大,表示两物体的相似度越大。
- 向量空间余弦相似度:即向量空间中两夹角的余弦值。其值在0-1之间,两向量越接近,其夹角越小,余弦值越接近于1。
- n维空间的余弦公式:
- python中的工具:
numpy中提供了范数的计算工具:
linalg.norm()
,假定X、Y均为列向量, 则:
num = float(X.T * Y)
# 若为行向量则X * Y.T
denom = linalg.norm(X) * linalg.norm(Y)
cos = num / denom
# 余弦值sim = 0.5 + 0.5 * cos
# 归一化dist = linalg.norm(X - Y)
sim = 1.0 / (1.0 + dist)
# 归一化 - 例子:
文本相似度
sim = 1.0 / (1.0 + dist)
# 归一化 句子A:这只皮靴号码大了。那只号码合适 句子B:这只皮靴号码不小,那只更合适 怎样计算上面两句话的相似程度? 基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。 第一步,分词。 句子A:这只/皮靴/号码/大了。那只/号码/合适。 句子B:这只/皮靴/号码/不/小,那只/更/合适。 第二步,列出所有的词。 这只,皮靴,号码,大了。那只,合适,不,小,更 第三步,计算词频。 句子A:这只1,皮靴1,号码2,大了1。那只1,合适1,不0,小0,更0 句子B:这只1,皮靴1,号码1,大了0。那只1,合适1,不1,小1,更1 第四步,写出词频向量。 句子A:(1,1,2,1,1,1,0,0,0) 句子B:(1,1,1,0,1,1,1,1,1) 到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合,这表示两个向量代表的文本完全相等;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。 使用上面的公式(4) 计算两个句子向量 句子A:(1,1,2,1,1,1,0,0,0) 和句子B:(1,1,1,0,1,1,1,1,1)的向量余弦值来确定两个句子的相似度。 计算过程如下: 计算结果中夹角的余弦值为0.81非常接近于1,所以,上面的句子A和句子B是基本相似的。 由此,我们就得到了文本相似度计算的处理流程是: - 找出两篇文章的关键词;
- 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频;
- 生成两篇文章各自的词频向量;
- 计算两个向量的余弦相似度,值越大就表示越相似。
余弦相似度python实现
通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。 余弦相似度是文本相似度度量中使用较多的一种方法,对于两个向量X和Y,其对应的形式如下: X = (x1, x2..., xn) Y = (y1, y2..., yn) 其向量的余弦相似度公式为: X, Y对应其中的A和B python实现: 输出结果:0.5000000000000001 结果越接近1,夹角就越接近0,代表越相似。 越趋近于-1,他们的方向越相反;接近于0,表示两个向量近乎于正交。
python 计算每行之间的余弦相似性
比如你在a.py的文件中定义了一个test(x,y)函数,在shell中调用的时候from a import test
test(x,y)