Multi-Hash Variable论文笔记
Compositional Embeddings Using Complementary Partitions for Memory-Efficient Recommendation Systems:https://arxiv.org/pdf/1909.02107.pdf
DeepRec有这个功能,所以研读一下原论文。
一般使用hash-trick来做embedding,虽然能够减少模型大小,但对模型性能上海比较大。
可以使用quotient-remainder trick拆成两个表,然后把两个向量各个元素乘起来。

更进一步推广到多个partition:

比如用generalized Quotient-remainder complementary partitions,多次求商求余数得到k个partition:

不同partition取出的embedding怎么组合可以是:1) concat 2) Addition 3) Element-wise multiplication。

假定各个partition的emb维数一样,那么内存复杂度从O(|S|D)降到了O(k|S|^1/kD),明显改善。
embedding组合的另一种方法是按先后路径对各个embedding进行转换,主要选择有:1)线性变换 2)MLP变换。

线形变换或较小的MLP变换,同样可以达到O(k|S|^1/kD)的空间复杂度。
后面是在criteo dataset上使用DCN/DLRM进行实验。效果看来是好于hash:

较好的组合方法有时是multi,有时是feature:

哈希表大小对效果也有影响:

个人感觉,这里有作用的embedding,应该是连续值的feature,按log或分桶做了离散化,所以用这种方法有效果。对于分布无规律的ID类特征,这种这么规则的方法应该没有这个作用吧,毕竟难以学习。