赞
踩
ps:在隐私保护的文献中看到了使用局部敏感哈希算法的内容,于是看了一下Stanford的CS246课程关于LSH的部分,整理了些csdn上大佬的内容。
如
H
a
s
h
(
K
e
y
)
=
k
e
y
%
11
Hash(Key)=key\%11
Hash(Key)=key%11,那么对于129、132、140这三个关键字, 129%11=8,133%11=0,140%11=8
本来很接近的129和132经过映射后距离变远了,本来远一些的129和140反而映射到了同一位置,也就是说传统哈希不能保留原有数据的相似性。
最大特点就是保留数据原有的相似性。为了保留相似性,设计哈希函数的时候要满足以下两个条件:
1)如果
d
(
x
,
y
)
≤
d
1
d(x,y) ≤ d1
d(x,y)≤d1, 则
h
(
x
)
=
h
(
y
)
h(x) = h(y)
h(x)=h(y)的概率至少为p1;
2)如果
d
(
x
,
y
)
≥
d
2
d(x,y) ≥ d2
d(x,y)≥d2, 则
h
(
x
)
=
h
(
y
)
h(x) = h(y)
h(x)=h(y)的概率至多为p2;
若哈希函数满足以上条件,则称其为
(
d
1
,
d
2
,
p
1
,
p
2
)
−
s
e
n
s
i
t
i
v
e
(d1,d2,p1,p2)-sensitive
(d1,d2,p1,p2)−sensitive。而通过一个或多个
(
d
1
,
d
2
,
p
1
,
p
2
)
−
s
e
n
s
i
t
i
v
e
(d1,d2,p1,p2)-sensitive
(d1,d2,p1,p2)−sensitive的哈希函数对原始数据集合进行哈希操作生成一个或多个哈希表的过程叫做局部敏感哈希。
文件中出现的k个字符/文字称为k-shingles,用集合的0/1表示
矩阵的行表示shinglings,列表示文件,当文件s中包括shingle e时,第e行第s列的值为1,否则为0。
【每一列表示一个文件,每一行表示一个关键字/字符。比如a,b,c,d,e,f,g,第一列表示文件1中包含a,b,e,f,g,没有c,d】
目标:挑选一个哈希函数H,在大多情况下
当sim(C1,C2)高时,H(C1)=H(C2);当sim(C1,C2)小时,H(C1)≠H(C2)
算法:特征矩阵按行进行一个随机的排列后,第一个列值为1的行的行号。
【左边三列表示三种排列的方式,第一列的第一个2表示原本的第一列在新的排列中是第二行,3表示原第二行在新的排列中是第三行,下面同理。根据一个排列找到每个文件中,第一次出现值为1是第几行,行号即文件得到的哈希值。根据不同的排列方式,即可得到一个签名矩阵M】
目标:找到Jaccard相似度至少为s的文件们(s自行设定,eg.s=0.8)
LSH的主要思想:使用哈希函数来判断x和y是不是候选对(是否需要评估相似度)
对min-hash生成的巨大的签名矩阵M再进行Hash,Hash到不同的busket里,若文档位于同一个busket,则认为他们为候选对。
【签名矩阵会包括很多行(eg.100行),如果直接做哈希的话,在我们将s设置为0.8时,100行里要有80行的值相同我们才会判定为相似,要求十分严格。但是我们把签名矩阵分成十份(b=10,即图中10个band)时,对每个band进行哈希生成一个哈希表,在一个band中有8行值相同就可判定为相似。】
对每个band,将它的每一列hash到有k个busket的哈希表中(k越大越好),若文档在一个及以上的哈希表中位于一个busket,则可以称为候选对。
假设签名矩阵M有100000列,100行,设置s=0.8,b=20,r=5;假定只要在一个band里面判定两个文件相似就认为二者相似。
设C1,C2两个文件相似度为0.8,在一个band中五个值都相等的概率为
(
0.8
)
5
=
0.328
(0.8)^5=0.328
(0.8)5=0.328,则在20个band中都没发现C1,C2相似的概率为
(
1
−
0.328
)
2
0
=
0.00035
(1-0.328)^20=0.00035
(1−0.328)20=0.00035,所以假阴性的概率为0.00035。
设C1,C2两个文件度相似度为0.3,在一个band中五个值都相等的概率为
(
0.3
)
5
=
0.00243
(0.3)^5=0.00243
(0.3)5=0.00243,则存在一个band判定二者相似的概率为
1
−
(
1
−
0.00243
)
20
=
0.0474
1-{(1-0.00243)}^{20}=0.0474
1−(1−0.00243)20=0.0474,即假阳性的概率为0.0474。
LSH过程中需要挑选参数,
理想情况:希望相似度大于s的都被判定为1,小于s的都被判定为0
现实很骨感:相似度是多少就会判定多少
b=1,r=100时(即没划分band时)
调参的目标:调整b和r尽可能达到理想
通常,为了能够增强LSH,即使得假阳性和/或假阴性降低,我们有两个途径来实现:1)在一个哈希表内使用更多的LSH 哈希函数;2)建立多个哈希表。
常用的增强LSH的方法:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。