Locality Sensitive Hashing,LSH

原理和实现

1. 基本思想

局部敏感(Locality Senstitive):即空间中距离较近的点映射后发生冲突的概率高,空间中距离较远的点映射后发生冲突的概率低。

局部敏感哈希的基本思想类似于一种空间域转换思想,LSH算法基于一个假设,如果两个文本在原有的数据空间是相似的,那么分别经过哈希函数转换以后的它们也具有很高的相似度;相反,如果它们本身是不相似的,那么经过转换后它们应仍不具有相似性。

假设一个局部敏感哈希函数具有10个不同的输出值,而现在我们具有11个完全没有相似度的数据,那么它们经过这个哈希函数必然至少存在两个不相似的数据变为了相似数据。从这个假设中,我们应该意识到局部敏感哈希是相对的,而且我们所说的保持数据的相似度不是说保持100%的相似度,而是保持最大可能的相似度

对于局部敏感哈希保持最大可能的相似度的这一点,我们也可以从数据降维的角度去考虑。数据对应的维度越高,信息量也就越大,相反,如果数据进行了降维,那么毫无疑问数据所反映的信息必然会有损失。哈希函数从本质上来看就是一直在扮演数据降维的角色。

2. Min-Hashing

定义:特征矩阵按行进行一个随机的置换后,第一个列值为1的行的行号。

对于两个数据C1C1和C2C2,在Min-Hashing方法中,hash值相等的概率等于这两个数据降维前的Jaccard相似度(两个集合的交比两个集合的并)。用公式描述即:

Pr[hπ(C1)=hπ(C2)]=sim(C1,C2)Pr[hπ(C1)=hπ(C2)]=sim(C1,C2)

每一个置换等同于一个hash函数,多个置换构成一个hash函数族。假设我们拥有n个hash函数,要求在原始空间相似的两个数据在hash之后得到的n个值均相等的条件过于苛刻,所得到的精确率是很高,但是同样的召回率也会非常低。因此,我们放松了要求,在n个hash函数划分为b个hash函数族,只要两个数据在某一个hash函数族的值均相等,就认为这两个数据相似。

在上述定义下,两个数据在低维空间相似的概率为:1−(1−sr)b1−(1−sr)b。解释如下:

  • 对于两个数据的任意一个函数族来说,这两个函数族值相同的概率是:srsr,其中s∈[0,1]是这两个文档的相似度。
  • 也就是说,这两个函数族不相同的概率是1−sr1−sr
  • 这两个文档一共存在b个函数族,这bb个函数族都不相同的概率是(1−sr)b(1−sr)b
  • 所以说,这b个函数族至少有一个相同的概率是1−(1−sr)b1−(1−sr)b

以上过程可以为一个简单的AND-OR逻辑,这个逻辑同样也应用于下述基于p稳定分布的LSH中。

3. E2LSH:p稳定分布

定义:对于一个实数集R上的分布D,如果存在P>=0,对任何n个实数v1,…,vn和n个满足D分布的变量X1,…,Xn,随机变量∑ivixi∑ivixi和(∑i|vi|p)1/px(∑i|vi|p)1/px有相同的分布,其中xx是服从D分布的一个随机变量,则称D为一个p稳定分布。

利用p稳定分布可以有效的近似高维特征向量,并在保证度量距离的同时,对高维特征向量进行降维,其关键思想是,产生一个d维的随机向量XX,随机向量XX中的每一维随机、独立得从p稳定分布中产生。对于一个d维的特征向量VV,如定义,随机变量X.VX.V具有和(∑i|vi|p)1/pX(∑i|vi|p)1/pX一样的分布,因此可以用X.VX.V表示向量VV来估算||V||p||V||p 。

p-稳定 LSH通过涉入p稳定分布和点积的概念,实现了LSH算法在欧几里得空间下的直接应用,而不需要嵌入Hamming空间。p-stable LSH中,度量是欧几里得空间下的lp准则,即向量v1v2的距离定义为||v1-v2||p,然后通过设定的哈希函数将原始点映射到直线的等长线段上,每条线段便相当于一个哈希桶,与LSH方法类似,距离较近的点映射到同一哈希桶(线段)中的概率大,距离较远的点映射到同一哈希桶中的概率小,正好符合局部敏感的定义。

hash函数:p稳定分布下的hash函数为hx,b(v)=⌊x.v+bw⌋hx,b(v)=⌊x.v+bw⌋,用于将d维的特征向量映射到整数集。其中xx为d维向量,每一维都独立取自于p稳定分布,b为[0,w]范围内的随机数。其作用效果图如下:

哈希表的设计:将哈希过后的向量直接存入hash表,占用内存又不便于查找。因此论文定义了额外两个hash函数:

h1(x1,x2,...,xk)=((∑i=1kriai)modC)modtableSizeh1(x1,x2,...,xk)=((∑i=1kriai)modC)modtableSize

h2(x1,x2,...,xk)=((∑i=1kriai)modC)h2(x1,x2,...,xk)=((∑i=1kriai)modC)

其中,h1的值作为哈希表索引,h2的值作为链表中的关键字,r1r1和r2r2为随机整数,CC的取值为232−5232−5。

4. 缺点

LSH:

  • 典型的基于概率模型生成索引编码的结果并不稳定。虽然编码位数增加,但是查询准确率的提高确十分缓慢;
  • 需要大量的存储空间,不适合于大规模数据的索引。

E2LSH:

  • E2LSH方法的目标是保证查询结果的准确率和查全率,并不关注索引结构需要的存储空间的大小;
  • E2LSH使用多个索引空间以及多次哈希表查询,生成的索引文件的大小是原始数据大小的数十倍甚至数百倍。

5. 疑问

∑ivixi∑ivixi和(∑i|vi|p)1/pX(∑i|vi|p)1/pX在满足相同分布的前提下,有什么特点?或则说如果XX不符合p稳定分布,对结果有什么影响?

  • 向量距离的度量可以用范数表示,假设向量V=V1−V2V=V1−V2,那么||V||p||V||p即表示向量V1V1和V2V2的原始空间下的p范数距离;
  • 点乘的几何意义表示一个向量在另一个向量下的投影表示,因此V1.X−V2.X=X.V=∑ivixiV1.X−V2.X=X.V=∑ivixi表示的是向量V1V1和V2V2在向量XX下投影的距离;
  • 在XX满足p稳定分布的前提下,可知(1)和(2)下的两个距离具有相同的分布,即满足了局部敏感的特点。

6. 参考

  • LSH(Locality Sensitive Hashing)原理与实现
  • 源码:min-hash和p稳定分布
  • 【原创】LSH和p-stable LSH
  • LSH系列一:p稳定分布LSH算法初探

LSH(Locality Sensitive Hashing)基本思想相关推荐

  1. LSH(Locality Sensitive Hashing)局部敏感Hash

    文章目录 LSH 的哈希函数族(Hash Family)定义 LSH 的查找过程 LSH 常见的 Hash Function(降维) min-hash 具体介绍: min-Hash的局部敏感哈希算法( ...

  2. pyLSHash:Python 100行代码实现LSH(Locality Sensitive Hashing)算法

    项目特点: 支持自定义距离函数 支持很多种数据库,例如 redis.MongoDB等 项目地址:https://github.com/guofei9987/pyLSHash 安装 $ pip inst ...

  3. 局部敏感哈希(Locality Sensitive Hashing)二三问[2]

    #写在前面的话 今天的这一章有几个目的,一是回答一下各位网友在各大博客上提出的问题,然后其他博主没有回答的问题.二是纠正一些别人在写局部敏感哈希时候出现的错误.就是这么贴心有没有. #假装自己是正文的 ...

  4. Locality Sensitive Hashing原理与实现

    LSH(Locality Sensitive Hashing)翻译成中文,叫做"局部敏感哈希",它是一种针对海量高维数据的快速最近邻查找算法. 在信息检索,数据挖掘以及推荐系统等应 ...

  5. 最近邻和K近邻及其优化算法LSH(局部敏感哈希,Locality Sensitive Hashing) Kd-Tree

    引言 在处理大量高维数据时,如何快速地找到最相似的数据是一个比较难的问题.如果是低维的小量数据,线性查找(Linear Search)就可以解决,但面对海量的高维数据集如果采用线性查找将会非常耗时.因 ...

  6. Locality Sensitive Hashing(局部敏感哈希)

    文章目录 Background运用背景 Big pitcture 整体架构 定义 Surprising Property References # 写在前面的话 酱酱,又到了程序媛拯救世界的时间,程序 ...

  7. 局部敏感哈希算法(Locality Sensitive Hashing)

    from:https://www.cnblogs.com/maybe2030/p/4953039.html 阅读目录 1. 基本思想 2. 局部敏感哈希LSH 3. 文档相似度计算 局部敏感哈希(Lo ...

  8. 局部敏感哈希Locality Sensitive Hashing归总

    最近发邮件讨论Semantic Hashing的同学和同事很多,推荐李老师的文献列表供大家参阅:http://cs.nju.edu.cn/lwj/L2H.html 说到Hash,大家都很熟悉,是一种典 ...

  9. 局部敏感哈希-Locality Sensitive Hashing

    局部敏感哈希 转载请注明http://blog.csdn.net/stdcoutzyx/article/details/44456679  在检索技术中,索引一直需要研究的核心技术.当下,索引技术主要 ...

最新文章

  1. 2021China SAFe Day中国规模化敏捷会
  2. 干货|深度!“人工智能+制造”产业发展研究报告
  3. c语言javapython哪个好-C#、C++、Java、Python 选择哪个好?
  4. 使用python判断流媒体mp3格式
  5. LintCode 1689. k求和III(递归)
  6. 均分纸牌(洛谷-P1031)
  7. 数学连乘和累加运算符号_数学符号归纳
  8. 蓝桥杯 ADV-169 算法提高 士兵排队问题
  9. 十六、oracle 索引
  10. centos安装输入法
  11. Atitit spirngboot 访问 html文件总结 自设计web服务器原理与实现 Url路由压力,读取url,获得项目更路径绝对路径,拼接为文件路径。读取文建内容输出即可 目录路径 u
  12. wps指定路径不存在怎么办_WPS说目录不存在
  13. 【无标题】领料、退料、补料
  14. 我的修炼体会--明亭【转】
  15. 认识ZBrush? 4R7视图区
  16. 使用微信js-sdk上传语音并将语音下载到服务器
  17. 关于ddos你了解多少?
  18. Cocos技术派 | 3d人物渲染详细教程
  19. php迭代什么意思,迭代关系什么意思
  20. 转载-杭电老师的思考

热门文章

  1. 什么是google的Android操作系统?
  2. 详解CorelDRAW双色图样填充
  3. 为什么需要功能需求设计说明书
  4. 办公室局域网监控员工上网记录合适吗?
  5. 中国版权保护中心-无法注册的解决办法
  6. 旅通——旅行社软件的先驱
  7. 计算机科学游戏化,以游戏化学习助推科学教育
  8. 支持51CTO,支持博客大赛
  9. 因为爱情的计算机谱子是多少,《因为爱情》歌曲简谱
  10. 杰理之 U盘、T卡顺序切换【篇】