LSH(局部敏感度哈希)
1 intuition
在很多应用领域中,我们面对和需要处理的数据往往是海量并且具有很高的维度,怎样快速地从海量的高维数据集合中找到与某个数据最相似(距离最近)的一个数据或多个数据成为了一个难点。
例如推荐系统的用户协同过滤中,我们拥有4亿活跃用户,每个用户可以用一个高维向量表示,如果计算用户的两两相似度,需要花费很长的时间;在商品协同过滤中,单JD泰国就拥有超过2500万个商品,每个商品可以用一个高维向量表示(商品名称的embedding+一些数值型属性),如果要计算所有商品的两两相似度,复杂度也是O(n^2)。
在之前的文章讲KNN算法的时候,计算每个点的两两相似度太过耗时,我们也用kd-tree来降低这个时间。https://blog.youkuaiyun.com/weixin_41332009/article/details/112341309
所以,需要类似索引的技术来加快查找过程。
传统的哈希是希望数据通过哈希后尽量使数据不冲突(collision),而LSH却是依赖冲突,希望相似的文档经过哈希后冲突在一起。
我们希望原先相似的两个数据能够被hash到相同的桶内,这样我们在该数据集合中进行近邻查找就变得容易了:我们只需要将查询数据进行哈希映射得到其桶号,然后取出该桶号对应桶内的所有数据,再进行两两匹配即可查找到与查询数据相邻的数据。
2 定义
h为哈希函数, 表示两个具有多维属性的数据对象,
表示对象