余弦相似度

在NLP的任务里,会对生成两个词向量进行相似度的计算,常常采用余弦相似度公式计算。

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


我们知道,对于两个向量,如果他们之间的夹角越小,那么我们认为这两个向量是越相似的。余弦相似性就是利用了这个理论思想。它通过计算两个向量的夹角的余弦值来衡量向量之间的相似度值。

公式如下:

实现方式

手撸一个

公式很简单,调用numpy基本运算手撸一个。

def cos_sim(vector_a, vector_b):"""计算两个向量之间的余弦相似度:param vector_a: 向量 a :param vector_b: 向量 b:return: sim"""vector_a = np.mat(vector_a)vector_b = np.mat(vector_b)num = float(vector_a * vector_b.T)denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)sim = num / denomreturn sim

sklearn.metrics.pairwise 包

官方文档

  • cosine_similarity()
    传入一个变量a时,返回数组的第i行第j列表示a[i]与a[j]的余弦相似度。
  • pairwise_distances()
    该方法返回的是余弦距离,余弦距离= 1 - 余弦相似度,同样传入一个变量a时,返回数组的第i行第j列表示a[i]与a[j]的余弦距离。

例子

def learn_cosine_similarity():a = [[1, 3, 2], [2, 2, 1]]from sklearn.metrics.pairwise import cosine_similarityfrom sklearn.metrics.pairwise import pairwise_distancesprint('sim1:', cos_sim(a[0] ,a[1]))print('sim2:', cosine_similarity(a))print('sim3:', pairwise_distances(a,metric="cosine"))

Output:

sim1: 0.8908708063747479
sim2: [[1.         0.89087081][0.89087081 1.        ]]
sim3: [[0.         0.10912919][0.10912919 0.        ]]

与欧几里得距离的联系

在NLP任务比较词向量、实体向量相似度的场景中,例如Word2Vec,知识图谱实体向量做相似度计算时,对于目标向量进行归一化后,余弦距离和欧几里得距离具有单调性, 即:

在这个场景下,我们对于最终得到实体向量进行归一化后,用余弦距离或者用欧几里得距离就是等价的。

衡量两个向量相似度的方法:余弦相似度相关推荐

  1. 【推荐系统->相似度算法】余弦相似度

    转自相似度算法之余弦相似度 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量. 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫&qu ...

  2. 文本相似度检测之余弦相似度

    为什么文本也需要余弦相似度 文本的余弦相似度是为了计算文本的相似程度而引入的一种方法,例如我们要比较这样两句话的相似程度: A句子:你笑起来真好看. B句子:你笑起来不好看. 这两句话,看起来很相似了 ...

  3. ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现

    ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现

  4. 相似度算法之余弦相似度

    转自:http://blog.csdn.net/u012160689/article/details/15341303 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间 ...

  5. python 文本相似度_python实现余弦相似度文本比较

    向量空间模型VSM: VSM的介绍: 一个文档可以由文档中的一系列关键词组成,而VSM则是用这些关键词的向量组成一篇文档,其中的每个分量代表词项在文档中的相对重要性. VSM的例子: 比如说,一个文档 ...

  6. 相似度计算方法(三) 余弦相似度

    一. 余弦相似度算法基本概念         余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于 ...

  7. java余弦相似度算法_余弦相似度计算

    余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性". 我们知道,对于两个向量, ...

  8. java相似度判断(余弦相似度)

    业务逻辑: 输入某一企业,返回跟该企业相似的企业列表. 大体思路: 1.输入企业有哪些字段来构建相似度字典: 2.输入某个企业字段具体值,转换成向量 来计算: 3.根据向量计算的值来排序. 代码如下: ...

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

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

最新文章

  1. cisco路由器ios升级(rommon下)
  2. C#编程利器系列文章
  3. Dreanmwear能做php模板吗,PHPword模板的使用
  4. Qt ModbusTCP ModbusRTU 使用同步读和异步写
  5. python时间函数的使用
  6. 如何部署WAR到tomcat?
  7. 致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
  8. 服务器msdtc没有安全显示项,MSDTC 疑难解答
  9. 永恒之蓝漏洞复现(MS17010)
  10. geek.exe是什么_How-To Geek正在雇用一名Geeky作家-以下是详细信息
  11. MultiTech MT9234ZBA 调制解调器Modem的测试方法
  12. 【硬件设计】AD 生成 Gerber 文件
  13. 解决PS 内存不足,RAM不足问题,方案汇总
  14. dev c++怎么设置断点_斑马进度计划软件可以检查计划中是否存在逻辑断点和错误逻辑关系...
  15. 强大的密码破解工具:hashcat简介与用法介绍与实例
  16. oracle amp lt是什么东西,在网页设计中amp;amp;nbsp;是什么意思
  17. Python地理空间分析指南(第2版)学习笔记01
  18. C语言的历练打怪之路(2)
  19. python职工工资管理系统课程设计_Python3实现的简单工资管理系统示例
  20. Face++身份证图片识别

热门文章

  1. webbench源码阅读
  2. RPG Maker MV之起始队伍设置
  3. lisp如何批量选中特定图层_cad怎么选中整个图层(cad 怎样快速选中后锁定所有图层 只显示一个图层)...
  4. 学vue前你需要知道的:vue生态圈
  5. TSP问题的遗传算法实现(C++)
  6. cufflinks 绘图
  7. 算法工程师的三个境界
  8. sklearn专题五:逻辑回归
  9. 平衡树学习笔记之 fhq Treap
  10. plc辅助继电器M的介绍