为什么要用局部敏感哈希

一.题外话

  虽然是科普,不过笔者个人认为大道至简,也就是说越简单的东西很可能越值得探讨,或者另外一种说法越简单的东西越不好讲解;其实笔者认为这就是《编程之美》所要传递的——大道至简。

  软件构建老师给我推荐的《走出软件作坊》还没看呢。

二.概述

  高维数据检索(high-dimentional retrieval)是一个有挑战的任务。对于给定的待检索数据(query),对数据库中的数据逐一进行相似度比较是不现实的,它将耗费大量的时间和空间。这里我们面对的问题主要有两个,第一,两个高维向量的相似度比较,第二,数据库中庞大的数据量。最终检索的复杂度是由这两点共同决定的。

    针对第一点,人们开发出很多hash算法,对原高维数据降维。针对第二点,我们希望能在检索的初始阶段就排除一些数据,减小比较的次数。而LSH局部敏感哈希算法恰好满足了我们的需求。其基本思想如下:

    假设原数据库中某个高维向量x,维数为n。对其进行汉明化操作,得到n维的二值向量x'。定义m个hash函数,每个hash函数抽取二值向量x'中的k位作为哈希值,这样每个原始高维数据x就会对应m个k位的二值向量。然后,对数据库中的所有原始向量,如果它们对某个具体的哈希函数具有相同的哈希值,那么就把它们放入一个“篮子”里。这里的“篮子”具有两个属性,一是它所属于的hash函数,二是它所对应的哈希值,也就是说,对于两个高维向量x和y来说,只有它们对于同一个hash函数具有相同响应的时候,才会被投入相同的“篮子”中。

    这样,我们的检索过程也变得清晰明了。对于待检索向量q,在将其汉明化之后,计算其m个hash函数值,然后将每个hash函数值对应的“篮子”中的向量取出来,这样我们得到了m个“篮子”(每个篮子对应一个hash函数),将这m个“篮子”中的向量取并集,得到集合A。从直观上来讲,A中的向量个数一定远远小于原数据库中的向量个数,这时将q与A中向量一一对比,就能得到检索结果。

    LSH算法可以看做这样的两步,第一步将与q完全不相关的向量剔除掉,只保留与q相似的概率较大的向量作为待比较向量,第二步就是讲q与剩余向量逐一对比,注意这里我们仍然可以使用现有的一些降维或者哈希算法提高运算效率。

    那么,为什么以上的局部敏感哈希算法能够保留与q具有高相似度的向量呢?首先要感谢我们所用的哈希函数的形式,即对于二值向量随机取k位,这样就保证了相似的向量在哈希映射后仍然相似的概率比较大,而这个特点也是“局部敏感哈希算法”中“局部敏感”的意义所在。因此对这个问题,直观上的理解是,如果对于某个哈希函数来说,两个向量具有相同的响应,说明它们在某个概率下是相似的,如果对于m个哈希函数来说,两个向量的响应都相同,就说明它们相似的可能性更大了。

时间: 2024-09-25 22:58:22

为什么要用局部敏感哈希的相关文章

浅析常用局部敏感哈希算法

上一年记录的东西,整理下... 需要代码联系我QQ:791909235,本人不做义务咨询. 一.哈希检索概述 LSH是Locality Sensitive Hashing的缩写,也翻译为局部敏感哈希,是一种通过设计满足特殊性质即局部敏感的哈希函数,提高相似查询效率的方法.虽然从正式提出距今不过十余年,由于其局部敏感的特殊性质,以及在高维数据上相当于k-d树等方法的优越性,LSH被广泛地运用于各种检索(包括并不仅限于文本.音频.图片.视频.基因等)领域. 1.1 检索分类 在检索技术中,索引一直需

基于局部敏感哈希的协同过滤算法之simHash算法

搜集了快一个月的资料,虽然不完全懂,但还是先慢慢写着吧,说不定就有思路了呢. 开源的最大好处是会让作者对脏乱臭的代码有羞耻感. 当一个做推荐系统的部门开始重视[数据清理,数据标柱,效果评测,数据统计,数据分析]这些所谓的脏活累活,这样的推荐系统才会有救. 求教GitHub的使用. 简单不等于傻逼. 我为什么说累:我又是一个习惯在聊天中思考前因后果的人,所以整个大脑高负荷运转.不过这样真不好,学习学成傻逼了. 研一的最大收获是让我明白原来以前仰慕的各种国家自然基金项目,原来都是可以浑水摸鱼忽悠过去

局部敏感哈希之分层法与哈希码法

学到现在越来越感觉计算机网络.操作系统的重要性,组成原理到没感觉出来,求推荐资料,我想要的是描述性解释,教材不是我想要的,谢谢! 感觉自己的知识很老旧,在没有出国也没去高水平大学的条件下,只能通过网络学习了,感谢博客园. 一.检索分类 在检索技术中,索引一直需要研究的核心技术.当下,索引技术主要分为三类:基于树的索引技术(tree-based index).基于哈希的索引技术(hashing-based index)与基于词的倒排索引(visual words based inverted in

LSH 位置敏感哈希算法

前言 LSH 用于近似查询,聚类分类,压缩等领域. 汉明距离 汉明距离是以理查德·卫斯里·汉明的名字命名的.在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数.换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数.例如:1011101 与 1001001 之间的汉明距离是 2.2143896 与 2233796 之间的汉明距离是 3."toned" 与 "roses" 之间的汉明距离是 3. 汉明重量 汉明重量是字符串相对于

中国人工智能学会通讯——三维视觉研究及应用 1.3 最近几年的工作

1.3 最近几年的工作 我是来自模式识别国家重点实验室的机器人视觉组,我们研究组专注于三维计算机视觉有20年的历史,在理论方面.在三维视觉的各个方面都有系统性的深入积累,除了发表在视觉领域顶级期刊.顶级会议的论文外,还有在国内外的竞赛中拿第一名的成绩,还有国内外专利的申请与授权.中英文专著的出版.另外,我们也追求技术的应用,我们和国内外的企业有长期合作. 1. 图像匹配 (1)图像描述子的提取 图像匹配里一个重要的工作,就是对图像描述子的提取.我们让一张图像参与计算,首先让图像里的一些特征进行代

史上最全的机器学习资料(下)

推荐:史上最全的机器学习资料(上) 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能.机器学习牵涉的编程语言十分之广,包括了MATLAB.Julia.R.Perl.Python.Clojure.Ruby等等. 为了让开发者更加广泛.深入地了解机器学习,组织翻译了GitHub Awesome Machi

Reading List 2015-03

这个月主要在关注流式处理和推荐系统方面的技术.如何从零构建一个推荐系统?网上能找到的有指导意义的资料太少,只能一点点摸索? Spark LeanCloud 离线数据分析功能介绍 Spark在腾讯数据仓库TDW的应用 http://www.biaodianfu.com/spark-tdw.html Spark on Yarn:小火花照亮大数据 http://rdc.taobao.org/?p=512 Spark on Yarn:性能调优 http://rdc.taobao.org/?p=533 S

推荐!国外程序员整理的机器学习资源大全

C++ 计算机视觉 CCV-基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV-它提供C++, C, Python, Java 以及 MATLAB接口,并支持Windows, Linux, Android and Mac OS操作系统. 通用机器学习 MLPack DLib ecogg shark Closure 通用机器学习 Closure Toolbox-Clojure语言库与工具的分类目录 Go 自然语言处理 go-porterstemmer-一个Porter词干提取算

文本相似度计算基本方法小结

在计算文本相似项发现方面,有以下一些可参考的方法.这些概念和方法会帮助我们开拓思路. 相似度计算方面 Jaccard相似度:集合之间的Jaccard相似度等于交集大小与并集大小的比例.适合的应用包括文档文本相似度以及顾客购物习惯的相似度计算等. Shingling:k-shingle是指文档中连续出现的任意k个字符.如果将文档表示成其k-shingle集合,那么就可以基于集合之间的Jaccard相似度来计算文档之间的文本相似度.有时,将shingle哈希成更短的位串非常有用,可以基于这些哈希值的