深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
33298 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

19|NeuralCF:如何用深度学习改造协同过滤?

内积操作
用户侧输入特征层
物品侧输入特征层
多层神经网络
连接层
用户侧特征层
物品侧特征层
多层神经网络
输出层
Embedding层
输入层
场景特征的影响
双塔模型优势
NeuralCF优势
neural_cf_model_2
neural_cf_model_1
互操作层
物品侧模型
用户侧模型
改进
结构
物品隐向量
用户隐向量
物品矩阵
用户矩阵
物品向量相似性
用户向量相似性
共现矩阵
课后思考
小结
TensorFlow实现
双塔模型
NeuralCF
矩阵分解
协同过滤
如何用深度学习改造协同过滤

该思维导图由 AI 生成,仅供参考

你好,我是王喆,今天,我们来学习协同过滤的深度学习进化版本,NeuralCF。
第 15 讲里,我们学习了最经典的推荐算法,协同过滤。在前深度学习的时代,协同过滤曾经大放异彩,但随着技术的发展,协同过滤相比深度学习模型的弊端就日益显现出来了,因为它是通过直接利用非常稀疏的共现矩阵进行预测的,所以模型的泛化能力非常弱,遇到历史行为非常少的用户,就没法产生准确的推荐结果了。
虽然,我们可以通过矩阵分解算法增强它的泛化能力,但因为矩阵分解是利用非常简单的内积方式来处理用户向量和物品向量的交叉问题的,所以,它的拟合能力也比较弱。这该怎么办呢?不是说深度学习模型的拟合能力都很强吗?我们能不能利用深度学习来改进协同过滤算法呢?
当然是可以的。2017 年,新加坡国立的研究者就使用深度学习网络来改进了传统的协同过滤算法,取名 NeuralCF(神经网络协同过滤)。NeuralCF 大大提高了协同过滤算法的泛化能力和拟合能力,让这个经典的推荐算法又重新在深度学习时代焕发生机。这节课,我们就一起来学习并实现 NeuralCF!

NeuralCF 模型的结构

在学习 NeuralCF 之前,我们先来简单回顾一下协同过滤和矩阵分解的原理。协同过滤是利用用户和物品之间的交互行为历史,构建出一个像图 1 左一样的共现矩阵。在共现矩阵的基础上,利用每一行的用户向量相似性,找到相似用户,再利用相似用户喜欢的物品进行推荐。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

深度学习技术在推荐系统中的应用备受关注,NeuralCF作为协同过滤的深度学习进化版本,结合协同过滤和矩阵分解,利用神经网络提高了推荐算法的泛化能力和拟合能力。NeuralCF模型结构包括了用户侧模型和物品侧模型,通过互操作层联合产生最终的预测得分,并且可以轻松上线和服务。文章还介绍了NeuralCF的TensorFlow实现,为读者提供了实际操作的参考。另外,基于双塔模型的原理实现了一个NeuralCF的双塔版本,让模型能够融入更丰富的信息。通过TensorFlow构建深度学习模型的便捷性,以及它和传统推荐模型相比,在模型结构灵活性上的巨大优势。整体而言,本文深入浅出地介绍了NeuralCF模型的原理和实现,对于想要了解深度学习在推荐系统中的应用的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深度学习推荐系统实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(42)

  • 最新
  • 精选
  • Evan-wyl
    不可以,如果是新闻推荐的话,地点信息会产生很大的影响;这时把地点信息仅仅是加入到用户侧没有任何作用。

    作者回复: 这是从效果的层面考虑。如果从model serving的角度考虑,如果在物品侧或者用户侧加入场景特征的话,就没法做到预存embedding的serving方式了。因为场景特征是在线上不断变化的。

    2020-11-25
    26
  • AstrHan
    embedding之后,如果使用点积,那么这两个embedding是在同一个向量空间;如果使用的MLP则不在同一个向量空间。因为点积不影响向量空间,线性变换矩阵会影响。老师这么说对吧。

    作者回复: 是这样的。

    2021-01-16
    3
    18
  • 定春一号
    把context特征放进user塔或者item塔,那么离线生成user embedding或者item embedding的数量就要翻好多倍,能否考虑把context特征单独作为context塔呢?

    作者回复: 是这样的,离线有组合爆炸的风险。 一般不会有context塔,如果希望引入context特征,最好就不用双塔模型,因为双塔模型易线上serving的优势就不存在了。

    2020-11-26
    3
    18
  • 小小的天
    双塔模型对于新闻场景是不是也不太好?新闻时效性很强,在我们公司的数据里,大部分新闻曝光在2个小时内,双塔的训练数据有足够的曝光时,新闻的价值也失去了很多了

    作者回复: 这是个好问题。新闻的场景确实是很有意思的场景,因为时效性很强。这时候新闻id类的特征就不太管用了,因为如果不重新训练,id类特征对应的embedding没办法引入。 所以对于这类时效性很强的场景,还是推荐基于一些与id无关的feature来构建模型,比如新闻的类型、人物、地点、关键词等等。

    2020-12-15
    2
    15
  • 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-01
    2
    15
  • Geek_790c43
    不可以,因为如有地点或者时间这种波动比较大的特征就不能用预存embedding来表示当前的用户或者当前的物品了。例如外卖推荐,在公司和家时用户的embedding应该是不同的。或者新闻网站早晨和晚上的也应该不同

    作者回复: 非常好

    2021-01-29
    11
  • 🍃
    老师,我还是不理解为什么用用户id和物品id做one-hot编码?直接数值特征不好么?

    作者回复: 数值特征从理解上就是错了,比如 用户id 1761 和用户id 1881,如果是数值特征说明他们两个是有可比性的,但其实并没有,我们需要id类的特征来单独表达他们这两个用户的行为特点。

    2021-05-08
    9
  • Geek_790c43
    图二中,和之前deep crossing 以及 wide&deep,把用户id的one hot向量作为输入, 如果有几亿的用户也这么处理么?

    作者回复: 也是。这就是为什么大厂模型动辄上亿维的原因。当然,如果需要,可以使用一些降维的方法。

    2021-01-29
    4
    6
  • AstrHan
    双塔版本的模型是不是有些问题,点积之后应该还要加一层输出层吧? output = tf.keras.layers.Dense(1, activation='sigmoid')(output)

    作者回复: 理论上不是一定要加sigmoid函数。但tf这里如果值超过1会报错,已经接收了你的PR,感谢。

    2021-01-18
    2
    6
  • Eayon
    老师前面提到Embedding+MLP中的物品,Embedding不能计算物品和用户的相似度,提到不在一个空间向量(也说不能点乘就不在一个空间,其实还是不太理解)这里就有两个问题 1.不在一个空间究竟是什么概念,真就是不能点积就行了,还是跟里面数据内涵有点关系? 2.另外Embedding+MLP 中的Embedding能不能计算物品与物品之间的相似度呢? 然后是这节课双塔模型中又可以得到物品和用户的Embedding,可以通过点积得到相似度 3.那这时候的物品embedding能用来计算物品间的相似度吗?

    作者回复: 1. 由于他们不在一个空间内,所以不能点积,而不是反过来 2. 可以,物品和物品之间是一定在一个空间内的,但Embedding+MLP不可以直接物品和用户进行点积,因为他们是两个独立的embedding层。双塔模型如果训练的时候就是用用户emb点积物品emb训练的,那么他们是在一个空间内。 3.可以

    2021-04-26
    5
收起评论
显示
设置
留言
42
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部