Vowpal Wabbit:究竟使用了什么哈希函数?

时间:2015-08-20 13:34:59

标签: hash vowpalwabbit

我真的很想知道在Vowpal Wabbit中使用哪个哈希函数进行特征哈希。

我知道基础算法是 Murmurhash 3 ,但我无法通过查看github上的大众代码来了解详细信息。

是否有人知道大众使用的确切哈希函数?

1 个答案:

答案 0 :(得分:4)

核心哈希函数是Austin Appleby的32位Murmur Hash v 3.0。

但是,它与原始uniform_hash稍有不同的API更改,以使其适应vw中不同的使用方案。

您可以在以下位置查看来源:

正如您所看到的,当您深入细节时,事情并非如此简单。原因并不简单,在某些地方,当特征和名称空间在交互和一些约简算法中组合时,会进一步努力改善分散。

这是一个(可能不是100%完整的)详细信息列表:

  • 在散列之后,总是有一个基于当前位值(-b bits,默认为18)的模运算,以便适合权重向量,因此从散列中获得的值可以小于直/天真的哈希。
  • vowpal wabbit支持(SVMlight样式)数字特征名称,您可以直接使用数字“最终”值而不是哈希值。默认情况下(--hash strings),以数字开头的要素名称最初按原样使用(无哈希),但如果它们继续使用某些非数字,则到目前为止计算的当前值将用作种子,并且其余的名字是murmur-32-hashed
  • 当存在名称空间时,获取哈希值的完整字符串为 名称空间^ featurename
  • 当使用名称空间交互选项(--redefine-q--cubic等)时,两个哈希结果将与不同的简单哈希相结合。
  • 在某些缩减中,例如--search,在使用杂音哈希(参见:vowpalwabbit/search.cc)时会使用特定的(非零)种子,因此您可能会获得与预期不同的哈希值。

如有疑问,您可以使用--audit选项,vw将输出每个示例中每个要素的确切哈希值。格式是(示例):

#
#    UserJack1^mean_karma:3864409:0.12345:0.919323[@3.8964]
#    ^^^^+^^^^ ^^^^^+^^^^ ^^^+^^^ ^^^+^^^ ^^^^+^^^ ^^^+^^^
#        |          |        |       |        |       |
#    namespace featurename hashval value   weight Sum(gradients)
#