海量短文本场景下的去重算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
海量短文本场景下的去重算法 2021-03-22 最朴实的做法 在大多数情况下,大量的反复文本一般不会是什么好事情,比如相互抄袭的旧事,群发的垃圾短信,铺天盖地的广告文案等,这些都会形成网络内容的同质化并加重数据库的存储负担,更蹩脚的是降低了文本内容的质量。因而需要一种精确?????而高效率的文本去重算法。而最朴实的做法就是将全部文本进行两两比较,简约易理解,最符合人类的直觉,对于少量文原来说,实现起来也很便利,但是对于海量文原来说,这明显是行不通的,由于它的时间简单度是,针对亿级别的文本去重时,时间消耗可能就要以年为单位,此路不通。 另外,我们讲到去重,实际上暗含了两个方面的内容,第一是用什么方式去比较更为高效,其次是比较的时候去重标准是什么。这里的去重标准在文本事域来说,就是如何度量两个文本的相像性,通常包含编辑距离,Jaccard距离,cosine距离,欧氏距离,语义距离等等,在不同领域和场景下选用不同的相像性度量方法,这里不是本文的重点,所以按下不表,下面着重处理如何进行高效率比较的问题。 核心思想 降低时间简单度的关键: 尽力将潜在的相像文本聚合到一块,从而大大缩小需要比较的范围 simHash算法 海量文本去重算法里面,最为知名的就是simHash算法,是谷歌提出来的一套算法,并被应用到实际的网页去重中。 simHash算法的最大特点是:将文本映射为一个01串,并且相像文本之间得到的01串也是相像的,只在少数几个位置上的0和1不一样。为了表征原始文本的相像度,可以计算两个01串之间在多少个位置上不同,这便是汉明距离,用来表征simHash算法下两个文本之间的相像度,通常来说,越相像的文本,对应simHash映射得到的01串之间的汉明距离越小。 为了让这个过程更为清楚,这里举个简约的例子。 t1 = 妈妈喊你来吃饭 t2 = 妈妈叫你来吃饭 可以看到,上面这两个字符串虽然只要一个字不同,但是通过简约的Hash算法得到的hash值可能就完全不一样了,因而无法利用得到的hash值来表征原始文本的相像性。然而通过simHash算法的映射后,得到的simHash值便是如下这样: SH1 = 1000010010101101[1]1111110000010101101000[0]00111110000100101[1]001011 SH2 = 1000010010101101[0]1111110000010101101000[1]00111110000100101[0]001011 认真观看,上面的两个simHash值只要三个地方不一样(不一样的地方用[]标出),因而原始文本之间的汉明距离便是3。通常来说,用于相像文本检测中的汉明距离推断标准就是3,也就是说,当两个文本对应的simHash之间的汉明距离小于或等于3,则认为这两个文本为相像,假如是要去重的话,就只能留下其中一个。 simHash算法的去重过程思路很简约,首先有一个关键点: 假如相像文本推断标准为汉明距离3,在一个待去重语料集中存在两个相像文本,那也就是说这两个相像文本之间的汉明距离最大值为3(对应hash值最多有3个地方不同),假如simHash为64位,可以将这个64位的hash值从高位到低位,划分成四个连续的16位,那么这3个不同的位置最多只能填满4个中的任意3个区间(可以反过来想,假如这4个区间都填满了,那就变成汉明距离为4了)。也就是说两个相像文本必定在其中的一个连续16位上完全全都。 想明白了这个关键点之后,就可以对整个待去重文本都进行一次simHash映射(本文中使用64位举例),接着将这些01串从高位到低位均分成四段,依据上面的争辩,两个相像的文本肯定会有其中一段一样,仍用上面的例子,分成的四段如下所示: t1 = 妈妈喊你来吃饭 SH1 = 1000010010101101[1]1111110000010101101000[0]00111110000100101[1]001011 SH1_1 = 1000010010101101 #第一段 SH1_2 = [1]111111000001010 #其次段 SH1_3 = 1101000[0#第三段 SH1_4 = 000100101[1]001011 #第四段 t2 = 妈妈叫你来吃饭 SH2 = 1000010010101101[0]1111110000010101101000[1]00111110000100101[0]001011 SH2_1 = 1000010010101101 #第一段 SH2_2 = [0]111111000001010 #其次段 SH2_3 = 1101000[1#第三段 SH2_4 = 000100101[0]

文档评论(0)

duanbingbing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档