本發(fā)明涉及計算機處理技術(shù)領(lǐng)域,特別涉及一種基于minhash的集合相似度計算方法和系統(tǒng)。
背景技術(shù):
給定兩個集合A、B,Jaccard相似度是一種廣泛用來描述集合之間的相似度的算法,其公式表示如下:
對N個集合計算兩兩之間的相似度,需要計算N(N-1)/2次,復(fù)雜度為O(n2)。單次Jaccard相似度的計算速度則會比較關(guān)鍵,特別是如果集合比較大,計算Jaccard相似度則會相對比較耗時,對計算資源也會有更大的壓力,比如,根據(jù)兩個節(jié)目之間的觀眾來計算節(jié)目之間的相似度,每個節(jié)目可能都會有百萬量級的觀眾,此時Jaccard相似度的計算就會比較費時。
最小哈希(minhash)算法則是一種用來近似計算集合間的Jaccard相似度的方法,它首先對每個集合計算minhash簽名(或者minhash指紋),相當(dāng)于是對集合的降維,最后可以基于minash簽名來近似計算jaccard相似度。
minash算法的工作原理大致如下。例如:五個元素{a,b,c,d,e}的整體,有四個集合S1={a,d},S2={c},S3={b,d,e},S4={a,c,d}分別取部分元素組成集合,這四個集合用矩陣表示如下:
其中,每行代表一個元素,每列代表一個集合,集合中有該元素為1,沒有該元素則為0。
如果對上述矩陣的行排列隨機打散重新排列,如,重排后的行序列為:b、e、a、d、c,將這個隨機排列的過程定義為一個minhash函數(shù)(映射),可記為h(x),重新排列后的矩陣如下:
根據(jù)重新排列后的陣列來計算各集合對應(yīng)的minhash值,每個集合對該函數(shù)的minhash值為重新排列之后的第一個非0的行,即h(S1)=a,h(S2)=c,h(S3)=b,h(S4)=d。
minhash值和Jaccard相似度有著重要的聯(lián)系:兩個集合的隨機的一個行排列的minhash值相等的概率與兩個集合的Jaccard相似度相等,因而可以通過對行排列進行多次隨機排列來來近似計算Jaccard相似度。
假設(shè)生成n組minhash函數(shù),H={h1,h2,...,hn},對于每個函數(shù)hi,集合A的minhash值為hi(A),對集合A的這一組minhash的值形成了該集合的minhash簽名,對于集合A,B,相似度的計算公式為:
其中,minhashsim(A,B)為結(jié)合A、B的相似度,q為A、B兩集合的minhash值相等的個數(shù)。通過minhash來近似計算Jaccard相似度的方式可以讓大大加快集合相似度的計算速度,且minhash函數(shù)越多就會越接近jaccard相似度。
然而,在實際操作中發(fā)現(xiàn),minhash的函數(shù)的生成過程是對行進行隨機重新排列的過程,如果行數(shù)(整體元素數(shù)量)比較多,則計算過程會比較復(fù)雜,與此同時,這種重新的排列需要的計算時間也會越長,即minhash簽名過程耗時較長。
技術(shù)實現(xiàn)要素:
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問題之一,提出了一種基于minhash的集合相似度計算方法和系統(tǒng)。
為實現(xiàn)上述目的,本發(fā)明提供了一種基于minhash的集合相似度計算方法,包括:
利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值,其中,m為整數(shù);
建立2k個類組,每個類組對應(yīng)一個標(biāo)簽,該標(biāo)簽為具有k個比特位長度的第二哈希值,不同類組對應(yīng)的標(biāo)簽不同,其中,k為整數(shù),且k小于m;
對于任意一個集合,將該集合中的各元素對應(yīng)的第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中;
根據(jù)分配結(jié)果確定該集合對應(yīng)于每個類組的最小哈希值,其中,若該類組中存在至少一個第一哈希值,則將該類組中最小的一個第一哈希值的后m-k個比特位的值作為該集合對應(yīng)于該類組的最小哈希值,若該類組中不存在第一哈希值,則該集合對應(yīng)于該類組的最小哈希值記為NULL;
將該集合對應(yīng)于每個類組的最小哈希值構(gòu)成數(shù)組,所述數(shù)組作為該集合的最小哈希簽名;
根據(jù)任意兩個集合的最小哈希簽名計算該兩個集合的相似度。
可選地,所述兩個集合分別為第一集合A和第二集合B;
第一集合的最小哈希簽名記為H(A)
H(A)={h1(A),h2(A),……,hn(A)}
第二集合的最小哈希簽名記為H(B)
H(B)={h1(B),h2(B),……,hn(B)}
其中,hi(A)為第一集合對應(yīng)第i個類組的最小哈希值,i為大于等于1且小于等于n的整數(shù),n取值等于2k;
計算兩個集合的相似度的步驟具體包括:
根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)不等于NULL的hi(A)的數(shù)量,記為s;
根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)等于NULL的hi(A)的數(shù)量,記為p;
根據(jù)如下公式:
計算第一集合A和第二集合B的相似度minhashsim(A,B)。
可選地,所述利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值的步驟之后還包括:
對于任意一個集合,將該集合中各元素對應(yīng)的所述第一哈希值按照由小至大或由大至小的順序進行排序。
為實現(xiàn)上述目的,本發(fā)明還提供了一種基于minhash的集合相似度計算系統(tǒng),包括:
哈希映射模塊,用于利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值,其中,m為整數(shù);
類組建立模塊,用于建立2k個類組,每個類組對應(yīng)一個標(biāo)簽,該標(biāo)簽為具有k個比特位長度的第二哈希值,不同類組對應(yīng)的標(biāo)簽不同,其中,k為整數(shù),且k小于m;
分配模塊,用于對于任意一個集合,將該集合中的各元素對應(yīng)的第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中;
最小哈希值確定模塊,用于根據(jù)分配結(jié)果確定該集合對應(yīng)于每個類組的最小哈希值,其中,若該類組中存在至少一個第一哈希值,則將該類組中最小的一個第一哈希值的后m-k個比特位的值作為該集合對應(yīng)于該類組的最小哈希值,若該類組中不存在第一哈希值,則該集合對應(yīng)于該類組的最小哈希值記為NULL;
最小哈希簽名生成模塊,用于將該集合對應(yīng)于每個類組的最小哈希值構(gòu)成數(shù)組,所述數(shù)組作為該集合的最小哈希簽名;
相似度計算模塊,用于根據(jù)任意兩個集合的最小哈希簽名計算該兩個集合的相似度。
可選地,所述兩個集合分別為第一集合A和第二集合B;
第一集合的最小哈希簽名記為H(A)
H(A)={h1(A),h2(A),……,hn(A)}
第二集合的最小哈希簽名記為H(A)
H(B)={h1(B),h2(B),……,hn(B)}
其中,hi(A)為第一集合對應(yīng)第i個類組的最小哈希值,i為大于等于1且小于等于n的整數(shù),n取值等于2k;
所述相似度計算模塊包括:
第一統(tǒng)計單元,用于根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)不等于NULL的hi(A)的數(shù)量,記為s;
第二統(tǒng)計單元,用于根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)等于NULL的hi(A)的數(shù)量,記為p;
計算單元,用于根據(jù)如下公式:
計算第一集合A和第二集合B的相似度minhashsim(A,B)。
可選地,還包括:排序模塊,用于在哈希映射模塊完成哈希映射后,對于任意一個集合,將該集合中各元素對應(yīng)的所述第一哈希值按照由小至大或由大至小的順序進行排序。
本發(fā)明具有以下有益效果:
本發(fā)明提供了一種基于minhash的集合相似度計算方法和系統(tǒng),包括:利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值,建立2k個類組,每個類組對應(yīng)一個標(biāo)簽,該標(biāo)簽為具有k個比特位長度的第二哈希值,不同類組對應(yīng)的標(biāo)簽不同;對于任意一個集合,將該集合中的各元素對應(yīng)的第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中;根據(jù)分配結(jié)果確定該集合對應(yīng)于每個類組的最小哈希值,其中,若該類組中存在至少一個第一哈希值,則將該類組中最小的一個第一哈希值的后m-k個比特位的值作為該集合對應(yīng)于該類組的最小哈希值,若該類組中不存在第一哈希值,則該集合對應(yīng)于該類組的最小哈希值記為NULL;將該集合對應(yīng)于每個類組的最小哈希值構(gòu)成數(shù)組,數(shù)組作為該集合的最小哈希簽名;根據(jù)任意兩個集合的最小哈希簽名計算該兩個集合的相似度。本發(fā)明的技術(shù)方案可大大提升最小哈希簽名速度,從而使得集合相似度計算的速度大大提升。
附圖說明
圖1為本發(fā)明實施例一提供的一種基于minhash的集合相似度計算方法的流程圖;
圖2為本發(fā)明實施例二提供的一種基于minhash的集合相似度計算系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
為使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖對本發(fā)明提供的一種基于minhash的集合相似度計算方法和系統(tǒng)進行詳細(xì)描述。
圖1為本發(fā)明實施例一提供的一種基于minhash的集合相似度計算方法的流程圖,如圖1所示,該集合相似度計算方法包括:
步驟S1、利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值。
在步驟S1中,將通過哈希函數(shù)將集合中的各元素映射為具有固定長度的第一哈希值,其中,第一哈希值的比特位數(shù)大于等于64,即m≥64。
步驟S2、建立2k個類組,每個類組對應(yīng)一個標(biāo)簽。
在步驟S2中,建立2k個類組,且為每個類組設(shè)置一個對應(yīng)標(biāo)簽,該標(biāo)簽為具有k個比特位長度的第二哈希值,其中,k為整數(shù),且k小于m,不同類組對應(yīng)的標(biāo)簽不同,該2k個標(biāo)簽可表示如下:
[000...000]
[000...001]
......
[111...110]
[111...111]
步驟S3、對于任意一個集合,將該集合中的各元素對應(yīng)的第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中。
在步驟S3中,針對某一個集合,根據(jù)該集合中的各元素對應(yīng)的第一哈希值的前k個比特位,將各第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中。
步驟S4、根據(jù)分配結(jié)果確定該集合對應(yīng)于每個類組的最小哈希值。
在步驟S4中,針對已經(jīng)完成分配的某個集合,對于2k個類組,若該類組中存在至少一個第一哈希值,則將該類組中的各第一哈希值(假定第一哈希值為無符號數(shù))進行比較(或?qū)⒏鞯谝还V档暮髆-k個比特位的值進行比較),確定出該類組中最小的一個第一哈希值,并將該最小的一個第一哈希值的后m-k個比特位的值作為該集合對應(yīng)于該類組的最小哈希值;若該類組中不存在第一哈希值,則該集合對應(yīng)于該類組的最小哈希值記為NULL(表示為空)。
步驟S5、將該集合對應(yīng)于每個類組的最小哈希值構(gòu)成數(shù)組,數(shù)組作為該集合的最小哈希簽名。
在步驟S5中,根據(jù)步驟S4得到的集合對應(yīng)于每個類組的最小哈希值,構(gòu)成一個數(shù)組,該數(shù)字為對應(yīng)的集合的最小哈希簽名。
在本發(fā)明中,通過上述步驟S1到步驟S5即可完成對集合的最小哈希簽名。在實際應(yīng)用中發(fā)現(xiàn),本發(fā)明中的最小哈希簽名的計算速度極快,經(jīng)測試,比現(xiàn)有技術(shù)中的最小哈希簽名的計算速度要快100倍以上。
步驟S6、根據(jù)任意兩個集合的最小哈希簽名計算該兩個集合的相似度。
在步驟S6中,若兩個集合分別為第一集合A和第二集合B,第一集合的最小哈希簽名記為H(A);
H(A)={h1(A),h2(A),……,hn(A)}
第二集合的最小哈希簽名記為H(B)
H(B)={h1(B),h2(B),……,hn(B)}
其中,hi(A)為第一集合對應(yīng)第i個類組的最小哈希值,i為大于等于1且小于等于n的整數(shù),n取值等于2k。
步驟S6具體包括:
步驟S601、根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)不等于NULL的hi(A)的數(shù)量,記為s。
在步驟S601中,統(tǒng)計第一集合的最小哈希簽名H(A)中同時滿足如下兩個條件(1、(2的hi(A)的數(shù)量s。
需要說明的是,在步驟S6中,也可以統(tǒng)計第二集合的最小哈希簽名H(B)中滿足hi(B)等于hi(A)且hi(B)不等于NULL的hi(B)的數(shù)量。
步驟S602、根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)等于NULL的hi(A)的數(shù)量,記為p。
在步驟S602中,統(tǒng)計第一集合的最小哈希簽名H(A)中同時滿足如下兩個條件(3、(4的hi(A)的數(shù)量s。
需要說明的是,在步驟S6中,也可以統(tǒng)計第二集合的最小哈希簽名H(B)中滿足hi(B)等于hi(A)且hi(B)等于NULL的hi(B)的數(shù)量。
步驟S603、根據(jù)如下公式:
計算第一集合A和第二集合B的相似度minhashsim(A,B)。
在步驟S603中,n-p表示最小哈希簽名的真實維度,即:如果某個類組,兩個集合(第一集合和第二集合)在該類組下都沒有任何可分配的元素(第一哈希值),則該類組相對于兩個集合無效,兩個集合無需針對該類組進行比較。
本實施例中,可選地,在步驟S1和步驟S3之間還包括:步驟S1'。
步驟S1'、對于任意一個集合,將該集合中各元素對應(yīng)的第一哈希值按照由小至大或由大至小的順序進行排序。
在本發(fā)明中,通過在步驟S3之前對集合中各元素對應(yīng)的第一哈希值進行排序,可有效提升步驟S3中對第一哈希值的分配速度。此外,通過將集合中各元素對應(yīng)的第一哈希值進行排序,還可保證處于相同類組中的第一哈希值是連續(xù)的,從而可有效提升步驟S4中確定類組中最小的一個第一哈希值的速度。
本發(fā)明實施例一提供了一種基于minhash的集合相似度計算方法,可大大提升最小哈希簽名速度,從而使得集合相似度計算的速度大大提升。
實施例二
圖2為本發(fā)明實施例二提供的一種基于minhash的集合相似度計算系統(tǒng)的結(jié)構(gòu)示意圖,如圖2所示,該集合相似度計算系統(tǒng)用于實現(xiàn)上述實施例一中的集合相似度計算方法,該集合相似度計算系統(tǒng)包括:哈希映射模塊1、類組建立模塊2、分配模塊3、最小哈希值確定模塊4、最小哈希簽名生成模塊5、相似度計算模塊6。
其中,哈希映射模塊1用于利用哈希函數(shù)將集合中的各元素映射為具有m個比特位長度的第一哈希值,其中,m為整數(shù)。
類組建立模塊2用于建立2k個類組,每個類組對應(yīng)一個標(biāo)簽,該標(biāo)簽為具有k個比特位長度的第二哈希值,不同類組對應(yīng)的標(biāo)簽不同,其中,k為整數(shù),且k小于m。
分配模塊3用于對于任意一個集合,將該集合中的各元素對應(yīng)的第一哈希值分配至與其前k個比特位相同的標(biāo)簽所對應(yīng)的類組中。
最小哈希值確定模塊4用于根據(jù)分配結(jié)果確定該集合對應(yīng)于每個類組的最小哈希值,其中,若該類組中存在至少一個第一哈希值,則將該類組中最小的一個第一哈希值的后m-k個比特位的值作為該集合對應(yīng)于該類組的最小哈希值,若該類組中不存在第一哈希值,則該集合對應(yīng)于該類組的最小哈希值記為NULL。
最小哈希簽名生成模塊5用于將該集合對應(yīng)于每個類組的最小哈希值構(gòu)成數(shù)組,數(shù)組作為該集合的最小哈希簽名。
相似度計算模塊6用于根據(jù)任意兩個集合的最小哈希簽名計算該兩個集合的相似度。
需要說明的是,對于本實施例中的哈希映射模塊1用于執(zhí)行上述實施例一中的步驟S1,本實施例中的類組建立模塊2用于執(zhí)行上述實施例一中的步驟S2,本實施例中的分配模塊3用于執(zhí)行上述實施例一中的步驟S3,本實施例中的最小哈希值確定模塊4用于執(zhí)行上述實施例一中的步驟S4,本實施例中的最小哈希簽名生成模塊5用于執(zhí)行上述實施例一中的步驟S5,本實施例中的相似度計算模塊6用于執(zhí)行上述實施例一中的步驟S6。對于各模塊的具體工作過程,可參見上述實施例一中相應(yīng)內(nèi)容,此處不再贅述。
可選地,兩個集合分別為第一集合A和第二集合B;
第一集合的最小哈希簽名記為H(A)
H(A)={h1(A),h2(A),……,hn(A)}
第二集合的最小哈希簽名記為H(B)
H(B)={h1(B),h2(B),……,hn(B)}
其中,hi(A)為第一集合對應(yīng)第i個類組的最小哈希值,i為大于等于1且小于等于n的整數(shù),n取值等于2k。
相似度計算模塊包括6:第一統(tǒng)計單元601、第二統(tǒng)計單元602和計算單元603。
其中,第一統(tǒng)計單元601用于根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)不等于NULL的hi(A)的數(shù)量,記為s。
第二統(tǒng)計單元602用于根據(jù)第一集合的最小哈希簽名H(A)和第二集合的最小哈希簽名H(B),統(tǒng)計第一集合的最小哈希簽名H(A)中滿足hi(A)等于hi(B)且hi(A)等于NULL的hi(A)的數(shù)量,記為p。
計算單元603用于根據(jù)如下公式:
計算第一集合A和第二集合B的相似度minhashsim(A,B)。
需要說明的是,對于本實施例中的第一統(tǒng)計單元601用于執(zhí)行上述實施例一中的步驟S601,本實施例中的第二統(tǒng)計單元602用于執(zhí)行上述實施例一中的步驟S602,本實施例中的計算單元603用于執(zhí)行上述實施例一中的步驟S603。對于各單元的具體工作過程,可參見上述實施例一中相應(yīng)內(nèi)容,此處不再贅述。
可選地,該集合相似度計算系統(tǒng)還包括:排序模塊7,排序模塊7用于在哈希映射模塊1完成哈希映射后,對于任意一個集合,將該集合中各元素對應(yīng)的第一哈希值按照由小至大或由大至小的順序進行排序。
本實施例中的排序模塊用于執(zhí)行上述實施例一中的步驟S1',具體內(nèi)容可參見上述實施例一中的描述。
本發(fā)明實施例二提供了一種基于minhash的集合相似度計算系統(tǒng),可大大提升最小哈希簽名速度,從而使得集合相似度計算的速度大大提升。
可以理解的是,以上實施方式僅僅是為了說明本發(fā)明的原理而采用的示例性實施方式,然而本發(fā)明并不局限于此。對于本領(lǐng)域內(nèi)的普通技術(shù)人員而言,在不脫離本發(fā)明的精神和實質(zhì)的情況下,可以做出各種變型和改進,這些變型和改進也視為本發(fā)明的保護范圍。