位姿檢索PoseRecognition:LSH算法.p穩定哈希

        位姿檢索使用了LSH方法,而不使用PNP方法,是有必定的來由的。主要的工做會轉移到特徵提取和檢索的算法上面來,有得必有失可憐。所以,放棄瞭解析的方法以後,又放棄了優化的方法,最後陷入了檢索的汪洋大海。
html

0:轉自wiki:http://en.wikipedia.org/wiki/Locality_sensitive_hashing
前端

如下參考資料僅供參考:LSH理解及相關資料:http://s99f.blog.163.com/blog/static/35118365201262691335382/
算法

有一篇代碼的實現:http://blog.sina.com.cn/s/blog_ad9597a30101o0ix.html後端


一:局部敏感哈希—原始分解數據結構

         原文連接:http://www.jiahenglu.net/NSFC/LSH.html
app

LSH(Location Sensitive Hash),即位置敏感哈希函數。爲保序哈希,也就是散列前的類似點通過哈希以後,也可以在必定程度上類似,而且具備必定的機率保證。dom

形式化定義:ide

        對於任意q,p屬於S,若從集合S到U的函數族H={h1,h2...hn}對距離函數D(,),如歐式距離、曼哈頓距離等等,知足條件:函數

   image  則稱D(,)是位置敏感的。性能

以下圖,空間上的點經位置敏感哈希函數散列以後,對於q,其rNN有可能散列到同一個桶(如第一個桶),即散列到第一個桶的機率較大,會大於某一個機率閾值p1;而其(1+emxilong)rNN以外的對象則不太可能散列到第一個桶,即散列到第一個桶的機率很小,會小於某個閾值p2.

    image

LSH的做用

◆高維下近似查詢

        類似性檢索在各類領域特別是在視頻、音頻、圖像、文本等含有豐富特徵信息領域中的應用變得愈來愈重要。豐富的特徵信息通常用高維向量表示,由此類似性檢索通常經過K近鄰或近似近鄰查詢來實現。一個理想的類似性檢索通常須要知足如下四個條件:

1. 高準確性。即返回的結果和線性查找的結果接近。

2. 空間複雜度低。即佔用內存空間少。理想狀態下,空間複雜度隨數據集呈線性增加,但不會遠大於數據集的大小。

3. 時間複雜度低。檢索的時間複雜度最好爲O(1)或O(logN)。

4. 支持高維度。可以較靈活地支持高維數據的檢索。

       傳統主要方法是基於空間劃分的算法——tree相似算法,如R-tree,Kd-tree,SR-tree。這種算法返回的結果是精確的,可是這種算法在高維數據集上的時間效率並不高。實驗[1]指出維度高於10以後,基於空間劃分的算法時間複雜度反而不如線性查找。LSH方法可以在保證必定程度上的準確性的前提下,時間和空間複雜度獲得下降,而且可以很好地支持高維數據的檢索。

◆分類和聚類

       根據LSH的特性,便可將相近(類似)的對象散列到同一個桶之中,則能夠對圖像、音視頻、文本等豐富的高維數據進行分類或聚類。

◆數據壓縮。如普遍地應用於信號處理及數據壓縮等領域的Vector Quantization量子化技術。

總而言之,哪兒須要近似kNN查詢,哪兒都能用上LSH.

[1] Weber R, Schek H, Blott S. A quantitative analysis and performance study for similarity search methods in high dimensional spaces Proc.of the 24th Intl.Conf.on Very Large Data Bases (VLDB).1998:194-205

LSH的經典論文做者:http://www.informatik.uni-trier.de/~ley/pers/hd/m/Ma:Yi

http://research.microsoft.com/en-us/people/mayi/publications.aspx

32.Segmentation of Natural Images by Texture and Boundary Compression,

Hossein Mobahi, Shankar Rao, Allen Yang, Shankar Sastry, andYi Ma, submitted to the International Journal of Computer Vision (IJCV), March 2010.

X: Compact Projection: Simple and Efficient Near Neighbor Search with Practical Memory Requirements


二:方法:Methods

漢明Bit重採樣:Bit sampling for Hamming distance(original hash )

One of the easiest ways to construct an LSH family is by bit sampling.[3] This approach works for the Hamming distance over d-dimensional vectors \{0,1\}^d. Here, the family\mathcal F of hash functions is simply the family of all the projections of points on one of thed coordinates, i.e.,  必須把特徵轉化到漢明空間,利用漢明距離;{\mathcal F}=\{h:\{0,1\}^d\to \{0,1\}\mid h(x)=x_i,i =1 ... d\}, where x_i is theith coordinate ofx. A random functionh from{\mathcal F} simply selects a random bit from the input point. This family has the following parameters:P_1=1-R/d,P_2=1-cR/d.

Min-wise independent permutations

Suppose U is composed of subsets of some ground set of enumerable itemsS and the similarity function of interest is theJaccard indexJ. If\pi is a permutation on the indices ofS, forA \subseteq S leth(A) = \min_{a \in A} \{ \pi(a) \}. Each possible choice of\pi defines a single hash functionh mapping input sets to integers.

Define the function familyH to be the set of all such functions and letD be the uniform distribution. Given two setsA,B \subseteq S the event thath(A) = h(B) corresponds exactly to the event that the minimizer of\pi lies insideA \bigcap B. Ash was chosen uniformly at random,Pr[h(A) = h(B)] = J(A,B)\, and(H,D)\, define an LSH scheme for the Jaccard index.   集合的 jaccard距離:通常用來斷定文本類似度;

Because the symmetric group on n elements has size n!, choosing a truly random permutation from the full symmetric group is infeasible for even moderately sized n. Because of this fact, there has been significant work on finding a family of permutations that is "min-wise independent" - a permutation family for which each element of the domain has equal probability of being the minimum under a randomly chosen\pi. It has been established that a min-wise independent family of permutations is at least of sizelcm(1, 2, ..., n) \ge e^{n-o(n)}.[9] and that this boundary is tight[10]

Because min-wise independent families are too big for practical applications, two variant notions of min-wise independence are introduced: restricted min-wise independent permutations families, and approximate min-wise independent families. Restricted min-wise independence is the min-wise independence property restricted to certain sets of cardinality at most k.[11] Approximate min-wise independence differs from the property by at most a fixed \epsilon.[12]

Nilsimsa Hash

Nilsimsa is ananti-spam focused locality-sensitive hashing algorithm.[13] The goal of Nilsimsa is to generate a hash digest of an email message such that the digests of two similar messages are similar to each other. Nilsimsa satisfies three requirements outlined by the paper's authors:

  1. The digest identifying each message should not vary signicantly (sic) for changes that can be produced automatically.
  2. The encoding must be robust against intentional attacks.
  3. The encoding should support an extremely low risk of false positives.

Random projection

The random projection method of LSH[4] (termed arccos by Andoni and Indyk [14]) is designed to approximate thecosine distance between vectors. The basic idea of this technique is to choose a randomhyperplane (defined by a normal unit vectorr) at the outset and use the hyperplane to hash input vectors.

Given an input vectorv and a hyperplane defined byr, we leth(v) = sgn(v \cdot r). That is,h(v) = \pm 1 depending on which side of the hyperplanev lies.

Each possible choice ofr defines a single function. LetH be the set of all such functions and letD be the uniform distribution once again. It is not difficult to prove that, for two vectorsu,v,Pr[h(u) = h(v)] = 1 - \frac{\theta(u,v)}{\pi}, where\theta(u,v) is the angle betweenu andv.1 - \frac{\theta(u,v)}{\pi} is closely related to\cos(\theta(u,v)).

In this instance hashing produces only a single bit. Two vectors' bits match with probability proportional to the cosine of the angle between them.


Stable distributions:基於p穩定分佈的hash.

      The hash function[15]h_{\mathbf{a},b} (\boldsymbol{\upsilon}) : \mathcal{R}^d\to \mathcal{N} maps ad dimensional vector \boldsymbol{\upsilon} onto a set of integers映射到一個數軸線段區間的整數上. Each hash function in the family is indexed by a choice of random\mathbf{a} andb where\mathbf{a} is ad dimensional vector with entries chosen independently from a stable distribution and b is a real number chosen uniformly from the range [0,r]. For a fixed\mathbf{a},b the hash functionh_{\mathbf{a},b} is given byh_{\mathbf{a},b} (\boldsymbol{\upsilon}) = \left \lfloor\frac{\mathbf{a}\cdot \boldsymbol{\upsilon}+b}{r} \right \rfloor.

Other construction methods for hash functions have been proposed to better fit the data.[16] In particular k-means hash functions are better in practice than projection-based hash functions, but without any theoretical guarantee.



三:基於p穩定分佈的LSH

原文連接:http://blog.sina.com.cn/s/blog_67914f2901019p3v.html

        LSH是用局部敏感的方法解決近似最近鄰搜索的問題。在原始的LSH方法中,經過將原始空間嵌入到Hamming空間中,將d維空間轉換成d'=Cd維的Hamming空間(C是指原始空間中點的座標的最大值,具體狀況參見上一部分中的第4節-算法步驟),使用(r,(1+e)r,1-r/d',1-(1+e)r/d')-敏感哈希函數來解決(r,e)-Neighbor問題。然後來提出的p-stableLSH算法中,不須要將原始空間嵌入到Hamming空間中,能夠直接在歐幾里得空間下進行局部敏感哈希運算。

一、背景介紹
    p-stableLSH應用在d維lp-norm下的歐幾里得空間中,0<p<=2。p-stableLSH是LSH的進化版本,要解決的問題相同,而使用的方法和應用環境不一樣。所以,下面重點介紹p-stableLSH的應用環境,對於LSH的細節參見第一部分。
    p-stableLSH使用的(R,cR,p1,p2)-敏感哈希中,c=1+e,而且不失通常性,設R=1。下面的工做主要是肯定在1(即R)和c(即cR)下的p1與p2。
二、v概念解釋
    p-stableLSH之因此會叫這個名字,是由於該算法應用到p-stabledistribution(p-穩定分佈)的概念。下面給出的就是p-穩定分佈的概念:
    Def 1 :一個分佈D稱爲p-穩定分佈,若是對於任意n個實數v1,v2,…,vn和符合D分佈的n個獨立同分布隨機變量X1,X2,…,Xn,都存在一個p>=0,使得變量Vi和  其映射 具備相同的分佈,此處X是一個符合D分佈的隨機變量。
    p-穩定分佈不是具體的分佈,而是知足某條件的分佈族。當p=1時,表明是標準柯西分佈,密度函數爲 p(x) =(1/3.14)*(1/(1+x*x))    ;當p=2時,表明是標準正態分佈(高斯分佈)。
     重點:近鄰特性
     p-stable分佈有一個重要的應用,就是能夠估計給定向量v在歐幾里得空間p-norm下長度,記爲||v||p。方法是對於取定的d維向量v,從p-穩定分佈中抽取d個隨機變量組成d維向量a,計算a與v的點積a.v(點積的概念是將向量對應位置的元素相乘後全部乘積之和),根據p-stable的定義,因爲a.v=Add(Vi*Xi),所以a.v與||v||pX是同分布的(X是p-stable分佈的一個隨機變量)。選取若干個向量a,計算多個a.v的值,稱爲向量v的「概略(sketch)」,利用v的「sketch」能夠用來估算||v||p的值。

三、局部敏感哈希函數
      在p-stableLSH中,av的點積a.v不用來估計||v||p的值,而是用來生成哈希函數族,且該哈希函數族是局部敏感的(即空間中距離較近的點映射後發生衝突的機率高,空間中距離較遠的點映射後發生衝突的機率低)。大致方法是將一條直線分紅等長且長度爲r的若干段,給映射到同一段的點賦予相同的hash值,映射到不一樣段的點賦予不一樣的hash值。(a.v1-a.v2)是映射後的距離,而其值與||v1-v2||pX同分布,所以,原始距離(||v1-v2||p)較小時,映射後的距離也小,所以使用點積來生成哈希函數族能夠保持局部敏感性。
    哈希函數族的形式爲:h_{\mathbf{a},b} (\boldsymbol{\upsilon}) = \left \lfloor\frac{\mathbf{a}\cdot \boldsymbol{\upsilon}+b}{r} \right \rfloor,其中b是(0,r)裏的隨機數,r爲直線上分段的段長。哈希族中的函數根據a和b的不一樣創建函數索引。
    從哈希函數族中隨機選取一個哈希函數,如今估計兩個向量v1v2在該哈希函數下映射後發生衝突的機率。定義符合p-stable分佈的隨機變量絕對值的機率密度函數爲fp(t),設c=||v1-v2||p,則a.v1-a.v2與cX同分布,X爲p-stable分佈下的隨機變量。給出機率的計算公式以下,以後會有詳細分析。
       
P(C)=P(a,b)[ Ha,b(V1)= Ha,b(V2)]
=積分(1/c *fp(t/c)(1/t/r))t

    由於|a.v1-a.v2|=||v1-v2||p|X|=c|X|,X爲p-stable分佈下的隨機變量,|X|的機率密度函數爲fp(t)。若要向量v1v2映射後發生衝突,須要知足以下條件:v1v2經過與a進行點積運算分別映射到一段長度爲r線段後,再經過加b運算,能使映射後的點在同一條線段上。

    如下是對該機率公式正確性的證實
    設點a.v1在點M處,點a.v2在點N處,此處設N點在靠近Q的位置。
(一)b對映射後點的影響
    在加b後,由於b>0,所以加b後點會後移。不失通常性,設r=1,則有如下兩種狀況:
    (1)若映射到同一條線段上,不妨設爲線段PQ(P爲前端點,Q爲後端點),設|MN|=t,|NQ|=m,則若要保證加b後點M和點N仍在同一條線段中,則要知足0<b<=m(此時加b後M,N仍在線段PQ中),或者t+m<=b<r(此時加b後點M,N落入下一條線段中)。
 
    (2)若映射到不一樣線段上,但|MN|<r(此時必在相鄰線段中),不妨設相鄰兩條線段爲PQ和QR,設|MQ|=m,則|QN|=t-m,則若要保證加b後點M和點N仍在同一條線段中,則要知足m<b<r-(t-m)。
      能夠看到,無論是那種狀況,b的取值範圍都是r-t,而b是(0,r)內的隨機數,所以取得知足條件b的機率是(r-t)/r=1-t/r。如今只需討論向量v1和v2通過a的點積映射後的距離爲t的機率(由於討論b是設|MN|=t,即b是在向量映射後距離爲t的狀況下討論的),即求|a.v1-a.v2|=||v1-v2||p|X|=c|X|=t的機率

(二)點積對映射後點的影響:
          由於隨機變量|X|的機率密度函數爲fp(x),而這裏要求的是c|X|=t的機率。在這裏有一個誤區,要注意的是,c|X|=t的機率並非Pr(|X|=t/c)=fp(t/c),這是由於|X|是連續隨機變量, 不能經過某點的機率來生成其密度函數,雖然密度函數的意義是fp(x)=Pr(|X|=x),但反過來是不成立的。所以,要求c|X|=t的機率,只能經過密度函數的定義來解決。
          密度函數的大體定義是:對於隨機變量X的分佈函數F(x),若是存在函數f(x),使得F(x)是f(x)在所有定義域內(通常就可取負無窮到正無窮,隨機變量取不到的地方几率爲0)的積分,那麼f(x)就稱爲X的機率密度函數。F(x)=Pr(X<x),f(x)=Pr(X=x)。這裏再強調一遍,對於連續型隨機變量,第二個式子的反過來沒有意義,由於連續型隨機變量在某點的機率恆爲0。而分佈函數表明的是某段區域內機率之和,所以,第二個式子反過來推導是有意義的。
          所以,要求c|X|=t的機率,可用以下方法:設隨機變量Y=c|X|,則原始問題轉化成求Y=t的機率。設|X|的分佈函數爲Fp(t),Y的分佈函數爲Gp(t),則Gp(t)=Pr(Y<t)=Pr(c|X|<t)=Pr(|X|<t/c)=Fp(t/c),所以,c|X|=t的機率爲Gp'(t)=Fp'(t/c)=1/c*fp(t/c),這樣,通過點積映射後,兩向量在線上點的距離等於t的機率便求出來了。

    至此,咱們獲得了原始空間中的兩個向量通過點積運算後映射到線段上的距離爲t的機率以及在距離爲t的前提下加b後能落在同一線段上的機率。由於若是兩個向量通過點積後映射到線段上的距離大於r,且b是(0,r)上的隨機數,所以這種狀況下不論b取多少,兩點都不可能落入同一條線段上。所以,t的取值範圍是(0,r)。綜上所述,該機率公式得證。

在上機率公式中,對於給定的r,機率p(c)是關於c的單調遞減函數。即,c=||v1-v2||越大,映射後發生衝突的機率就越小,這符合局部敏感哈希函數的要求。所以,所選取的哈希函數族是局部敏感哈希函數族,而且是(r1,r2,p1,p2)-敏感的,其中p1=p(1),p2=p(c),r2/r1=c。c>1時,知足p1>p2,r1<r2。

以上就是對p-stableLSH的討論,它經過涉入穩定分佈和點積的概念,實現了LSH算法在歐幾里得空間下的直接應用,而不須要嵌入Hamming空間。p-stableLSH中,度量是歐幾里得空間下的lp準則,即向量v1v2的距離定義爲||v1-v2||p,而後經過設定的哈希函數將原始點映射到直線的等長線段上,每條線段便至關於一個哈希桶,與LSH方法相似,距離較近的點映射到同一哈希桶(線段)中的機率大,距離較遠的點映射到同一哈希桶中的機率小,正好符合局部敏感的定義。


四:hash方法的使用過程:

Amplification:詳細描述

Given a (d_1, d_2, p_1, p_2)-sensitive family\mathcal F, we can construct new families\mathcal G by either the AND-construction or OR-construction of\mathcal F.[1]

To create an AND-construction, we define a new family\mathcal G of hash functionsg, where each functiong is constructed fromk random functionsh_1, ..., h_k from\mathcal F. We then say that for a hash functiong \in \mathcal G,g(x) = g(y) if and only if allh_i(x) = h_i(y) fori = 1, 2, ..., k. Since the members of\mathcal F are independently chosen for anyg \in \mathcal G,\mathcal G is a(d_1, d_2, p_{1}^r, p_{2}^r)-sensitive family.

To create an OR-construction, we define a new family\mathcal G of hash functionsg, where each functiong is constructed fromk random functionsh_1, ..., h_k from\mathcal F. We then say that for a hash functiong \in \mathcal G,g(x) = g(y) if and only ifh_i(x) = h_i(y) for one or more values ofi. Since the members of\mathcal F are independently chosen for anyg \in \mathcal G,\mathcal G is a(d_1, d_2, 1- (1 - p_1)^r, 1 - (1 - p_2)^r)-sensitive family.  重點是:如何構建hash函數族...


LSH algorithm for nearest neighbor search:算法步驟

One of the main applications of LSH is to provide a method for efficient approximatenearest neighbor search algorithms. Consider an LSH family \mathcal F. The algorithm has two main parameters: the width parameterk and the number of hash tablesL.

In the first step, we define a new family\mathcal G of hash functionsg, where each functiong is obtained by concatenatingk functionsh_1, ..., h_k from\mathcal F, i.e.,g(p) = [h_1(p), ..., h_k(p)]. In other words, a random hash functiong is obtained by concatenatingk randomly chosen hash functions from\mathcal F. The algorithm then constructsL hash tables, each corresponding to a different randomly chosen hash functiong.

In the preprocessing step we hash alln points from the data setS into each of theL hash tables. Given that the resulting hash tables have onlyn non-zero entries, one can reduce the amount of memory used per each hash table toO(n) using standardhash functions.

Given a query point q, the algorithm iterates over theL hash functionsg. For eachg considered, it retrieves the data points that are hashed into the same bucket asq. The process is stopped as soon as a point within distancecR fromq is found.

Given the parametersk andL, the algorithm has the following performance guarantees:

  • preprocessing time:O(nLkt), wheret is the time to evaluate a functionh \in \mathcal F on an input pointp;
  • space: O(nL), plus the space for storing data points;
  • query time: O(L(kt+dnP_2^k));
  • the algorithm succeeds in finding a point within distancecR fromq (if there exists a point within distanceR) with probability at least1 - ( 1 - P_1^k ) ^ L;

For a fixed approximation ratioc=1+\epsilon and probabilitiesP_1 andP_2, one can setk={\log n \over \log 1/P_2} andL = n^{\rho}, where\rho={\log P_1\over \log P_2}. Then one obtains the following performance guarantees:

  • preprocessing time:O(n^{1+\rho}kt);
  • space: O(n^{1+\rho}), plus the space for storing data points;
  • query time: O(n^{\rho}(kt+d));


五:Locality Sensitive Hashing(LSH)之隨機投影法

原文連接:http://www.strongczq.com/2012/04/locality-sensitive-hashinglsh%E4%B9%8B%E9%9A%8F%E6%9C%BA%E6%8A%95%E5%BD%B1%E6%B3%95.html

 爲何隨即投影法是可行的?應該怎麼去函數族的參數?以及正確率表現?

1. 概述

         LSH是由文獻[1]提出的一種用於高效求解最近鄰搜索問題的Hash算法。LSH算法的基本思想是利用一個hash函數把集合中的元素映射成hash值,使得類似度越高的元素hash值相等的機率也越高。LSH算法使用的關鍵是針對某一種類似度計算方法,找到一個具備以上描述特性的hash函數。LSH所要求的hash函數的準確數學定義比較複雜,如下給出一種通俗的定義方式:

對於集合S,集合內元素間類似度的計算公式爲sim(*,*)。若是存在一個hash函數h(*)知足如下條件:存在一個類似度s到機率p的單調遞增映射關係,使得S中的任意兩個知足sim(a,b)>=s的元素a和b,h(a)=h(b)的機率大於等於p。那麼h(*)就是該集合的一個LSH算法hash函數。

通常來講在最近鄰搜索中,元素間的關係能夠用類似度或者距離來衡量。若是用距離來衡量,那麼距離通常與類似度之間存在單調遞減的關係。以上描述若是使用距離來替代類似度須要在單調關係上作適當修改。

根據元素類似度計算方式的不一樣,LSH有許多不一樣的hash算法。兩種比較常見的hash算法是隨機投影法和min-hash算法。本文即將介紹的隨機投影法適用於集合元素能夠表示成向量的形式,而且類似度計算是基於向量之間夾角的應用場景,如餘弦類似度。min-hash法在參考文獻[2]中有相關介紹。

2 隨機投影法(Random projection)

   假設集合S中的每一個元素都是一個n維的向量:

v⃗ ={v1,v2,,vn}
,集合中兩個元素v⃗ u⃗ 之間的類似度定義爲
sim(v⃗ ,u⃗ )=v⃗ u⃗ |v⃗ ||u⃗ |

對於以上元素集合S的隨機投影法hash函數h(*)能夠定義爲以下:

在n維空間中隨機選取一個非零向量x⃗ ={x1,x2,,xn}。考慮以該向量爲法向量且通過座標系原點的超平面,該超平面把整個n維空間分紅了兩部分,將法向量所在的空間稱爲正空間,另外一空間爲負空間。那麼集合S中位於正空間的向量元素hash值爲1,位於負空間的向量元素hash值爲0。判斷向量屬於哪部分空間的一種簡單辦法是判斷向量與法向量之間的夾角爲銳角仍是鈍角,所以具體的定義公式能夠寫爲

h(v⃗ )={1,0,v⃗ x⃗ >0v⃗ x⃗ <=0

根據以上定義,假設向量v⃗ u⃗ 之間的夾角爲θ,因爲法向量x⃗ 是隨機選取的,那麼這兩個向量未被該超平面分割到兩側(即hash值相等)的機率應該爲:p(θ)=1θπ。假設兩個向量的類似度值爲s,那麼根據θ=arccos(s),有

p(s)=1arccos(s)π
。所以,存在類似度s到機率p的單調遞增映射關係,使得對於任意類似度大於等於s的兩個元素,它們hash值相等的機率大於等於p(s)。因此,以上定義的hash值計算方法符合LSH算法的要求。

以上所描述的h(*)函數雖然符合LSH算法的要求,可是實用性不高。由於該hash函數只產生了兩個hash值,沒有達到hash函數將元素分散到多個分組的目的。爲了增長不一樣hash值的個數,能夠屢次生成獨立的函數h(*),只有當兩個元素的多個h(*)值都相等時纔算擁有相同的hash值。根據該思路能夠定義以下的hash函數H(*):

H(v⃗ )=(hb(v⃗ )hb1(v⃗ )h1(v⃗ ))2
。其中每一個hi(v⃗ )表示一個獨立的h(*)函數,H(*)函數值的二進制表現形式中每一位都是一個h(*)函數的結果。

以H(*)爲hash函數的話,兩個類似度爲s的元素具備相同hash值的機率公式爲

p(s)=(1arccos(s)π)b

。hash值的個數爲2b。很容易看出H(*)函數一樣也是符合LSH算法要求的。通常隨機按投影算法選用的hash函數就是H(*)。其中參數b的取值會在後面小節中討論。

3 隨機投影法在最近鄰搜索中的應用

3.1 最近鄰搜索

最近鄰搜索能夠簡單的定義爲:對於m個元素的集合T,爲一個待查詢元素q找到集合中類似度最高的k個元素。

最近鄰搜索最簡單的實現方法爲:計算q與集合T中每個元素的類似度,使用一個具備k個元素的大頂堆(優先隊列)保存類似度計算結果(類似度值爲key)。這種實現方法每一次查詢都要遍歷整個集合T來計算類似度,當m很大而且查詢的頻率很高的時候這種暴力搜索的方法沒法知足性能要求。

當最近鄰搜索的近鄰要求並非那麼嚴格的時候,即容許top k近鄰的召回率不必定爲1(可是越高越好),那麼能夠考慮藉助於LSH算法。

3.2 隨機投影法提升執行速度

這裏咱們介紹當集合T的元素和查詢元素q爲同維度向量(維度爲n),而且元素類似度計算方法爲餘弦類似度時,使用隨機投影法來提升最近鄰搜索的執行速度。具體的實現方法爲:

預處理階段:使用hash函數H(*)計算集合T中全部元素的hash值,將集合T分紅一個個分組,每一個分組內的元素hash值均相等。用合適的數據結構保存這些hash值到分組的映射關係(如HashMap)。

查詢階段:計算查詢元素q的hash值H(q),取集合T中全部hash值爲H(q)的分組,以該分組內的全部元素做爲候選集合,在候選該集合內使用簡單的最近鄰搜索方法尋找最類似的k個元素。

該方法的執行效率取決於H(*)的hash值個數2b,也就是分組的個數。理想狀況下,若是集合T中的向量元素在空間中分佈的足夠均勻,那麼每個hash值對應的元素集合大小大體爲m2b。當m遠大於向量元素的維度時,每次查詢的速度能夠提升到2b倍。

根據以上分析H(*)中b的取值越大算法的執行速度的提高越多,而且是指數級別的提高。可是,在這種狀況下H(*)函數下的機率公式p(s),實際上表示與查詢元素q的類似度爲s的元素的召回率。當b的取值越大時,top k元素的召回率必然會降低。所以算法執行速度的提高須要召回率的降低做爲代價。例如:當b等於10時,若是要保證某個元素的召回率不小於0.9,那麼該元素與查詢元素q的類似度必須不小於0.9999998。

3.3 提升召回率改進

爲了在保證召回率的前提下儘量提升算法的執行效率,通常能夠進行以下改進:

預處理階段:生成t個獨立的hash函數Hi(),根據這t個不一樣的hash函數,對集合T進行t種不一樣的分組,每一種分組方式下,同一個分組的元素在對應hash函數下具備相同的hash值。用合適的數據結構保存這些映射關係(如使用t個HashMap來保存)。

查詢階段:對於每個hash函數Hi(),計算查詢元素q的hash值Hi(q),將集合T中Hi()所對應的分組方式下hash值爲Hi(q)的分組添加到該次查詢的候選集合中。而後,在該候選集合內使用簡單的最近鄰搜索方法尋找最類似的k個元素。

以上改進使得集合中元素與查詢元素q的t個hash值中,只要任意一個相等,那麼該集合元素就會被加入到候選集中。那麼,類似度爲s的元素的召回率爲

p(s)=1(1(1arccos(s)π)b)t

在執行效率上,預處理階段因爲須要計算t個hash函數的值,因此執行時間上升爲t倍。查詢階段,若是單純考慮候選集合大小對執行效率的影響,在最壞的狀況下,t個hash值得到的列表均不相同,候選集集合大小的指望值爲tm2b,查詢速度降低至1t,與簡單近鄰搜索相比查詢速度提高爲2bt倍。

下圖是召回率公式p(s)=1(1(1arccos(s)π)b)t在不一樣的b和t取值下的s-p曲線。咱們經過這些曲線來分析這裏引入參數t的意義。4條藍色的線以及最右邊紅色的線表示當t取值爲1(至關於沒有引入t),而b的取值從1變化到5的過程,從圖中能夠看出隨着b的增大,不一樣類似度下的召回率都降低的很是厲害,特別的,當類似度接近1時曲線的斜率很大,也就說在高類似度的區域,召回率對類似度的變化很是敏感。10條紅色的線從右到左表示b的取值爲5不變,t的取值從1到10的過程,從圖中能夠看出,隨着t的增大,曲線的形狀發生了變化,高類似度區域的召回率變得降低的很是平緩,而最陡峭的地方漸漸的被移動到相對較低的類似度區域。所以,從以上曲線的變化特色能夠看出,引入適當的參數t使得高類似度區域在一段較大的範圍內仍然可以保持很高的召回率從而知足實際應用的需求。

3.4 參數選取

根據以上分析,H(*)函數的參數b越大查詢效率越高,可是召回率越低;參數t越大查詢效率越低可是召回率越高。所以選擇適當參數b和t來折中查詢效率與召回率之間的矛盾是應用好隨機投影法的關鍵。下面提供一種在實際應用中選取b和t的參考方法。

根據實際應用的須要肯定一對(s,p),表示類似度大於等於s的元素,召回率的最低要求爲p。而後將召回率公式表示成b-t之間的函數關係t=log1(1acos(s)pi)b(1p)。根據(s,p)的取值,畫出b-t的關係曲線。如s=0.8,p=0.95時的b-t曲線以下圖所示。考慮具體應用中的實際狀況,在該曲線上選取一組使得執行效率能夠達到最優的(b,t)組合。

image

3.5 關於最近鄰文本搜索

在最近鄰文本搜索中,通常待檢索的文本或查詢文本,都已被解析成一系列帶有權重的關鍵詞,而後經過餘弦類似度公式計算兩個文本之間的類似度。這種應用場景下的最近鄰搜索與以上所提到的最近鄰搜索問題相比存在如下兩個特色:

  • 若是把每一個文本的帶權重關鍵詞表都看做是一個向量元素的話,每一個關鍵詞都是向量的一個維度,關鍵詞權重爲該維度的值。理論上可能關鍵詞的個數並不肯定(全部單詞的組合均可能是一個關鍵詞),所以該向量元素的維數其實是不肯定的。
  • 因爲關鍵詞權重確定是大於零的,因此向量元素的每個維度的值都是非負的。

對於第一個特色,咱們須要選取一個包含n個關鍵詞的關鍵詞集合,在進行文本類似度計算時只考慮屬於該集合的關鍵詞。也就是說,每個文本都視爲是一個n維度的向量,關鍵詞權重體現爲對應維度的值。該關鍵詞集合能夠有不少種生成辦法,好比能夠是網站上具備必定搜索頻率的關鍵詞集合,總的來講該關鍵詞集合應當可以涵蓋全部有意義而且具備必定使用頻率的關鍵詞。一般n的取值會比較大,如幾十萬到幾百萬,因爲在使用隨機投影算法時,每個生成的隨機向量維度都爲n,這種狀況下須要特別考慮利用這些高維隨機向量對執行效率形成的影響,在肯定b、t參數時須要考慮到這方面的影響。

對於第二個特色,因爲向量元素各維度值都非負,那麼這些元素在高維空間中只會出如今特定的區域中。好比當n爲3時,只會出如今第一象限中。一個直觀的感受是在生成隨機向量的時候,會不會生成大量的無用切割平面(與第一個象限空間不相交,使得全部元素都位於切割平面的同側)。這些切割平面對應的H(*)函數hash值中的二進制位恆定爲1或者0,對於提升算法執行速度沒有幫助。如下說明這種擔憂是沒有必要的:

切割平面與第一象限空間不相交等價於其法向量的每個維度值都有相同的符號(都爲正或者負),不然總能在第一象限空間中找到兩個向量與法向量的乘積符號不一樣,也就是在切割平面的兩側。那麼,隨機生成的n維向量全部維度值都同號的機率爲12n1,當n的取值很大時,該機率能夠忽略不計。

參考文獻

[1] P. Indyk and R. Motwani. Approximate Nearest Neighbor:Towards Removing the Curse of Dimensionality. In Proc. of the 30th Annual ACM Symposium on Theory of Computing, 1998, pp. 604–613.

[2] Google News Personalization: Scalable Online Collaborative Filtering


後記:

        然而最後,我使用了仍是隨機投影的方法,這個是正確率和速度的權衡可憐

相關文章
相關標籤/搜索