【通俗解释】余弦相似度

转载 2017年06月11日 09:58:06

相似度度量(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.几亿条数据,一个数据库不够用了,分库     2.双十一这种设置多个服务器分摊请求,分服务器     3.业务扩大得分业务,比如注册登录,物流,卖东西等不同系统相互协调(登...
  • sifanlook
  • sifanlook
  • 2017年11月28日 15:52
  • 91

OSI七层模式简单通俗理解

这个模型学了好多次,总是记不住。今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记。本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人。总体来说,OSI模型是从底层往上层发展出来...
  • yangpl_tale
  • yangpl_tale
  • 2015年10月27日 10:16
  • 625

spring框架的ioc和aop通俗解释

spring框架的ioc和aop
  • white_ice
  • white_ice
  • 2016年10月19日 17:30
  • 1229

通俗理解ActiveMQ

jms是发送消息的java中发送消息的中间件,包括5中数据流: · StreamMessage -- Java原始值的数据流 · MapMessage--一套名称-值对 · TextMessag...
  • MO_JM
  • MO_JM
  • 2017年03月03日 10:41
  • 260

通俗的来说TCP/IP协议

TCP/IP协议 由于一直以来我听到太多的人问过我关于网络协议的问题,我自己在刚开始使用网络协议的时候也出现过,无法理解的情况,所有我想以个人的观点和理解来讲述下对于tcp/ip协议的理解。 一.TC...
  • qq84395064
  • qq84395064
  • 2017年07月19日 15:07
  • 262

我对aop的通俗理解

1.通知(Advice): 在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是...
  • u010503822
  • u010503822
  • 2017年07月09日 15:32
  • 273

集线器、交换机和路由器通俗解释

第 1 页 共 3 页 某一天,你到你女友小芳(暂定这个名字吧)就读的学校去找她,那么你的做法是什么呢: 一、集线器的工作方式: 你站到学校中庭,大喊一声“小芳,我来你找你了!” (广播) 如果...
  • kjlrzzyffmx
  • kjlrzzyffmx
  • 2015年08月01日 12:19
  • 960

Blockchain区块链的通俗解释

以交易为例,逐步理解blockchain 本文基本复制于简书(简书中提到的英文原文是googleweb工程师写的,需要翻墙,请恕我才疏学浅,英文原文中关于不对称加密的描述我没有理解透彻,感觉该工程师的...
  • pxy_lele
  • pxy_lele
  • 2016年12月26日 10:31
  • 3592

对像素通俗易懂的解释

http://zhidao.baidu.com/link?url=5sN_9qxKOU8bRLxgP55Uycw9o9PyfbtSHppavJrrzVMSLNOBoCD-q4KonLy4ljnpAlq...
  • mituan1234567
  • mituan1234567
  • 2014年02月14日 09:47
  • 705

机器学习的通俗解释

前言:有网友在 Quora 上提问:对于那些非计算机科学行业的人,你会如何向他们解释机器学习和数据挖掘? 斯坦福大学的印度学生、机器学习爱好者 Pararth Shah 在2012年12月22日的回...
  • gd1206100064
  • gd1206100064
  • 2013年12月29日 14:33
  • 1299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【通俗解释】余弦相似度
举报原因:
原因补充:

(最多只允许输入30个字)