在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”……
随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地识别它们是一个很有意义的课题。例如,对于搜索引擎的爬虫系统来说,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费;同时,展示重复的信息对于用户来说也并不是最好的体验。造成网页近重复的可能原因主要包括:
一个简化的爬虫系统架构如下图所示:
事实上,传统比较两个文本相似性的方法,大多是将文本分词之后,转化为特征向量距离的度量,比如常见的欧氏距离、海明距离或者余弦角度等等。两两比较固然能很好地适应,但这种方法的一个最大的缺点就是,无法将其扩展到海量数据。例如,试想像Google那种收录了数以几十亿互联网信息的大型搜索引擎,每天都会通过爬虫的方式为自己的索引库新增的数百万网页,如果待收录每一条数据都去和网页库里面的每条记录算一下余弦角度,其计算量是相当恐怖的。
我们考虑采用为每一个web文档通过hash的方式生成一个指纹(fingerprint)。传统的加密式hash,比如md5,其设计的目的是为了让整个分布尽可能地均匀,输入内容哪怕只有轻微变化,hash就会发生很大地变化。我们理想当中的哈希函数,需要对几乎相同的输入内容,产生相同或者相近的hashcode,换句话说,hashcode的相似程度要能直接反映输入内容的相似程度。很明显,前面所说的md5等传统hash无法满足我们的需求。
simhash是locality sensitive hash(局部敏感哈希)的一种,最早由Moses Charikar在《similarity estimation techniques from rounding algorithms》一文中提出。Google就是基于此算法实现网页文件查重的。我们假设有以下三段文本:
- the cat sat on the mat
- the cat sat on a mat
- we all scream for ice cream
使用传统hash可能会产生如下的结果:
引用
irb(main):006:0> p1 = 'the cat sat on the mat'
irb(main):005:0> p2 = 'the cat sat on a mat'
irb(main):007:0> p3 = 'we all scream for ice cream'
irb(main):007:0> p1.hash
=> 415542861
irb(main):007:0> p2.hash
=> 668720516
irb(main):007:0> p3.hash
=> 767429688
使用simhash会应该产生类似如下的结果:
引用
irb(main):003:0> p1.simhash
=> 851459198
00110010110000000011110001111110
irb(main):004:0> p2.simhash
=> 847263864
00110010100000000011100001111000
irb(main):002:0> p3.simhash
=> 984968088
00111010101101010110101110011000
海明距离的定义,为两个二进制串中不同位的数量。上述三个文本的simhash结果,其两两之间的海明距离为(p1,p2)=4,(p1,p3)=16以及(p2,p3)=12。事实上,这正好符合文本之间的相似度,p1和p2间的相似度要远大于与p3的。
如何实现这种hash算法呢?以上述三个文本为例,整个过程可以分为以下六步:
1、选择simhash的位数,请综合考虑存储成本以及数据集的大小,比如说32位
2、将simhash的各位初始化为0
3、提取原始文本中的特征,一般采用各种分词的方式。比如对于"the cat sat on the mat",采用两两分词的方式得到如下结果:{"th", "he", "e ", " c", "ca", "at", "t ", " s", "sa", " o", "on", "n ", " t", " m", "ma"}
4、使用传统的32位hash函数计算各个word的hashcode,比如:"th".hash = -502157718
,"he".hash = -369049682,……
5、对各word的hashcode的每一位,如果该位为1,则simhash相应位的值加1;否则减1
6、对最后得到的32位的simhash,如果该位大于1,则设为1;否则设为0
整个过程可以参考下图:
按照Charikar在论文中阐述的,64位simhash,海明距离在3以内的文本都可以认为是近重复文本。当然,具体数值需要结合具体业务以及经验值来确定。
使用上述方法产生的simhash可以用来比较两个文本之间的相似度。问题是,如何将其扩展到海量数据的近重复检测中去呢?譬如说对于64位的待查询文本的simhash code来说,如何在海量的样本库(>1M)中查询与其海明距离在3以内的记录呢?下面在引入simhash的索引结构之前,先提供两种常规的思路。第一种是方案是查找待查询文本的64位simhash code的所有3位以内变化的组合,大约需要四万多次的查询,参考下图:
另一种方案是预生成库中所有样本simhash code的3位变化以内的组合,大约需要占据4万多倍的原始空间,参考下图:
显然,上述两种方法,或者时间复杂度,或者空间复杂度,其一无法满足实际的需求。我们需要一种方法,其时间复杂度优于前者,空间复杂度优于后者。
假设我们要寻找海明距离3以内的数值,根据抽屉原理,只要我们将整个64位的二进制串划分为4块,无论如何,匹配的两个simhash code之间至少有一块区域是完全相同的,如下图所示:
由于我们无法事先得知完全相同的是哪一块区域,因此我们必须采用存储多份table的方式。在本例的情况下,我们需要存储4份table,并将64位的simhash code等分成4份;对于每一个输入的code,我们通过精确匹配的方式,查找前16位相同的记录作为候选记录,如下图所示:
让我们来总结一下上述算法的实质:
1、将64位的二进制串等分成四块
2、调整上述64位二进制,将任意一块作为前16位,总共有四种组合,生成四份table
3、采用精确匹配的方式查找前16位
4、如果样本库中存有2^34(差不多10亿)的哈希指纹,则每个table返回2^(34-16)=262144个候选结果,大大减少了海明距离的计算成本
我们可以将这种方法拓展成多种配置,不过,请记住,table的数量与每个table返回的结果呈此消彼长的关系,也就是说,时间效率与空间效率不可兼得,参看下图:
事实上,这就是Google每天所做的,用来识别获取的网页是否与它庞大的、数以十亿计的网页库是否重复。另外,simhash还可以用于信息聚类、文件压缩等。
也许,读到这里,你已经感受到数学的魅力了。
- 大小: 96.7 KB
- 大小: 66.7 KB
- 大小: 60.2 KB
- 大小: 62.4 KB
- 大小: 22.8 KB
- 大小: 86.5 KB
- 大小: 94.8 KB
- 大小: 74.7 KB
分享到:
相关推荐
北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮——计算机——数学建模——专业选修 北邮...
2022高考二轮复习数学 规范答题示范课——概率与统计解答题 .pdf
《2011年高考数学总复习系列》——高中数学选修2-3.doc
机器学习的数学理论及其算法研究——评《机器学习的数学理论》 机器学习是指计算机通过固有的规律性信息获得新的经验和知识,从而提升计算机的智能,达到像人类一样作出决策的目的。机器学习的数学理论是研究机器...
数学建模讲座之二——数据处理和综合评价PPT学习教案.pptx
2022高考二轮复习数学 规范答题示范课——函数与导数解答题 .pdf
数学建模好资料——模糊数学数学建模好资料——模糊数学数学建模好资料——模糊数学
离散数学是计算机科学的基础课程,它主要研究离散而非连续的数学结构...无论是对于计算机专业的本科生,还是准备计算机专业研究生入学考试或计算机等级考试的考生,这本《离散数学——习题与解析》都是宝贵的参考资料。
在当今学术领域,高等数学A作为基础学科之一,对于理工科学生来说,它的学习具有重要的意义。为了帮助学生更深入地掌握高等数学的基础理论,并将其应用到实际问题的解决中,一套精心编制的高等数学A课件应运而生。该...
数学建模是应用数学在解决现实世界问题中的关键工具,它将抽象的数学概念与具体的实际问题相结合,形成能够描述、预测或优化现象的数学结构。"数学与数学模型"这个主题深入探讨了如何利用数学理论来构建模型,并通过...
综上所述,通过"二年级数学下册 9 数学广角——推理学案"的学习,学生不仅能够培养逻辑推理的能力,还能够锻炼他们的沟通与合作能力,为他们在未来的学习和生活中解决更复杂问题打下坚实的基础。这种能力的培养,...
2022高考二轮复习数学 规范答题示范课——数列解答题 .pdf
本文即从一道高考数学题出发,探讨如何通过深度挖掘数学知识,引导学生领悟数学之美,并将其与深度学习巧妙结合。 首先,我们要讨论的高考数学题目涉及到了抛物线的焦点弦和三角变换等知识点,这不仅是高中数学的...
小学二年级数学上册数学广角——搭配PPT教案.pptx
2022高考二轮复习数学 规范答题示范课——解析几何解答题 .pdf
幼儿园数学培训二——幼儿园数学活动教学的流程.doc
在几何学中,三角形是最基础的多边形之一,它不仅在初一数学的教学大纲中占有重要地位,而且在日常生活中也具有广泛的实用性。《初一数学科专题讲义————三角形》深入浅出地为学生揭示了三角形的奥秘,从基本概念...
数学学科情智交融,促进学生数学能力和谐发展 ————浅议新理念下的小学数学课堂教学.doc
对称美是数学美的一个重要体现,无论是数的对称性,如二项式定理和杨辉三角的规律,还是图形的对称,如圆的中心对称和轴对称,都展现出一种和谐与平衡。例如,连续相乘的1组成的数字序列,呈现出从简单到复杂,再到...
《数学建模——方法与范例》是一本深入探讨数学建模理论与实践的书籍,旨在帮助读者理解和掌握数学建模的基本方法,并通过丰富的实例来加深理解。在数学建模中,我们通常会运用数学工具对现实世界的问题进行抽象、...