在做文本分析的时候,经常会到说将文本转化为对应的向量,之后利用余弦定理来计算文本之间的相似度。但是最近在面试时,重复上面这句话,却被面试官问到:“什么是余弦定理?”当时就比较懵逼,于是把余弦定理求文本相似度的过程叙述了一遍:“将样本转化为对应的空间中的两个向量,然后计算两个向量余弦值,之后根据余弦值的大小来判断两个样本相似度有多少”,但是话音刚落就被面试官否定了,当时感觉自己说的是正确的,但是由于自己的确记不记得余弦定理的数学含义以及公式,所以也就没有和面试官辩论,当时想请教下面试官他理解的余弦定理是什么,却被一句“回去自己查”给堵死。。。之后对这件事一直耿耿于怀,不过又一想,也是,面试官问的是余弦定理,但是我说的是余弦定理在空间向量中如何计算相似度,好像是有点跑题。。。anyway,过去的已经过去了,只要有收获就行。于是回来查了一下余弦定理是怎么应用于文本相似的度量的,下面是整个过程,其实很简单,只不过当时把余弦定理的公式忘了,不然很容易就能解释通(数学知识全还给老师了)。。。
相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。
对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度
向量空间余弦相似度(Cosine Similarity)
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫”余弦相似性”。
上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:
如上图二:可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向。如下图
如上图三: 两个向量a,b的夹角很大可以说a向量和b向量有很底的的相似性,或者说a和b向量代表的文本基本不相似。那么是否可以用两个向量的夹角大小的函数值来计算个体的相似度呢?
向量空间余弦相似度理论就是基于上述来计算个体相似度的一种方法。下面做详细的推理过程分析。
想到余弦公式,最基本计算方法就是初中的最简单的计算公式,计算夹角θ的余弦定值公式为:
但是这个是只适用于直角三角形的,而在非直角三角形中,余弦定理的公式是
三角形中边a和b的夹角 的余弦计算公式为:
在向量表示的三角形中,假设a向量是(x1, y1),b向量是(x2, y2),那么可以将余弦定理改写成下面的形式:
向量a和向量b的夹角 的余弦计算如下
扩展,如果向量a和b不是二维而是n维,上述余弦的计算法仍然正确。假定a和b是两个n维向量,a是 ,b是 ,则a与b的夹角 的余弦等于:
余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,夹角等于0,即两个向量相等,这就叫”余弦相似性”。
总结:
其实只要知道余弦定理余弦值的计算公式,然后转化为空间中的两个向量后,直接就能代入余弦定理来得到对应的余弦值,毕竟你知道两个向量的坐标,也就意味着你知道了余弦定理公式中三角形的三条边a、b、c的值。
参考:https://blog.csdn.net/u012160689/article/details/15341303