首页 > 其他分享 >simhash&hamming distince

simhash&hamming distince

时间:2024-07-13 16:42:16浏览次数:5  
标签:哈希 海明 文档 hamming 文章 distince simhash SimHash

simhash&hamming distince

simhash 是一种长文本的查重算法

SimHash本身属于一种局部敏感hash,其主要思想是降维,将高维的特征向量转化(加权)成低位的hash,通过算出两个海明距离来确定两篇文章的相似度,海明距离越小,相似度越低,一般海明距离为3就代表两篇文章相同。

simhash的算法具体分为5个步骤:分词hash加权合并降维

simhash长文本查重算法原理与实战-CSDN博客

在实际使用过程中,我们可以使用simhash 分块来操作,假设对64位的SimHash,查找海明距离在3以内的所有签名。可以把64位的二进制签名均分成4块,每块16位。根据鸽巢原理(也称抽屉原理,见组合数学),如果两个签名的海明距离在3以内,它们必有一块完全相同。

局限

对海明距离敏感度较低

SimHash主要依赖于海明距离来衡量相似度,但对于一些文档的微小变化,海明距离可能无法充分反映实际的相似度变化。例如,一些文档内容变化较小,但其SimHash值的海明距离可能较大,导致无法识别为相似文档。

对局部性敏感度较低

SimHash是一种全局哈希算法,它对文档中的局部变化(例如插入或删除某段文字)不敏感。也就是说,如果文档的局部变化较大,SimHash可能会产生较大的哈希值变化,影响相似度判断。

维度限制

SimHash通常将文档映射到固定长度的二进制向量(如64位或128位)。这种固定长度限制了算法的表达能力,可能无法捕捉到非常细微的文档差异。

碰撞问题

尽管SimHash在设计上减少了哈希碰撞的可能性,但对于非常大的文档集合,仍然可能出现不同文档映射到相同SimHash值的情况,导致误判。

权重忽略

在生成SimHash值时,通常会对文档中的特征词赋予一定的权重。但这种权重的设定是全局的,无法针对特定文档进行细致的调整,可能导致某些关键特征被忽略。

适用范围有限

SimHash主要适用于文本相似度计算,对于图像、音频等其他类型的数据,其效果可能不如专门设计的哈希算法(如图像哈希、音频指纹)好。

​ SimHash处理短文本内容准确率往往不能得到保证。由于simhash是局部敏感的hash,其可能不适合做这种短标题的重复度判断,会存在一定的误差,当文本内容较长时,使用SimHash准确率很高(即文本越长判断的准确率越高)。在处理小于500字的短文本时,simhash的表现并不是很好,所以在使用simhash前一定要注意这个细节。

​ SimHash在大规模文本去重和相似文档检测方面仍然是一种高效且实用的算法

场景

  • 文本去重
  • 内容推荐
  • 版本控制、变更检测
  • 网页去重
  • ……

实例 重复推荐

设计方案:

系统架构

  1. 数据预处理模块
    • 文本清洗:对文章进行预处理,包括去除HTML标签、标点符号、停用词等。
    • 特征提取:提取文章的关键词或特征词,并计算词频。
  2. SimHash生成模块
    • SimHash计算:基于特征词生成每篇文章的SimHash值。
  3. 哈希存储和索引模块
    • 分块存储:将生成的SimHash值分块存储,以便快速查找和比对(例如将64位SimHash分成4个16位的块)。
    • 倒排索引:构建倒排索引,将SimHash块与文章ID关联起来,方便快速查找相似文章。
  4. 相似度检测模块
    • 海明距离计算:在推荐新文章时,计算新文章的SimHash值,并通过哈希索引查找海明距离在阈值范围内的文章。
    • 去重策略:根据海明距离和设定的相似度阈值,过滤掉相似度过高的文章,避免推荐重复内容。
  5. 推荐引擎模块
    • 个性化推荐:结合用户的兴趣和历史浏览记录,推荐与用户兴趣相似但不重复的文章。
    • 实时更新:定期更新SimHash值和索引,以确保新发布的文章能够及时参与推荐。

具体流程

  1. 文章入库

    • 每当有新文章发布时,进行数据预处理和特征词提取,并根据特征词和其权重生成生成该文章的SimHash值。

    • 将SimHash值分块并存储到哈希表中,同时更新倒排索引。(可以借助redis :使用Redis的哈希(Hash)结构存储文章ID和SimHash映射;使用Redis的集合(Set)结构存储每个SimHash块对应的文章ID列表。)

      正排索引用于快速获取文档的SimHash值及其相关信息;倒排索引用于根据SimHash分块快速查找可能相似的文档ID列表。)

  2. 去重检测

    • 用户请求推荐时,系统首先生成新文章的SimHash值。

    (通过分块查找候选文档,然后计算海明距离以筛选出真正相似的文档)

    • 使用倒排索引查找与新文章相似的文章,计算海明距离。
    • 过滤掉海明距离在阈值范围内的文章,避免推荐重复内容。
  3. 个性化推荐

    • 基于用户的浏览历史和兴趣模型,筛选符合用户兴趣的文章。
    • 在去重检测后,从剩余的文章中挑选出最符合用户兴趣的文章进行推荐。

标签:哈希,海明,文档,hamming,文章,distince,simhash,SimHash
From: https://www.cnblogs.com/scChen/p/18300291

相关文章

  • m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,测试结果如下:2.算法涉及理论知识概要在现代数字通信和存储系统中,错误检测和纠正(ErrorDetectionandCorrection,EDC)机制是至关重要的。Hamming码,以其发明者RichardHamming命名,是一种线性错误检测和纠正码,广泛应用于这些系......
  • 通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a和vivado2019.2 3.算法理论概述       Hamming编码是一种用于纠错错误的线性分组码。它是由理查德·哈明(RichardHamming)在20世纪中期提出的,用于在数字通信和存储系统中检测和纠正传输过程中产生的错误。本......
  • 基于pHash+hammingdistance的图片相似度比较
    参考文献图片相似度计算方法总结-知乎(zhihu.com)PythonOpenCV视觉特征提取和匹配-知乎(zhihu.com)图像相似度中的Hash算法-Yumeka-博客园(cnblogs.com)汉明距离及其高效计算方式(zhihu.com)开源仓库https://github.com/python-pillow/Pillowhttps://github.com/cybe......
  • hdu 4712 Hamming Distance-----随机
    计算出二进制数中有多少个1:数据范围太大,想到可以随机如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。------百度rand#include<cstdio>#include<cstring>#include<algorithm>#include<time.h>usingnamespacestd;constintN=1e5+10......
  • HS-GCN Hamming Spatial Graph Convolutional Networks for Recommendation
    目录概符号说明HS-GCNInitialLayerPropagationLayerHashCodeEncoding矩阵表示PredictionLayerOptimization代码LiuH.,WeiY.,YinJ.andNieL.HS-GCN:Hammingspatialgraphconvolutionalnetworksforrecommendation.IEEETKDE.概二值化的nodeembedding.符......
  • 局部敏感哈希LSH(SimHash与MinHash)
    SimHash1.算法思想假设我们有海量的文本数据,我们需要根据文本内容将它们进行去重。对于文本去重而言,目前有很多NLP相关的算法可以在很高精度上来解决,但是我们现在处理的是大数据维度上的文本去重,这就对算法的效率有着很高的要求。而局部敏感hash算法可以将原始的文本内容映射为......
  • leetcode 461. Hamming Distance
    The Hammingdistance betweentwointegersisthenumberofpositionsatwhichthecorrespondingbitsaredifferent.Giventwointegers x and y,calculatetheHammingdistance.Note:0≤ x, y <231.Example:Input:x=1,y=4Output:2Explanation:1......
  • 基于FPGA的Hamming编译码verilog开发实现,包括testbench测试程序
    1.算法仿真效果vivado2019.2仿真结果如下:    2.算法涉及理论知识概要        汉明码(HammingCode),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦......
  • HammingDistance
    汉明距离implementation'org.apache.commons:commons-text:1.10.0'Thehammingdistancebetweentwostringsofequallengthisthenumberofpositionsatwhichthecorrespondingsymbolsaredifferent.ForfurtherexplanationabouttheHammingDistan......
  • Hamming Distance汉明距离
    汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,......