深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
10759 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
01 | 技术架构:深度学习推荐系统的经典技术架构长啥样?
04 | 特征工程:推荐系统有哪些可供利用的特征?
06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
课程目录
已完结/共 44 讲
开篇词 (1讲)
开篇词 | 从0开始搭建一个深度学习推荐系统
基础架构篇 (5讲)
01 | 技术架构:深度学习推荐系统的经典技术架构长啥样?
02 | Sparrow RecSys:我们要实现什么样的推荐系统?
03 | 深度学习基础:你打牢深度学习知识的地基了吗?
国庆策划 | 关于深度学习推荐系统,我有这些资料想推荐给你
国庆策划 | 深度学习推荐系统基础,你掌握了多少?
特征工程篇 (6讲)
04 | 特征工程:推荐系统有哪些可供利用的特征?
05 | 特征处理:如何利用Spark解决特征处理问题?
06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
07 | Embedding进阶:如何利用图结构数据生成Graph Embedding?
08 | Embedding实战:如何使用Spark生成Item2vec和Graph Embedding?
答疑 | 基础架构篇+特征工程篇常见问题解答
线上服务篇 (7讲)
09 | 线上服务:如何在线上提供高并发的推荐服务?
10 | 存储模块:如何用Redis解决推荐系统特征的存储问题?
11 | 召回层:如何快速又准确地筛选掉不相关物品?
12 | 局部敏感哈希:如何在常数时间内搜索Embedding最近邻?
13 | 模型服务:怎样把你的离线模型部署到线上?
14 | 融会贯通:Sparrow RecSys中的电影相似推荐功能是如何实现的?
答疑 | 线上服务篇留言问题详解
推荐模型篇 (12讲)
15 | 协同过滤:最经典的推荐模型,我们应该掌握什么?
16 | 深度学习革命:深度学习推荐模型发展的整体脉络是怎样的?
模型实战准备(一) | TensorFlow入门和环境配置
模型实战准备(二) | 模型特征、训练样本的处理
17 | Embedding+MLP:如何用TensorFlow实现经典的深度学习模型?
18|Wide&Deep:怎样让你的模型既有想象力又有记忆力?
19|NeuralCF:如何用深度学习改造协同过滤?
20 | DeepFM:如何让你的模型更好地处理特征交叉?
21|注意力机制、兴趣演化:推荐系统如何抓住用户的心?
22|强化学习:让推荐系统像智能机器人一样自主学习
特别加餐 | “银弹”不可靠,最优的模型结构该怎么找?
23| 实战:如何用深度学习模型实现Sparrow RecSys的个性化推荐功能?
模型评估篇 (5讲)
24 | 离线评估:常用的推荐系统离线评估方法有哪些?
25 | 评估指标:我们可以用哪些指标来衡量模型的好坏?
特别加餐|TensorFlow的模型离线评估实践怎么做?
26 | 在线测试:如何在推荐服务器内部实现A/B测试?
27 | 评估体系:如何解决A/B测试资源紧张的窘境?
前沿拓展篇 (6讲)
28 | 业界经典:YouTube深度学习推荐系统的经典架构长什么样?
29 | 图神经网络:Pinterest是如何应用图神经网络的?
30 | 流处理平台:Flink是如何快速识别用户兴趣,实现实时推荐的?
31|模型迭代:阿里巴巴是如何迭代更新推荐模型的?
32 | 强化学习案例:美团是如何在推荐系统中落地强化学习的?
33|技术权衡:解决方案这么多,哪个最合适?
结束语 (2讲)
结束语|深度学习时代需要什么样的推荐工程师?
期末考试 | “深度学习推荐系统”100分试卷等你来挑战!
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

15 | 协同过滤:最经典的推荐模型,我们应该掌握什么?

你好,我是王喆。今天我们要开启推荐模型篇的学习。
推荐模型篇是整个课程中最重要的一个模块,因为推荐模型直接决定了最终物品排序的结果,它的好坏也直接影响着推荐效果的优劣。而且,从某种意义上讲,推荐系统的整体架构都是围绕着推荐模型搭建的,用于支持推荐模型的上线、训练、评估、服务。因此,我一直把推荐模型称作“推荐系统这个皇冠上的明珠”
而提起推荐模型,我们就不能不提协同过滤算法。它可能是推荐系统自诞生以来最经典的算法,且没有之一。虽然我们课程的主题是“深度学习”推荐系统,但协同过滤以及它后续衍生出来的各类模型,都与深度学习推荐模型有着千丝万缕的联系。因此,在进入深度学习模型之前,掌握协同过滤及其衍生模型是非常有必要的。
今天,我就来给你讲讲经典协同过滤和它的衍生模型矩阵分解的原理,以及相关的 Spark 实现。

协同过滤算法的基本原理

我在特征工程篇曾经提到过:“用户行为数据是推荐系统最常用,也是最关键的数据。用户的潜在兴趣、用户对物品的评价好坏都反映在用户的行为历史中”
而协同过滤算法,就是一种完全依赖用户和物品之间行为关系的推荐算法。我们从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
01 | 技术架构:深度学习推荐系统的经典技术架构长啥样?
04 | 特征工程:推荐系统有哪些可供利用的特征?
06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
12 | 局部敏感哈希:如何在常数时间内搜索Embedding最近邻?
24 | 离线评估:常用的推荐系统离线评估方法有哪些?
31|模型迭代:阿里巴巴是如何迭代更新推荐模型的?
该试读文章来自付费专栏《深度学习推荐系统实战》,如需阅读全部文章,
请购买文章所属专栏
立即购买
登录 后留言

精选留言(28)

  • Geek_63ee39
    问题2:
    可以采用余弦相似度可以消除这种影响,例如:用户甲习惯打高分,对A, B, C三个物品打分为[5, 2, 5];用户乙习惯打低分,对A, B, C打分为为[3, 1, 3],虽然这两个评分向量的欧式距离比较远,但它们的余弦相似度比较高,约等于0.96

    作者回复: 这个思路我之前还没想到,但感觉应该是work的,可以尝试。

    经典的做法是在生成共现矩阵的时候对用户的评分进行用户级别的校正或者归一化,用当前得分减去用户平均得分作为共现矩阵里面的值。

    2020-11-08
    5
    41
  • Sebastian
    老师好,矩阵分解在工业界落地好像并不常见,从工程实践角度来讲,是有什么特殊的原因吗?

    作者回复: 正常的技术迭代。五年前的推荐系统,矩阵分解是很主流的技术方案。但是矩阵分解没法引入除用户行为外的其他特征,深度学习出来之后就逐渐被取代了。

    2020-11-09
    31
  • Geek_3c29c3
    老师您好,业务的指标是给不同用户推送可能点击概率比较大的广告,提高不同用户对不同广告的点击率,我这边是利用CTR模型来做的,预测每个用户点击某一个广告的概率,最后发现对于不同的广告,点击概率>0.5的人群重合度很大,目前分析有两个原因,一是测试所用的广告标签类似,导致可能点击用户群体相同;二是最可能的,就是喜欢点击广告的,就是那一波人,另外一波人无论什么广告都没有兴趣点击。老师有遇到过这种情况吗?是怎么解决的?

    作者回复: 这是一个非常好的业界问题。我之前也是做计算广告的,确实有过类似的经历。我感觉从数据上说,第二个原因的可能性非常大,你其实可以分析一下原始的数据,是不是说点击人群的范围确实比较小。

    至于解决方法我建议从特征设计的角度入手,看看能不能加入一些能增强模型泛化能力的特征,比如大家都有的一些人口属性特征,广告的分类结构特征之类的,希望能把特定人群的一些行为泛化出去。

    2020-11-11
    4
    16
  • 那时刻
    请问老师,文中提到的梯度下降方法对共现矩阵进行分解,和传统的SVD矩阵分解,有什么异同么?

    作者回复: SVD一般不用在工业级应用上,因为在求解大规模稀疏矩阵时复杂度过高。

    2020-11-10
    2
    14
  • 吴十一
    老师,我这边做点击推荐的时候正负样本比例相差很大,除了随机抽样负样本,还有什么比较好的办法呢?

    作者回复: 其实没有什么magic,工作中常用的就是负样本欠采样,和正样本过采样,或者增大正样本学习的权重。

    还有一种方法叫SMOTE,可以搜一下,大致意思是通过合成的方式过采样正样本。可以尝试但有一定风险。

    2020-11-18
    2
    12
  • Geek_04634b
    第一个问题既然已经有物品向量了应该直接求cosine sim取topk就行了,第二个问题,均值方差归一化是最标准的做法,我看评论里有说用cosine的,其实cosine和欧氏距离在l2归一化的条件下在数学上是等价的,本质还是要归一化。

    作者回复: 说的非常好,推荐参考。

    2021-02-19
    10
  • Chaosnow
    请问老师,MF如何做到迭代增量训练模型呢?每天全量更新做不到的情况下,只针对每天生产出的新数据训练是否会导致效果变差,比如更新了一部分item的向量从而影响到原本的相对距离。

    作者回复: MF没法做增量更新,新数据来了之后,共现矩阵都变了,整个求解的目标都变了,只能全量更新。

    2020-11-13
    2
    7
  • 你笑起来真好看
    如果用户只有隐式因为,那如何构建als模型的数据集呢?

    作者回复: 隐式行为正反馈取值1,负反馈取值0或-1,默认取0。比如点击取1,曝光无点击取0或-1,无交互取0。

    2020-11-09
    4
    5
  • Macielyoung
    我觉得消除用户评分偏差可以根据用户的平均评分标准化,即原始向量【x1,x2,x3】变成【x1-xp,x2-xp,x3-xp】,这样有利于弱化个人评分标准不同的影响

    作者回复: 非常好,就是经典的做法了

    2021-01-14
    3
  • JustDoIt
    常见隐模型矩阵分解有两种
    隐语义(隐因子)模型LFM(latent factor model)
    LSA(latent semantic analysis)潜在语义分析
    SparkMl 的 ALS 实现的是LSA吗?

    作者回复: 没必要这么理解,Spark的ALS指的就通过交替最小二乘法分解共现矩阵,没有必要联系到LFM和LSA上去。

    2020-11-10
    3
  • 科科科科科科名儿
    王老师 : 若采用item2vec的算法 ,输入为用户的观看序列(即观看的电影序列),训练得出一个向量查找表(向量权重),再根据每个观看的电影 embedding的向量与向量权重计算相似度,推荐出相似度比较高的电影,如果我想加入电影的标签(主演,导演)等,应该从那个方面尝试入手?

    作者回复: 推荐使用双塔模型,或者阿里的EGES。双塔模型我们之后的课程会涉及到。

    2020-11-10
    5
    3
  • 范闲
    问题一:
    相似物品推荐可以从item embedding做top n的召回
    问题二:
    对用用户打分做归一化处理(cur-average)/(max_min)

    作者回复: 正确

    2020-12-02
    3
    2
  • Geek_3c29c3
    老师早,
    人口数型特征就是性别年龄、常驻城市、手机型号等呗;
    广告的分类结构特征又是什么意思呢?将广告的标签打成泛泛的类别吗?
    把特定人群的一些行为泛化出去的意思是让每个广告>0.5的人群覆盖度更广,差别度更大吗?
    --------------------------------
    之前的问题:
    老师您好,业务的指标是给不同用户推送可能点击概率比较大的广告,提高不同用户对不同广告的点击率,我这边是利用CTR模型来做的,预测每个用户点击某一个广告的概率,最后发现对于不同的广告,点击概率>0.5的人群重合度很大,目前分析有两个原因,一是测试所用的广告标签类似,导致可能点击用户群体相同;二是最可能的,就是喜欢点击广告的,就是那一波人,另外一波人无论什么广告都没有兴趣点击。老师有遇到过这种情况吗?是怎么解决的?
    ---------------------------
    作者回复: 这是一个非常好的业界问题。我之前也是做计算广告的,确实有过类似的经历。我感觉从数据上说,第二个原因的可能性非常大,你其实可以分析一下原始的数据,是不是说点击人群的范围确实比较小。

    至于解决方法我建议从特征设计的角度入手,看看能不能加入一些能增强模型泛化能力的特征,比如大家都有的一些人口属性特征,广告的分类结构特征之类的,希望能把特定人群的一些行为泛化出去。

    作者回复: 人口属性特征就是性别年龄、常驻城市、手机型号等呗;
    是的

    广告的分类结构特征又是什么意思呢?将广告的标签打成泛泛的类别吗?
    广告一般都有分类体系对吧,行业->细分行业之类,可以把用户点击、购买过的广告标签放到特征工程中。

    把特定人群的一些行为泛化出去的意思是让每个广告>0.5的人群覆盖度更广,差别度更大吗?
    是的。


    2020-11-12
    2
  • 因子分解机
    问题2:
    可以引入用户和物品偏置项来对用户的打分习惯和物品的被打分情况进行建模。

    作者回复: 完全正确

    2020-11-10
    5
    2
  • Geek_3c29c3
    老师您好,我目前做的这个CTR有点偏推荐,不像计算广告,在做CTR预估的时候,发现预测每个广告会点击的用户重叠度很大,也就是说会点广告的永远是那一批人,这个问题一般是怎么解决的啊??

    作者回复: 描述不太清楚,到底你在做计算广告,还是在做推荐,还是在做CTR模型?点击广告的永远是那一批人说明泛化性不够?

    2020-11-09
    3
    2
  • Geek_04634b
    请问老师如果有上亿user和上亿item也能矩阵分解吗?这需要创建一个1亿*1亿的矩阵。工业界对此是如何处理的。

    作者回复: 其实大家用的都是稀疏矩阵,不可能真正建立一个1亿*1亿的稠密矩阵。而且运算的时候是只对非零的部分做运算,并没有想象中运算量那么大。

    2021-02-19
    1
  • haydenlo
    请问老师,lfm是否也是一种矩阵分解的方法,在实践中感觉计算量很大,在这里用als是否因为基于spark框架且运算量较少?

    作者回复: als是矩阵分解方法最常用的方法。你说的lfm也可以理解为一种矩阵分解方法,可以看作是MF的进化版本,因为lfm可以加入一阶部分,而且可以加入其他特征,更灵活一些。

    2020-11-10
    1
  • sljoai
    老师能否再解释一下矩阵分解算是embedding的一种?还是不理解

    作者回复: 因为矩阵分解最终也是生成了用户隐向量和物品隐向量,相当于是物品embedding向量和物品embedding向量。

    这和其他embedding方法的生成结果是一样的。

    2020-11-08
    1
  • 浣熊当家
    请问老师,矩阵分解可以算是embedding的一种吗?可以把embedding定义为降维的手段的统称吗?然后我的理解是矩阵分解和item2vec的主要区别有两点:1是输入:矩阵分解用到的是共现矩阵, item2vec用到的是序列矩阵,2是算法:矩阵分解的求解用到了交叉最小二乘,而item2vec用到了神经网络(不清楚神经网络内是不是也有als?),3是结果:矩阵分解直接得到每个用户得电影推荐列表,item2vec得到的是电影的相似度,如果需要进一步得到推荐列表还需要进一步操作。想请教老师我理解的对不对,问题有点多,是我一直都没有弄清楚的,期待老师的指导!

    作者回复: 广义讲矩阵分解就是embedding的一种。你说的都没错,但我觉得没必要强行比较这两种方法。只要分别清楚他们的原理和细节就可以了。

    2020-11-08
    1
  • CY
    王老师您好,请问矩阵分解得到的中间产物user embedding和item embedding,是否算在一个向量空间?我看到您有回复别人说不能保证user embedding和item embedding在同一个向量空间,而是要相乘打分排序。但相乘打分排序其实不就是内积相似度? 另外,在讲deep cross的时候也有回复评论说,如果把user和item embedding从concat变成dot product,就能把user embedding和item embedding放入一个向量空间。此处所谓的dot product,不就是矩阵分解里的计算吗?
    2022-01-02
收起评论
28
返回
顶部