1 Simhash 算法原理

Simhash 算法的原理是将一个在超大集合内查找数据的问题利用哈希函数转换映射的方法转化为一个在较小集合内查找数据的问题,这样能大大减少计算量。
Simhash 算法流程
Simhash[3-5]生成指纹可以分为分词、hash 值计算、加权、合并、降维等 5 个步骤。其算法流程图如下所示:

2 Simhash 算法原理改进方法

2.1 文档相似度的改进

传统的两篇文档相似度定义为,两篇文档内容对应 Simhash 签名值之间的海明距离。不过单一考虑文档内容比较片面,存在误差。为了减少误差,文中将两篇文档的相似度定义为文档内容的相似度和文档其他信息的相似度权重加。文档内容的相似度使用改进 Simhash算法计算,文档其他信息的相似度使用最小哈希算法计算。下面给出文档其他信息相似度的计算方法。
文档其他信息包括文档关键字、文档标签、文档引 用文献等,用集合的形式表示。现假设文档中所有其他信息集合为{ a,b,c,d,e } ,文档 s1含有其他信息集合为{ a,
b } ,文档s2含有的其他信息集合为{ b,c,d},文档s3的集合为{ a,d,e} ,文档s4 的集合为{ d,e} ,将这一系列集合组成特征矩阵,如图1所示。
图1表示的特征矩阵的行表示文档其他信息组成的集合,列表示文档集合。计算文档其他信息的相似度,就是计算特征矩阵对应列之间的 jaccard相似度。因为特征矩阵十分稀疏,使用最小哈希的方法来计算。先对矩阵进行随机打乱,文档其他信息(即为矩阵中的对应列) 的最小哈希值,为矩阵对应列第一个值为1的行号。最小哈希函数设为h,最小哈希函数用于模拟对矩阵所进行的随机打乱,特征矩阵两列之间的 jaccard 相似度为对应列打乱后最小哈希值相同的概率。
当特征矩阵规模很大时,对其进行随机打乱是非常耗时的,而且还要进行多次。为此使用多个哈希函数来模拟随机打乱,具体做法为:假设要进行n次随机打乱,选用n个随机函数h1,h2,…,hn来模拟这一效果,步骤如下:
SIG( i,c) 表示签名矩阵第 i 个哈希函数在第 c 列上的值。SIG( i,c) 初始化为 Inf( 无穷大) ,再对 r 行进行以下步骤:
( 1) 计算 h1( r) ,h2( r) ,…,hn( r) ;
2) 对特征矩阵的每一列c。如果c所在的第r行为 0,不做任何操作; 如果c所在的第r行为1,则对于每个 i =1,2,…,n,SIG( i,c)和hi( r)中的较小值设为SIG( i,c) 。
计算图1特征矩阵,a,b,c,d,e 对应 0,1,2,3,4,5 行,选用哈希函数 h1( x) = ( x + 1) mod5,h2( x) = ( 2 × x +1) mod5,函数中的 x 表示行号,遍历完所有行,最
终的签名矩阵如图 2 所示。

计算图 2 最终签名矩阵对应列之间的 jaccard 相似度,s1和 s2 两列完全不同,所以 sim( s1,s2 ) = 0。查看图 1 特征矩阵,得到 s1 和 s2 的真实 jaccard 相似度为 1/5
,比较接近。
文档其他信息组成的特征矩阵转化为签名矩阵,通过签名矩阵来估计特征矩阵对应列之间的 jaccard相似度,也就是估计文档其他信息的相似度。最终通过文档内容的相似度和文档其他信息的相似度计算文档的相似度,将A,B两篇文档间的相似度定义为:

其中,Haming( A,B) 表示A,B两篇文档内容的海明距离,通过改进的 Simhash 计算得到,加一是为了保证当A,B两篇文档内容的海明距离为0时,分数不会为无穷大; minHash( A,B) 表示 A,B 两篇文档其他信息的相似度,通过最小哈希算法计算得到; μ 的取值一般为 0.8~ 0.9,两篇文档的相似度还是以内容的相似度为主。

2.2 文档特征权值的改进

传统 Simhash 算法以文档分词识别出的关键词为 特征值,权重为该关键词出现的次数。由于权重仅由单词出现的次数来决定,部分重要信息会丢失,导致最终计算出的 Simhash签名值的准确性降低。为解决这一问题,综合使用 TF-IDF[12]技术和单词的主题相关性计算关键词权重。TF-IDF 技术用于计算一个关键词在一个文档集中的一篇文档的重要性,TF 表示关键词在这篇文档出现的频率,关键词 ti 的 TF 定义为:
其中,ni,j表示关键词ti在文档j中出现的次数;表示文档j中所有关键词出现次数的总和。关键词在文档中出现的次数越多,TF越高。逆向文档频率IDF,表示关键词所在文档在文档集所有文档中的比重,定义为:
其中,D表示ti文档集中的文档总数; | { j: ti ∈ dj} | 表示含有关键词的文档的数量( ni,j 不为 0 的文档) 。
关键词 i 在文档 j 的TD-IDF 定义为: tf - idfi,j = tfi,j × idfi 。TD-IDF的局限是在文档集出现次数越多,重要性就一定越小,这对于部分文档来说存在误差,有些重要单词在文档集中的出现次数也很大,需要给这些单词更大的权重。
文中使用单词的主题相关性作为附加权重,将专业术语词汇的长度作为判断单词主题相关性的依据。选用 CSSCI 关键词库中的关键词作为数据集,统计数据集中10 000 个中文术语的长度,并进行正态拟合,
如图 3 所示。

拟合得到的正态分布函数均值 μ = 4.51,标准差 σ = 2. 207,μ 的 置 信 度 为 95% 的 置 信 区 间[4. 214, 4. 806],σ 的 置 信 度 为 95% 的 置 信 区 间[1. 787, 2. 627]。拟合得到的 R square 为拟合函数的确定系数,越接近1,表示拟合函数对实际数据的解释能力越好。此次拟合得到的R square 为 0. 949 9,较接近1,说明拟合方程具有较好的解释能力。将正态分布函数归一化得到:

将归一化得到的中文术语长度函数 len( x) 作为单词的主题相关性函数。其中 x 表示单词的长度,可以看出长度越接近 4.5,函数值越高,单词的主题相关性也越高。使用单词主题相关性函数作为附加的权重,可以提高 TF-IDF 技术判断单词权重的准确性。最终得出关键词 x 的权重计算公式为:

其中,tfx,j × idfx 为关键词 x 在文档 j 的TF-IDF值; len( x) 为单词 x 的主题相关性函数。

2.3 Simhash 签名值检索阶段的改进

Simhash 签名值检索阶段使用哈希到桶的方法选出候选对,具体做法为将签名值分块,对同块的签名值使用相同的哈希函数,映射到桶,哈希到同一个桶中元素为候选对。此时可能会出现分布不均匀的情况,大量元素被哈希到了同一个桶,这个桶中的所有元素都是候选对,需要进行大量海明距离计算。
文中通过设定阈值的方法解决这个问题。当一个桶中元素超过此阈值,对桶中元素所属签名值除去桶中元素后再次分块,对同块的签名值使用相同的哈希函数,二次哈希映射仍被映射到同一个桶中元素为候选对,可以减少候选对数量,使分布更加均匀。
具体步骤为:
( 1) 检查每一个桶中的元素,判断元素数量是否超过阈值,阈值定义为 ( 1 + μ) × AVEn ,其中 AVEn 为桶中元素的平均值,μ 为权重。
( 2) 当一个桶中的元素超过这个阈值时,对桶中元素所属的签名值除去桶中元素块后,再次分块,将同一块的签名值使用相同的哈希函数,进行二次哈希,二次哈希映射到相同桶中的元素作为候选对。
例如一共有 233 ( 将近 10 亿篇文档) ,每篇文档每部分签名为 16 位,则桶数组数目为 65 536( 216 ) 个,每个桶的平均元 素个数为 131 072 ( 233-16 ) 个,则AVEn = 131 072,现取 μ 为 2,则当某个桶中的元素超过 ( 1 + 2) × 131 072 = 393 216 时进行二次哈希,二次哈希的桶数组数目为 4 096( 212 ) 个,此时依旧被哈希到同一个桶的元素作为候选对进行海明距离计算。

3 实验结果及分析



参考文献:
马成前,毛许光.网页查重算法 Shingling 和 Simhash 研究[J].计算机与数字工程,2009,37( 1) : 15-17.
顾志祥,谢龙恩,杜 雨.文本相似度计算的Simhash算法的实现与改进[J]信息通信,2020
王 诚,王宇成.基于Simhash 的大规模文档去重改进算法研究[J].计算机技术与发展,2019
余 意,张玉柱,胡自健.基于 Simhash 算法的大规模文档去重技术研究[J].信息通信,2015( 2) : 28-29.

信息检索与搜索引擎:Simhash算法优化相关推荐

  1. 搜索引擎排名都选乐云seo_百度官网排名-搜索引擎算法优化

    本文由乐云SEO提供,重点介绍了百度官网排名-搜索引擎算法优化相关内容.乐云SEO专业提供推广品牌的词,品牌推广的否定词,品牌推广达人奖颁奖词等多项产品服务.秉承着真诚.专业.责任.科学的宗旨,在行业 ...

  2. 2015最新百度搜索引擎(seo优化)排名算法

    多少年来,对于弄清百度排名算法成为了一代又一代站长的最高目标.随着百度推出了搜索引擎网页质量**,直接揭开了神秘的百度排名算法,这是作为站长福音啊.现在小编就来为大家介绍一下.  首先想要得到直接需要 ...

  3. 【图】2015年Google搜索引擎排名算法(完整版)

    2015年中旬,国外SEO网站发布了一份2015年Google搜索引擎排名算法的最新数据,从各个角度看待搜索引擎算法排名影响因素的变化.其组织每两年都会成立一个SEO专家调查小组,针对"Go ...

  4. 机票垂直搜索引擎的性能优化

    机票垂直搜索引擎的性能优化 原文:机票垂直搜索引擎的性能优化 一.行业背景与垂直搜索 我们先了解一下机票的行业背景,下图是由中航信统计的数据,蓝色的曲线代表平均每公里的票价,红色曲线指的是客运量.从2 ...

  5. 基于局部敏感哈希的协同过滤算法之simHash算法

    搜集了快一个月的资料,虽然不完全懂,但还是先慢慢写着吧,说不定就有思路了呢. 开源的最大好处是会让作者对脏乱臭的代码有羞耻感. 当一个做推荐系统的部门开始重视[数据清理,数据标柱,效果评测,数据统计, ...

  6. 【python 走进NLP】simhash 算法计算两篇文章相似度

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

  7. 搜索引擎关键词快速排名软件_上海搜索引擎关键词排名优化费用-电话

    上海搜索引擎关键词排名优化费用-电话,不要浪费时间发外链,链不能提高网站的排名,重要的是让搜索引擎抓取和提高收藏.如果网站已经被收录在内,那么不要浪费时间发送链,而是花更多的时间研究内部链.更多的研究 ...

  8. 彻底弄懂LSH之simHash算法

    马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说.这种说法同样适用于"经典"的计算机书籍. 最近一直在看LSH,不过由于matlab基础比较差, ...

  9. 机票垂直搜索引擎之性能优化

    行业背景与垂直搜索 从2011年到2016年,无论国内,还是国际,整体趋势都是机票价格便宜了,坐飞机的人也越来越多.特别是国际机票,这五年里机票价格下降了30%,客运量增长了140%. 乘客越来越多, ...

  10. 垂直搜索引擎的性能优化@机票行业

    一.行业背景与垂直搜索 我们先了解一下机票的行业背景,下图是由中航信统计的数据,蓝色的曲线代表平均每公里的票价,红色曲线指的是客运量.从2011年到2016年,无论是国内.港澳台还是国际,整体趋势都是 ...

最新文章

  1. 深入剖析ISAServer 网页缓存及配置
  2. 关于秒杀系统的压力测试
  3. 【Android 安装包优化】Android 中使用 7zr 可执行程序 压缩文件
  4. 2014腾讯WE大会:开启未来的五大科技发展趋势
  5. 限界分支法:01背包问题,优先级队列(包含解的追踪)
  6. java.util.set cannot be assigned from null_Java中有关Null的9件事
  7. set、vector与list的构造与排序的耗时测试
  8. Java编译器调试不了_使用Maven设置Java编译器的-source和-target-不起作用
  9. 图解算法之排序算法(4)——堆排序
  10. Mybatis常见的面试题
  11. 报错 xxx@1.0.0 dev D:\ webpack-dev-server --inline --progress --configbuild/webpack.dev.conf.js
  12. MQ7.0 在WAS中配置队列链接工厂并测试连接报2035错误
  13. Dell 电脑重装系统步骤(一)
  14. 什么是URL?URL是什么意思?
  15. 万字干货!《增长黑客》背后的逻辑
  16. Pr 入门系列之十四:导出
  17. 转载 测试开发岗--高频知识整理
  18. 十二星座匹配对象_水瓶座最佳配对对象是谁
  19. 复数四则运算java_用java怎么实现复数的四则运算?需要从键盘上输入两个复数...
  20. Sql serever的语句

热门文章

  1. 汽车零部件行业需求分析及解决方案
  2. uWSGI, Gunicorn,ngnix 服务器 详解
  3. 计算机密码学论文,密码学论文写作范例论文
  4. qt geomery的单位是什么_生命吗哪QT灵修11月28日
  5. U盘未分配空间合并——U盘分区扩展卷为灰色的
  6. 新唐 Nuvoton ML51PC 入门 点亮板载LED
  7. 疫情中计算机方面的直播课,线上课程,前沿讲座,主要是人工智能方面,计算机视觉,爬虫等
  8. Springboot整合支付宝支付(沙箱)
  9. java 免费 cms建站系统_最受欢迎免费开源CMS建站系统排行榜
  10. 联想E14笔记本 不插鼠标出现鼠标自动漂移乱串