计算文本相似度的几种方法

来源:互联网 发布:c语言是汇编语言吗 编辑:程序博客网 时间:2024/06/06 17:02

  杰卡德(Jaccard)相似系数

  这种相似度计算方式相对简单,原理也易于理解,就是计算单词集合之间的交集和并集大小的比例,该值越大,表示两个文本越相似。在涉及到大规模并行计算时,该方法效率上有一定的优势。

Jaccard 相似度公式:
举例:
句子A:“我喜欢看电视,不喜欢看电影。”
句子B:“我不喜欢看电视,也不喜欢看电影。” 
分词去噪后:A=(我,喜欢,看,电视,电影,不)  B=(我,喜欢,看,电视,电影,也,不)
那么J(A,B)=(我,喜欢,看,电视,电影,不)/(我,喜欢,看,电视,电影,也,不)=6/7=0.86

余弦(Cosine)相似度
  余弦相似度是利用计算两个向量之间的夹角,夹角越小相似度越高,其公式为:
假定A和B是两个n维向量,A是[A1,A2,...,An],B是[B1,B2,B3,...,Bn],则A与B的夹角余弦等于:
  沿用上面的例子,计算词频如下:
句子A:我 1,喜欢 2,看 2,电视 1,电影 1, 不 1,也 0。
句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。
写出词频向量:
句子A:[1,2,2,1,1,1,0]     句子B:[1,2,2,1,1,2,1]
使用上述公式,我们可以得到句子A与句子B的夹角余弦。

海量数据的相似度

    海联数据的相似度计算直接使用上面两种办法效率未免有些太低了,可以参考 simhash 算法.其核心思路就是想办法缩小问题规模,之后再进行比对。
提供一下几个参考链接学习:
    1.Similarity estimation techniques from rounding algorithms
     2.simhash与Google的网页去重
       3.海量数据相似度计算之simhash和海明距离
 

原创粉丝点击