2017年第7期 文章编号:1006-2475(2017)07-0038-04 计算机与现代化 JISUANJI YU XIANDAIHUA 总第263期 基于Simhash的大数据去重改进算法 周春晖 (上海交通大学软件学院,上海201100) 摘要:数据去重是大数据预处理过程中最主要的一个步骤。为了提升大数据去重的效率,以及优化其在较差情况下的表 现,本文以中文微博的原始数据为基础,在传统的Simhash方法的基础上,改进计算相似度的公式,将文本重复率纳入考 虑,并在检索步骤中采用桶排序的思想,进行多次多级的线程分配以提高效率。实验结果表明,改进后的算法可以显著 提升传统算法的效率和准确率。 关键词:微博;大数据;去重;Simhash;多线程 中图分类号:TP311 文献标识码:A doi:10.3969/j.issn.1006—2475.2017.07.007 A Big Data Deduplication Algorithm Based on Simhash ZH0U Chun.hui (School of Software,Shanghai Jiao Tong University,Shanghai 201100,China) Abstract:Data deduplication is a main step in big data preprocess.To improve eficifency in deduplication and optimize perform- ance in terrible condition of classic algorithm,this paper USeS Chinese text data of mieroblog and modifies formula of calculating similarity based on classic Simhash algorithm.Duplication rate iS considered in the advanced formula,besides,this paper draws on the experience of bucket so ̄ing,distributes threads for several times and levels to improve eficiency.The resultf of experiment shows that advanced algorithm can reduce running time and improve accuracy compared with classic algorithm. Key words:microblog;big data;deduplication;Simhash;muhi—thread 0 引 言 一会发生很大的变化 J,这显然并不适合比对2个文 本之问的相似程度。 Simhash算法主要分为2个步骤。 ,海量数据处理是当今网络环境下重要的课题之 而数据去重则是数据处理的第一步。网络爬虫每 天能在网络上抓取数以百万计的数据,而其中有相当 一1)Hash值的计算。通过每条数据的特征值(词 组)的Hash值,确定一条数据的Simhash值,最终得 到的指纹将是一个32位的二进制串。 部分是重复的,重复的数据不仅会对数据分析处理 的速度产生影响,也会在一定程度上影响准确性,因 2)在计算出每条的Simhash值后对Simhash值的 此进行数据去重是一个必要的工作。目前数据去重 的主要方法有Simhash、Minhash和Bitmap等算 法¨引。本文就Simhash的去重方法进行研究,针对 原始数据的特性以及中文的特点在距离计算和检索 对比检索,通常使用海明距离 进行对比。 然而在海量数据的基础上,不可能逐个进行对 比,因此需要采用一定的方法优化。以32位数据搜 寻海明距离3以内的为例,将原始数据复制为4份, 对于第1份数据,任意一条数据只精确匹配1~8位 相同的数据进行海明距离计算,对于第2份数据,任 意一条数据只精确匹配9~16位相同的数据进行海 明距离计算,以此类推,以减少海明距离的计算次数 来节省时间。根据抽屉原理,所有的海明距离不大于 3的数据都可以被找到。这种方法将32位分为了4 个区间,如果有必要,可以将每个区间再分为4个小 步骤上进行改进,提高算法运行的效率和准确性。 1传统的Simhash算法 Simhash算法的初衷是让相似的文本得出的 Hash值也是相似的。传统的加密式Hash算法比如 MD5,其设计的目的是为了让整个Hash值分布尽可 能均匀,输入的内容哪怕只有轻微的变化,Hash值就 收稿日期:2016一l1—21 作者简介:周春晖(1992-),男,江苏常州人,上海交通大学软件学院硕士研究生,研究方向:分布式计算,云计算。 2017年第7期 周春晖:基于Simhash的大数据去重改进算法 39 区间,即复制为l6份数据,第1份比对1~8位、9~ 14位都相同的,第2份比对1~8位、16~21位都相 同的,以此类推。 2原始数据的特征 原始数据来自于中文的微博数据,微博的典型特 征是内容充实但是文本简短。微博的原始数据需要 经过一定的处理,比如表情、url链接、@他人的标记, 去掉这些可以使得数据更加整齐。另外还有转发的 部分也是可以删除的,比如有一条微博“今天是晴 天”和另一条被转发过的“今天是晴天.//A:xxx//B: XXX”,显然这2条微博的语义和内容都是完全一样 的,去除转发的部分可以使得它们能够更容易被识 别。更多的数据特征将在后面进行说明。 中文的特点是需要进行分词,不像英文可以直接 以单词作为计算Hash值的单位,中文需要将句子分 解为词组而不是单个的字,这样才有一定的语义。虽 然说两两分词也是可以的,但是准确的分词不仅可以 去除停止词,也可以提高Simhash值作为特征值的准 确性。另一方面也可以直接作为情感分析等后续操 作的材料。在实验中本文采用的是Lucene下的IKA— nalyzer,中文的分词器都不是特别令人满意,但是也 基本能够满足要求。中文分词通常分成2~3个字 符,在计算Hash值时,生成的Hash值比较短,大多数 不满32位,如果不进行处理,第1份数据复制的处理 会精确匹配到大量的数据,造成效率上的影响。因此 本文在实验过程中将每个词组的Hash值的l7~32 位与1—16位做或操作覆盖在1~16位上,以使得生 成的Simhash值更加均匀。 3改进Simhash算法 3.1 Simhash距离优化 在传统的Simhash去重算法中,判断数据是否重 复主要通过计算海明距离,但是由于其本身的特性会 出现即使2条数据完全不相关,海明距离也会比较小 的情况。通过观察微博数据可以发现,其本身的内容 倾向于短小精悍,不经常使用修饰词,即如果2条数 据是相似的,那么其在文本内容上必然有相当程度的 重复。本文先定义2条数据的重复率: dup(A, 等糟 器 (1) 公式(1)中,tok(A)、tok(B)分别表示A、B这2 条数据在分词后的集合,重复率定义为这2个集合之 间重复的词组数和总共包括的词组数的比值。其中 一个集合自身内的词组重复不记为重复。 综合考虑海明距离和重复率,对于2条数据的相 似率做如下定义: 1 Sim(A,B) 丽 KDup(A,B)(2) 公式(2)中K为参数,取值一般在2~8之间。 有了相似率的定义后,还需要设定一个阈值来判 断数据是否相似,由于数据集类型的不同,应该根据 测试数据的实际效果来定义这个阈值,但是一般的建 议是不低于1+0.2K,也就是即使海明距离为0的情 况下依然需要有20%的重复率来确认这2段文本是 相似的,而在海明距离更大时则需要更高的重复率。 在重复率很高时即使海明距离较大也无关紧要。 3.2 Simhash值检索优化 在改进了判断相似文本的公式后,本文最主要的 工作是改进相似文本检索的算法。对于传统的Sim— hash值检索,每读取一条数据,需要比对所有的数据 来寻找某8,f ̄/12位相同的再进行相似度的计算,在 检索大量数据时这个比对数量是很庞大的。因此本 文提出在检索之前采用类似于桶排序的方法,先将需 要确认重复的8位作为256个“桶”,将所有的数据 归类在256个组中,那么在检索时可以跳过比较是否 重复的阶段,直接进行相似度的计算,这样可以节省 大量的时间。另外在实验中发现,很少出现A和B 相似、B和C相似而A和C不相似的情况,因此可以 在检索时直接删除比对中重复的数据,也可以提高检 索的效率。 这种检索方法和传统的Simhash检索都面临的 一个问题是,如果Simhash值分布得不均匀,运行时 间就会很长。虽然之前处理过Hash值的结果可以尽 量避免这个问题,但是总会出现这样的情况。在计算 海明距离不大于3的前提下,传统的Simhash检索的 方法是将原数据集拷贝从4份增加到16份,比对的 值更多,那么结果就更均匀。显然本文提出的方法不 会直接复制这种操作,把组增加到8192个。本文对 此的解决方法是查看桶排序后各个组内的数据数量, 如果出现分布不均匀的情况,则对于数量超多的一组 或多组,再进行另一次24位的检索操作。详细步骤 如下: 1)对于任意一个数据集拷贝,检视256个组内的 数据数量,如果有分布不均匀,则剔除数量最多的一 个或若干个组。不均匀的判断方式有2种:①计算 256个数的方差,方差大于阈值则视为不均匀,再剔 除Topl或者Top2;②直接将占总数超过一定百分比 的组剔除,实际采用的是这种比较简易的方法,使用 的百分比是50%,这就保证了一个检索线程只会产 生一个被剔除的组进行进一步的计算,可以比较好地 计算机与现代化 2017年第7期 控制线程的数量。 2)计算这个数据集拷贝在剔除一个组之后剩下 的数据的相似度比较结果,作为这份拷贝的结果。 3)对于被剔除的组,对剩下的位数再次做4份拷 贝(因为有若干位都相同不需要参与计算),每份拷 贝再分为k组: r 2 L J i:0,l,2 i x3 i=3 公式(3)中,n表示总位数,i表示4份拷贝的编 号。举例来说,如果要对一个l8位的数据做此操作, 则第1份数据拷贝根据前4位分为16组,第2份根 据5~8位分为l6组,第3份根据9—12位分为16 组,第4份根据最后6位分为64组。然后再回到第1 步做类似的计算。 4)终止条件。任意一份拷贝的终止条件有3种: ①没有任意一个组的百分比超过50%。②这份拷贝 的剩余位数小于8,且其中最大组的数据量占原始数 据量的一定百分比以下。剩余位数就是这份拷贝的 总位数减去分组的位数。设定这个终止条件的原因 O 豁 5 × × 是一旦剩余位数小于8且需要进行下一轮操作,那么 在下一次的4份拷贝中至少会有一份只有2组,则必 然会再需要进行下一轮操作,以此类推。这样重复的 多轮操作不仅意义有限,还有可能造成线程数的迅速 膨胀,对于算法整体的效率造成影响,因此如果数据 的绝对数量可以接受,则直接进行计算而不剔除超过 50%的一组。③在不满足第2种的情况下,剩余位数 不大于3,这很明显只能计算一组中所有的数据之间 的海明距离。 与传统算法对比,本算法的一个优点:如果原始 数据出现大量位数相同的情况,那么在传统的Sim. hash算法中会有若干个线程的执行时间显著地高于 其他线程,而在本算法中可以通过多次分配数据,添 加新的线程或者分配新任务到已经完成任务的线程 上,使得各线程的执行时间更加平均,各线程单次任 务的平均时间缩短使线程的分配更加灵活。 4实验结果与分析 为了检验本算法的有效性和效率,并与传统的算 法进行比较,采用一定数量的微博数据作为输入进行 验证。由于主要目的是对比,因此采用单机进行实 验,数据量取在20万条以内,数据平均的长度在20 汉字左右。 实验环境: CPU:Intel@Xeon@CPU E3.1231 v3@3.40 CH 内存:8 GB 操作系统:64 bit Windows7 需要说明的是,由于Intel现在的CPU采用了超 线程技术,因此在本次实验中不论是传统的Simhash 算法还是改进后的算法,都不会由于线程数过多而产 生CPU的瓶颈。 一传统Simhash 圈改进方法 一L 图 5O000 1O0O00 2OO00O 图1比对次数统计 250o 2000 1500 一传统Simhash 晕1000 豳改进方法 5o0 0 一_嘲 霾 50000 l00000 2000O0 图2运行时间统计 图1展示了传统方法与改进后方法的总比较次 数差异,传统的方法由于需要逐个比对,除去之前提 到的小优化,其总的比较次数是相当高的。而对比图 2总运行时间可以明显看出,传统方法中即使是比较 一定位数的相同而不计算海明距离也是非常消耗时 间的。但是改进后方法对于时间的提升并没有比较 次数那么显著,一方面说明海明距离的计算还是占主 要的时间消耗,另一方面线程池的控制和数据分组也 会占用一部分的时间。 1O0% 80% 60% 传统Simhash 40% 传统Simhash(=0) 20% O% 改进方法 5 ̄)00 lI H HHIU 2L)【J【儿JO 图3准确率统计 图3展示了改进后的相似率计算方法在准确率 上的表现。因为无法统计原数据中重复的数据量,因 此对于每一种方法随机取出200对重复的数据,通过 人工检查得出每一种方法的准确率。其中方法二是 传统的Simhash方法并限定在海明距离为0的情况。 通过图表可以看出,传统方法在处理中文数据时会误 判大量的数据,即使海明距离设定为0也是如此,而 改进后的方法对于准确率有很大的提高。在准确率 得到提升的同时,召回率显然会有所下降,但是改进 后方法得到的重复数据数量大约是传统方法的 2017年第7期 周春晖:基于Simhash的大数据去重改进算法 [5] Ng W K,Wen Yonggang,Zhu Huafei.Private data dedu— 40%,结合准确率来看召回率的下降应该是在可以接 受的范围内。另外,在实际的用途中,去重后的数据 将用来进行数据分析,保留少量的重复数据比删除不 重复的数据要更加合理。 plication pmtocols in cloud storage[C 3//ACM Symposium on Applied Computing.2012:441—446. [6] Issa N T,Byers S W,Dakshanamurthy S.Big data:The next frontier for innovation in therapeutics and healtheare 5 结束语 本文基于中文微博数据对传统的Simhash去重 算法进行了改进,提出了考虑文本重复率计算文本相 似度的方法,以及利用桶排序和多次多级线程分配检 索相似Simhash值的方法。该方法比较周全地考虑了 数据的分布规律以及可能发生的较差情况。实验结果 [J].Expert Review of Clinical Pharmacology,2014,7 (3):293. [7] 周玉坤,冯丹,夏文,等.面向数据去重的基于二次哈希 的收敛加密策略[J].计算机工程与科学,2016,38 (9):1755—1762. [8] 杨天明,吴海涛.一种批处理块级数据去重方法[J].计算机应用与软件,2016,33(5):4446. [9] 罗恩韬,王国军,李超良.大数据环境中多维数据去重 表明,本文的算法明显提高了Simhash算法整体的效 率和准确率,为数据的进一步分析提供了良好的基 础。 参考文献: 的聚类算法研究[J].小型微型计算机系统,2016(3): 438.442. [1O] 武晓岩,李康.基因表达数据判别分析的随机森林方法 [J].中国卫生统计,2006,23(12):491. Yu Yuan,Isard M,Fetterly D,et 1.Drayad LINQ:A sys・ tem for general--purpose distributed data・・parllael computing [1]Storer M W,Greenan K,Long D D E,et a1.Secure data de— duplication[c]//ACM Workshop on Storage Security&Sur- vivability.2O08:1—10. using a high—level lnguaage[C]//Proceedings of the 8th USENIX Conference on Operating System Design and Im— plementafion.2008:1—14. [2] Meister D,Brinkmann A.Multi—level comparison of data deduplication in a backup scenal ̄o[C]//Proceedings of SYSTOR 2009:The Israeli Experimental Systems Confer- ence.2009:I一12. A,et a1.Statistical prop— [12] Leskovec J,Lang K J,Dasgupterties of community structure in large socil and inaformation networks[c]//Proceedings of the 17th International Con— ference on World Wide Web.2008:695-704. [3] Ramaswamy S,Rastogi R,Shim K.Efifcient algorithms for mining outliers from large data sets[J].ACM Sigmod Re- cord,2000,29(2):427-438. [4] Charikar M S.Similaritv estimation techniques from roun. Sergey B,Larry P.The anatomy of a lrge—scalae hypertex— [13] tual Web search engine[J].Computer Networks and ISDN Systems,1998,30(17):107—117. ding algorithms[C]//The 34th ACM Symposium on Theo— ry of Computing.2002:380-388. ◆Il◆-●1◆-…●◆-● (上接第37页) l9 l Dumitru C.Detecting software vulnerabilities static taint a. ACM,1990,33(12):32-44. Ganesh V,Dill D L.A decision procedure for bit・vectors [15] nalysis[D].Bucharest:University Politehnica of Bucha- rest,2009. nd aarrays[c]//International Conference on Computer Ai— ded Verification.2007:519-531. [10]Nethercote N,Walsh R,Fitzhardinge J.Building workload characterization tools with valgrind『C]//2006 IEEE In. ternational Symposium on Workload Characterization.2006:2. nmley D,Jager I,Avgerinos T,et a1.BAP:A binary a・ [16] Brnalysis platform[C]//Proceedings of the Conference on Computer Aided Veriifcation.201 1:463-469. [11]King J C.Symbolic execution and program testing[J]. Communications of the ACM,1976,19(7):385-394. Brnmley D,Jager I,Schwartz E J,et a1.The BAP Hand— [17] book[EB/OL].http://bap.ece.cmu.edu/doe/bap.pdf, 2009-07.10. roid P,Levin M Y,Molnar D A.Automated white- [18] Godef[12]姚伟平,王震宇,刘建林,等.二进制代码覆盖率评估系 统的设计与实现[J].计算机工程与设计,2011,31 (24):5262-5264. box fuzz testing[C]//Network and Distirbuted System Se— curity Symposium.2008:151-166. a1.Pin:Building custom— [19] Luk C K,Cohn R,Muth R,etized program analysis tools with dynamic instrumentation [13]Kinder J,Veith H.Jakstab:A static analysis platform for binaries[C]//Proceeding of the 20th International Confer・ ence on Computer Aided Verification.2008:423-427. [14]Miller B P,Fredriksen L,So B.An empiircal study ofthe reliability of UNIX utilities f J].Communications of the [C]//ACM SIGPLAN Notices.2005,40(6):190-200.