python计算数组余弦相似度_文本相似度计算--余弦相似度

python计算数组余弦相似度_文本相似度计算--余弦相似度_第1张图片

在线面试碰到的这个东东,临时补了一下课。。

所谓的余弦相似度就是将余弦函数应用到自然语言处理领域,做文本相似度的分析。大概的流程就是,为了计算两句话的相似度,首先需要将两句话拆分成词,也就是所谓的分词,这里中文的话方法就是利用python的jieba库,很方便,很上手。然后将两句话拆分所得的所有的分词来一个合并同类项,得到一个总的词语的集合。然后,以这个总的集合为基准,写出两句话的1/0向量表示,就是遍历总的集合的每个词,句中有就用1表示,没有就用0表示,这样两句话就可以用一串类似比特流的10字符串表示,最后,祭出我们的终极大杀器,cos表达式的公式。(以下几张图均来自网络)

印象中,余弦函数的公式长下面这样:

3424b1da425f75101f75a9e4b208e572.png

然而还有个变种,长这样:

acf41005fb38bafcc21806034a79a11a.png

应用于a,b均为向量形式,也就是我们上面得到的那一串01字符串,通过这个公式就可以完美的计算出余弦值,下面分别是公式详细版及一个实例。

python计算数组余弦相似度_文本相似度计算--余弦相似度_第2张图片

python计算数组余弦相似度_文本相似度计算--余弦相似度_第3张图片

这里我们可以看到最后得出的结果是0.81,我们都知道,0度的余弦值是1,意味着如果两个向量的夹角越小,也就是越相似,值就越接近1。完毕。

讲真,认识余弦函数也有些年头了,居然今天才知道,这家伙,还有这么牛逼的用处。以上是我翻了一遍网络上的资料然后自己对于余弦相似度的理解。但是有一个疑问,角度越小,意味着两个向量越接近,这不错,问题是,即使两个向量角度为0也就是完全重合在一起,但是端坐标不同该如何??????我们不能仅仅以角度作为唯一的相似度判断的标准吧?还是说,对于向量而言,就是如此????

最后补一句,下午在查阅相关资料的时候,脑海中一直浮现先前NHK拍的一部纪录片,《上帝公式》,也许,万物的规律,真的可以完全公式化

你可能感兴趣的:(python计算数组余弦相似度)