相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。

对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度

向量空间余弦相似度(Cosine Similarity)

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

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

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

如上图三: 两个向量a,b的夹角很大可以说a向量和b向量有很底的的相似性,或者说a和b向量代表的文本基本不相似。那么是否可以用两个向量的夹角大小的函数值来计算个体的相似度呢?

向量空间余弦相似度理论就是基于上述来计算个体相似度的一种方法。下面做详细的推理过程分析。

想到余弦公式,最基本计算方法就是初中的最简单的计算公式,计算夹角

图(4)

的余弦定值公式为:

但是这个是只适用于直角三角形的,而在非直角三角形中,余弦定理的公式是

图(5)

三角形中边a和b的夹角 的余弦计算公式为:

公式(2)

在向量表示的三角形中,假设a向量是(x1, y1),b向量是(x2, y2),那么可以将余弦定理改写成下面的形式:

图(6)

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

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

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,夹角等于0,即两个向量相等,这就叫"余弦相似性"。

【下面举一个例子,来说明余弦计算文本相似度】

举一个例子来说明,用上述理论计算文本的相似性。为了简单起见,先从句子着手。

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

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

怎样计算上面两句话的相似程度?

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

第一步,分词

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

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

第二步,列出所有的词。

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

第三步,计算词频。

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

到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合,这是表示两个向量代表的文本完全相等;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

使用上面的公式(4)

计算两个句子向量

句子A:(1,1,2,1,1,1,0,0,0)

和句子B:(1,1,1,0,1,1,1,1,1)的向量余弦值来确定两个句子的相似度。

计算过程如下:

计算结果中夹角的余弦值为0.81非常接近于1,所以,上面的句子A和句子B是基本相似的

由此,我们就得到了文本相似度计算的处理流程是:

(1)找出两篇文章的关键词;

 (2)每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频

 (3)生成两篇文章各自的词频向量;

 (4)计算两个向量的余弦相似度,值越大就表示越相似。

参考文章:http://blog.sina.com.cn/s/blog_4a6b27a30102vbr0.html

【通俗解释】余弦相似度相关推荐

  1. perplexity 衡量指标_通俗解释困惑度 (Perplexity)-评价语言模型的好坏

    一.语言模型 本文尽量通俗解释一下困惑度的概念.既然题目中写了是用来评价语言模型的好坏,那么首先来看一下语言模型:忆臻:深入浅出讲解语言模型​zhuanlan.zhihu.com 简单地说,语言模型就 ...

  2. 协方差、相关系数---通俗解释

    一.协方差的意义 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧 ...

  3. 小波变换(wavelet transform)的通俗解释

    本篇为<信号处理>系列博客的第三篇,该系列博客主要记录信号处理相关知识的学习过程和自己的理解,方便以后查阅. 文章原地址:<小波变换(wavelet transform)的通俗解释( ...

  4. Python简单实现基于VSM的余弦相似度计算

    在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知 ...

  5. 余弦相似度和欧氏距离_欧氏距离和余弦相似度

    余弦相似度和欧氏距离 Photo by Markus Winkler on Unsplash Markus Winkler在Unsplash上拍摄的照片 This is a quick and str ...

  6. Wasserstein metric的通俗解释

    Wasserstein metric的通俗解释 ​关注他 166 人赞同了该文章 本文收录在无痛的机器学习第二季目录. Wasserstein GAN可以算是GAN界的一大突破了,有关它的介绍和使用心 ...

  7. AI产品经理需要了解的数据知识:余弦相似度

    AI产品经理需要了解的数据知识:余弦相似度 本文概括介绍了余弦相似度是什么.如何应用以及案例说明,目的是希望我们产品经理在设计相关跟相似度功能或是利用相似性功能解决某一业务的场景时能利用上余弦相似度, ...

  8. 余弦相似度 高维数据_海量高维数据与近似最近邻

    在实际工程当中,我们常常会遇到海量的数据,那作为一个数据挖掘准从业人员,如何从海量的数据当中挖掘出他们数据之间的关系和规律就显得尤为重要了. 今天我要讲的时海量高维数据及其近似最近邻方案. K-近邻算 ...

  9. 闲聊机器人实例四:python实现小姜机器人,BERT检索模型,新增一个余弦相似度Cosine层, 解决BERT句向量编码传输耗时问题。部署tf-serving

    BERT检索模型,新增一个余弦相似度Cosine层, 解决BERT句向量编码传输耗时问题.部署tf-serving 业务需求 BERT向量召回问答对, FAQ标准问答对数据量不大 不能把BERT编码部 ...

最新文章

  1. 进程状态控制-进程的撤销
  2. MD5加密解密帮助类
  3. hdu 1788 Chinese remainder theorem again 【crt的具体过程】
  4. opencv 摄像机标定
  5. 心理测量学信度计算机试题,心理测量学试题及答案
  6. PCB线路板上的电子元件你认识多少?
  7. 求虐,我还想再拓展一次
  8. python apply函数_Python中apply函数的用法实例教程
  9. ASP.NET Web API项目自动生成接口文档和测试页面
  10. 插件77:获取Yahoo!股票新闻
  11. 同花顺炒股指标定制-K线只有红绿2个颜色怎么行?
  12. php禁用gopher协议,SSRF攻击-运用gopher协议构造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)...
  13. C++ 中scanf的返回值
  14. [HL7_V2.4]HL7消息生成和反射
  15. 校园欺凌——四位学生的乱伦之战!!!
  16. vulnhub Hacker Fest 2019 记录
  17. 从拉新、促活/留存和营收说起,做运营到底是在做什么?(FW)
  18. U盘中SLC、MLC和TLC三者闪存类型的优缺点及区别
  19. 旋转矢量(法向量)转化欧拉角
  20. 让你的短信应用迎接Android 4.4(KitKat)

热门文章

  1. 游戏社交崛起!四缺一,开黑吗?
  2. 网易云音乐TFBOYS线上演唱会破纪录,稳定线上体验如何实现?
  3. 如何做好 Android 端音视频测试?
  4. 我们可以写100%,但是这样不科学
  5. SQLServer 清空某个库所有表
  6. SDK,JDK,API的区别
  7. angularjs解决方案之 递归模板
  8. 菜鸟学Linux命令:端口查看和操作命令
  9. (转)Linux下MatlabCompilerRuntime的安装和使用
  10. 我的Android进阶之旅------Android Gusture 手势识别小案例