Hash Vowpal Wabbit:到底使用了什么哈希函数?

Hash Vowpal Wabbit:到底使用了什么哈希函数?,hash,vowpalwabbit,Hash,Vowpalwabbit,我很想知道在Vowpal Wabbit中哪个哈希函数用于功能哈希 我知道底层算法是3,但我无法通过查看github上的VW代码了解细节 有人知道VW中使用的是哪种哈希函数吗?核心哈希函数是Austin Appleby的32位杂音哈希v3.0 但是,它与原始asuniform_hash的API略有不同,以适应vw中的不同使用场景 您可以查看以下来源: (查找hashstrings和hashall函数) 正如你所看到的,当你深入细节时,事情并不是那么简单。之所以不简单,是因为在某些地方,当特

我很想知道在Vowpal Wabbit中哪个哈希函数用于功能哈希

我知道底层算法是3,但我无法通过查看github上的VW代码了解细节


有人知道VW中使用的是哪种哈希函数吗?

核心哈希函数是Austin Appleby的32位杂音哈希v3.0

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

您可以查看以下来源:

  • (查找
    hashstrings
    hashall
    函数)
正如你所看到的,当你深入细节时,事情并不是那么简单。之所以不简单,是因为在某些地方,当特征和名称空间在交互和一些简化算法中结合时,为了提高分散性,做了额外的努力

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

  • 散列后,始终会基于当前位值(
    -b位
    ,默认值18)进行模运算,以适应权重向量,因此从散列中获得的值可以小于直接/原始散列
  • vowpal wabbit支持(SVMlight样式)数字功能名称,您可以直接使用数字“最终”值,而不是散列。默认情况下(
    --散列字符串
    ),以数字开头的要素名称最初按原样使用(无散列),但如果它们继续使用某些非数字,则当前计算的值将用作种子,名称的其余部分将按杂音-32散列
  • 当名称空间存在时,散列的完整字符串是名称空间^featurename
  • 使用名称空间交互选项(
    --redefinite
    -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)
#