區域性敏感雜湊之分層法與雜湊碼法

2021-09-22 18:57:35 字數 2105 閱讀 5865

學到現在越來越感覺計算機網路、作業系統的重要性,組成原理到沒感覺出來,求推薦資料,我想要的是描述性解釋,教材不是我想要的,謝謝!

感覺自己的知識很老舊,在沒有出國也沒去高水平大學的條件下,只能通過網路學習了,感謝。

在檢索技術中,索引一直需要研究的核心技術。當下,索引技術主要分為三類:基於樹的索引技術(tree-based index)、基於雜湊的索引技術(hashing-based index)與基於詞的倒排索引(visual words based inverted index)。本文主要對雜湊索引技術進行介紹。

在檢索中,需要解決的問題是給定乙個查詢樣本query,返回與此query相似的樣本,線性搜尋耗時耗力,不能承擔此等重任,要想快速找到結果,必須有一種方法可以將搜尋空間控制到乙個可以接受的範圍,雜湊在檢索中就是承擔這樣的任務,因而,這些雜湊方法一般都是區域性敏感(locality-sensitive)的,即樣本越相似,經過雜湊後的值越有可能一樣。所以,本文中介紹的技術都是區域性敏感雜湊(locality sensitive hashing,lsh),與hashmap、hashtable等資料結構中的雜湊函式有所不同。

對於雜湊技術,可以按照不同的維度對齊進行劃分。

按照其在檢索技術中的應用方法來劃分,可以分為分層法和雜湊碼法:

分層法即為在資料查詢過程中使用雜湊技術在中間新增一層,將資料劃分到桶中;在查詢時,先對query計算桶標號,找到與query處於同乙個桶的所有樣本,然後按照樣本之間的相似度計算方法(比如歐氏距離、余弦距離等)使用原始資料計算相似度,按照相似度的順序返回結果,在該方法中,通常是一組或乙個雜湊函式形成乙個表,表內有若干個桶,可以使用多個表來提高查詢的準確率,但通常這是以時間為代價的。分層法的示意圖如圖1所示。在圖1中,h1、h2等代表雜湊表,g1、g2等代表雜湊對映函式。分層法的代表演算法為e2lsh。

雜湊碼法則是使用雜湊碼來代替原始資料進行儲存,在分層法中,原始資料仍然需要以在第二層被用來計算相似度,而雜湊碼法不需要,它使用lsh函式直接將原始資料轉換為雜湊碼,在計算相似度的時候使用hamming距離來衡量。轉換為雜湊碼之後的相似度計算非常之快,比如,可以使用64bit整數來儲存雜湊碼,計算相似度只要使用同或操作就可以得到,唰唰唰,非常之快,忍不住用擬聲詞來表達我對這種速度的難言之喜,還望各位讀者海涵。

雜湊碼法的代表演算法有很多,比如klsh、semantic hashing、ksh等。

1.在對雜湊函式的要求上,雜湊碼方法對雜湊函式的要求更高,因為在分層法中,即便雜湊沒有計算的精確,後面還有原始資料直接計算相似度來保底,得到的結果總不會太差,而雜湊碼沒有後備保底的,勝則勝敗則敗。

2.在查詢的時間複雜度上,分層法的時間複雜度主要在找到桶後的樣本原始資料之間的相似度計算,而雜湊碼則主要在query的雜湊碼與所有樣本的雜湊碼之間的hamming距離的相似計算。雜湊碼法沒有太多其他的需要,但分層法中的各個桶之間相對較均衡方能使複雜度降到最低。按照我的經驗,在100w的5000維資料中,ksh比e2lsh要快乙個數量級。

3.在雜湊函式的使用上,兩者使用的雜湊函式往往可以互通,e2lsh使用的p-stable lsh函式可以用到雜湊碼方法上,而ksh等雜湊方法也可以用到分層法上去。

4.按照雜湊函式來劃分,可以分為無監督和有監督兩種:

無監督,雜湊函式是基於某種概率理論的,可以達到區域性敏感效果。如e2lsh等。

有監督,雜湊函式是從資料中學習出來的,如ksh、semantic hashing等。

一般來說,有監督演算法比無監督演算法更加精確,因而也更常用於雜湊碼法中。

部分參考文獻

把區域性敏感雜湊用在最近鄰查詢中。

現在的問題是,1.為什麼需要多個表?為何能提高準確率嗎?2.p穩定分布的具體例子3.需要多個表,每個表內又是好多桶(除以w分桶),那麼查詢最近鄰的時候是對每個表分別查一次麼,然後去結果並集,貌似不是這樣啊?那要多個表幹什麼?4.文章說多個雜湊函式,每個函式殘生乙個實數,最後要相乘然後連加最後取餘,把向量對映為實數放於桶內,既然每個表內的雜湊函式不一致,那麼最後取餘的值也不一樣,也就是說每個資料在每個表內的值都不一樣,那麼問題來了,對於某乙個查詢點經過一次相同雜湊,但是卻要在每個表內查詢,但是每個表內的雜湊都是和查詢電使用不一樣的啊,這樣有意義麼?如果不是這樣,是下面這樣:某個查詢電分別使用每個表內的雜湊進行查詢,這樣要多個表還有意義麼?

****:[email protected],13137910179

區域性敏感雜湊LSH

參考資料 簡單介紹 在茫茫人海中發現相似的你 區域性敏感雜湊 lsh 基本思想 區域性敏感雜湊的基本思想類似於一種空間域轉換思想,lsh演算法基於乙個假設,如果兩個文字在原有的資料空間是相似的,那麼分別經過雜湊函式轉換以後的它們也具有很高的相似度 相反,如果它們本身是不相似的,那麼經過轉換後它們應仍...

區域性敏感雜湊演算法

該演算法是一種衡量文字相似度的演算法,下面介紹一下這個演算法的主要思想。假設我們有三段文字 1,我愛你中國。2,我愛北京天安門。3,我愛吃蘋果 一,分詞,形成如下矩陣 文字 1 文字 2 文字 3 我 1 1 1 愛 1 1 1 你 1 0 0 中國 1 0 0 北京 0 1 0 天安門 0 1 0...

區域性敏感雜湊 原始LSH C 實現

之前專案中用到lsh演算法來做特徵檢索,對lsh演算法很好奇,最近看了lsh的 依照自己的理解,初步寫了lsh 測試效果不是特別理想,引數的選擇也基本靠嘗試,姑且先把 放上來,之後再改進吧 2016.01.24 include include include include using namesp...