当前位置:   article > 正文

自然语言处理-文本相似度计算_基于自然语言处理的文本相似度计算

基于自然语言处理的文本相似度计算

文本相似度计算有一下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)))
               
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

谢谢阅读,如果有建议请提出!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/941428
推荐阅读
相关标签
  

闽ICP备14008679号