字符串匹配算法之SimHash算法


SimHash算法

  由於實驗室和互聯網基本沒啥關系,也就從來沒有關注過數據挖掘相關的東西。在實際工作中,第一次接觸到匹配和聚類等工作,雖然用一些簡單的匹配算法可以做小數據的聚類,但數據量達到一定的時候就束手無策了。

  所以,趁着周末把這方面的東西看了看,做個筆記。

來歷

  google的論文“detecting near-duplicates for web crawling”--------simhash。

  Google采用這種算法來解決萬億級別的網頁的去重任務。  

基本思想

  simhash算法的主要思想是降維,將高維的特征向量映射成一個低維的特征向量,通過兩個向量的Hamming Distance來確定文章是否重復或者高度近似。

步驟:  

  1. 對於給定的一段語句,進行分詞,得到有效的特征向量
  2. 為每一個特征向量設置一個權值
  3. 對每一個特征向量計算hash值,為01組成的n-bit簽名
  4. 所有特征向量進行加權(1則為正,0則為負),然后累加
  5. 對於n-bit簽名的累加結果,如果>0置1,否則置0
  6. 得到該語句的simhash值
  7. 根據不同語句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


免責聲明!

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



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