成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何運(yùn)用python完成Sim哈希算法

89542767 / 664人閱讀

  此篇文章主要是闡述了如何運(yùn)用python完成Sim哈希算法,文章內(nèi)容依托于python的相關(guān)信息開(kāi)展Sim哈希算法的詳細(xì)介紹一下,具有很強(qiáng)的參考意義,感興趣的朋友可以了解一下


  1.為何需用Simhash?


  傳統(tǒng)式相關(guān)性優(yōu)化算法:語(yǔ)義相似度測(cè)算,一般采用線性空間實(shí)體模型(VSM),先向文字中文分詞,提取特征,依據(jù)特點(diǎn)創(chuàng)建文字空間向量,把文字中間相關(guān)性測(cè)算轉(zhuǎn)化成矩陣的特征值之間的距離測(cè)算,如歐氏距離、余弦交角等。


  缺陷:大數(shù)據(jù)技術(shù)前提下復(fù)雜性會(huì)比較高。


  Simhash應(yīng)用情景:測(cè)算規(guī)模性語(yǔ)義相似度,完成大量文本內(nèi)容去重。


  Sim哈希算法基本原理:根據(jù)hash值較為相關(guān)性,根據(jù)2個(gè)字符串?dāng)?shù)組測(cè)算出來(lái)的hash值,開(kāi)展取反實(shí)際操作,隨后獲得相距的數(shù)量,數(shù)據(jù)越多則差別越多。


  2.文章內(nèi)容關(guān)鍵字svm算法優(yōu)化算法TD-IDF


  高頻詞(TF):一個(gè)成語(yǔ)在全篇文章中存在的頻次與詞句總數(shù)量比例;


  反向高頻詞(IDF):一個(gè)成語(yǔ),在大多數(shù)文中出現(xiàn)頻率都很高,這個(gè)詞不有代表性的,就能夠降低它的作用,其實(shí)就是給予其比較小的權(quán)重值。


  分子結(jié)構(gòu)意味著文章內(nèi)容數(shù)量,真分?jǐn)?shù)表明該詞句在各種文章內(nèi)容發(fā)生的篇幅。通常會(huì)采用真分?jǐn)?shù)加一點(diǎn)的辦法,避免真分?jǐn)?shù)為0的情況發(fā)生,在這一比率以后取對(duì)數(shù),便是IDF了。


  最后用tf*idf獲得一個(gè)成語(yǔ)的權(quán)重值,從而測(cè)算篇文章核心關(guān)鍵詞。再根據(jù)每篇比照其關(guān)鍵字的方法去文章結(jié)構(gòu)開(kāi)展去重。sim哈希算法對(duì)效率特性開(kāi)展均衡,既能非常少對(duì)比(關(guān)鍵字不可以取過(guò)多),又可有一個(gè)好的標(biāo)志性(關(guān)鍵字不可以太少)。


  3.Simhash基本原理


  Simhash是一類部分比較敏感hash。即假設(shè)A、B具有很強(qiáng)的相關(guān)性,在hash之后,依然可以保持這類相關(guān)性,就稱為部分比較敏感hash。


  獲得篇文章關(guān)鍵字結(jié)合,根據(jù)hash的辦法把關(guān)鍵字集合hash成一長(zhǎng)串2進(jìn)制,立即比照二進(jìn)制,其相關(guān)性便是幾篇文本文檔的相關(guān)性,在查詢相關(guān)性時(shí)使用海明間距,則在比照二進(jìn)制情況下,看它的有多少個(gè)位不一樣,就稱海明間距為是多少。


  將文章內(nèi)容simhash獲得一長(zhǎng)串64席的2進(jìn)制,依據(jù)工作經(jīng)驗(yàn)通常取海明間距為3做為閥值,則在64位2進(jìn)制中,只要是有3位之內(nèi)不一樣,就能覺(jué)得2個(gè)文本文檔是相近的,這兒的閥值還可以根據(jù)自己的喜好來(lái)設(shè)定。就是把1個(gè)文本文檔hash之后獲得一長(zhǎng)串二進(jìn)制的優(yōu)化算法,稱這一個(gè)hash為simhash。


  simhash實(shí)際完成過(guò)程如下所示:


  1.將文本文檔中文分詞,取個(gè)論文的TF-IDF權(quán)重值最高前20個(gè)詞(feature)和權(quán)重值(weight)。即一篇文章文本文檔獲得了一個(gè)長(zhǎng)短為20的(feature:weight)的結(jié)合。


  2.對(duì)涉及的詞匯(feature),開(kāi)展普通hach以后獲得了一個(gè)64求的2進(jìn)制,獲得長(zhǎng)短為20的(hash:weight)的結(jié)合。


  3.依據(jù)(2)中獲得一長(zhǎng)串二進(jìn)制(hash)中相對(duì)應(yīng)位置在1是0,對(duì)相對(duì)應(yīng)部位取正逢weight和負(fù)數(shù)weight。比如一個(gè)詞語(yǔ)經(jīng)過(guò)(2)獲得(010111:5)經(jīng)過(guò)過(guò)程(3)以后可以獲得目錄[-5,5,-5,5,5,5]。從而可以獲得20個(gè)長(zhǎng)短為64的目錄[weight,-weight...weight]意味著1個(gè)文本文檔。


  4.對(duì)(3)中20個(gè)目錄開(kāi)展列向累加獲得了一個(gè)目錄。如[-5,5,-5,5,5,5]、[-3,-3,-3,3,-3,3]、[1,-1,-1,1,1,1]開(kāi)展列向累加獲得[-7,1,-9,9,3,9],那樣,對(duì)于1個(gè)文本文檔獲得,1個(gè)長(zhǎng)短為64的目錄。


  5.對(duì)(4)中獲得的頁(yè)面上每一個(gè)值作出判斷,當(dāng)以負(fù)數(shù)時(shí)去0,正逢取1。比如,[-7,1,-9,9,3,9]獲得010111,這個(gè)就獲得了一個(gè)文本文檔的simhash值了。


  6.測(cè)算相關(guān)性。兩個(gè)simhash取取反,看在其中1的數(shù)量是不是超出3。超出3則認(rèn)定是不類似,應(yīng)當(dāng)小于等于3則認(rèn)定是類似。


  Simhash總體流程表如下所示:

01.png

  4.Simhash的不足


  完全無(wú)關(guān)的文本正好對(duì)應(yīng)成了相同的simhash,精確度并不是很高,而且simhash更適用于較長(zhǎng)的文本,但是在大規(guī)模語(yǔ)料進(jìn)行去重時(shí),simhash的計(jì)算速度優(yōu)勢(shì)還是很不錯(cuò)的。


  5.Simhash算法實(shí)現(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#查看當(dāng)前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#整個(gè)文檔的fingerprint為最終各個(gè)位>=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
  #針對(duì)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
  測(cè)試:
  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ī)?lái)幫助。


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128830.html

相關(guān)文章

  • python協(xié)程3:用仿真實(shí)驗(yàn)學(xué)習(xí)協(xié)程

    摘要:徘徊和行程所用的時(shí)間使用指數(shù)分布生成,我們將時(shí)間設(shè)為分鐘數(shù),以便顯示清楚。迭代表示各輛出租車的進(jìn)程在各輛出租車上調(diào)用函數(shù),預(yù)激協(xié)程。 前兩篇我們已經(jīng)介紹了python 協(xié)程的使用和yield from 的原理,這一篇,我們用一個(gè)例子來(lái)揭示如何使用協(xié)程在單線程中管理并發(fā)活動(dòng)。。 什么是離散事件仿真 Wiki上的定義是: 離散事件仿真將系統(tǒng)隨時(shí)間的變化抽象成一系列的離散時(shí)間點(diǎn)上的事件,通過(guò)...

    banana_pi 評(píng)論0 收藏0
  • 協(xié)同過(guò)濾算法

    摘要:協(xié)作型過(guò)濾協(xié)同過(guò)濾是利用集體智慧的一個(gè)典型方法。這就是協(xié)同過(guò)濾的核心思想。要實(shí)現(xiàn)協(xié)同過(guò)濾,需要以下幾個(gè)步驟搜集偏好尋找相近用戶推薦物品搜集偏好首先,我們要尋找一種表達(dá)不同人及其偏好的方法。 協(xié)作型過(guò)濾 協(xié)同過(guò)濾是利用集體智慧的一個(gè)典型方法。要理解什么是協(xié)同過(guò)濾 (Collaborative Filtering, 簡(jiǎn)稱CF),首先想一個(gè)簡(jiǎn)單的問(wèn)題,如果你現(xiàn)在想看個(gè)電影,但你不知道具體看哪...

    Batkid 評(píng)論0 收藏0
  • Item-Based Collaborative Filtering Recommendation

    摘要:用戶過(guò)去的偏好很可能展示或者反應(yīng)未來(lái)的興趣偏好。數(shù)據(jù)集我們選用,下載地址數(shù)據(jù)集算法理論算法框架如圖,輸入是的評(píng)分矩陣,該矩陣非常稀疏。所以預(yù)測(cè)分兩步進(jìn)行計(jì)算項(xiàng)目之間的相似性和根據(jù)相似性進(jìn)行預(yù)測(cè)評(píng)分。 【參考文獻(xiàn)】:Sarwar B M . Item-based collaborative filtering recommendation algorithms[C]// Internat...

    voyagelab 評(píng)論0 收藏0
  • Python圖像處理之圖片文字識(shí)別(OCR)

    摘要:與介紹將圖片翻譯成文字一般被稱為光學(xué)文字識(shí)別,。是目前公認(rèn)最優(yōu)秀最精確的開(kāi)源系統(tǒng)。我們以圖片為例輸入命令識(shí)別結(jié)果如下只識(shí)別錯(cuò)了一個(gè)字,識(shí)別率還是不錯(cuò)的。最后加一句,對(duì)于彩色圖片的識(shí)別效果沒(méi)有黑白圖片的效果好。 OCR與Tesseract介紹 ??將圖片翻譯成文字一般被稱為光學(xué)文字識(shí)別(Optical Character Recognition,OCR)??梢詫?shí)現(xiàn)OCR 的底層庫(kù)并不多,...

    W4n9Hu1 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<