首页 > 编程知识 正文

0度余弦,余弦距离和余弦相似度

时间:2023-05-03 19:09:55 阅读:137354 作者:2931

余弦计算相似度度量

相似度度量(Similarity )用于计算个体间的相似度,相似度度量的值越小表示个体间的相似度越小,相似度的值越大表示个体差异越大。

对于多个不同文本和短句的对话消息计算它们之间的相似度,是将这些文本中的词映射到向量空间,形成文本中的字符与向量数据之间的映射关系,并计算多个不同向量之间的差异大小这里详细介绍成熟的向量空间余弦相似度的计算方法

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

馀弦相似度是利用向量空间的两个向量所成角的馀弦值,测量两个个体之间差异的大小。 余弦值越接近1,夹角越接近0度,即表示两个向量越相似,这被称为“余弦相似性”。

上图的两个向量a、b所成的角较小,所以可以说a向量和b向量具有很高的相似性。 在极端情况下,a向量和b向量完全重叠。 下图:

上面的图2:a和b的向量相等,也就是说可以认为a、b的向量表示的文本完全相似或者相等。 a和b向量所成的角较大或方向相反的情况。 如下图所示

如上述图3的:的两个向量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)计算两个向量的余弦相似度,值越大就表示越相似。

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。