实时重复文章识别——SimHash
来源:互联网 发布:双序列比对算法 编辑:程序博客网 时间:2024/06/05 07:09
一、背景介绍
在前边的文章中,我们采用的是用google的Doc2Vec模型来识别重复文章的,从线上运行的效果来看,它的准确率是比较高的。当然,这是建立在把所有的文章都当做训练数据来训练Doc2Vec模型的基础上的,它推断出一篇文章的向量之后再去做相似计算的效果是不太好的。况且,训练模型的耗时是比较长的,因此,这种模型的适用性只适合于离线计算文章之间的相似,并不适合实时识别重复文章,由于我们现在的文章内容接入了爬虫,量会比较大,tps也有所要求。因此,我们发现了google使用的另一个工具,它是用于网页去重的算法,即SimHash。
二、SimHash使用
这部分内容我们只介绍SimHash的使用方法,而在后续章节后详细讨论它的原理。
使用SimHash来做重复文章识别的步骤如下:
- 分词。将爬虫源的文章做过简单处理之后进行分词,加入权重
- hash。通过算法将每一个词计算它的hash值
- 加权。对上述hash值进行加权,按照第一步单词的权重
- 合并。将文章的所有单词加权后的值进行累加
- 降维。把上述合并的结果变为0,1的形式。
然后,我们可以通过计算两篇文章的64位simhash值的hamming距离小于等于3来判断它们是否重复(相似)文章,理论依据如下:、
整个过程如下图所示:
上述就是算法的实现过程,但是实际中,我们还需做进一步的工程处理,我们要考虑实际的性能。因此,我们需要存储4份table,并将64位的simhash code等分成4份;对于每一个输入的code,我们通过精确匹配的方式,查找前16位相同的记录作为候选记录,如下图所示:
让我们来总结一下上述算法的实质:
1、将64位的二进制串等分成四块
2、调整上述64位二进制,将任意一块作为前16位,总共有四种组合,生成四份table
3、采用精确匹配的方式查找前16位
4、如果样本库中存有2^34(差不多10亿)的哈希指纹,则每个table返回2^(34-16)=262144个候选结果,大大减少了海明距离的计算成本
三、压测效果
- tps: 500+
- cpu
- 内存
- 实时重复文章识别——SimHash
- simhash与重复信息识别
- simhash与重复信息识别
- simhash与重复信息识别
- simhash与重复信息识别
- simhash与重复信息识别
- simhash与重复信息识别
- 我的数学之美系列二 —— simhash与重复信息识别
- 我的数学之美系列二 —— simhash与重复信息识别(转)
- 【基础知识】simhash与重复信息识别
- simhash与重复信息识别(一)
- simhash与重复信息识别(二)
- Simhash 网页重复
- simhash相关文章
- Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别
- Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别
- simhash应用-文章去重
- 人脸识别——必读文章
- 不借助临时变量实现变量交换
- 浅析OpenNI2---简介
- 软件测试面试必备的一些基础理论概念
- Linux下yum安装java
- spring(七)ssh2框架搭建
- 实时重复文章识别——SimHash
- C++纯虚函数和Java中的抽象函数区别
- Maven学习03--使用Eclipse maven创建普通java项目
- 数据结构 最短路径问题 Floyd算法
- Java中的伪共享以及应对方案
- acm2899 Strange fuction
- 剑指offer——复杂链表的复制_
- HTC Vive开发笔记之手柄震动
- AC自动机【萌新文章】