自然语言处理-文本相似度计算

文本相似度计算有一下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)))
               

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值