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

  学到现在越来越感觉计算机网络、操作系统的重要性,组成原理到没感觉出来,求推荐资料,我想要的是描述性解释,教材不是我想要的,谢谢!

  感觉自己的知识很老旧,在没有出国也没去高水平大学的条件下,只能通过网络学习了,感谢博客园。

一.检索分类

  在检索技术中,索引一直需要研究的核心技术。当下,索引技术主要分为三类:基于树的索引技术(tree-based index)、基于哈希的索引技术(hashing-based index)与基于词的倒排索引(visual words based inverted index)。本文主要对哈希索引技术进行介绍。

二.哈希概述

  在检索中,需要解决的问题是给定一个查询样本query,返回与此query相似的样本,线性搜索耗时耗力,不能承担此等重任,要想快速找到结果,必须有一种方法可以将搜索空间控制到一个可以接受的范围,哈希在检索中就是承担这样的任务,因而,这些哈希方法一般都是局部敏感(Locality-sensitive)的,即样本越相似,经过哈希后的值越有可能一样。所以,本文中介绍的技术都是局部敏感哈希(Locality Sensitive Hashing,LSH),与hashmap、hashtable等数据结构中的哈希函数有所不同。

三.哈希分类

  对于哈希技术,可以按照不同的维度对齐进行划分。
  按照其在检索技术中的应用方法来划分,可以分为分层法和哈希码法:

  3.1分层法

  分层法即为在数据查询过程中使用哈希技术在中间添加一层,将数据划分到桶中;在查询时,先对query计算桶标号,找到与query处于同一个桶的所有样本,然后按照样本之间的相似度计算方法(比如欧氏距离、余弦距离等)使用原始数据计算相似度,按照相似度的顺序返回结果,在该方法中,通常是一组或一个哈希函数形成一个表,表内有若干个桶,可以使用多个表来提高查询的准确率,但通常这是以时间为代价的。分层法的示意图如图1所示。在图1中,H1、H2等代表哈希表,g1、g2等代表哈希映射函数。分层法的代表算法为E2LSH。

  3.2 哈希码法

  哈希码法则是使用哈希码来代替原始数据进行存储,在分层法中,原始数据仍然需要以在第二层被用来计算相似度,而哈希码法不需要,它使用LSH函数直接将原始数据转换为哈希码,在计算相似度的时候使用hamming距离来衡量。转换为哈希码之后的相似度计算非常之快,比如,可以使用64bit整数来存储哈希码,计算相似度只要使用同或操作就可以得到,唰唰唰,非常之快,忍不住用拟声词来表达我对这种速度的难言之喜,还望各位读者海涵。
哈希码法的代表算法有很多,比如KLSH、Semantic Hashing、KSH等。

  3.3 区别

  1.在对哈希函数的要求上,哈希码方法对哈希函数的要求更高,因为在分层法中,即便哈希没有计算的精确,后面还有原始数据直接计算相似度来保底,得到的结果总不会太差,而哈希码没有后备保底的,胜则胜败则败。
  2.在查询的时间复杂度上,分层法的时间复杂度主要在找到桶后的样本原始数据之间的相似度计算,而哈希码则主要在query的哈希码与所有样本的哈希码之间的hamming距离的相似计算。哈希码法没有太多其他的需要,但分层法中的各个桶之间相对较均衡方能使复杂度降到最低。按照我的经验,在100W的5000维数据中,KSH比E2LSH要快一个数量级。
  3.在哈希函数的使用上,两者使用的哈希函数往往可以互通,E2LSH使用的p-stable LSH函数可以用到哈希码方法上,而KSH等哈希方法也可以用到分层法上去。
  4.按照哈希函数来划分,可以分为无监督和有监督两种:

  无监督,哈希函数是基于某种概率理论的,可以达到局部敏感效果。如E2LSH等。
  有监督,哈希函数是从数据中学习出来的,如KSH、Semantic Hashing等。
  一般来说,有监督算法比无监督算法更加精确,因而也更常用于哈希码法中。

  部分参考文献http://dataunion.org/12912.html

四.遗留问题

  把局部敏感哈希用在最近邻查询中。

  现在的问题是,1.为什么需要多个表?为何能提高准确率吗?2.p稳定分布的具体例子3.需要多个表,每个表内又是好多桶(除以w分桶),那么查找最近邻的时候是对每个表分别查一次么,然后去结果并集,貌似不是这样啊?那要多个表干什么?4.文章说多个哈希函数,每个函数残生一个实数,最后要相乘然后连加最后取余,把向量映射为实数放于桶内,既然每个表内的哈希函数不一致,那么最后取余的值也不一样,也就是说每个数据在每个表内的值都不一样,那么问题来了,对于某一个查询点经过一次相同哈希,但是却要在每个表内查询,但是每个表内的哈希都是和查询电使用不一样的啊,这样有意义么?如果不是这样,是下面这样:某个查询电分别使用每个表内的哈希进行查询,这样要多个表还有意义么?

  联系方式:791909235@qq.com,13137910179

时间: 2024-11-12 18:54:44

局部敏感哈希之分层法与哈希码法的相关文章

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

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

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

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

为什么要用局部敏感哈希

一.题外话 虽然是科普,不过笔者个人认为大道至简,也就是说越简单的东西很可能越值得探讨,或者另外一种说法越简单的东西越不好讲解:其实笔者认为这就是<编程之美>所要传递的--大道至简. 软件构建老师给我推荐的<走出软件作坊>还没看呢. 二.概述 高维数据检索(high-dimentional retrieval)是一个有挑战的任务.对于给定的待检索数据(query),对数据库中的数据逐一进行相似度比较是不现实的,它将耗费大量的时间和空间.这里我们面对的问题主要有两个,第一,两个高维向

算法设计-孩子兄弟法(二叉链表表示法)写程序

问题描述 孩子兄弟法(二叉链表表示法)写程序 按图片上的要求完成编程,只能用C或C++语言编写,代码发送到1575366373@qq.com 解决方案 我把代码按要求写出来了你能帮我修改吗? 解决方案二: class Node { public: Node * parent; LinkedList children; string Name; ... } 就是用两个字段,一个是父节点,一个是子节点集合. 解决方案三: 程序中的四元数表示法 解决方案四: 这个虽然,简单,但是也需要设计一下的,虽然

德反儿童色情法《阻碍网页登录法》正式生效

新华网柏林2月23日电(报道员周谷风)德国反儿童色情法<阻碍网页登录法>已于日前由德国总统霍斯特·克勒签署,并从23日起正式生效. <阻碍网页登录法>全文内容于22日在德国联邦法律公报上发表.根据该法律,联邦刑事警察局将有权建立封锁网站列表并每日更新,互联网服务供应商将根据这一列表,封锁相关的儿童色情网页. 虽然这一法案于2009年就获得了德国联邦议院和联邦参议院的批准,但有批评者指出,此法案不够严厉,因为用户可以轻易绕开技术障碍,儿童色情网站经营者要重建网站也只是举手之劳. 为了

贪心法 最小圈基问题-贪心法解决最小圈基问题。

问题描述 贪心法解决最小圈基问题. 在网上找不到关于最小圈基的资料,不知道有木有大神来拯救下我这个小白新手- 解决方案 我的算法实验有这个,自己写了,不是很好,可以参考我的博客

另类玩法:用ASCII码实时欣赏世界杯比赛

世界杯正在逐渐进入高潮,来自 奥地利的一些朋友为我们提供了一种 新的看球方式:ASCII码. 方法很简单,只需使用Telnet进行远程登录,就能看到实时的"视频流".当然,不是随时都能看到,必须等到比赛开始前10分钟,所以现在还无法验证其效果,只能等晚上了再欣赏这种ASCII艺术了. 各系统平台实现方法: ●Windows:在命令行窗口下键入"telnet ascii-wm.net 2006". ●Mac OS X:在Terminal程序中键入"telne

LSH 位置敏感哈希算法

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

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单