Skip to main content

哈希技术

布隆过滤器

  • kk:哈希函数个数
  • mm:位数组大小
  • nn:元素个数
  • ϵ\epsilon:误判率

最优的位数组大小

m=1.44nlog21ϵm = 1.44nlog_2\frac{1}{\epsilon}

最优的哈希函数个数

k=ln2mnk = ln2 \cdot \frac{m}{n}

Shingling

将一篇文档视为一个字符串,文档的 kk-Shingling 定义为其中任意长度为 kk 的字串。

这样每篇文档都可以用 kk-Shingling 的集合来表示。(集合中的元素只能出现一次,包中的元素可以重复出现)

在得到某两篇文档的 Shingling 表示后,可用 Jaccard 距离来衡量两篇文档的相似度。

Jaccard 相似度

Jaccard(A,B)=ABAB\text{Jaccard}(A, B) = \frac{A \cap B}{A \cup B}

Jaccard 距离

DJ(A,B)=1Jaccard(A,B)=1ABAB\text{DJ}(A, B) = 1 - \text{Jaccard}(A, B) = 1 - \frac{A \cap B}{A \cup B}

构建文档特征矩阵

shingling-example

Min-Hashing(最小哈希)

布尔向量 vv,随机排列 hhh(v)h(v) 为布尔向量经过随机排列后得到的新向量。mh(v)mh(v) 为新布尔向量中第一个不为 00 的行号。

示例:mh(d1)=0mh(d_1) = 0mh(d2)=0mh(d_2) = 0mh(d3)=1mh(d_3) = 1mh(d4)=0mh(d_4) = 0

min-hashing-example

定理1 ⭐

两个集合 S1S_1S2S_2 经过多次随机排列之后得到的两个最小哈希值相等的概率,等于这两个集合的 Jaccard 相似度。

Pr[mh(S1)=mh(S2)]=Jaccard(S1,S2)\text{Pr}[mh(S_1) = mh(S_2)] = \text{Jaccard}(S_1, S_2)

最小哈希签名

集合 nn 个最小哈希值构成的列向量即为 SS最小哈希签名

最小哈希签名矩阵

由多个集合的最小哈希签名构成的矩阵即为最小哈希签名矩阵

min-hashing-signature-matrix-1

min-hashing-signature-matrix-2

最小哈希签名矩阵的相似度

基于最小哈希签名矩阵可以估算文档的相似度,但是当哈希函数个数较少时,估算误差可能会比较大。

min-hashing-signature-matrix-similarity

  • 基于 Jaccard 相似度:通过“输入特征矩阵”使用 Jaccard 相似度计算。
  • 基于最小哈希签名矩阵:通过“最小哈希签名矩阵”使用 Jaccard 相似度计算。

基于 Min-Hashing 的 LSH(局部敏感哈希)

得到最小哈希签名矩阵,就可以运用条块化方法实现局部敏感哈希(LSH)。

如图,将最小哈希签名矩阵划分为 bb 组或行条(band)。每组由 rr 行组成,都对应 rr 个哈希函数,由这 rr 个最小哈希组成的列向量决定一个集合映射到哪个桶中。

因此,rr 维列向量可以看作该集合的一个数字签名,拥有 bb 组意味着拥有 bb 次数字签名。两个集合只要有一个签名被映射到同一个桶中,就被认为是一对候选相似集合。

locality-sensitive-hashing

相似集合概率分析

假定将某个最小哈希签名矩阵划分为 bb 组,每组由 rr 行组成,两个集合 Jaccard 相似度为 ss。由定理1可知,两个集合最小哈希相等的概率也为 ss。那么两个集合被哈希到同一个桶中的概率与 Jaccard 相似度存在如下关系:

  1. 在某个组中,两个集合最小哈希值相等的概率是 srs^r
  2. 在某个组中,两个集合最小哈希值不相等的概率是 1sr1 - s^r
  3. 在所有组中,两个集合最小哈希值都不相等的概率是 (1sr)b(1 - s^r)^b
  4. 在所有组中存在一个组满足,两个集合最小哈希值相等的概率是 1(1sr)b1 - (1 - s^r)^b

1(1sr)b1 - (1 - s^r)^b 即为使用 LSH 判定为相似集合的概率。