LSH︱python實現區域性敏感雜湊——LSHash(二)
關於區域性敏感雜湊演算法,之前用R語言實現過,但是由於在R中效能太低,於是放棄用LSH來做相似性檢索。學了Python發現很多模組都能實現,而且通過隨機投影森林讓查詢資料更快,覺得可以試試大規模應用在資料相似性檢索+去重的場景。
私認為,文字的相似性可以分為兩類:一類是機械相似性;一類是語義相似性。
機械相似性代表著,兩個文字內容上的相關程度,比如“你好嗎”和“你好”的相似性,純粹代表著內容上字元是否完全共現,應用場景在:文章去重;
語義相似性代表著,兩個文字語義上的相似程度,比如“蘋果”和“公司”的相似性,本篇不做這一討論
一、LSHash介紹
這個模組是python裡面專門來實現LSH,比較特別的有:
- 通過使用NumPy陣列的計算將高維資料快速雜湊。
- 支援多雜湊索引
- 內建通常的距離函式/排名輸出
安裝
pip install lshash
.
1、主函式
LSHash(hash_size, input_dim, num_of_hashtables=1, storage=None, matrices_filename=None, overwrite=False)
- hash_size:
二進位制雜湊的長度。
- input_dim:
輸入變數的維度
- num_hashtables = 1:
(optional)多索引查詢時雜湊表數量。
storage = None:
Specify the name of the storage to be used for the index storage. Options include “redis”.
儲存matrices_filename = None:
文件儲存,以.npz方式
- overwrite = False:
是否覆蓋原檔案
.
2、函式:lsh.index(input_point, extra_data=None)
- input_point:
輸入
- extra_data = None:
(optional) Extra data to be added along with the input_point.
.
3、查詢函式:lsh.query(query_point, num_results=None, distance_func=”euclidean”):
- query_point:
The query data point is an array or tuple of numbers of input_dim.
- num_results = None:
(optional) The number of query results to return in ranked order. By default all results will be returned.
- distance_func = “euclidean”:
強調:這裡的距離函式有,euclidean,true_euclidean,centred_euclidean,cosine,l1norm,hamming等多種。預設是euclidean 距離。
.
二、簡單案例
>>> from lshash import LSHash
>>> lsh = LSHash(6, 8)
>>> lsh.index([1,2,3,4,5,6,7,8])
>>> lsh.index([2,3,4,5,6,7,8,9])
>>> lsh.index([10,12,99,1,5,31,2,3])
>>> lsh.query([1,2,3,4,5,6,7,7])
[((1, 2, 3, 4, 5, 6, 7, 8), 1.0),
((2, 3, 4, 5, 6, 7, 8, 9), 11)]
LSHash(6, 8),建立一個8維度,6-bits的雜湊,初始化一下;
lsh.index,資料載入的過程;
lsh.query,查詢。
這裡可以選擇自己喜歡的距離。
相關推薦
LSH︱python實現區域性敏感雜湊——LSHash(二)
關於區域性敏感雜湊演算法,之前用R語言實現過,但是由於在R中效能太低,於是放棄用LSH來做相似性檢索。學了Python發現很多模組都能實現,而且通過隨機投影森林讓查詢資料更快,覺得可以試試大規模應用在資料相似性檢索+去重的場景。 私認為,文字的相似性可以
區域性敏感雜湊(原始LSH)python實現
最近短期計劃是學習一下Python,最好的學習方式當然是實踐了,今天用Python實現了下lsh演算法,程式碼比較簡陋。。。(2016.1.17) origionalLSH.py: import random class Bucket: feature
【機器學習】使用Python中的區域性敏感雜湊(LSH)構建推薦引擎
學習如何使用LSH在Python中構建推薦引擎; 一種可以處理數十億行的演算法 你會學到: 在本教程結束時,讀者可以學習如何: 通過建立帶狀皰疹來檢查和準備LSH的資料 選擇LSH的引數 為LSH建立Minhash 使用LSH Query推薦會議論文 使用LSH
LSH(區域性敏感雜湊演算法)實現文字的相似性比對
# @Time : 2017/10/19 10:09 # @Author : Jalin Hu # @File : main.py # @Software: PyCharm import os import jieba import collections import random from
LSH Locality-Sensitive Hashing 區域性敏感雜湊演算法總結
http://www.cppblog.com/Files/humanchao/LSH(Locality%20Sensitive%20Hashing).zip參考文獻:Website:Paper:[1] Approximate nearest neighbor: towards removing the cur
最近鄰和K近鄰及其優化演算法LSH(區域性敏感雜湊,Locality Sensitive Hashing) Kd-Tree
引言 在處理大量高維資料時,如何快速地找到最相似的資料是一個比較難的問題。如果是低維的小量資料,線性查詢(Linear Search)就可以解決,但面對海量的高維資料集如果採用線性查詢將會非常耗時。因此,為了解決該問題通常採用些優化演算法。稱之為近似最近鄰查詢
LSHash(區域性敏感雜湊)
原載:http://cool.sinaapp.com 作者:junGle 原文網址:http://1.cool.sinaapp.com/?p=911 前文所說的minhash,比較的是jaccard相似度,基於兩兩來比較的話,如果文件數很大,比如:100w文件,根據排
區域性敏感雜湊演算法的實現
近來由於工作需要,需要將字串的相似度的計算速度進行提升。之前曾採用最長公共子序列、編輯距離等演算法實現過,但總滿足不了實時比較的效能及速度需求。前些天由同事推薦區域性敏感雜湊演算法,便嘗試了一把,結果發現速度還不錯,本著記錄與分享的精神,簡單總結下實現的過程及思路。 【Sh
從NLP任務中文字向量的降維問題,引出LSH(Locality Sensitive Hash 區域性敏感雜湊)演算法及其思想的討論
1. 引言 - 近似近鄰搜尋被提出所在的時代背景和挑戰 0x1:從NN(Neighbor Search)說起 ANN的前身技術是NN(Neighbor Search),簡單地說,最近鄰檢索就是根據資料的相似性,從資料集中尋找與目標資料最相似的專案,而這種相似性通常會被量化到空間上資料之間的距離,例如歐幾里
區域性敏感雜湊LSH(Locality-Sensitive Hashing)——海量資料相似性查詢技術
一、 前言 最近在工作中需要對海量資料進行相似性查詢,即對微博全量使用者進行關注相似度計算,計算得到每個使用者關注相似度最高的TOP-N個使用者,首先想到的是利用簡單的協同過濾,先定義相似性度量(cos,Pearson,Jaccard),然後利用通過兩兩計算相似度,計算top-n進行篩選,這種方法的時
[Algorithm] 區域性敏感雜湊演算法(Locality Sensitive Hashing)
然後看第一列的第一個是1的行是第幾行,是第2行,同理再看二三四列,分別是1,2,1,因此這四列(四個document)在這個置換下,被雜湊成了2,1,2,1,就是右圖中的藍色部分,也就相當於每個document現在是1維。再通過另外兩個置換然後再hash,又得到右邊的另外兩行,於是最終結果是每個docum
區域性敏感雜湊演算法
3、計算相似性。使得兩個不一樣的bands被雜湊到不同的bucket中,這樣一來就有:如果兩個document的bands中,至少有一個share了同一個bucket,那這兩個document就是candidate pair,也就是很有可能是相似的。(找相似:同一個籃子裡面的就是有可能相似的樣本框;如果兩個籃
區域性敏感雜湊matlab程式碼解讀
個人總結:這篇文章介紹了局部敏感雜湊演算法,區域性敏感雜湊是非監督的雜湊演算法。 演算法的輸入是實數域的特徵向量,輸出為一個binary vector。 利用雜湊函式將資料點對映到不同的桶中是一種保形對映,使得資料點 i 和資料點 j 在原始空間的相似度
區域性敏感雜湊(Locality Sensitive Hashing)和MinHash介紹與例項
在實際應用中,我們所面對的資料是海量的,並且有著很高的維度。在對資料的各種操作中,查詢操作是最常見的一種,這裡的查詢是指輸入一個數據,查詢與其相似的資料,那麼怎樣快速地從海量高維資料中,找到與某個資料最相似的資料,成為了一個難點和問題。 低維的小資料集,可通過線性查詢來解決
區域性敏感雜湊Locality Sensitive Hashing歸總
說到Hash,大家都很熟悉,是一種典型的Key-Value結構,最常見的演算法莫過於MD5。其設計思想是使Key集合中的任意關鍵字能夠儘可能均勻的變換到Value空間中,不同的Key對應不同的Value,即使Key值只有輕微變化,Value值也會發生很大地變化。這樣特性
p3396 雜湊衝突(暴力)
想了好久,沒想到優秀的解法,結果是個暴力大吃一靜.jpg 分類討論,預處理\(p\le \sqrt{n}\) 的情況,其他直接暴力,複雜度\(O(n \sqrt{n} )\) #include <cstdio> #include <algorithm> #include <cs
DeepFM演算法解析及Python實現 FFM演算法解析及Python實現 FM演算法解析及Python實現 詞嵌入的那些事兒(一)
1. DeepFM演算法的提出 由於DeepFM演算法有效的結合了因子分解機與神經網路在特徵學習中的優點:同時提取到低階組合特徵與高階組合特徵,所以越來越被廣泛使用。 在DeepFM中,FM演算法負責對一階特徵以及由一階特徵兩兩組合而成的二階特徵進行特徵的提取;DNN演算法負責對由輸入的一階特徵進行全連線
雜湊表(2)開放地址法
package ch16; import java.math.BigInteger; public class HashTable { private Info[] arr; // 預設構造方法 public HashTable() { arr = ne
selenium+python實現檔案上傳的方法(1)
檔案上傳 上傳檔案是比較常見的web端操作,但是在selenium的webdriver中沒有專門用於上傳的方法,下面介紹send_keys上傳方式實現上傳檔案 首先建立一個html檔案,主要實現上傳功能 upload file 頁面長這個樣子(每個瀏覽器裡頁面可能長得不一樣):
1109:雜湊演算法(下)
目錄 帶著問題來學習: 一、雜湊演算法在分散式系統中的應用 1.負載均衡 1.1.需求 1.2.常規解決方案 1.3.完美解決方案 2.資料分片 2.1.如何統計“搜尋關鍵詞”出現的次數? 2.2.如何快速判斷圖片是否存在相簿中? 3.分散式儲存 3.