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) = 1001014 = 4 -4 -4 4 -4 4,給“博客”的hash值“101011”加權得到:W(博客)=1010115 = 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簽名。

作者:海濤anywn
來源:CSDN
原文:https://blog.csdn.net/lihaitao000/article/details/52355704
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM