SimHash与汉明距离

SimHash

SimHashGoogle处理海量网页采用的文本相似判定方法。算法的主要思想是降维,将高维的特征向量映射成一个f-bit的指纹(fingerprint),通过比较两篇文章的f-bit指纹的Hamming Distance来确定文章是否重复或者高度近似。


具体的simhash过程如下:

  1. 首先基于传统的IR方法,将文章转换为一组加权的特征值构成的向量。
  2. 初始化一个f维向量V,其中每一个元素初始值为0。
  3. 对于文章的特征向量集中的每一个特征,做如下计算: 利用传统的hash算法映射到一个f-bit的签名。对于这个f- bit的签名,如果签名的第i位上为1,则对向量V第i维加上这个特征的权值,否则对向量的第i维减去该特征的权值
  4. 对整个特征向量集合迭代上述运算后,根据向量V中每一维向量的符号来确定生成的f-bit指纹的值,如果向量V第i维为正数,则生成f-bit指纹第i维为1,否则为0。

​ SimHash为Google处理海量网页的采用的文本相似判定方法。该方法的主要目的是降维,即将高维的特征向量映射成f-bit的指纹,通过比较两篇文档指纹的汉明距离来表征文档重复或相似性。


汉明距离-Hamming Distance

汉明距离用来计算两个向量的相似度,即通过比较向量每一位是否相同,若不同则汉明距离加1

这样得到汉明距离。向量相似度越高,对应的汉明距离越小。如1000100110110001有3位不同。


与余弦相似性算法的区别

余弦相似性算法:通过对两个文本分词,TF-IDF算法向量化,对比两者的余弦夹角,夹角越小相似度越高,但由于有可能一个文章的特征向量词特别多导致整个向量维度很高,使得计算的代价太大不适合大数据量的计算。

  • 余弦相似性算法适合于短文本
  • SimHash算法适合于长文本,并且能应用于大数据环境中