推荐系统:将UUID转换为32位整数,用于推荐库

时间:2018-01-02 21:33:11

标签: hash hashtable recommendation-engine

LightFM和其他库要求用户提供32位整数id。但是,我们的用户ID是UUID,例如0003374a-a35c-46ed-96d2-0ea32b753199。我想知道你会在这些场景中推荐什么。我想出的是:

  • 在内存或数据库中创建双向字典以保留UUID< - > Int映射。例如https://github.com/jab/bidict
  • 使用非加密哈希函数,如MurmurHash3或xxHash。对于例如对于1000万UUID,我使用xxhash获得了大约11,521或0.1%的碰撞。推荐系统可以忽略不计吗?

我也很好奇这将如何应用于在线预测场景,在给定UUID,用户交互和模型的情况下,我必须预测需要32位整数的模型的建议。如果我使用in memory bidict方法,那么在这种情况下这将不起作用,因此我可能必须在最坏的情况下创建一个持久的键值存储。

1 个答案:

答案 0 :(得分:2)

  1. 这肯定有用,可能是绝大多数用户会选择的解决方案。当然,缺点在于必须维护映射。
  2. 散列函数也可以使用。事实上,有些方法使用散列到所需嵌入层的reduce the dimensionality。值得注意的是,生成的哈希范围应该相对紧凑:大多数实现将为所有可能的值分配参数,因此散列到非常大的值的散列函数将需要过多的内存量。通过模函数进行散列可以很好地工作;然后,在保持所有参数和碰撞概率所需的存储器之间进行权衡。
  3. 在LightFM以及大多数其他实施方案中,只能针对培训期间出现的用户和项目(或至少针对用户和项目功能)进行推荐。然后,映射将成为模型本身的一部分,并有效地冻结,直到训练新模型为止。