Shingleprinting如何在实践中发挥作用?

时间:2010-07-09 08:57:21

标签: performance random permutation information-retrieval text-mining

我正在尝试使用shingleprinting来衡量文档的相似性。该过程包括以下步骤:

  1. 创建两个文档D1,D2
  2. 中的5-shingling
  3. 使用64位哈希值散列每个木瓦
  4. 选择从0到2 ^ 64-1的数字的随机排列并应用于瓦片哈希
  5. 为每个文档找到最小的结果值
  6. 如果匹配,则将其视为正例,如果不将其视为反面例子
  7. 重复3.到5.几次
  8. 使用positive_examples / total examples作为相似性度量
  9. 步骤3涉及生成非常长序列的随机排列。使用Knuth-shuffle似乎是不可能的。这有什么捷径吗?请注意,最后我们只需要生成排列的单个元素。

1 个答案:

答案 0 :(得分:3)

警告:我对此并不是100%肯定,但我已经阅读了一些论文,我相信这是它的工作原理。例如,在Piotr Indyk的“一个小的近似独立的散列函数族”中,他写道:“在与Altavista集成的实现中,集合H被选择为成对独立的散列函数族。”

在第3步中,实际上并不需要[n]上的随机排列(从1到n的整数)。事实证明,成对独立的散列函数在实践中有效。所以你要做的是选择一个成对独立的散列函数h。然后将h应用于每个木瓦哈希。您可以在步骤4中获取这些值的最小值。

标准的成对独立散列函数是h(x)= ax + b(mod p),其中a和b是随机选择的,p是素数。

参考文献:http://www.cs.princeton.edu/courses/archive/fall08/cos521/hash.pdfhttp://people.csail.mit.edu/indyk/minwise99.ps