• 1、余弦相似度

余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。

上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:

如上图可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向,可以说a向量和b向量有很低的的相似性,或者说a和b向量代表的文本基本不相似。

向量a和向量b的夹角 的余弦计算如下:

扩展,如果向量a和b不是二维而是n维,上述余弦的计算法仍然正确。假定a和b是两个n维向量,a是  ,b是  ,则a与b的夹角 的余弦等于:

  • 2、如下举例说明利用余弦计算句子相似度

句子A:这只皮靴号码大了。那只号码合适
句子B:这只皮靴号码不小,那只更合适

怎样计算上面两句话的相似程度?
基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

第一步,分词。

句子A:这只/皮靴/号码/大了。那只/号码/合适。

句子B:这只/皮靴/号码/不/小,那只/更/合适。

第二步,列出所有的词。

这只,皮靴,号码,大了。那只,合适,不,小,更

第三步,计算词频。(下面程序用的jieba分词工具所以结果不一样但不影响计算)

句子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)

第五步,利用上述公式计算

  • 3、python代码实现
 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Mon Jul 30 09:35:54 2018
 4
 5 @author: Administrator
 6 """
 7
 8 import jieba
 9 import numpy as np
10
11 def get_word_vector():
12     """
13     w = np.ones((3,4))
14     q = np.ones((3,4"))
15     print(w)
16     print(np.sum(w * q))
17    """
18
19     s1 = input("句子1:")
20     s2 = input("句子2:")
21
22     cut1 = jieba.cut(s1)
23     cut2 = jieba.cut(s2)
24
25     list_word1 = (','.join(cut1)).split(',')
26     list_word2 = (','.join(cut2)).split(',')
27     print(list_word1)
28     print(list_word2)
29
30     key_word = list(set(list_word1 + list_word2))#取并集
31     print(key_word)
32
33     word_vector1 = np.zeros(len(key_word))#给定形状和类型的用0填充的矩阵存储向量
34     word_vector2 = np.zeros(len(key_word))
35
36     for i in range(len(key_word)):#依次确定向量的每个位置的值
37         for j in range(len(list_word1)):#遍历key_word中每个词在句子中的出现次数
38             if key_word[i] == list_word1[j]:
39                 word_vector1[i] += 1
40         for k in range(len(list_word2)):
41             if key_word[i] == list_word2[k]:
42                 word_vector2[i] += 1
43
44     print(word_vector1)#输出向量
45     print(word_vector2)
46     return word_vector1, word_vector2
47
48 def cosine():
49     v1, v2 = get_word_vector()
50     return float(np.sum(v1 * v2))/(np.linalg.norm(v1) * np.linalg.norm(v2))
51
52 print(cosine())

  • 4、运行结果

转载于:https://www.cnblogs.com/Jm-15/p/9406425.html

句子相似度--余弦相似度算法的实现相关推荐

  1. 计算向量相似度 ---余弦相似度

    1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, -])出发,指向不同的方向.两条线段之间形成一个夹角,如果 ...

  2. 一种可实时处理 O(1)复杂度图像去雾算法的实现

    本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/3410279.html  侵 ...

  3. 一种可实时处理 O(1)复杂度图像去雾算法的实现。

    在我博文的一系列的文章,有不少算法都于去雾有关,比如限制对比度自适应直方图均衡化算法原理.实现及效果.局部自适应自动色阶/对比度算法在图像增强上的应用这两个增强算法都有一定的去雾能力,而最直接的就是& ...

  4. 对比欧氏距离与余弦相似度

    欧式距离 欧氏距离就是我们平常所说的距离,如果是平面上的两个点和  ,那么 A 与 B 的欧式距离就是:如果是三维空间中的两个点 和  ,那么 A 与 B 的欧式距离就是:如果推广到高维空间,公式可以 ...

  5. 文本相似度计算——HanLP分词+余弦相似度算法

    一.余弦相似度简介 余弦相似度(又称为余弦相似性):是通过测量两个向量的夹角的余弦值来度量它们之间的相似性.余弦值接近1,夹角趋于0,表明两个向量越相似:余弦值接近于0,夹角趋于90度,表明两个向量越 ...

  6. 【转】自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)

    文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...

  7. 自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)

    文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...

  8. 基于用户的协同过滤(余弦相似度)

    什么是协同过滤 协同过滤简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应 ...

  9. 百面机器学习 #2 模型评估:03 余弦距离和余弦相似度、欧氏距离

    文章目录 余弦相似度 余弦相似度和余弦距离 和欧式距离的比较和关系 余弦距离不是一个严格定义的距离 在模型训练过程中,我们也在不断地评估着样本间的距离,如何评估样本距离也是定义优化目标和训练方法的基础 ...

最新文章

  1. 计算机软件可以一次摊销吗,研发用无形资产可以一次摊销吗
  2. 我不懂,数学家为啥老跟驴过不去?
  3. android 第三方登录 --- QQ
  4. 计算氦原子的基态能级
  5. excel python自动化_excel表自动化-python
  6. python 集合(set)
  7. Mac Big Sur如何关闭开机提示音效
  8. mysql密码正确却提示错误,不使用密码反而能登录
  9. 24.卷1(套接字联网API)---带外数据
  10. excel粘贴为图片不完整_excel转PDF不完整?办公大神的压箱绝技来了!
  11. Java基础练习题——查找整数
  12. ROS操作系统入门学习
  13. 怎样购买及安装ssl安全证书
  14. iphone拍照标注转发微博应用--Gurgle 发布
  15. 大学英语六级高频词汇
  16. 点餐推荐系统_麦当劳智慧餐厅的微信小程序终究将取代人工点餐和自助点餐机...
  17. Navicat连接腾讯云服务器的MySQL
  18. Mysql 允许IP地址访问
  19. 【电机原理与拖动基础】Unit 1 直流电机(你还不知道电机是怎么一回事吗?那就快来看一看吧!)
  20. python延时函数 微秒_Python程序可显示当前时,分,秒和微秒

热门文章

  1. (转) Spring 3 报org.aopalliance.intercept.MethodInterceptor问题解决方法
  2. git学习心得之从远程仓库克隆
  3. #if defined 和 #if ! defined 的用法
  4. tiny xml 使用总结
  5. Java学习笔记-正则表达式的模式匹配
  6. 【转载】Windwos CE 跨进程内存注入
  7. Linux环境下使用rpm包安装GitLab
  8. Iphone屏幕旋转
  9. 架构探险笔记10-框架优化之文件上传
  10. Linux 下的 hosts文件