LSH 近似最近邻查找

一、什么是近似最近邻查找

NN与ANN NN,Nearest Neighbor Search,最近邻查找问题

KNN,K-Nearest Neighbor,k最近邻,查找离目标数据最近的前k个数据项

ANN,Approximate Nearest Neighbor,近似最近邻检索,在牺牲可接受范围内的精度的情况下提高检索效率

最近邻检索是线性复杂度的,当处理大规模数据时可以采用ANN方法

LSH,局部敏感哈希是ANN的一种

LSH 近似最近邻查找_第1张图片

二、什么是Hash

主要的索引技术:

基于树的索引技术(二叉树,B-Tree,B+Tree)

基于哈希的索引技术

基于词的倒排索引

海量数据的检索方式,Hash是重要的索引技术

LSH 近似最近邻查找_第2张图片

 三、LSH算法

针对海量 and 高维数据如何进行查找:

如果数据是低维 and 小数据 => 通过线性的方式查找

数据不仅海量,而且高维 => 需要降维,采用索引方式查找 LSH,Locality-Sensitive Hashing,局部敏感哈希

需要查找与某个数据1个或多个相似的数据

最近邻查找方法(ANN,Approximate Nearest Neighbor)

 LSH 近似最近邻查找_第3张图片

 

 LSH:

通过Hash Function,每个Bucket会落入一些原始数据,属于同一个桶内的数据有很大可能是相邻的(也存在不相邻的数据被hash到了同一个桶内)

将原始数据集合分成了多个子集合,每个子集合中的数据大概率是相邻的,而且子集合中的元素个数较少。

方便进行近邻查找 => 在一个很小的集合里查找相邻元素

LSH 近似最近邻查找_第4张图片

四、 MinHash算法

文档相似度计算:

k-shingle,也称为k-gram,文档中任意长度为k的字符串。将每篇文档可以表示成文档中出现一次或者多次的k-shingle的集合

比如document="abcdabd",当2-shingle组成的集合为 {ab,bc,cd,da,bd}

如果两个文档相似,那么他们会有很多的shingles也是相同的

文本越长,K取值越大。K的经验值参考,短文本K=5,长文本K=10

 LSH 近似最近邻查找_第5张图片

 五、MinHash+LSH:

除了要解决Ci和Cj两两之间相似度的计算问题,

当数据量大的时候,两两之间相似度计算次数为 当数据量N很大(>100万),计算量非常大 => 将可能相似的用户以较大概率分到同一个桶内,这样每一个用户的“相似用户候选集”就会少很多,大大降低计算复杂度

LSH是相似度的近似求解方式 在MinHash基础上,将Signature向量分成多段(band)

LSH 近似最近邻查找_第6张图片

 LSH 近似最近邻查找_第7张图片

 

 

 

你可能感兴趣的:(BI商业智能)