局部敏感哈希杂记

在电脑前面时间太长了,加上阳光晒了很久的缘故,脑子有些犯困了,故此,写写上午看的东西,已做放松吧!

局部敏感哈希LSH:

提出:当我遇到查找一类的问题时,第一个冒出来的想法,必定是hash,其他乱七八糟的算法,那是最后的选择了。原因依然很简单就是O(1).

在微博或者查找文本的时候,在当今海量的数据面前,如果采用传统的方法找到与目标文档相似,或者目标内容相似的内容,那我们还是洗洗睡吧!费时费力还不讨好!

巨大的时间复杂度和空间复杂度,在海量的数据面前,所有传统方法好似一样不落。当然我们就想到了hash,但是新的问题,我们经常用的hash函数,有个惯例,就是 有【差之毫厘,谬以千里】。我们的目标是寻找最相近的东东,不是那些必须完全相同的东西,所以,传统的hash就不能胜任今天的工作。江山代有才人出,真是各领风 骚数百年。此时大牛们就提出了,LSH。

内容简介:针对传统的那些方法,LSH都给出了很好的解决方案。首先,将文本以词为单词,以一个词或者多个词为一组(具体数量由自己,当然不可太大,否则直接影响算 法效果),然后将每组作为hash函数的输入,映射出每组的哈希值,然后计算(例如哈希值是64位)LSH值,每一组的哈希值,如果第一位是1,则给LSH的第一位+1, 否则-1,之后就求出了LSH值,通过比较我们就能实现相似的文本映射出来的hash值就很接近,提出者说,在文本比较中,只要是相差位数在3个以内,则判断为相似。 (此处的个数根据应用场景不同而选择不同的值,主要还是文本的长度为主要考虑因素)。

使用:当得到LSH之后,与存储的每个单位的样本的LSH值进行比较,选择LSH值不同位数只有k个或更少的样本作为目标的临近样本及所求。但是假设LSH64位,进行传统方 式的比较也是一件吃力不讨好的工作。但是牛人依然有办法,如果我们选择k值为3,那么,如果我们将LSH均分成四份,那么总有至少一份是和目标的临近样本的LSH 值,有相 同位值序列,例子:目标样本LSH值1111,临近样本的LSH值0001总有,至少一份是相同的。所以先用每一份去database中去精确的查找有相同份的LSH,此 处下部分会单独详细描 述。然后在返回的这些样本LSH值中在查找相似样本。这样就将四分之一甚至更多的样本排除掉了。

精确查找部分:其它部分粗滤提提,只是大多数人写的更好,但是多没有解释这部分,只是在没有想明白之前这部分还是挺令人头疼,明白之后,就太小白了。

目标样本LSH值11 00 11 00,section1: 11 ;section 2:00;section 3:11;section 4:00 k=3,所以必有一份与database中LSH值相同,候选样本一:10010110,候选 样本二:10 11 01 00,即将01位为section 1 , 23位为section 2, 45位为section 3 , 67位为section 4。

for  every section

for  every sample

     if target's i section == i section of sample   

append  result


本来还想写写minhash,给个链接,以后再说吧!Minhash算法

参考:Locality-sensitive hashing

simhash(局部敏感哈希)的原理及应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值