作者回复: 因为这里user的embedding是通过把历史观看物品进行average得到的,所以他们在一个向量空间内,可以直接进行相似度计算。
作者回复: 生产环境中一般不使用第一种方法。第二种方法可以参考阿里的EGES,大致的思路是把这些原始特征作为输入向量,用隐层的输出作为物品的embedding。 有兴趣的话可以阅读下面的论文原文。 https://github.com/wzhe06/Reco-papers/blob/master/Embedding/%5BAlibaba%20Embedding%5D%20Billion-scale%20Commodity%20Embedding%20for%20E-commerce%20Recommendation%20in%20Alibaba%20%28Alibaba%202018%29.pdf
作者回复: 在系统延迟允许的情况下,其实k取的越大越好。 一般来说,如果最后的推荐结果需要n条,k取5-10n是比较合适的。
作者回复: 非常好的业界实践的问题。其实方法无非是我们提到过的几种。 1、把商品embedding进行预训练,再跟其他side information特征一起输入EGES。 2、像你说的hash方法 3、商品的聚类后输入,比如非常类似的商品,可以用一个商品id替代,当作一个商品来处理。这个方法airbnb embedding的论文讲的非常好。
作者回复: 后者
作者回复: 这是最常用最简单的user embedding生成方法。之前我们说过embedding之间是可以进行运算的。所以用用户喜欢的物品的embedding平均去代表这个用户是非常直观且实用的。
作者回复: 是的,one-hot特征肯定会让embedding matrix很大,但就是这样使用的,因为我们就是想求解每一个维度上对应item的embedding。 这也就是为什么说embedding层是神经网络中最耗时的部分的原因。
作者回复: 这是个好问题。简单的做法是把兴趣标签转换成multihot向量,然后就可以计算出用户和物品的相似度了。 复杂一点也可以计算每个兴趣标签的tfidf,为标签分配权重后,再转换成multihot向量。 如果标签有多层,也不妨碍把多层标签全部放到multihot向量中,高层标签的权重可以适当降低。这也是思路之一。 希望你自己也能有类似的思考。
作者回复: 基本就是这样的思路,生产环境中要做好线程池的维护和一些参数的调优。 可以的话欢迎提交多线程版本的pull request到SparrowRecsys项目
作者回复: 这还是冷启动问题,我之前有过类似的回复,可以参考。 另外其实我不建议如此多的新item还采用embedding的方案,没有必要,可以考虑在重排层加入这些新鲜的item。用一些基本的特征参与重排,简单模型虽然传统,但在特殊的场景下也经常采用。