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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Locality Sensitive Hashing

發布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Locality Sensitive Hashing 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://sanzo.top/Algorithm/Locality-Sensitive-Hashing

試想你有一些文本它們可能有所重復,你需要對他們進行去重處理,傳統的做法是O(N2)O(N^2)O(N2),即對所有的文本對進行相似度的計算,然后進行排序得到結果。

假設N=106N=10^6N=106,需要進行N(N?1)2=5×1011\frac{N(N-1)}{2} = 5\times10^{11}2N(N?1)?=5×1011次計算,在果每秒計算10610^6106次,一天大概10510^5105秒,那么需要5天的時間,如果N=107N = 10^7N=107,則需要超過一年的時間。

顯然O(N2)O(N^2)O(N2)的復雜度不可取,Locality-Sensitive-Hashing(LSH)利用hash把相似高的文本分到同一個桶中,這樣過濾了大量不同的本文將計算降低到O(N)O(N)O(N)

對于具體的任務,一般分為一下三個步驟:

  • Shingling,將文本轉化為集合。
  • Min-Hashing,在保證相似度的前提下,將大的集合轉化為短的簽名。
  • Locality-Sensitive Hashing,關注可能來自相似文本的簽名對。
  • 接下來具體介紹這三個步驟。

    Shingling

    一般特征矩陣需要自己獲取,對于給定的文本,可以通過Shingling的方法構造特征集合。

    例如文本為”abcabe“,可以構造為k=2k=2k=2的集合,D={ab,bc,ca,be}D = \{ab, bc, ca, be\}D={ab,bc,ca,be},對于短的文本kkk一般取5,對于長的文本kkk取10。

    我們可以對集合進行hash,將一個長的字符串表示為一個4字節的數字,h(D)={1,3,2,7}h(D) = \{1, 3, 2, 7\}h(D)={1,3,2,7}

    得到文本的集合之后,就可以通過計算集合的相似度,從而判斷兩個文本的相似性。

    在計算相似度時,這里采用Jaccard similarity,sim(D1,D2)=∣D1∩D2∣∣D1∪D2∣sim(D_1, D_2) = \frac{|D_1\cap D_2|}{|D_1\cup D_2|}sim(D1?,D2?)=D1?D2?D1?D2??

    另外我們可以把集合表示為bit vector,這樣求交集相當于AND運算,并集相當于OR運算。

    MinHashing

    一般文本的集合都非常大,MinHashing相當于降維,同時近似的保持相似度的準確度。

    MinHashing的具體做法時,對Shingles的集合進行隨機打亂,bit vector為1的下標作為新的特征值。

    MinHash相等的概率剛好等于Jaccard Similarity值,Pr[hπ(D1)=hπ(D2)]=Jaccard(C1,C2)Pr[h_\pi(D_1) = h_\pi(D_2)] = Jaccard(C_1, C_2)Pr[hπ?(D1?)=hπ?(D2?)]=Jaccard(C1?,C2?)

    證明如下:

    對于兩個document的集合來說,一共有三種情況:

    • 對應維度全為1,設有xxx個。
    • 對應維度只有一個1,設有y個。
    • 對應維度全為0。

    其中全為0的情況不影響MinHash的值,第一個非零行為第一類的概率為xx+y\frac{x}{x + y}x+yx?

    另外從全排列考慮,第一行為第一類的情況有x(x+y?1)!x(x+y-1)!x(x+y?1)!,全排列為(x+y)!(x+y)!(x+y)!,即對特征進行全排列后,MinHash相等的次數即為Jaccard Similarity。

    因此我們可以使用MinHash近似表示Jaccard Similarity,同時將長的vector壓縮為短的簽名。

    假設有K=100K=100K=100個hash函數,對于每一列CCC和hash函數kik_iki?,初始化sig(C)[i]=∞sig(C)[i]=\inftysig(C)[i]=,對于每一行的非零值,如果ki(j)<sig(C)[i]k_i(j) < sig(C)[i]ki?(j)<sig(C)[i],則更新sig(C)[i]=ki(j)sig(C)[i] = k_i(j)sig(C)[i]=ki?(j)

    LSH

    通過MinHashing將特征矩陣轉化為小的簽名矩陣,接下來LSH將簽名矩陣劃分為bbb個band,每個band有rrr行,len(sig)=b×rlen(sig) = b\times rlen(sig)=b×r

    對于每個band,它們包含整體簽名的一部分,將這部分簽名通過hash映射到不同的桶中,如果兩個簽名相同它們就會映射到同一個桶中,經過b次映射,兩個節點至少有一次被分到同一個桶中,我們就認為這兩個節點的相似度更高。

    假設兩個簽名的相似度為ttt,那么在同一個band中每一行都相同的概率為trt^rtr,至少有一行不同的概率為1?tr1-t^r1?tr,所有的band都不行同的概率為(1?tr)b(1-t^r)^b(1?tr)b,至少有一個band的相同的概率為1?(1?tr)b1-(1-t^r)^b1?(1?tr)b

    另外bbbrrr是可調節的參數。

    參考文獻

    Finding Similar Items

    Mining of Massive Datasets

    總結

    以上是生活随笔為你收集整理的Locality Sensitive Hashing的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。