`
cloudtech
  • 浏览: 4605862 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

相似数据检测算法

 
阅读更多
相似数据检测算法对给定的一对数据序列计算两者之间的相似度([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算法
Shingle算法的核心思想是将文件相似性问题转换为集合的相似性问题,集合的相似性度量方法主要有resemblance 和containment两种,其定义如下。
|shingle(f1, w) ∩ shingle(f2, w)|
 Rw(f1, f2) = ----------------------------------------------
|shingle(f1, w) ∪ shingle(f2, w)|

|shingle(f1, w) ∩ shingle(f2, w)|
 Cw(f1, f2) = ----------------------------------------------
|shingle(f1, w)|


数量较大时,如果对所有shingle进行相似性处理则系统开销较大,包括内存和CPU资源。这时就可以考虑对shingle集合进行抽样,以降低空间和时间计算复杂性,但同时由于样本覆盖率有限,相似性精确度会有所降低。shingle取样主要有三种方法,即Min-Wise,Modm,和Mins。Min-Wise技术是通过将shingle的长度w和整数值进行映射产生随机哈希的公共集,在此相同的模式下进行随机最小独立置换的采样,从而得到采样集合;Modm 技术是通过在与Min-Wise同样的公共映射集中选择所有模m为0 的哈希值对应的shingle组成取样集合;Mins技术同样也是先将shingle和整数集进行映射,然后从中选择最小s个元素组成取样集合。此外,还可以使用shingle的hash值代表shingle进行相似性计算,能够节省一定计算开销。

Simhash算法
Shingle算法的空间和时间计算复杂性都比较高,对于大数据集的Simlarity Join问题将难以适用。Charikar的simhash算法的核心思想是用一个b位的hash值来表示文件的特征值,然后使用simhash之间的Hamming距离来衡量相似性。Hamming距离的定义为,两个二进制序列中对应位不同的个数。simhash的计算方法如下:
(1) 将一个b维的向量V初始化为0,b位的二进制数s初始化为0;
(2) 对每一个shingle,用hash函数(如MD5, SHA1)计算一个b位的签名h。对i=1到b,如果h的第i位为1,则V的第i个元素加上该特征权重;否则,V的第i个元素减去该特征权重;
(3) 如果V的第i个元素大于0,则s的第i位为1,否则为0;
(4) 输出s作为simhash。
与传统hash函数相比,simhash具有一个这样的显著特征,即越相似的文件具有越相似的simhash值,也就是说Hamming距离越小。显而易见,Simhash仅使用b位的hash值来表示文件 的特征,节省了大量的存储开销;Hamming距离计算简单高效,Simhash使用Hamming距离来衡量相似性,计算复杂性得到大大降低。简而言之,simhash算法通过对文件特征的降维,有效解决了Shingle算法的高空间和时间计算复杂性问题。然而,simhash算法的精确度也会有所损耗,并且与simhash的位数b有关,b越大精确度越高。

Bloom filter算法
与Simhash算法本质相似,Bloom filter算法的核心思想也是着眼于文件特征的降维,它使用Bloom filter数据结构来表示特征值。Bloom filter是一个空间效率很高的数据结构,它由一个位数组和一组hash映射函数组成。Bloom filter可以用于检索一个元素是否在一个集合中,它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。使用Bloom filter进行相似数据检测,可以弥补shingle中应用特征集交集计算文件相似性所导致的高计算和存储空间开销,在性能与相似性匹配精度之间取得平衡。Bloom filter构造方法如下:
(1) 构造一个m位的bloom filter数据结构bf,并将所有位初始为0;
(2) 选定两个hash函数作为映射函数,分别为hash1,hash2;
(3) 对每一个shingle,分别应用hash1和hash2,并对bf相应比特位置1;
(4) 输出bf作为文件特征值。
这样,两个文件相似性计算就转换成两个bloom filter的相似性计算,越相似的文件在它们的bloom filter中有更多共同的1。由于Bloom filter具有有限的误识别率的特性,相似性算法精确度取决于Bloom filter的大小,越大则精确度越高,同时存储空间消耗也越大。Bloom filter同样可以使用Hamming距离衡量相似性,也可以使用Cosine、Overlap、Dice、Jaccard等方法来度量。Hamming距离前面已有定义,这里介绍一下后四种方法的计算公式。
dot(x, y)
Cosine_sim(x, y) = -----------------
sqrt(|x|.|y|)


dot(x, y)
Overlap_sim(x, y) = -----------------
min(|x|, |y|)

2.dot(x, y)
Dice_sim(x, y) = -----------------
|x| + |y|

dot(x, y)
Jaccard_sim(x, y) = ------------------------
|x| + |y| - dot(x, y)


其中,dot(x, y) = Σx[i].y[i],在这里相当于两个Bloom filter数据结构中同时为1的位数;|x|表示bloom filter数据结构中为1的位数。相似性计算函数如下:
static double bloom_sim(BLOOM *bloom1, BLOOM *bloom2)
{
    int i, r1, r2;
    int c1 = 0, c2 = 0, comm = 0;
    double sim;

    for (i = 0; i < BLOOM_ARRAY_SZ; i++) {
        r1 = bloom_check(bloom1, 1, i);
        r2 = bloom_check(bloom2, 1, i);
        if (r1 && r2) {
            comm++;
            c1++;
            c2++;
        } else {
            if (r1) {
                c1++;
            }
        
            if (r2) {
                c2++;
            }
        }
    }
    
    
    /* similarity measures */
    //sim = comm/(sqrt(c1) * sqrt(c2)); /* Cosine */
    //sim = comm/1.0/(c1 + c2 - comm); /* Jaccard */
    //sim = comm*2.0/(c1 + c2); /* Dice */
    sim = comm*1.0/(c1<c2?c1:c2); /* Overlap */
    return sim;
}

三种算法对比
Shingle算法的空间和计算复杂性高,相似性精度也高,适合数据量不大且对精度要求高的应用。Simhash和bloom filter算法在空间消耗和计算复杂性方面都优于Shingle算法,但是精度有所损耗,取决于simhash的长度和bloom filter的大小。simhash的长度通常为64位或128位,这个基本可以满足应用的需求,可以根据实际需求增大位数。bloom filter要大于simhash长度,可以根据最大shingle数的两倍来估算,精度方面也要优于simhash。由于hash函数的碰撞问题,simhash和bloom filter算法可能出现误判现象,即不相似的文件可能会判定为相似的。总结一下,通常情况下,文件特征值存储空间消耗方面,Shingle > bloom filter > simhash;相似性计算精度方面,Shingle < bloom filter < simhash。Bloom filter算法往往是比较折中的相似数据检测方法选择,但海量数据集的相似性计算往往采用simhash算法,在计算性能方面具有很大优势,而且更加适合MapReduce计算模型。
分享到:
评论

相关推荐

    流数据概念漂移的检测算法

    运用目标分布数据, 结合相似分布理论, 提出了利用Tr-OEM 算法对流数据中的概念漂移现象进行检测. 该算法能够 动态地判断流数据概念漂移的发生, 自适应地优化概念漂移的检测值, 适用于不同类型的流数据. 通过...

    一种XML相似重复数据的清理方法研究

    针对半结构化数据XML在数据清理中的重要性,研究了如何清理XML相似重复数据,主要工作有:提出一种有效的XML相似重复数据清理方法,该方法具有较强的适应性,任何XML相似检测算法都适用于此;给出一种基于树编辑距离的相似...

    论文研究-基于K-近邻树的离群检测算法.pdf

    为适应数据集分布形状多样性以及克服数据集密度问题,针对已有算法对离群簇检测效果欠佳的现状,提出了一种基于K-近邻树的离群检测算法KNMOD(outlier detection based on K-nearest neighborhood MST)。...

    论文研究-基于变形分析的三维Susan角点检测算法.pdf

    为了准确地在三维网格模型上定位特征角点,提出了一种基于变形分析的三维Susan角点检测算法。算法首先利用邻接区域信息定义顶点的变形函数,由变形函数值得到候选角点集合;对于候选角点,设定比较区域,在区域内用...

    大数据-算法-时间序列相似性查询及异常检测算法的研究.pdf

    大数据-算法-时间序列相似性查询及异常检测算法的研究.pdf

    使用 OpenCV 和 Python 检测两个图像的相似程度(SIFT算法,包括代码和数据)

    使用 OpenCV 和 Python 检测两个图像的相似程度 基于SIFT算法,包括代码和数据

    视频数据质量与视频数据检测技术

    针对相似重复视频数据和异常视频数据这2类脏视频数据的检测技术将有助于发现并解决视频数据质量问题。为此,通过扩展视频数据质量概念,针对这2类脏视频数据,分析和总结相关的视频检测方法及关键技术;最后,简要说明...

    论文研究-两阶段的多元时间序列异常检测算法.pdf

    提出了一个两阶段的多元时间序列异常检测算法。该算法通过有界坐标系统 (BCS)技术计算多元时间序列样本之间的相似性,采用基于距离的方法实现异常检测。算法第一阶段采用K-means算法对数据进行聚类,并按照一个...

    基于遗传神经网络的相似重复记录检测方法研究

    该方法计算两条记录对应字段间的相似度,构建基于神经网络的检测模型,利用遗传算法对网络模型的权值进行优化,使用遗传神经网络组合多个字段上的相似度来检测相似重复记录。在不同领域数据集上的测试结果表明,该...

    论文研究-基于强相似点检测快速双目立体匹配算法.pdf

    经Middlebury算法测试平台的提供数据进行验证,结果表明在不损失精确率的前提下,该方法相对于SAD速度提高70%左右,为立体匹配算法的实际应用奠定了良好基础,在视觉导航、障碍物检测方面也有着良好的应用前景。

    基于特征选择的K-means聚类异常检测方法

    K-means算法是一种采用距离作为相似性评价指标的聚类算法,其快速简洁的特点...实验过程中,针对异常检测数据含有冗余特征,对样本数据做了冗余特征过滤,实验结果表明改进之后的方法较传统的K-means算法有更好的检测效果。

    论文研究-基于TSVD的图像复制区域伪造检测算法.pdf

    提出了一种有效的盲检测算法来识别图像复制区域伪造。该算法采用截尾奇异值分解(truncatedsingular value decomposition,TSVD)变换来处理图像块数据,并对图像块进行相似性匹配检测。实验结果表明,本算法具有较强...

    基于磁阻传感器的车辆检测算法 (2011年)

    地磁检测器一种新型的利用磁场变化的车辆信息检测设备,它能将车辆引起的地磁扰动转换为清晰的电压信号,根据不同车辆对地磁影响不同可以识别出车型,本文基于这种设备采集到的数据经过预处理和特征提取,采用相似性算法...

    生猪的目标检测计数数据集

    YOLO的txt文档格式为:类别 位置 ,使用的目标检测算法为YOLO V7,这是2022年7月出来的新的目标检测算法,使用方法和YOLO V5有相似的地方。数据集的收集来自于roboflow网站,可以免费下载相关的数据集,同时将数据集...

    论文研究-基于内码序值聚类的相似重复记录检测方法.pdf

    然后,通过等级法计算各字段的权值,并将其应用在相似重复记录的检测算法中;最后,在各个小数据集中检测和消除相似重复记录。为避免关键字选择不当而造成记录漏查问题,采用多趟检测方法进行多次检测。通过实验表明...

    论文研究-基于密度的局部离群数据挖掘方法的改进.pdf

    针对传统局部离群点检测算法的局限性进行了研究,提出了一种新的有效的离群数据挖掘算法。该算法在寻找数据点的近邻区域时采用了基于影响空间的局部离群点检测(INFLO)中影响空间的概念,然后在计算数据点的离群...

    论文相似性检测工具(论文查重软件)

    系统采用自研的ROST Similar算法实现高速相似性检测和度量。系统采用自研的QingQing算法提取信息指纹,在P3、512MBPC上,分词速度为13MB/S,已在互联网提供评测版供业内评测。 3.引文及参考文献去除,使得误判的...

    数据异常剔除方法

    拉依达方法、肖维勒方法、一阶差分法,1. 111 基于统计的异常点检测算法 2. 112 基于距离的异常点检测算法...6. 116 高维数据的异常点检测算法 7. 121 时间序列相关背景 8. 122 基于离散傅立叶变换的时间序列相似性查找

    判断相似程度

    MATLAB编写的计算一幅图像投影熵,用来计较两幅图像的相似程度

    基于划分的海量数据相似重复记录检测

    采用改进的近邻排序算法对各个簇中的小数据集进行检测得到最终的相似重复记录检测结果.实验和对比分析结果表明,划分和近邻排序算法的结合使用不仅提高了海量数据相似重复记录检测的时间效率,检测准确率也有所提升.

Global site tag (gtag.js) - Google Analytics