局部敏感哈希 Shingling/minhash/LSH

局部敏感哈希(Locality-Sensitive Hashing, LSH)是一种算法技术,主要用于高维数据的相似性搜索和近似最近邻查询。LSH 的核心思想是通过构建一组哈希函数,确保相似的输入数据经过哈希变换后具有较高的概率会被映射到同一个哈希桶中。LSH 在解决高维数据空间中有效相似性搜索的问题上具有重要应用,尤其是在图像、音频、文档和生物信息等需要快速查询相似项的领域。

Shingling

实际上就是一种OneHot的生成方法,下图展示的非常明白,其中shingle set实际上就是2-gram set,把这个2-gram set经过shuffle得到vocab,上面"Flying fish flew by the space station"中出现过的2-gram就这样被映射成了下图最右侧的one-hot
在这里插入图片描述

minhash

就是字面的意思得到最小的hash值。刚才已经得到了一个one hot向量,下图这个one hot向量长度为6,然后把[1,2,3,4,5,6]进行了4次shuffle,分别得到下图中蓝色、红色、绿色、黑色的四个随机排列。这四轮中shingled spare vector为1对应的蓝红绿黑值里面最小的就是对应的signature。举个例子,蓝色min{4,3,2}=2,所以蓝色的signature就是2,其中4,3,2就是shingled sparse vector为1对应的值
在这里插入图片描述

LSH

把刚才得到的signature分段,每一段叫做一个band。如果两个向量的其中一个或多个band相同,那么这两个向量就可能相似度较高;相同的band数越多,其相似度高的可能性越大。所以LSH的做法就是对各个用户的signature向量在每一个band上分别进行哈希分桶,在任意一个band上被分到同一个桶内的用户就互为candidate相似用户,这样只需要计算所有candidate用户的相似度就可以找到每个用户的相似用户群了。下图中是分了3个band,第3个band中存在bucket match,那么相似度就较高。
在这里插入图片描述

LSH分桶优化

在这里插入图片描述

参考文档

  1. https://www.pinecone.io/learn/series/faiss/locality-sensitive-hashing/
  2. https://zhuanlan.zhihu.com/p/46164294
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值