ZZ I-Match算法 網頁去重-算法篇

I-Match算法 網頁去重-算法篇

 

 

網頁去重-算法篇  
前一篇(網頁去重-比較文本的相似度-Near duplication detection )提到了5個解決網頁去重的算法,這裏我想討論下這些算法1. I-Match 
2. Shingliing3. SimHashing( locality sensitive hash) 
4. Random Projection5. SpotSig 
6. combinedI-Match算法  
I-Match算法有一個基本的假設說:不經常出現的詞和經常出現的詞不會影響文檔的語義,所以這些詞是可以去掉的。  
算法的基本思想是:將文檔中有語義的單詞用hash的辦法表示成一個數字,數字的相似性既能表達文檔的相似性  
算法的框架是:  
1. 獲取文檔(或者是主體內容)  
2. 將文檔分解成token流,移除格式化的標籤  
3. 使用term的閾值(idf),保留有意義的tokens  
4. 插入tokens到升序排列的排序樹中  
5. 計算tokens的SHA1  
6. 將元組(doc_id,SHA hash) 插入到某一詞典中,如果詞典有衝突,這兩個文檔相似。 
算法有一個缺點是穩定性差。如果文檔的某個詞改變了,最終的hash值就會發生顯著的變化。對空文檔,算法是無效的。  
有一個解決辦法是,用隨機化的方法,參考Lexicon randomization for near-duplicate detection with I-Match。具體細節這裏就不提了 
Shingling算法  
Shingling算法說,I-Match以詞爲單位做hash顯然是不準確的,因爲它忽略了文檔之間的順序。另,Shingle指的是連續的若干個單詞的串。  
Shingling算法有個簡單的數學背景。如果一個shingle的長度爲k,那麼長度爲n的文檔就有n-k+1個shingle,每一個shingle可以用MD5或者其他算法表示成一個fingerprint,而兩個文檔的相似性Jacard相似性來表示,Jarcard公式是指兩個集合的相似性=集合之交/集合之並。爲了估計兩個文檔的相似性,有時候n-k+1個fingerprint還是太大了,所以取m個fingerprint函數,對每一個函數fi,都可以計算出n-k+1個fingerprint,取其中的最小的fingerprint,稱爲i-minvalue. 那麼一個文檔就有m個i-minvalue。數學上,Broder大師說: 
        平均來講,兩個文檔中相同的唯一single的比率和兩個文檔中相同的i-minvalue的比率是一樣的Shingling的算法框架是:  
1. 獲取文檔(或者是主體內容)  
2. 將文檔分解成n-k+1個shingle,取m個fingerprint函數,對每一個fingerpint函數計算i-minvalue值  
3. 將m個i-minvalue值組合成更少m’個surpersingle  
4.計算兩個文檔相同的surpergingle的個數a。  
5. 如果a大於某一個值b(say:2),那麼兩個文檔Jarcard 相似 
一般的參數設置爲:m=84,m’=6,b=2 
SimHash 算法 
locality sensitive hash算法博大精深。基本思想是,如果兩個東西相似,我可以用一個hash函數把他們投影到相近的空間中LSH。用到near duplication detection上,算法框架是:  
1. 將文檔轉換爲特徵的集合,每一個特徵有一個權重  
2. 利用LSH函數把特徵向量轉換爲f位的fingerprint,如:64  
3. 查找fingerprint的海明距離haha,看,多麼簡單和明朗,這裏的幾個問題及時尋找正確的LSH 
Random Projection算法  
shingling關注了文檔順序,但是忽略了文檔單詞出現的頻率,random projection說我要討論文檔的頻率。Random Projection也是很有意思的一種算法,它是一種隨機算法。簡單描述爲:  
1. 將每一個token映射到b位的空間。每一個維度是由{-1,1}組成。對所有頁面投影函數是一樣的  
2. 每一個頁面的b維度向量,是所有token的投影的簡單加和  
3. 最後把b維向量中的正數表示爲1,負數和0都寫成0  
4. 比較兩個page的b維向量一致的個數 
Charikar最牛的地方是,證明,兩個b位變量一致的位數的比率就是文檔向量的consine相似性。這裏的數學基礎還是很有意思的,如果感興趣,可以參考M.S. Charikar. Similarity Estimation Techniques for Rounding Algorithm(May 2002) 
SpotSig算法 
ref:SpotSigs:Robust and Efficient Near Duplicate Detection in Large Web Collection  
SpotSig是個比較有意思的算法,它說,我爲什麼要關注所有的單詞啊,我要關注的單詞是有語義的詞,哪些是有語義的詞呢?哦,想 the a this an 的等虛詞後面的就是我要關注的東西羅。Spot就是指這些虛詞的後面的詞串。然後呢,每一個文檔我都有很多很多Spot了,現在一個文檔就是一個Spot的集合,兩個文檔是相似程度就是集合的Jaccard相似度。算法雖然簡單,但是我想重點是兩個比較有借鑑意義的工程上的性能考慮。 
     1. Optimal Partition 
     Sim(A,B) = | A B交集| / | A B 並集| <= min(A,B)/max(A,B) <= |A|/|B| say: |A|<|B|好了,這是一個很好的枝剪條件,如果文檔spot vector的個數比小於某個值(當然是,小 / 大),就可以完全不用求交,並了。Optimal Partition就是說,好啊,我把每一個文檔的spot vector的長度都投影到相應的從小到大的bucket中,保證|d1|/|d2| >=r if |d1| < |d2| . 且不存在這樣的反例。另一個保證是這個bucket是滿足條件的最小的。有了這個partition,我們最多隻用關心相鄰的三個bucket了 
   2. Inverted Index Pruning   說,兩個文檔,如果能相似,起碼有一個公共的spot。逆向索引說的就是把spot做爲index,包含它的所有文檔作爲其value。有了這兩個工具,計算複雜度可以明顯下降,因爲它不會計算不能是duplication的文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章