相似数据检测算法汇总

本文介绍了相似数据检测的重要性和应用,详细讲解了Shingle算法、Charikar的Simhash算法以及基于Bloom Filter的算法。Shingle通过将文件转换为集合相似性问题,Simhash利用哈希值降维,Bloom Filter则在空间效率和查询时间上表现出色。三种算法在空间消耗、计算复杂性和精度上各有优劣,适合不同场景需求。
摘要由CSDN通过智能技术生成

相似数据检测算法对给定的一对数据序列计算两者之间的相似度([0,1], 1表示完全相同)或距离([0, ), 0表示完全相同),从而度量数据之间的相似程度。相似数据检测在信息科学领域具有非常重要的应用价值,比如搜索引擎检索结果的聚类与排序、数据聚类与分类、Spam检测、论文剽窃检测、重复数据删除、Delta数据编码等应用。正是由于它的重要性,近年来成为了研究的重点,不断有新检测方法涌现并得到评估。其中,Broder提出的shingling算法和Charikar的simhash算法被认为是目前为止最好的算法。

对于相似数据检测,最为简单地可以采用类似Unix diff的方法。Unix diff对文档进行逐行对比来检测相似文件,它采用经典的LCS(Longest Common Subsequence,最长公共子串)算法,运用动态规划方法来计算相似性。LCS的含义是同时包含在字符串里的一个最长字符序列,LCS的长度作为这两个字符串相似性的度量。Diff算法以整行作为"字符"来计算最长公共子串,性能上比字符级的LCS算法快很多。这种方法效率很低,而且只适用文本文件的相似比较,不能直接适用于二进制文件。为此,研究者们提出为每个文档提取一组特征,这样将文件相似性问题转换为集合相似性问题,如基于shingle的计算方法。这种方式的核心思想是为每个文件提取组特征值,以特征值集合来计算相似性,从而降低空间和计算复杂性来提高性能。

经过对shingle算法和simhash算法以及笔者基于bloom filter实现算法的分析,相似数据检测算法大致流程如下:
(1) 将数据段分解成一组shingle(即子序列或数据块),可以采用定长、变长、单词或段落(文本文件)等分块算法;
(2) 为了降低空间和时间计算复杂性,可以对shingle集合进行抽样,比如Min-Wise,Modm,Mins方法;
(3) 基于选定的shingle集合为数据文件抽取特征,通常是为每个shingle计算hash值组成的序列作为特征值;
(4) 为了降低空间和时间计算复杂性,可以对文件特征进行降维处理,比如simhash和bloom filter;
(5) 基于文件特征计算两个数据对象之间的相似性,计算方法有Cosine、Overlap、Dice、Jaccard或Hamming距离。

Shingle算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值