日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在大数据中如何寻找相似的文档(shingle, minhash, LSH)(一)

發(fā)布時間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在大数据中如何寻找相似的文档(shingle, minhash, LSH)(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ps: 文章翻譯與 Mining of Massive Datasets

場景:在一堆非常多的文檔中,找到相似的文檔,或者對文檔間的相似性進(jìn)行評估。

當(dāng)應(yīng)用于此類目的的時候,我們最常用的用來表示一篇文檔的方法是:shingling。 1. k-shingles 可以把一篇文檔看成一個字符串。那么一篇文檔的k-shingle就是在這篇文檔中出過現(xiàn)的任何長度為k的字符串。k-shingles就是改篇文檔所有k-shingle的集合。 (那么k的大小決定于什么因素呢? 與文檔的長度和所有的字符個數(shù)有關(guān)。k的取值一般要滿足一個規(guī)則:k的取值應(yīng)該能夠滿足,任何一個給定的shingle出現(xiàn)在任何給定的文檔中的概率都非常低。) ?(一般對于郵件類的文檔,k取值為5是最為合適的。假設(shè)在郵件中一般只會出現(xiàn)字母字符和空格字符。那么將會有27^5=14,348,907個可能的shingles。而一般的Email的字符長度會遠(yuǎn)小于14million。而在實際的測試中k=5也確實是表現(xiàn)的非常好。而對于長文檔,如研究論文等k取9是一個安全的取值。) 2. Hashing Shingles 我們可以選擇一個hash函數(shù)來將k-shingle映射成為數(shù)值,這樣對文檔的表示形式就是一群整數(shù)的集合。 3. ?對于單詞建立shingles 除了將文檔看成字符串,我們也可以以單詞為個體建立shingle。對于新聞類的文檔,建立單詞的shingle是非常有效的。(對于新聞類的文檔,會出現(xiàn)非常多的停用詞,停用詞一般不能告訴我們文檔的重要信息,所以一般會先去掉停用詞) (然而,對于在新聞類文檔中找到兩個類似的文檔問題,研究發(fā)現(xiàn),對于這樣的shingle:‘一個停用詞后邊緊跟著兩個詞,不管后邊的兩個詞是不是停用詞’ ? 能夠形成非常有用的shingles集合。它的好處在于,可以讓新聞類文檔形成的shingles集合中,與webPage本身有關(guān)的多于與周圍環(huán)境有關(guān)的?<原因未知,書中也沒有更多的說明>。這樣非常合適這樣的目的:在一大堆網(wǎng)頁中,找出網(wǎng)頁中文章是相關(guān)的,而不管文章周圍的內(nèi)容。) 4. ?保持相似度的集合摘要(MinHashing) 可以發(fā)現(xiàn),文檔的shingles集合是非常大的,盡管我們用hash將其映射為4byte或者更大的整數(shù)。假設(shè)我們有上百萬的文檔,那么內(nèi)存中就會放不下這些shingles的集合。 我們的目標(biāo)就是把大數(shù)據(jù)量的shingles集合變換為非常小的代表(稱之為簽名)。而且這樣的簽名應(yīng)該有這樣的性質(zhì): 能夠很容易的對兩個簽名集合進(jìn)行比較,并且能夠較簡單的計算兩個簽名集合的jaccard距離;而且,簽名集合計算出來的的相似度(jaccard距離)應(yīng)該和實際的相差不大,簽名集合越大,越能接近準(zhǔn)確值。 MinHashing就是具有這些性質(zhì)的獲取簽名的一種有效方法。 簽名一般大概會取幾百個左右,每一個值都是原代表集合的一個不同的MinHash值。 那么如何計算一個集合的minhash值呢? 首先,對集合的表示方法進(jìn)行改變,假設(shè)現(xiàn)在三篇文檔,我們用下面的方式來表示,稱之為characteristic matrix; 左邊的一列是所有出現(xiàn)過的元素。這樣每一篇文檔被表示為0,1集合。
elements1s2s3
a100
b001
c010
d101
e001
若要求一個文檔的minhash值,首先對每一列的元素進(jìn)行同樣的重新排列,相當(dāng)于把最左側(cè)的element的順序進(jìn)行重排;然后,每一個文檔的一個minhash值就是該列元素中第一’1‘所在位置的元素;(假設(shè)上表中就是已經(jīng)重排后的矩陣,那么s1的該minhash值就是a, s2是c; s3是b;) 同上,我們?nèi)装賯€不同的minhash函數(shù)對矩陣進(jìn)行不同的重排,就可以得到每個文檔的簽名(元素數(shù)目和所取得函數(shù)數(shù)目相同) 分析上邊的計算過程,我們可以發(fā)現(xiàn),在實際計算中,我們可以不用真的對所有元素進(jìn)行重排(對于大數(shù)據(jù)量文檔來說這是一個非常不現(xiàn)實的過程),因為我們只要找到第一個不元素1所在的位置就行了,所需要的只是按照minhash函數(shù)的規(guī)定一次遍歷元素集直到知道元素1為止。 5. 如何計算MinHash 簽名 書上給出的是這樣的方法: 由于對characteristic matrix的行(一般是百萬甚至十億級別的數(shù)量)進(jìn)行重排是非常耗時的。所以我們通過hash函數(shù)來模擬重排過程,利用hash函數(shù)將行號映射到與行數(shù)相同的buckets中;hash的過程可能會有沖突,不過當(dāng)k非常大而且沖突并不是非常多的時候區(qū)別并不是很大。 首先隨機選取n個hansh函數(shù);h1,h2.....hn;
rows1s2s3s4h1= x+1 mod 5
010011
100102
201013
310114
400100
我們用SIG(i,c)用來存儲第i個hash函數(shù)和第c列數(shù)據(jù)(文檔c的變換表示)的簽名值,并且初始化為無窮大。 其次沒我們對每一行r進(jìn)行如下處理: 1. ?計算 h1(r),h2(r)....hn(r); 2. ?對每一列c進(jìn)行: ?如果 c列r行的數(shù)值是0,什么也不做; ?否則, 對每一個i=1,2,....n 設(shè)置SIG(i,c) = min(SIG(i,c), hi(r));也就是設(shè)置為當(dāng)前的SIG(i,c)值和hi(r)的最小值。 (過程相當(dāng)于在計算的過程中,不斷用重排后位置最靠前且數(shù)值為1的行號放在相應(yīng)的SIG中,從而達(dá)到前文所述的求簽名值得目的) 通過上面的方法就可以求得一篇文檔的minhan簽名。但是盡管我們通過minhash將文檔壓縮為小的簽名值,并且能保證相互間相似度的計算;我們?nèi)圆荒芎苡行У恼业较嗨贫茸罡叩奈臋n對,因為要比較的文檔數(shù)目可能非常大。這時候,如果我們的目標(biāo)找到相似度在一定閾值以上的文檔對,或者最相似的文檔對;而不是計算所有的文檔對的相似度,那么我們就可以采用圖像處理經(jīng)常使用的LSH技術(shù)來簡化計算。

總結(jié)

以上是生活随笔為你收集整理的在大数据中如何寻找相似的文档(shingle, minhash, LSH)(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。