长文本去重缘起: (1)原创不易,互联网抄袭成风,不少原创内容在网上被抄来抄去,改来改去 (2)

缘起:算法

(1)原创不易,互联网抄袭成风,不少原创内容在网上被抄来抄去,改来改去运维

(2)百度的网页库很是大,爬虫如何判断一个新网页是否与网页库中已有的网页重复呢?函数

这是本文要讨论的问题(尽可能用你们都能马上明白的语言和示例表述)。优化

1、传统签名算法与文本完整性判断设计

问题抛出:排序

(1)运维上线一个bin文件,将文件分发到4台线上机器上,如何判断bin文件所有是一致的?md5

(2)用户A将消息msg发送给用户B,用户B如何判断收到的msg_t就是用户A发送的msg?hash

思路:it

一个字节一个字节的比对两个大文件或者大网页效率低,咱们能够用一个签名值(例如md5值)表明一个大文件,签名值相同则认为大文件相同(先不考虑冲突率)效率

回答:

(1)将bin文件取md5,将4台线上机器上的bin文件也取md5,若是5个md5值相同,说明一致

(2)用户A将msg以及消息的md5同时发送给用户B,用户B收到msg_t后也取md5,获得的值与用户A发送过来的md5值若是相同,则说明msg_t与msg相同

结论:md5是一种签名算法,经常使用来判断数据的完整性与一致性

md5设计原则:两个文本哪怕只有1个bit不一样,其md5签名值差异也会很是大,故它只适用于“完整性”check,不适用于“类似性”check。

新问题抛出:

有没有一种签名算法,若是文本很是类似,签名值也很是类似呢?

2、文本类似性的签名算法

上文提出的问题,能够用局部敏感哈希LSH(Locality Sensitive Hash)解决,局部敏感哈希是一类文本越类似,哈希值越类似的hash算法,有兴趣的同窗自行百度,这里分享一下minHash的思路。

问题的提出:什么是minHash?

回答:minHash是局部敏感哈希的一种,它经常使用来快速断定集合的类似性,也经常使用于检测网页的重复性,其思路为,用相同的规则抽取集合中的少部分元素表明整个集合,若是少部分元素的重合度很高,很是可能整个集合的重复度也很高。

举例:待断定的集合为A{1, 7, 5, 9, 3, 11, 15, 13}

已有的集合为:

B{10, 8, 2, 4, 6, 0, 1, 16},

C{100, 700, 500, 900, 300, 1100, 1500,1300},

D{1, 3, 2, 4, 6, 5, 8, 7}

假设使用部分元素代替全体集合的规则为:集合内元素进行排序,取值最小的4个(这个过程有信息损失,咱们能够认为是一个hash过程)

处理结果为:

A{1, 3, 5, 7}

B{0, 1, 2, 4} => A与B有1个元素相同

C{100, 300, 500, 700} => A与C有0个元素相同

D{1, 2, 3, 4} => A与D有2个元素相同

判断结论:咱们认为集合A与集合D是最类似的

这个例子有点2,但基本能说明总体思路,实际在执行的过程当中:

(1)咱们可使用更多的元素来表明集合,以提升准确性(例如,将上例中的4个元素表明集合升级为8个元素表明集合)

(2)咱们可使用更多的hash函数来表明集合,以提升准确性(例如,上例除了“排序后取值最小的4个元素表明集合”,还能够增长一个哈希函数“排序后取值最大的4个元素表明集合”)

(3)minHash能够量化评判类似度,亦能够评判网页是否重复(一个分类问题),设定类似度阈值,高于阈值为重复,低于阈值为不重复

(4)实际排重过程当中,网页库中的哈希值均可以提早计算,只有待断定的集合或者网页的哈希值须要临时计算

3、minHash与长文本重复度检测有什么关系

目前看来没什么关系,但若是咱们能将每个长文本用一个集合来表示,就能将长文本的类似度用minHash来解决了。

问题的提出:如何将长文本转化为集合?

回答:我去,分词不是就能够么

举例:待断定的长文本为A{我是58沈剑,我来自58到家}

已有网页库集合为:

B{我是一只来自58的狼}

C{58到家,服务到家}

D{这事和我不要紧,我是凑数的}

使用分词将上述文本集合化:

A{我,58,沈剑,来自,到家}

B{我,58,来自,狼}

C{58,服务,到家}

D{事,我,凑数,关系}

判断结论:当当当当,转化为集合后,能够快速判断A与B的类似度最高,固然实际执行过程当中,除了分词还得考虑词频,用这种方法对长文本进行类似度检测,准确率很是高(文本越长越准)

4、还有没有更有效的方法

使用上述方法进行文本类似度检测,须要进行中文分词,词频统计,哈希值计算,类似度计算,计算量微大。

然而,抄袭成风,一字不改的风气,让技术有了更广阔的优化空间,赞!

怎么优化呢?

再也不进行分词,而是进行“分句”,用标点符号把长文按照句子分开,使用N个句子集合(例如一篇文章中5条最长的句子做为签名,注意,长句子比短句子更具备区分性)做为文章的签名,在抄袭成风的互联网环境下,此法判断网页的重复度能大大下降工程复杂度,而且准确度也异常的高。

5、结论

在抄袭成风的互联网环境下,采用“分句”的方式,用5条最长的网页内容做为网页的签名,可以极大的下降排重系统复杂度,提升排重准确率,不失为一种好的选择。

相关文章
相关标签/搜索