SimHash算法
由於實驗室和互聯網基本沒啥關系,也就從來沒有關注過數據挖掘相關的東西。在實際工作中,第一次接觸到匹配和聚類等工作,雖然用一些簡單的匹配算法可以做小數據的聚類,但數據量達到一定的時候就束手無策了。
所以,趁着周末把這方面的東西看了看,做個筆記。
來歷
google的論文“detecting near-duplicates for web crawling”--------simhash。
Google采用這種算法來解決萬億級別的網頁的去重任務。
基本思想
simhash算法的主要思想是降維,將高維的特征向量映射成一個低維的特征向量,通過兩個向量的Hamming Distance來確定文章是否重復或者高度近似。
步驟:
- 對於給定的一段語句,進行分詞,得到有效的特征向量
- 為每一個特征向量設置一個權值
- 對每一個特征向量計算hash值,為01組成的n-bit簽名
- 所有特征向量進行加權(1則為正,0則為負),然后累加
- 對於n-bit簽名的累加結果,如果>0置1,否則置0
- 得到該語句的simhash值
- 根據不同語句simhash的海明距離就來判斷相似程度
解析的不好,看一下大神畫的圖,你就會懂了
問題
simhash用於比較大文本,比如500字以上效果都還蠻好,距離小於3的基本都是相似,誤判率也比較低。
這樣的話,小文本呢?如何解決?
該博客給出一個思路是,將短文本抽象出有序關鍵字,計算此有序字串的simhash值,尋找simhash相等的集合,縮小的搜索范圍。還提到了並查集和bloom filter。
參考
http://www.lanceyan.com/tech/arch/simhash_hamming_distance_similarity.html
http://www.cnblogs.com/zhengyun_ustc/archive/2012/06/12/sim.html
http://blog.jobbole.com/21928/
![]()
本作品采用 知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本許可協議進行許可。歡迎轉載,請注明出處:
轉載自: cococo點點 http://www.cnblogs.com/coder2012