simhash簡介

先貼一張網上的圖片:

這裏寫圖片描述

解釋一下圖片:這裏feature可以指一篇文檔分詞後的某個詞,即將文檔中的某個詞作爲一個特徵。weight是這個詞的權重,這裏可以是這個詞在這個句子中出現的次數。

這裏的hash算法就是傳統的hash算法,通過調用一個hash函數實現的。

simhash是爲了計算一篇文檔之間的相似度存在的,通過simhash算法可以計算出文檔的simhash值,通過各個文檔計算出的二進制值來計算文檔之間的漢明距離,然後根據漢明距離來比較文檔之間的相似度。漢明距離是指兩個相同長度的字符串相同位置上不同的字符的個數。

simhash算法分爲5個步驟:分詞、hash、加權、合併、降維,具體過程如下所述:

分詞
給定一段語句,進行分詞,得到有效的特徵向量,然後爲每一個特徵向量設置1-5等5個級別的權重(如果是給定一個文本,那麼特徵向量可以是文本中 的詞,其權重可以是這個詞出現的次數)。例如給定一段語句:“CSDN博客結構之法算法之道的作者July”,分詞後爲:“CSDN 博客 結構 之 法 算法 之 道 的 作者 July”,然後爲每個特徵向量賦予權值:CSDN(4) 博客(5) 結構(3) 之(1) 法(2) 算法(3) 之(1) 道(2) 的(1) 作者(5) July(5),其中括號裏的數字代表這個單詞在整條語句中的重要程度,數字越大代表越重要。
hash
通過hash函數計算各個特徵向量的hash值,hash值爲二進制數01組成的n-bit簽名。比如“CSDN”的hash值Hash(CSDN)爲100101,“博客”的hash值Hash(博客)爲“101011”。就這樣,字符串就變成了一系列數字。
加權
在hash值的基礎上,給所有特徵向量進行加權,即W = Hash * weight,且遇到1則hash值和權值正相乘,遇到0則hash值和權值負相乘。例如給“CSDN”的hash值“100101”加權得 到:W(CSDN) = 100101*4 = 4 -4 -4 4 -4 4,給“博客”的hash值“101011”加權得到:W(博客)=101011*5 = 5 -5 5 -5 5 5,其餘特徵向量類似此般操作。
合併
將上述各個特徵向量的加權結果累加,變成只有一個序列串。拿前兩個特徵向量舉例,例如“CSDN”的“4 -4 -4 4 -4 4”和“博客”的“5 -5 5 -5 5 5”進行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。
降維
對於n-bit簽名的累加結果,如果大於0則置1,否則置0,從而得到該語句的simhash值,最後我們便可以根據不同語句simhash的海 明距離來判斷它們的相似度。例如把上面計算出來的“9 -9 1 -1 1 9”降維(某位大於0記爲1,小於0記爲0),得到的01串爲:“1 0 1 0 1 1”,從而形成它們的simhash簽名。

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