LSH搜索算法

LSH(Location Sensitive Hash)是一种用于高维数据的近似最近邻搜索的算法,它通过散列相似点以较高概率将其映射到同一桶中。文章详细介绍了LSH的原理、随机投影法、如何提高执行速度和召回率,以及在最近邻文本搜索中的应用。随机投影法通过向量夹角计算相似度,通过调整参数b和t平衡查询效率与召回率。LSH的优势在于降低高维数据检索的时间和空间复杂度,适用于图像、音视频、文本的分类和聚类以及数据压缩等领域。
摘要由CSDN通过智能技术生成

LSH(Location Sensitive Hash),即位置敏感哈希函数。与一般哈希函数不同的是位置敏感性,也就是散列前的相似点经过哈希之后,也能够在一定程度上相似,并且具有一定的概率保证。

作者注:LSH算法分两种:SimHash和MinHash。

simhash的原理是减少搜索空间,用汉明距离替代余弦距离

minHash的原理是降维。通过hash映射函数,将特征元素的个数降下来。

形式化定义:

对于任意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.


LSH搜索算法

对于一个查询点q以及给定的距离阈值r,搜索桶g1(q),...,gL(q),取出其中的所有点v1,...,vn作为候选近似最近邻点。对于任意的vj,如果D(q,vj)<=r,那么返回vj,其中D为相似性度量函数。
在创建LSH索引时,选取的哈希函数是k个LSH函数的串联函数,这样就相对拉大了距离近的点冲突的概率pn与距离远的点冲突的概率pf之间的差值,但这同时也使这两个值一起减小了,于是需要同时使用L张哈希表来加大pn同时减小pf。通过这样的构造过程,在查询时,与查询点q距离近的点就有很大的概率被取出作为候选近似最近邻点并进行最后的距离计算,而与查询点q距离远的点被当作候选近似最近邻点的概率则很小,从而能够在很短的时间内完成查询。
通用LSH示意图


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⃗ 
the code from net,share with you: 获取图像库里所有图片文件的名称 Blue hills.jpg Lena.jpg myhand1.jpg myhand2.jpg Sunset.jpg Test2.jpg Test3.JPG Water lilies.jpg Winter.jpg 获取图像特征 0 36 82 115 132 164 200 142 129 119 54 1 198 141 101 64 43 65 124 200 197 186 2 104 40 25 34 81 88 56 108 131 199 3 142 56 43 61 117 121 107 160 120 200 4 46 67 80 104 200 193 90 66 59 43 5 121 110 141 149 200 195 171 144 123 116 6 99 125 116 88 68 82 99 141 200 104 7 200 178 175 151 154 183 156 159 164 177 8 131 161 192 199 181 182 186 174 147 129 获取随机点位 将整数转换为01 特征值MD5压缩处理 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值