此篇文章主要是闡述了如何運用python完成Sim哈希算法,文章內(nèi)容依托于python的相關信息開展Sim哈希算法的詳細介紹一下,具有很強的參考意義,感興趣的朋友可以了解一下
1.為何需用Simhash?
傳統(tǒng)式相關性優(yōu)化算法:語義相似度測算,一般采用線性空間實體模型(VSM),先向文字中文分詞,提取特征,依據(jù)特點創(chuàng)建文字空間向量,把文字中間相關性測算轉化成矩陣的特征值之間的距離測算,如歐氏距離、余弦交角等。
缺陷:大數(shù)據(jù)技術前提下復雜性會比較高。
Simhash應用情景:測算規(guī)模性語義相似度,完成大量文本內(nèi)容去重。
Sim哈希算法基本原理:根據(jù)hash值較為相關性,根據(jù)2個字符串數(shù)組測算出來的hash值,開展取反實際操作,隨后獲得相距的數(shù)量,數(shù)據(jù)越多則差別越多。
2.文章內(nèi)容關鍵字svm算法優(yōu)化算法TD-IDF
高頻詞(TF):一個成語在全篇文章中存在的頻次與詞句總數(shù)量比例;
反向高頻詞(IDF):一個成語,在大多數(shù)文中出現(xiàn)頻率都很高,這個詞不有代表性的,就能夠降低它的作用,其實就是給予其比較小的權重值。
分子結構意味著文章內(nèi)容數(shù)量,真分數(shù)表明該詞句在各種文章內(nèi)容發(fā)生的篇幅。通常會采用真分數(shù)加一點的辦法,避免真分數(shù)為0的情況發(fā)生,在這一比率以后取對數(shù),便是IDF了。
最后用tf*idf獲得一個成語的權重值,從而測算篇文章核心關鍵詞。再根據(jù)每篇比照其關鍵字的方法去文章結構開展去重。sim哈希算法對效率特性開展均衡,既能非常少對比(關鍵字不可以取過多),又可有一個好的標志性(關鍵字不可以太少)。
3.Simhash基本原理
Simhash是一類部分比較敏感hash。即假設A、B具有很強的相關性,在hash之后,依然可以保持這類相關性,就稱為部分比較敏感hash。
獲得篇文章關鍵字結合,根據(jù)hash的辦法把關鍵字集合hash成一長串2進制,立即比照二進制,其相關性便是幾篇文本文檔的相關性,在查詢相關性時使用海明間距,則在比照二進制情況下,看它的有多少個位不一樣,就稱海明間距為是多少。
將文章內(nèi)容simhash獲得一長串64席的2進制,依據(jù)工作經(jīng)驗通常取海明間距為3做為閥值,則在64位2進制中,只要是有3位之內(nèi)不一樣,就能覺得2個文本文檔是相近的,這兒的閥值還可以根據(jù)自己的喜好來設定。就是把1個文本文檔hash之后獲得一長串二進制的優(yōu)化算法,稱這一個hash為simhash。
simhash實際完成過程如下所示:
1.將文本文檔中文分詞,取個論文的TF-IDF權重值最高前20個詞(feature)和權重值(weight)。即一篇文章文本文檔獲得了一個長短為20的(feature:weight)的結合。
2.對涉及的詞匯(feature),開展普通hach以后獲得了一個64求的2進制,獲得長短為20的(hash:weight)的結合。
3.依據(jù)(2)中獲得一長串二進制(hash)中相對應位置在1是0,對相對應部位取正逢weight和負數(shù)weight。比如一個詞語經(jīng)過(2)獲得(010111:5)經(jīng)過過程(3)以后可以獲得目錄[-5,5,-5,5,5,5]。從而可以獲得20個長短為64的目錄[weight,-weight...weight]意味著1個文本文檔。
4.對(3)中20個目錄開展列向累加獲得了一個目錄。如[-5,5,-5,5,5,5]、[-3,-3,-3,3,-3,3]、[1,-1,-1,1,1,1]開展列向累加獲得[-7,1,-9,9,3,9],那樣,對于1個文本文檔獲得,1個長短為64的目錄。
5.對(4)中獲得的頁面上每一個值作出判斷,當以負數(shù)時去0,正逢取1。比如,[-7,1,-9,9,3,9]獲得010111,這個就獲得了一個文本文檔的simhash值了。
6.測算相關性。兩個simhash取取反,看在其中1的數(shù)量是不是超出3。超出3則認定是不類似,應當小于等于3則認定是類似。
Simhash總體流程表如下所示:
4.Simhash的不足
完全無關的文本正好對應成了相同的simhash,精確度并不是很高,而且simhash更適用于較長的文本,但是在大規(guī)模語料進行去重時,simhash的計算速度優(yōu)勢還是很不錯的。
5.Simhash算法實現(xiàn)
#!/usr/bin/python #coding=utf-8 class Simhash: def __init__(self,tokens='',hashbits=128): self.hashbits=hashbits self.hash=self.simhash(tokens) def __str__(self): return str(self.hash) #生成simhash值 def simhash(self,tokens): v=[0]*self.hashbits for t in[self._string_hash(x)for x in tokens]:#t為token的普通hash值 for i in range(self.hashbits): bitmask=1<<i if t&bitmask: v<i>+=1#查看當前bit位是否為1,是的話將該位+1 else: v<i>-=1#否則的話,該位-1 fingerprint=0 for i in range(self.hashbits): if v<i>>=0: fingerprint+=1<<i return fingerprint#整個文檔的fingerprint為最終各個位>=0的和 #求海明距離 def hamming_distance(self,other): x=(self.hash^other.hash)&((1<<self.hashbits)-1) tot=0 while x: tot+=1 x&=x-1 return tot #求相似度 def similarity(self,other): a=float(self.hash) b=float(other.hash) if a>b: return b/a else: return a/b #針對source生成hash值 def _string_hash(self,source): if source=="": return 0 else: x=ord(source[0])<<7 m=1000003 mask=2**self.hashbits-1 for c in source: x=((x*m)^ord(c))&mask x^=len(source) if x==-1: x=-2 return x 測試: if __name__=='__main__': s='This is a test string for testing' hash1=Simhash(s.split()) s='This is a string testing 11' hash2=Simhash(s.split()) print(hash1.hamming_distance(hash2),"",hash1.similarity(hash2))
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/128830.html
摘要:徘徊和行程所用的時間使用指數(shù)分布生成,我們將時間設為分鐘數(shù),以便顯示清楚。迭代表示各輛出租車的進程在各輛出租車上調(diào)用函數(shù),預激協(xié)程。 前兩篇我們已經(jīng)介紹了python 協(xié)程的使用和yield from 的原理,這一篇,我們用一個例子來揭示如何使用協(xié)程在單線程中管理并發(fā)活動。。 什么是離散事件仿真 Wiki上的定義是: 離散事件仿真將系統(tǒng)隨時間的變化抽象成一系列的離散時間點上的事件,通過...
摘要:協(xié)作型過濾協(xié)同過濾是利用集體智慧的一個典型方法。這就是協(xié)同過濾的核心思想。要實現(xiàn)協(xié)同過濾,需要以下幾個步驟搜集偏好尋找相近用戶推薦物品搜集偏好首先,我們要尋找一種表達不同人及其偏好的方法。 協(xié)作型過濾 協(xié)同過濾是利用集體智慧的一個典型方法。要理解什么是協(xié)同過濾 (Collaborative Filtering, 簡稱CF),首先想一個簡單的問題,如果你現(xiàn)在想看個電影,但你不知道具體看哪...
摘要:用戶過去的偏好很可能展示或者反應未來的興趣偏好。數(shù)據(jù)集我們選用,下載地址數(shù)據(jù)集算法理論算法框架如圖,輸入是的評分矩陣,該矩陣非常稀疏。所以預測分兩步進行計算項目之間的相似性和根據(jù)相似性進行預測評分。 【參考文獻】:Sarwar B M . Item-based collaborative filtering recommendation algorithms[C]// Internat...
摘要:與介紹將圖片翻譯成文字一般被稱為光學文字識別,。是目前公認最優(yōu)秀最精確的開源系統(tǒng)。我們以圖片為例輸入命令識別結果如下只識別錯了一個字,識別率還是不錯的。最后加一句,對于彩色圖片的識別效果沒有黑白圖片的效果好。 OCR與Tesseract介紹 ??將圖片翻譯成文字一般被稱為光學文字識別(Optical Character Recognition,OCR)??梢詫崿F(xiàn)OCR 的底層庫并不多,...
閱讀 1066·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 901·2023-01-14 10:48
閱讀 2377·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 654·2023-01-14 10:09
閱讀 733·2023-01-14 10:02