Detecting Near-Duplicates for Web Crawling
ABSTRACT
在网页上有很多相似的文档。比如说,两篇文章只有在显示广告这一小部分是互不相同的。但这些不同的地方,对于网页搜索来说,是无关紧要的。因此,如果该网络爬虫技术可以评估最新抓取的网页与之前抓取的网页是否相似,那么它的“质量(类似..就是升级版!性能提升)”就会提升。
在开发一个在数百亿网页栈中检测相似文章的系统过程中,我们做了两项研究贡献。第一个,我们证明了Charikar的指纹识别技术是适用于这个目标的。第二个,我们提出了一个算法,用来识别现有的f-bit指纹f与给定指纹最多k位(小于k)的差别。我们的技术对于在线查询(单指纹)及批量查询(多指纹)都是有效的。通过真实的数据进行试验评估,验证了我们设计的实用性。
Categories andSubject Description
E.1 [Data Structures]: Distributed data structures;G.2.0 [Discrete Mathematics]: General; H.3.3 [Information Search andRetrieval]: Search process
General Terms
Algorithms
Keywords
Hamming-distance,near-duplicates,similarity,search,sketch,fingerprint,webcrawl,web document
1.INTRODUCTION
网络爬虫是搜索引擎基础设施中不可或缺的一部分。通用的爬虫技术所抓取的文档、链接包含各种各样的主题,而此篇论文中要说的爬虫技术是利用有针对性的知识对所抓取的网页进行限制使之与特定主题(所搜索的)相关。对于网络爬虫,这些问题(与传统爬虫技术相关的)比如说创新度及资源的有效使用都已经得到了解决。然而,在通常(以往传统的)的网络爬虫技术里,消除相似的网页文档这个问题并没有得到重视。
完全相同的文章(因为抄袭)通过标准(比较普通的、平常的)的校验技术非常容易被识别出来。一个更难的问题是识别相似的文章。(比如说)就内容而言,这两篇文章是完全一样的,但是在文档一个小部分里,比如说广告、计数器、时间表示方式(比如:Greenwich时间与西安时间)等有所不同。这些不同对于网络搜索是无关紧要的。所以,如果最近所抓取的网页与已经抓取的网页P被认为相似,那么这个爬虫引擎就应该忽略掉与P相似的网页以及与该网页的所有外部链接(直觉表明,这些外部链接可能是从网页P来的)。消除这些相似的网页(爬取时)可以节省网络带宽,减少内存消耗并且可以提高搜索索引的质量(性能?我觉得这个更合适吧,可能)。也可以降低服务于这个网页所在的远程主机的负载。
一个检测相似文档的系统面临着一系列的挑战。第一个并且最重要的是规模的问题:搜索引擎索引着十亿多网页;这个数量相当于多个TB数据库。第二个,这个爬虫引擎应该能够每天爬取数十亿网页。所以,将一个最新爬取的网页与(数据库)已存在的网页标记为相似,这个决定应该迅速做出。系统应该使用尽可能少的机器。
Ourcontribution:
A.我们证明Charikar的Simhash算法在数十亿的网页中识别相似文档是非常切实有用的。Simhash是一种指纹识别技术,它与识别相似指纹(指纹识别技术)的属性在位级上有所不同(指纹识别所需更少)。我们在实验中验证得出,在8KB大小的网页库中,64kb的simhash指纹且k=3最为合适。
B.我们提出了一种技术用来解决Hamming Distance的问题:在f-bit指纹的集合中,快速找出与给定指纹在至多k个比特位的比较上不同的指纹,其中k是一个小的整数。我们的技术对于在线查询(单指纹)与批量查询(多指纹)来说是非常有用的。
C.我们提出了一个关于重复检测的算法与技术的概观;
Road-map: In §2, we discuss simhash. In §3, we present a technique fortackling the Hamming Distance Problem. In §4, we present experimental results.In §5, we present a survey of duplicate-detection techniques.
2.FINGERPRINTINGWITH SIMHASH
Charikar的simhash算法是一种降维的技术。它将一个高维向量映射成小型指纹。它将被应用到网页上如下步骤:第一,我们将一个网页转换成一组的特征值,每一个特征记录它的权重。特征值计算利用标准IR技术,比如说符号化、大写转换、停用词去除、短语检测。一组加权特征的特征值由一个高维向量与每个独立的一维特征向量在所有被符号化的文档里。使用simhash算法,我们可以将一个高维向量转换成一个f-bit指纹的值,其中f很小,取f=64.
Computation:给出一系列从文档中及他们相对应的权重中提取的特征,我们用simhash算法生成一个f-bit指纹如下。初始化一个f维向量v,其中每一个元素的初始值为0。一个特征散列到f-bit的hash值上。这些f-bit(独有特征)增加/减少由向量v的权值所组成的f,特征如下:如果第i位的hash值为1,则向量v的第i维加上这个特征权值;如果dii位的hash值为0,则向量v的第i维减上这个特征权值。当所有特征都被处理完毕,v有正值与负值组成。这些标记最终确定相应的指纹的值。
Empirical results:在我们的系统中,我们使用了原始C++来实现simhash,由MosesCharikar完成。在2004~2005年,伴随着我们系统的开发,Monika Henzinger进行了一项研究,关于比较Broder的shingle-based指纹算法与simhash算法。在他俩对比中,优秀的方法比较出来了,Henzinger发现的。一个使用simhash算法相对于shingle算法的好处是它需要相对更小(空间)的指纹。比如说,Broder的shingle-based指纹算法每个指纹需要24个字节(它要检验2个或2个以上不超过6个的Robin指纹是否相同)。但是在8B的网页中,使用simhash算法,64bit指纹足矣;我们在实验4中可以证明。
Properties of simhash:需要注意的是Simhash的2个有冲突的性能:(A)一个文档通过Hash的方式生成一个指纹特征,(B)相似的文档具有相似的hash值。后者(B性能)的性质是典型的hash函数。举个栗子,研究2个在一个单字节上有所不同的2篇文档。然后加密的hash函数(像是SHA-1、MD5这些)会将这2篇文档散列到不同的hash值上(hash值之间的Hamming Distance会变大)。然而,simhash算法会将其散列到更小的hash值上(同理,这两个hash值之间的Hamming Distance更小)。
所设计的近相似检测系统是基于simhash技术的基础上,其中有一点是处理了simhash所描述的(设计?)精巧有趣。我们所采用的战略如下:我们假设我们所设计的算法性质A持有,即,这些指纹是随机均匀分布的,并且我们利用真实数据集通过实验测量性质B的非均匀性影响。
在将文档转换成simhash指纹之后,我们面临如下设计问题:给定一个已经爬取过的网页的64-bit指纹,我们如何快速找出与给定指纹在3位(<=3)以内不同的指纹呢(按照Charikar在paper中阐述的,64位simhash,海明距离在3以内的文本都可以认为是近重复文本)?我们在下一个环节解决了这个问题。
3.THE HAMMINGDISTANCE PROBLEM
Definition:给定一个f-bit的指纹集合及一个待查询指纹F,如何在已有的指纹集合中找出与指纹F至多k位的不同。(在批处理的模式版本中,我们用的是一组待查询指纹而不是单个待查询指纹)。
作为上述一个具体的实例,考略到8B的64-bit指纹的集合占用64GB。在在线版本的问题中,对于一个待查询指纹F,我们必须在几毫秒的时间内查明所存在的8B64-bit的指纹集合中是否存在与给定指纹F有至多k=3位不同的指纹。
在批量查询版本下的问题是,我们有一个集合,就是说,1M的待查询指纹(而不是一个单独的查询指纹F),并且,我们必须在大概100秒内解决同样的问题对于所有的1M大小的待查询指纹。这将达到每天约1M查询的吞吐量。
让我们考虑一下用这两种头脑简单单不切实际的方法去探索空间。一种方法是建立一个存储所有现有指纹的排序表。给定指纹F,我们需要建立这样一个表,在这表中的每个F’与F的Hamming Distance不超过K位。这个probe(查找待查询文本的64位simhash code的所有3位以内变化的组合,大约需要四万多次的查询,其中probes我猜测是就是相当于与意见排列组合好的那些组合进行匹配的那个成为probe吧,大概就是查询次数了)的总数大的令人望而却步:对于64-bit的指纹且k=3,我们需要大约41664次的查找。另一种方法是提前计算好所有这样的F’,所有与Hamming Distribute的距离不超过K的排列组合。在这种方法中,所有提前计算好的指纹数量是非常庞大的:它是原始指纹数量的41661倍。
现在,我们开发出了一种切实可行的算法,它介于上述两种方法之间:解决这个问题需要很少的probes是很有可能的,它可以通过一个小因子检测重复的指纹表。
Intuition:考虑到有2^d f-bit中随机组合的指纹排序表。只关注表中最重要的d 位。这些d-bit数字就是“近乎一个计数器”的意义。在2个方面体现:(a)存在不少于2^d种组合;(b)在高d-bit组合中只有很少个是重复的。另一方面,至少重要的f-d bits是“近乎随机的”。
现在选择d’使得|d-d’|是一个非常小的整数。因为表是已经排好序的,所以单次probe(一趟搜索)足以识别出所有与给定F匹配在d’关键位(高d’位)相同的指纹。因为|d-d’|非常小,所有与之匹配的集合f’的预期也是非常小的。对于每一个匹配的指纹,我们可以很容易断定它是否与F有着至多K位的不同(这些差异自然会被f-d’的关键位限制)。
上述过程描述了帮助我们发现与给定F在kbit位上不同的指纹,这些指纹至少应被其中f-d’的关键位所限制。这需要照顾相当数量的情况。要覆盖所有的情况,那必须足够建立一个小的额外排序表,正式概述将会在下一章节里。
3.1 Algorithm for Ouline Queries
我们建立t张表:T1,T2,T3,…,Tt。余表Ti相关的有2个量:一个是整数pi,另一个是置换过f-bit位的πi。表Ti是由置换函数πi置换成现有指纹而构造的;置换好的这一串f-bit指纹排好序。此外,每一张表都会
被压缩(见§3.2)且在主存中排好序成一系列的机器码。给定指纹F还有一个整数k,我们来探讨一下这些并行的表:
Step1:识别所有在Ti中进行匹配后其前pi位与F经过π(i)置换后的前pi位相同的指纹。
Step2:对于每个
翻译太渣渣,欢迎纠错
(持续更新ing)
(持续更新ing)
PS:原文在这里~
Detecting Near-Duplicates for Web Crawling(Paper)
Detecting Near-Duplicates for Web Crawling相关推荐
- Web Crawling and Data Analysis (Dyson V8 Vacuum Review data)
Acknowledgement This work note is for study use only, and not allowed to be reposted or be used for ...
- Web Crawling and Data Miniing with Apache Nutch(翻译+学习心得)_01
笨小葱会在这两个月翻译完这本传说中的418元一本的神作.0.0.由于英语很烂,只能说个笨小葱理解的大概意思,很多地方翻译不到位请各位大拿指出,我会及时更正的.请多多包涵0.0 Preface Apac ...
- Magento: 判断是否为手机浏览 Optimise Web's Mobile Detect Class for Magento
项目地址:Optimise Web's Mobile Detect Class for Magento Optimise Web's Mobile Detect Class for Magento M ...
- 网络信息检索(三)Web信息搜集
文章目录 一.Web简介 1.Web三要素 (1)HTML的基本结构 (2)资源标识符 (3)传输协议HTTP/HTTPS (i)常用方法 (ii)HTTP响应状态码 2.Web文档 3.入度和出度 ...
- pbewithmd5anddes算法 对应.net_文本相似度算法之-simhash
文本相似度算法种类繁多,今天先介绍一种常见的网页去重算法Simhash. 1.什么是simhash simhash是google于2007年发布的一篇论文<Detecting Near-dupl ...
- Simhash 网页重复
Simhash 传统IR领域内文本相似度比较所采用的经典方法是文本相似度的向量夹角余弦,其主要思想是根据一个文章中出现词的词频构成一个向量,然后计算两篇文章对应向量的向量夹角.但由于有可能一个文章的特 ...
- 局部敏感哈希Locality Sensitive Hashing归总
最近发邮件讨论Semantic Hashing的同学和同事很多,推荐李老师的文献列表供大家参阅:http://cs.nju.edu.cn/lwj/L2H.html 说到Hash,大家都很熟悉,是一种典 ...
- 机器学习中的相似性度量 (转)
在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的"距离"(Distance).采用什么样的方法计算 ...
- 转:6.1海量数据处理
本文转自看云,原文地址请移步:https://www.kancloud.cn/kancloud/the-art-of-programming/41608 偶然闲游,偶遇某一站点,发现这里写的关于海量数 ...
最新文章
- LaunchScreen.xib 设置启动图
- mySQL5.5服务配置_配置mysql5.5主从服务器(转)
- 以下可以采用python语言保留字的是-以下哪个选项不是Python语言的保留字?_学小易找答案...
- BTree C 语言实例
- 在lips追加拣配数量
- 如何实现把固定内容自动写入excel_Excel如何把修改记录自动写入批注?
- 感知机模型的对偶形式[转载]
- rasa算法_(十八)基于RASA开始中文机器人实现机制
- 了解PHP中$_SERVER变量对路径的解析
- python3的spyder安装_Python开发环境Spyder安装教程
- 玩转 ESP32 + Arduino (十八) 采用SIM800L发送短信和定位(基础知识)
- 数模-改进AHP算法
- php处理excel里面的重复数据,Excel导入时,跳过重复数据,并提示重复数据数量与明细...
- AutoLine源码之RobotFramework运行器
- LeetCode——自除数
- 3D人脸查看器和匹配器
- 轩色混凝土怎么设置虚拟服务器,混凝土色差调整处理怎么使用
- 惠普电脑synatics触摸板驱动下载
- c语言visit函数作用,[求助]二叉树遍历的程序里面的visit函数如何实现
- 超全的回文题汇总-Palindrome
热门文章
- 微耕门禁、Monitor监控等设备的二次开发
- 被跟卖了怎么投诉?亚马逊邮箱官方邮件联系方式汇总
- 持续学习常用网站汇总记录(持续更新)
- a股历史行情下载怎么下Excel?如何下载a股历史行情走势数据?
- 周志明《凤凰架构 FENIX Architecture》阅读笔记
- 2018icpc青岛Books 思维
- 河海大学李轶团队揭示河流交汇特性决定了汇流水动力区微生物群落对河网的影响
- PowerBuilder 引入外部pbd、pbl(GetLibrarylist、SetLibraryList函数)
- 像素坐标系、图像坐标系、相机坐标系和世界坐标系的关系(简单易懂版)
- 画个球啊(下)——Three.js渲染素描风格场景