2016-01-19 58沈剑 架构师之路

缘起:

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

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

这是本文要讨论的问题(尽量用大家都能立刻明白的语言和示例表述)。

一、传统签名算法与文本完整性判断

问题抛出

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

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

思路

一个字节一个字节的比对两个大文件或者大网页效率低,我们可以用一个签名值(例如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。

新问题抛出

有没有一种签名算法,如果文本非常相似,签名值也非常相似呢?

二、文本相似性的签名算法

上文提出的问题,可以用局部敏感哈希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)实际排重过程中,网页库中的哈希值都可以提前计算,只有待判定的集合或者网页的哈希值需要临时计算

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

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

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

回答:我去,分词不是就可以么

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

已有网页库集合为:

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

C{58到家,服务到家}

D{这事和我没关系,我是凑数的}

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

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

B{我,58,来自,狼}

C{58,服务,到家}

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

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

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

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

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

怎么优化呢?

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

五、结论

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

标题只是噱头,百度是不是这么做的我并不知道,知情的同学说一下哈。

转载于:https://www.cnblogs.com/davidwang456/p/7550118.html

百度咋做长文本去重(一分钟系列)--转相关推荐

  1. 【转】 python socket向百度发送http长连接请求 并做搜索

    http://hi.baidu.com/leejun_2005/blog/item/30fe9bd23a396c28960a1640.html [转] python socket向百度发送http长连 ...

  2. hashset去重原理_基于simhash的文本去重原理

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

  3. minhash算法检索相似文本_文本去重算法:Minhash/Simhash/Klongsent

    日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...

  4. 路由器距离向量算法计算举例_文本去重算法:Minhash/Simhash/Klongsent

    日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...

  5. linux文本去重分割,Linux命令去重统计排序

    利用Linux命令进行文本按行去重并按重复次数排序 linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去重并 ...

  6. [039]文本去重、过滤——文本指纹

    1. 文本指纹介绍 互联网网页存在大量的重复内容网页,无论对于搜索引擎的网页去重和过滤.新闻小说等内容网站的内容反盗版和追踪.还是社交媒体等文本去重和聚类,都需要对网页或者文本进行去重和过滤. 最简单 ...

  7. 长文本翻译-免费长文本翻译软件

    长文本翻译,今天给大家分享一款免费的长文本翻译,我们为什么要选择这款好用的翻译器,因为汇集了世界最好的几个翻译平台(百度/谷歌/有道),第一点翻译质量高,选择性多.第二点支持各种语言互译,第三点可以各 ...

  8. 如何做中文文本的情感分析?

    如何做中文文本的情感分析? 这是本学期在大数据哲学与社会科学实验室做的第三次分享了. 第一次分享的是:如何利用"wordcloud+jieba"制作中文词云? 第二次分享的是:如何 ...

  9. Bert 如何解决长文本问题?

    举例: 在阅读理解问题中,article 常常长达1000+, 而Bert 对于这个量级的表示并不支持, 诸位有没有什么好的解决办法, 除了分段来做?或者提一提如何分段来做.感谢诸位大佬. ----- ...

最新文章

  1. 2020,人工智能和深度学习未来的五大趋势
  2. Linux 系统修复
  3. 信息系统项目管理师论文:论项目的风险管理
  4. [JOYOI] 1124 花店橱窗
  5. 模仿网易(163)首页Ajax功能中的鼠标延时触发
  6. php pdo无法使用,php - php-无法使用PDO连接到数据库 - SO中文参考 - www.soinside.com
  7. 物联网(车联网)平台架构方案
  8. 阿里五年晋升三次,这个程序员要聊聊他的选择
  9. es 删除重复数据_怎么标识并删除SPSS数据库里的“重复个案”?
  10. python生成的词云没有图案_Python如何生成词云的方法
  11. React+TS免注册DOM页面dialog弹窗
  12. Java反射机制剖析(一)-定义和API
  13. 微信公众号开发之微信买单
  14. go - reflect
  15. macbook-M1的idea下集成svn环境
  16. 学习OpenCV2——绘制基本图形及文字
  17. java程序员 英文简历_it程序员英文简历范文模板
  18. 初探TVM--TVM优化resnet50
  19. 阿里云ACA课程之阿里云简介
  20. vmware 常用知识

热门文章

  1. python不可变的列表被称为_【Python学习】可变类型和不可变类型
  2. 无边框窗体移动的方法
  3. 设置自增递增零开始_MySQL中如何设置自动递增id主键重新计数从1开始?
  4. cla作用matlab,共轭亚油酸(CLA)怎么吃?共轭亚油酸副作用
  5. python在什么系统中开发_Python虚拟开发环境,怎样才能在系统中创建
  6. java客户端发送token_基于token的会话保持机制
  7. sklearn支持gpu_Keras Sklearn随机搜索GPU OOM
  8. java 状态迁移图_kafka 实战笔记
  9. linux/CentOS7安装MySQL(完整版)【笔记自用】
  10. 如何判断强化学习训练是否在收敛?