19|NeuralCF:如何用深度学习改造协同过滤?
该思维导图由 AI 生成,仅供参考
NeuralCF 模型的结构
- 深入了解
- 翻译
- 解释
- 总结
深度学习技术在推荐系统中的应用备受关注,NeuralCF作为协同过滤的深度学习进化版本,结合协同过滤和矩阵分解,利用神经网络提高了推荐算法的泛化能力和拟合能力。NeuralCF模型结构包括了用户侧模型和物品侧模型,通过互操作层联合产生最终的预测得分,并且可以轻松上线和服务。文章还介绍了NeuralCF的TensorFlow实现,为读者提供了实际操作的参考。另外,基于双塔模型的原理实现了一个NeuralCF的双塔版本,让模型能够融入更丰富的信息。通过TensorFlow构建深度学习模型的便捷性,以及它和传统推荐模型相比,在模型结构灵活性上的巨大优势。整体而言,本文深入浅出地介绍了NeuralCF模型的原理和实现,对于想要了解深度学习在推荐系统中的应用的读者具有很高的参考价值。
《深度学习推荐系统实战》,新⼈⾸单¥68
全部留言(42)
- 最新
- 精选
- Evan-wyl不可以,如果是新闻推荐的话,地点信息会产生很大的影响;这时把地点信息仅仅是加入到用户侧没有任何作用。
作者回复: 这是从效果的层面考虑。如果从model serving的角度考虑,如果在物品侧或者用户侧加入场景特征的话,就没法做到预存embedding的serving方式了。因为场景特征是在线上不断变化的。
2020-11-2526 - AstrHanembedding之后,如果使用点积,那么这两个embedding是在同一个向量空间;如果使用的MLP则不在同一个向量空间。因为点积不影响向量空间,线性变换矩阵会影响。老师这么说对吧。
作者回复: 是这样的。
2021-01-16318 - 定春一号把context特征放进user塔或者item塔,那么离线生成user embedding或者item embedding的数量就要翻好多倍,能否考虑把context特征单独作为context塔呢?
作者回复: 是这样的,离线有组合爆炸的风险。 一般不会有context塔,如果希望引入context特征,最好就不用双塔模型,因为双塔模型易线上serving的优势就不存在了。
2020-11-26318 - 小小的天双塔模型对于新闻场景是不是也不太好?新闻时效性很强,在我们公司的数据里,大部分新闻曝光在2个小时内,双塔的训练数据有足够的曝光时,新闻的价值也失去了很多了
作者回复: 这是个好问题。新闻的场景确实是很有意思的场景,因为时效性很强。这时候新闻id类的特征就不太管用了,因为如果不重新训练,id类特征对应的embedding没办法引入。 所以对于这类时效性很强的场景,还是推荐基于一些与id无关的feature来构建模型,比如新闻的类型、人物、地点、关键词等等。
2020-12-15215 - Sebastian老师,我还是没理解为什么不能加入context的特征。在训练DSSM的时候除了user和item的特征外,在user塔加入context的特征,比如用户的地理位置、手机型号等等,训练完后,将user和item的embedding存入redis后。线上请求时,将user的静态特征和实时context特征再过一遍DSSM,得到新的user embedding后,与存入redis的item emebdding取topN即可,为什么不妥呢?
作者回复: 因为将user的静态特征和实时context特征再过一遍DSSM是一个非常重的操作,需要把深度模型部署上线,做实时推断。 这样当然是可以的。但跟离线生成user 和 item emb预存起来,线上只做简单dot product这样的部署方式,显然复杂了许多。 业界往往追求的实用性的效率,这就是加不加入context特征的区别所在。
2020-12-01215 - Geek_790c43不可以,因为如有地点或者时间这种波动比较大的特征就不能用预存embedding来表示当前的用户或者当前的物品了。例如外卖推荐,在公司和家时用户的embedding应该是不同的。或者新闻网站早晨和晚上的也应该不同
作者回复: 非常好
2021-01-2911 - 🍃老师,我还是不理解为什么用用户id和物品id做one-hot编码?直接数值特征不好么?
作者回复: 数值特征从理解上就是错了,比如 用户id 1761 和用户id 1881,如果是数值特征说明他们两个是有可比性的,但其实并没有,我们需要id类的特征来单独表达他们这两个用户的行为特点。
2021-05-089 - Geek_790c43图二中,和之前deep crossing 以及 wide&deep,把用户id的one hot向量作为输入, 如果有几亿的用户也这么处理么?
作者回复: 也是。这就是为什么大厂模型动辄上亿维的原因。当然,如果需要,可以使用一些降维的方法。
2021-01-2946 - AstrHan双塔版本的模型是不是有些问题,点积之后应该还要加一层输出层吧? output = tf.keras.layers.Dense(1, activation='sigmoid')(output)
作者回复: 理论上不是一定要加sigmoid函数。但tf这里如果值超过1会报错,已经接收了你的PR,感谢。
2021-01-1826 - Eayon老师前面提到Embedding+MLP中的物品,Embedding不能计算物品和用户的相似度,提到不在一个空间向量(也说不能点乘就不在一个空间,其实还是不太理解)这里就有两个问题 1.不在一个空间究竟是什么概念,真就是不能点积就行了,还是跟里面数据内涵有点关系? 2.另外Embedding+MLP 中的Embedding能不能计算物品与物品之间的相似度呢? 然后是这节课双塔模型中又可以得到物品和用户的Embedding,可以通过点积得到相似度 3.那这时候的物品embedding能用来计算物品间的相似度吗?
作者回复: 1. 由于他们不在一个空间内,所以不能点积,而不是反过来 2. 可以,物品和物品之间是一定在一个空间内的,但Embedding+MLP不可以直接物品和用户进行点积,因为他们是两个独立的embedding层。双塔模型如果训练的时候就是用用户emb点积物品emb训练的,那么他们是在一个空间内。 3.可以
2021-04-265