- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
⽂本指纹算法和内容指纹系统介绍
1. ⽂本指纹介绍
Web⼤量上的⽹页集合⾥存在⼤量的重 内容⽹页,⽆论对于搜索引擎的⽹页去重和过滤、新闻⼩说等内容⽹站的内容反盗版和追踪、还是
社交媒体等⽂本去重和聚类,都需要对⽹页或者⽂本进⾏去重和过滤。
最简单的⽂本相似性计算⽅法可以利⽤空间向量模型,计算分词后的⽂本的特征向量的相似性,这种⽅法存在效率的严重弊端,⽆法针对海
量的⽂本进⾏两两的相似性判断。模仿⽣物学指纹的特点,对每个⽂本构造⼀个指纹,来作为该⽂本的标识,从形式上来看指纹⼀般为固定
长度较短的字符串,相同指纹的⽂本可以认为是相同⽂本。
最简单的指纹构造⽅式就是计算⽂本的md5或者sha哈希值,除⾮输⼊相同的⽂本,否则会发⽣ “雪崩效应”,极⼩的⽂本差异通过md5或
者sha计算出来的指纹就会不同 (发⽣冲撞的概率极低),那么对于稍加改动的⽂本,计算出来的指纹也是不⼀样。
因此,⼀个好的指纹应该具备如下特点 :
1. 指纹是确定性的,相同的⽂本的指纹是相同的;
2. 指纹越相似,⽂本相似性就越⾼;
3. 指纹⽣成和匹配效率⾼。
业界关于⽂本指纹去重的算法众多,如k-shingle算法、google提出的simhash算法、Minhash算法、top k最长句⼦签名算法等等,本⽂
接下来将简单介绍各个算法以及指纹系统的基本架构和思路。
2. 常⽤的指纹算法
2.1 k-shingle算法
shingle在英⽂中表⽰相互覆盖的⽡⽚。对于⼀段⽂本,分词向量为[w 1,w2, w3, w4, … wn] , 设k=3,那么该⽂本的shingle向量表⽰为
[(w 1,w2,w3),(w2,w3,w4), (w3,w4,w5), …… (wn-2,wn- 1,wn)] ,计算两个⽂本的shingle向量的相似度 (j arccard系数)来判断⽂本是否
重 。由于k-shingle算法的shingle向量空间巨⼤ (特别是k特别⼤时),相⽐vsm更加耗费资源,⼀般业界很少采⽤这类算法。
2.2 Simhash算法
Simhash是google⽤来处理海量⽂本去重的算法,同时也是⼀种基于LSH(localitysensitive hashing)的算法。简答来说,和md5和sha
哈希算法所不同,局部敏感哈希可以将相似的字符串hash得到相似的hash值,使得相似项会⽐不相似项更可能的hash到⼀个桶中,hash
到同⼀个桶中的⽂档间成为候选对。这样就可以以接近线性的时间去解决相似性判断和去重问题。
simhash算法通过计算每个特征 (关键词)的哈希值,并最终合并成⼀个特征值即指纹。
simhash算法流程
1. ⾸先基于传统的IR⽅法,将⽂章转换为⼀组加权的特征值构成的向量。
2. 初始化⼀个f维的向量V ,其中每⼀个元素初始值为0。
3. 对于⽂章的特征向量集中的每⼀个特征,做如下计算 :
a) 利⽤传统的hash算法映射到⼀个f-bit (⼀般设成32位或者64位)的签名。对于这个f- bit的签名,如果签名的第i位上为 1,则对向
量V 中第i维加上这个特征的权值,否则对向量的第i维减去该特征的权值 ;
b) 整个特征向量集合迭代上述运算后,根据V 中每⼀维向量的符号来确定⽣成的f-bit指纹的值,如果V的第i维为正数,则⽣成f-bit指纹
的第i维为 1,否则为0。
图1 simhash算法⽰意图
Simhash指纹匹配过程
经过simhash指纹⽣成算法⽣成的指纹是⼀个f位的⼆进制字符串,如⼀个32位的指
纹, ‘10 100110 10 1000 110 110 11’。对于两个⽂本的f位0- 1字符串,simhash算法采⽤hammingdistance来计算两
个指纹之间的相似度,但是对于海量⽂本,如何从千万级别 (甚⾄更多)的指纹集合中,找出最多只有k位不同的指纹呢?
⼀个简单的思想就是以空间换时间,对于⼀个32位的指纹来说,将该指纹划分成4段,即4个区间,每个区间8位,如果两个指纹⾄多存在
3 (设k=3)位差异,那么⾄少有⼀段的8位是完全相同的,因此可以考虑利⽤分段来建⽴索引,来减少需要匹配的候选指纹数量。
Simhash指纹匹配算法
1. ⾸先对于指纹集合Q构建多个表T 1,T2…Tt,每⼀个表都是采⽤对应的置换函数 π(i)将
原创力文档


文档评论(0)