赞
踩
文本相似度计算有一下2种方式:
1.欧式距离
通过计算两个句子的向量距离来判断两个句子的相似度。
距离越来说明相似度越小,距离越小说明相似度越大。
缺点:
例:给定两组向量,x1 = (1,1,1),y1=(3,3,3)和 x2=(2,1,-1), y2=(0,-1,1).通过计算发现x1,y1的欧氏距离和x2,y2的欧式距离一样。但是x1和y1更加相似,是因为欧氏距离在计算的过程中没有考虑到向量的方向。 如果2个向量相似,需要考虑到它们的方向是否也是相似的。
2.余弦相似度
计算相似度:d = s1 · s2 / (|s1| * |s2|)
s1 · s2:s1和s2的内积
|s1|:s1的长度
例:x = (x1, x2, x3),y = (y1, y2, y3)
内积公式:x1y1+x2y2+x3*y3
长度公式:|x1| = sqrt( (y1)2 + (y2)2 +(y3)2 )
|y1| = sqrt( (y1)2 + (y2)2 +(y3)2 )
余弦相似度代码实现:
import numpy as np def cosine_similarity(v1, v2): # 计算2个向量的余弦相似度 # 计算内积 dot_product = np.dot(v1, v2) # 计算v1,v2的长度 norm_v1 = np.linalg.norm(v1) norm_v2 = np.linalg.norm(v1) return dot_product / (norm_v1 * norm_v2) sentence_v1 = np.array([1, 1, 1, 1, 0, 0, 0, 0, 0]) sentence_v2 = np.array([0, 0, 1, 1, 1, 1, 0, 0, 0]) sentence_v3 = np.array([0, 0, 0, 1, 0, 0, 1, 1, 1]) print(sentence_v1, "和", sentence_v2, "的相似度为%s" %(cosine_similarity(sentence_v1, sentence_v2))) print(sentence_v1, "和", sentence_v3, "的相似度为%s" %(cosine_similarity(sentence_v1, sentence_v3)))
谢谢阅读,如果有建议请提出!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。