亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于minhash的集合相似度計算方法和系統(tǒng)與流程

文檔序號:11917453閱讀:425來源:國知局
一種基于minhash的集合相似度計算方法和系統(tǒng)與流程

本發(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ā)明的保護范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1