这篇博客只关注局部敏感哈希的降维过程,也不涉及理论证明。
传统的哈希(Hashing)算法通过映射函数将记录的存储位置与记录的关键字关联起来,实现记录的快速查找。所以传统哈希算法的关键是要避免碰撞冲突,尽可能保证每一个记录经过哈希函数的映射可以得到不同的结果。
局部敏感哈希(Locality-Sensitive Hashing,LSH)算法的基本思想是让在原始数据空间中距离比较近的点经过哈希运算后,有较大的概率发生碰撞。换句话说,局部敏感哈希要求将原始数据空间中相似或者近邻的样本点,经过同样的投影变换或映射之后,在低维的数据空间中相邻的概率依然很大,而且不相邻的数据点在新映射的低维空间中相似的概率很低。局部敏感哈希主要用于高维海量数据的快速近似查找问题。
局部敏感哈希算法的整个流程如下图。但是这篇博客并不关注整个敏感哈希过程,这里只关注从points到生成signature矩阵的过程。signature矩阵即可以理解为原始高维数据降维之后的结果。如果需要了解整个算法流程,可以自行查找资料。
为了得到signatures矩阵,这里需要设计合适的哈希函数。这种哈希函数必须满足以下特性:
(1) d ( x , y ) ≤ d 1 ⇒ p ( f ( x ) = f ( y ) ) ≥ p 1 d(x,y)\leq d_{1} \Rightarrow p(f(x)=f(y))\geq p_{1} d(x,y)≤d1⇒p(f(x)=f(y))≥p1
(2) d ( x , y ) ≥ d 2 ⇒ p ( f ( x ) = f ( y ) ) ≤ p 2 d(x,y)\geq d_{2}\Rightarrow p(f(x)=f(y))\leq p_{2} d(x,y)≥d2⇒p(f(x)=f(y))≤p2
(3) d 1 ≤ d 2 , p 1 ≥ p 2 d_{1}\leq d_{2},p_{1}\geq p_{2} d1≤d2,p1≥p2
其中 d ( x , y ) d(x,y) d(x,y)是 x x x和 y y y之间的距离; d 1 , d 2 d_{1},d{2} d1,d2为距离阈值; h ( x ) h(x) h(x)和 h ( y ) h(y) h(y)是 x x x和 y y y的哈希表。符合上述特性的函数称为 ( d 1 , d 2 , p 1 , p 2 ) (d_{1},d_{2},p_{1},p_{2}) (d1,d2,p1,p2)哈希敏感函数。
主要介绍几种不同距离度量下的敏感哈希函数库。
将欧式空间中的数据点通过哈希函数族 H H H转化到汉明向量空间。具体地,将在欧式空间中的 d d d维数据集 P P P中的点映射到汉明向量空间 H d ′ H^{d^{'}} Hd′中,其中 d ′ = C d d^{'}=Cd d′=Cd,其中 C C C为集合 P P P中的坐标值的最大值, d d d为数据点的维度。所以 P P P中的任意一点 p = ( x 1 , x 2 , … , x d ) p=(x_{1},x_{2},\dots,x_{d}) p=(x1,x2,…,xd)嵌入到汉明空间的坐标为: v ( p ) = U n a r y c ( x 1 ) U n a r y c ( x 2 ) … U n a r y c ( x d ) v(p)=Unary_{c}(x_{1})Unary_{c}(x_{2})\dots Unary_{c}(x_{d}) v(p)=Unaryc(x1)Unaryc(x2)…Unaryc(xd) U n a r y c ( x ) Unary_{c}(x) Unaryc(x)是一串长度为 C C C的二进制表示的汉明码,其前 x x x位置为1,后 C − x C-x C−x位置为0。
汉明空间下常用的哈希函数 h h h的定义如下: h r ( p ) = { 0 , 若v(p)的第r位为0 1 , 若v(p)的第r位为1 h_{r}(p)=\begin{cases}0,&\text{若v(p)的第r位为0}\\1,&\text{若v(p)的第r位为1}\end{cases} hr(p)={0,1,若v(p)的第r位为0若v(p)的第r位为1其中 r r r是一个从1到 d ′ d^{'} d′之间产生服从均匀分布的随机整数。但是这种方法只用于整数且只有M(坐标的最大值)值较小的时候。
举例假设存在如下4个点 A , B , C , D A,B,C,D A,B,C,D,其欧式空间中的坐标如下图所示,经转化变成6维汉明空间向量,通过哈希函数都转化成4维向量。
降维之前的相似度: s i m ( A , B ) = s i m ( A , C ) = 5 6 = 0.83 , s i m ( A , D ) = 3 6 = 0.5 , s i m ( B , C ) = s i m ( B , D ) = s i m ( C , D ) = 4 6 = 0.66 sim(A,B)=sim(A,C)=\frac{5}{6}=0.83,sim(A,D)=\frac{3}{6}=0.5,sim(B,C)=sim(B,D)=sim(C,D)=\frac{4}{6}=0.66 sim(A,B)=sim(A,C)=65=0.83,sim(A,D)=63=0.5,sim(B,C)=sim(B,D)=sim(C,D)=64=0.66
降维之后的相似度: s i m ( A , B ) = 0.75 , s i m ( A , C ) = 1 , s i m ( A , D ) = 0.5 , s i m ( B , C ) = 0.75 , s i m ( B , D ) = 0.75 , s i m ( C , D ) = 0.5 sim(A,B)=0.75,sim(A,C)=1,sim(A,D)=0.5,sim(B,C)=0.75,sim(B,D)=0.75,sim(C,D)=0.5 sim(A,B)=0.75,sim(A,C)=1,sim(A,D)=0.5,sim(B,C)=0.75,sim(B,D)=0.75,sim(C,D)=0.5
Broder等人提出了一种基于jaccard距离的LSH函数族,其定义如下:设 U U U表示元素总集, P P P表示 U U U的排列, P ( i ) P(i) P(i)表示 P P P的第 i i i个元素。在排列 P P P的条件下集合 D ⊆ U D\subseteq U D⊆U的Minhash定义为: h p ( D ) = m i n ( { i ∣ 1 ≤ i ≤ ∣ U ∣ ∧ P ( i ) ∈ D } ) h_{p}(D)=min(\{i|1\leq i\leq |U| \wedge P(i) \in D\}) hp(D)=min({i∣1≤i≤∣U∣∧P(i)∈D}) 举例假设有如下3个集合 A , B , C A,B,C A,B,C,总集 U U U及各个集合中的元素如下图, P 1 , P 2 , P 3 , P 4 P1,P2,P3,P4 P1,P2,P3,P4为从 U U U中随机产生的排列。将 A , B , C A,B,C A,B,C转化为欧式空间中的6维向量,进过minhash函数转化成4维向量。
降维之前各个点之间的jaccard相似度为: s i m ( A , B ) = 0.6 , s i m ( A , C ) = 0.33 , s i m ( B , C ) = 0.6 sim(A,B)=0.6,sim(A,C)=0.33,sim(B,C)=0.6 sim(A,B)=0.6,sim(A,C)=0.33,sim(B,C)=0.6。
降维之后各个点之间的相似度为: s i m ( A , B ) = 0.5 , s i m ( A , C ) = 0.25 , s i m ( B , C ) = 0.75 sim(A,B)=0.5,sim(A,C)=0.25,sim(B,C)=0.75 sim(A,B)=0.5,sim(A,C)=0.25,sim(B,C)=0.75。
以上两种类型的函数只能处理特殊类型的数据,Datar等人提出了一种可以泛化到任意实数空间 R d R^{d} Rd上基于 L S L_{S} LS距离的LSH函数族 h r , b = f l o o r ( ( r x + b ) / w ) h_{r,b}=floor((rx+b)/w) hr,b=floor((rx+b)/w),其中 b ∈ [ 0 , w ) , w > > d b\in [0,w),w\gt\gt d b∈[0,w),w>>d, r ∈ R d r\in R^{d} r∈Rd可以从s-stable分布中随机选取映射向量 r r r。 f l o o r ( ⋅ ) floor(\cdot) floor(⋅)为向下取整函数(所以这个会将所有实数向量转化为整数向量)。这里要求的稳定分布需要满足 s ∈ [ 0 , 2 ) s\in [0,2) s∈[0,2)。
形式化地, s s s稳定分布的定义如下:对于数据集 R R R中的任意 n n n个数据 v 1 , v 2 , … , v n v_{1},v_{2},\dots,v_{n} v1,v2,…,vn,并且有 X 1 , X 2 , … , X n X_{1},X_{2},\dots,X_{n} X1,X2,…,Xn服从独立同分布 D D D;如果存在 s ≥ 0 s\geq0 s≥0,使得随机变量 ∑ i v i X i \sum_{i}v_{i}X_{i} ∑iviXi和 ( ∑ i ∣ v i ∣ p ) 1 p (\sum_{i}|v_{i}|^{p})^{\frac{1}{p}} (∑i∣vi∣p)p1服从同一分布,则称该分布为 s s s-稳定分布。最典型的稳定分布如下:
当 s = 1 s=1 s=1时,有柯西分布,其概率密度函数 c ( x ) = 1 π ( 1 + x 2 ) c(x)=\frac{1}{\pi (1+x^{2})} c(x)=π(1+x2)1。
当 s = 2 s=2 s=2时,有高斯分布,其概率密度函数为 g ( x ) = 1 2 π e − x 2 2 g(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^{2}}{2}} g(x)=2π1e−2x2。