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)



 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值