参考
- 奔奔:推荐算法注意点和DeepFM工程化实现
- 石塔西:用TensorFlow实现支持多值、稀疏、共享权重的DeepFM
- 蘑菇街增量学习番外篇三:deepFM的动态正则实践
- 蘑菇街首页推荐视频流——增量学习与wide&deepFM实践(工程+算法)
常见问题
- 哪些特征比较有效?点击序列特征。
- id类特征如何做hash?用乘法hash算法,代码如下:
static int bernstein(String key)
{
int seed = 131;//31, 131, 1313, 13131, 131313
int hash = 0;
for (int i=0; i<key.length(); ++i) hash = seed*hash + key.charAt(i);
return hash;
}
- 数值特征如何做离散化?离散成多少个?一般有等距和等频两种,可以统一或单独指定分桶数量,一般10个左右。重要特征可以多分桶,次要的可以少分桶。2020年华为发展了一种CTR预估中数值特征自动离散化方法AutoDIS。
- 模型层数和每层结点数怎么取?全靠经验,没什么太好的确定方法。如何确定神经网络的层数和隐藏层神经元数量。
- batch_size怎么取比较好?建议128。太大占内存大,降低了结果随机性。太小训练比较耗时。
- 训练模型需要多长时间?
- 训练好的模型有多大?embeding比较占空间,可以将embeding存入Redis做服务。
- 模型响应时间多长?几十ms,性能问题不大。
- deepFM模型超参调节?
- 单机训练?集群训练?