实时重复文章识别——SimHash

一、背景介绍

    在前边的文章中,我们采用的是用google的Doc2Vec模型来识别重复文章的,从线上运行的效果来看,它的准确率是比较高的。当然,这是建立在把所有的文章都当做训练数据来训练Doc2Vec模型的基础上的,它推断出一篇文章的向量之后再去做相似计算的效果是不太好的。况且,训练模型的耗时是比较长的,因此,这种模型的适用性只适合于离线计算文章之间的相似,并不适合实时识别重复文章,由于我们现在的文章内容接入了爬虫,量会比较大,tps也有所要求。因此,我们发现了google使用的另一个工具,它是用于网页去重的算法,即SimHash。

二、SimHash使用

    这部分内容我们只介绍SimHash的使用方法,而在后续章节后详细讨论它的原理。
    使用SimHash来做重复文章识别的步骤如下:

  1. 分词。将爬虫源的文章做过简单处理之后进行分词,加入权重
  2. hash。通过算法将每一个词计算它的hash值
  3. 加权。对上述hash值进行加权,按照第一步单词的权重
  4. 合并。将文章的所有单词加权后的值进行累加
  5. 降维。把上述合并的结果变为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个候选结果,大大减少了海明距离的计算成本

三、压测效果

  1. tps: 500+
  2. cpu
    这里写图片描述
  3. 内存
    这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解simhash原理

一、LSH 介绍 LSH(Locality sensitive hashing)是局部敏感性hashing,它与传统的hash是不同的。传统hash的目的是希望得到O(1)的查找性能,将原始数据映射到相应的桶内。 LSH的基本思想是将空间中原始数据相邻的2个数据点通过映…

IntelliJ IDEA tomcat配置

1,首先安装好 IntelliJ IDEA 开发工具 2,右上角这里有个 Edit Configurations 3,添加模板 选择本地安装的tomcat 和 选择jdk 4,添加tomcat 这里tomcat就安装好了

Think in Java之斐波那契数列

斐波纳契数列(Fibonacci Sequence),又称黄金分割数列。 指的是这样一个数列:1、1、2、3、5、8、13、21、……这个数列从第三项开始,每一项都等于前两项之和。 在数学上,斐波纳契数列以如下被以递归的方法定…

《论道HTML5》内容技术分享活动

HTML5小组的第12次活动,本期沙龙围绕5月出版的《论道HTML5》重点章节内容展开,由我和另外一位作者秀野堂主现场分享。欢迎大家参加,下面是活动的详细信息。活动介绍:时间:2012年04月21日 13:30-18:00地址:东…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中,我们经常会用到事件总线,SpringBoot通过事件多播器的形式为我们提供了一个事件总线,但是在开发中我们经常会用到其他的实现,比如Guava、Disruptor的。我们将基于Spri…

大数据技术之 Kafka (第 1 章 Kafka 概述)

第 1 章 Kafka 概述 1.1 定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 1.2 消息队列 1.2.1 传统消息队列的应用场景 MQ传统应用场景之异步处理 使用消息队列的好处 1&a…

那些你无比崇拜的厉害人,是如何建构知识体系的

那些你无比崇拜的厉害人,是如何建构知识体系的? 2018-04-04 六合同风 文 | Lachel 高效思维达人,知识管理专家,深度思考践行者,领英、36氪特约作家 来源 | L先生说(ID:lxianshengmiao&#x…

大数据技术之 Kafka (第 2 章 Kafka快速入门)

第 2 章 Kafka 快速入门 下载安装kafka集群 1.需要jdk 2.需要zookeeper,这个东西在最新版的Kafka中内置。 3.下载Kafka安装包 (下载官网地址:Apache Kafka) 一,下载Kafka安装包 二,Kafka安装包上传li…

使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器

本文转载:http://www.cnblogs.com/lefay/archive/2010/07/25/1784919.html转载于:https://www.cnblogs.com/51net/archive/2012/04/21/2462431.html

文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法

文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法 原文链接 原创: 鲍捷 文因互联 前天 做成一件事儿不容易,而坑恒在。 鲍捷博士于5月10日在将门创投的线上 talk 中盘点了人工智能项目的大坑小坑,选出了看上去非常反常识的十…

启动kafka失败报内存不足(Cannot allocate memory)

原因分析,因为我的虚拟机内存一共才1G 查看一下我的虚拟机内存还剩余多少? 天呐,我的只有60M了 我们看下kafka的启动脚本 vim kafka-server-start.sh 看见下面的脚本文件内容没有,默认是1G,而我只有60M&#xff0…

Introduce Null Object(引入Null对象)

Introduce Null Object(引入Null对象)你需要再三检查某对象是否为null。将null值替换为null对象。if (customer null) plan BillingPlan.basic(); else plan customer.getPlan(); 动机多态的最根本好处在于:你不必再向对象询问"你是…

zookeeper Error contacting service. It is probably not running

通过命令zkServer.sh start之后,显示STARTED 通过client测试报错 无法连接 连接关闭 Connecting to localhost:2181 2020-03-29 12:44:31,855 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.13-2d71af4dbe22557fda74f9a9b430…

引言

推荐系统从0到1_引言什么是推荐?什么是推荐系统?推荐系统的应用什么是推荐? 说起推荐,就不得不说搜索。搜索这里指信息检索,在大量的信息中,我们需要找到自己需要的信息,就用到了搜索引擎&…

JNI的方式调用DLL(SO)(上)

最近有个项目要调用原有的DLL文件,本来准备使用JNA,可是客户不同意,非要使用JNI的方式。万般无奈之下,只能重新使用JNI,现将JAVA调用动态链接库的一般方法总结如下。 JNI是Java Native Interface(JAVA本地调…

搭建推荐系统所需要的材料

搭建推荐系统所需要的材料人力物力推荐系统的原材料物品流量最后人力物力 在上一小节中《推荐系统的必要性》里已经讨论过一个推荐业务团队需要哪些人员储备,需要什么核心技术等。这里在重点说下物力,即机器资源设备。 往往从头开始搭建这样一个团队&a…

kafka:topic为什么要进行分区?副本机制是如何做的?

kafka为什么要在topic里加入分区的概念?如果没有分区,topic中的segment消息写满后,直接给订阅者不是也可以吗? Kafka可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中,只要如…

将某字符串切割成阵列并排序列出

老师布置的另外一道题是将字符串"a;b;d;z;y;u"切割成阵列并排序列出。老师出这题也许是让Insus.NET掌握或复习Array.Sort()函数,不管怎样,先按自己的想法实现,然后是等老师的意见。protected void Page_Load(object sender, EventA…

关于管理,这5大误区你越早知道越好

关于管理,这5大误区你越早知道越好 原创: 陈春花 管理的常识 绝大部分人都感觉自己已经非常努力地工作,但结果却不尽如人意,到底问题出在哪里? 就让北京大学国家发展研究院管理学教授、北大国发院BiMBA商学院院长陈春…