1 SimHash算法去除长文本数据

google算法

1.1 SimHash算法

传统Hash算法本质上是将原始内容均匀随机地映射为一个签名值。即便两个原始内容只相差一个字节,所产生的签名差别也很大。 SimHash算法主要思想是降维,将高维的特征向量转化为f位的指纹(fingerprint),通过算出两个指纹的海明距离(Hamming Distance)来确定两篇文章的相似度,海明距离越小,相似性越低。

特别的,当simhash在处理小于500字的文本时,simhash的表现性不会很好。

比较两篇文章相似度的方法:

  • 将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。 只可比较两篇文章的相似性,如果是海量的文本数据集,程序的时间复杂度和空间复杂度将会很大。
  • 传统hash,为每一个web文档通过hash的方式生成一个指纹。 不可行,只可测量两篇完全相同的文章,如果输入内容只出现了轻微的变化,hash就会发生很大的变化。

1.2 SimHash算法的实现

算法流程:

  1. 对文本分词,得到N维特征向量(默认64维)
  2. 对分词设置权重(TF-IDF)
  3. 为特征向量计算hashhash函数计算特征向量的hash值,hash值为二进制数01组成的n-bit签名。字符串变成数字。
  4. 对所有特征向量加权、累加给所有特征向量加权, W=hash\*weight,逐个特征相乘,再相加,变成只有一个序列串
  5. 对于累加结果,大于0置1,小于0置0如果大于0则置1,否则置0,从而得到该语句的simhash值
  6. 得到文本指纹(fingerprint)
  7. 海明距离计算距离

2 Jaccard similarity算法

计算文档相似度最合适,Minhash 是 Jaccard similarity 的一种近似估计

3 最长公共子序列

文档内容对比标红

文本去重算法_相似度

文本去重算法_相似度_02

文本去重算法_特征向量_03

4 TF-IDF与向量空间模型

根据向量计算相似度

5 机器学习方法去重

BERT模型去重