【问题标题】:Vowpal Wabbit: What hash function is used exactly?Vowpal Wabbit:究竟使用了什么哈希函数?
【发布时间】:2015-11-14 04:25:53
【问题描述】:

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

我知道底层算法是Murmurhash 3,但是看github上的VW代码我没弄明白。

有谁知道大众汽车到底使用了哪种哈希函数?

【问题讨论】:

  • 为大量编辑道歉

标签: hash vowpalwabbit


【解决方案1】:

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

但是,它与 uniform_hash 的原始 API 略有不同,以适应 vw 中不同的使用场景。

您可以查看源代码:

如您所见,当您深入研究细节时,事情并没有那么简单。原因并不简单,因为在某些地方,当特征和名称空间在交互和一些缩减算法中结合时,会做出额外的努力来改善分散性。

以下是详细信息列表(可能不是 100% 完整):

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 2019-06-30
    • 2015-01-26
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    相关资源
    最近更新 更多