15 | 协同过滤:最经典的推荐模型,我们应该掌握什么?
15 | 协同过滤:最经典的推荐模型,我们应该掌握什么?
讲述:王喆
时长13:45大小12.56M
协同过滤算法的基本原理
计算用户相似度
用户评分的预测
矩阵分解算法的原理
矩阵分解算法的 Spark 实现
小结
课后思考
赞 24
提建议
精选留言(29)
- Geek_63ee392020-11-08问题2: 可以采用余弦相似度可以消除这种影响,例如:用户甲习惯打高分,对A, B, C三个物品打分为[5, 2, 5];用户乙习惯打低分,对A, B, C打分为为[3, 1, 3],虽然这两个评分向量的欧式距离比较远,但它们的余弦相似度比较高,约等于0.96
作者回复: 这个思路我之前还没想到,但感觉应该是work的,可以尝试。 经典的做法是在生成共现矩阵的时候对用户的评分进行用户级别的校正或者归一化,用当前得分减去用户平均得分作为共现矩阵里面的值。
共 7 条评论52 - Sebastian2020-11-09老师好,矩阵分解在工业界落地好像并不常见,从工程实践角度来讲,是有什么特殊的原因吗?
作者回复: 正常的技术迭代。五年前的推荐系统,矩阵分解是很主流的技术方案。但是矩阵分解没法引入除用户行为外的其他特征,深度学习出来之后就逐渐被取代了。
共 2 条评论38 - Geek_3c29c32020-11-11老师您好,业务的指标是给不同用户推送可能点击概率比较大的广告,提高不同用户对不同广告的点击率,我这边是利用CTR模型来做的,预测每个用户点击某一个广告的概率,最后发现对于不同的广告,点击概率>0.5的人群重合度很大,目前分析有两个原因,一是测试所用的广告标签类似,导致可能点击用户群体相同;二是最可能的,就是喜欢点击广告的,就是那一波人,另外一波人无论什么广告都没有兴趣点击。老师有遇到过这种情况吗?是怎么解决的?展开
作者回复: 这是一个非常好的业界问题。我之前也是做计算广告的,确实有过类似的经历。我感觉从数据上说,第二个原因的可能性非常大,你其实可以分析一下原始的数据,是不是说点击人群的范围确实比较小。 至于解决方法我建议从特征设计的角度入手,看看能不能加入一些能增强模型泛化能力的特征,比如大家都有的一些人口属性特征,广告的分类结构特征之类的,希望能把特定人群的一些行为泛化出去。
共 4 条评论18 - 那时刻2020-11-10请问老师,文中提到的梯度下降方法对共现矩阵进行分解,和传统的SVD矩阵分解,有什么异同么?
作者回复: SVD一般不用在工业级应用上,因为在求解大规模稀疏矩阵时复杂度过高。
共 2 条评论18 - 吴十一2020-11-18老师,我这边做点击推荐的时候正负样本比例相差很大,除了随机抽样负样本,还有什么比较好的办法呢?
作者回复: 其实没有什么magic,工作中常用的就是负样本欠采样,和正样本过采样,或者增大正样本学习的权重。 还有一种方法叫SMOTE,可以搜一下,大致意思是通过合成的方式过采样正样本。可以尝试但有一定风险。
共 3 条评论16 - Geek_04634b2021-02-19第一个问题既然已经有物品向量了应该直接求cosine sim取topk就行了,第二个问题,均值方差归一化是最标准的做法,我看评论里有说用cosine的,其实cosine和欧氏距离在l2归一化的条件下在数学上是等价的,本质还是要归一化。
作者回复: 说的非常好,推荐参考。
14 - Chaosnow2020-11-13请问老师,MF如何做到迭代增量训练模型呢?每天全量更新做不到的情况下,只针对每天生产出的新数据训练是否会导致效果变差,比如更新了一部分item的向量从而影响到原本的相对距离。
作者回复: MF没法做增量更新,新数据来了之后,共现矩阵都变了,整个求解的目标都变了,只能全量更新。
共 3 条评论8 - Macielyoung2021-01-14我觉得消除用户评分偏差可以根据用户的平均评分标准化,即原始向量【x1,x2,x3】变成【x1-xp,x2-xp,x3-xp】,这样有利于弱化个人评分标准不同的影响
作者回复: 非常好,就是经典的做法了
6 - 你笑起来真好看2020-11-09如果用户只有隐式因为,那如何构建als模型的数据集呢?
作者回复: 隐式行为正反馈取值1,负反馈取值0或-1,默认取0。比如点击取1,曝光无点击取0或-1,无交互取0。
共 4 条评论5 - JustDoDT2020-11-10常见隐模型矩阵分解有两种 隐语义(隐因子)模型LFM(latent factor model) LSA(latent semantic analysis)潜在语义分析 SparkMl 的 ALS 实现的是LSA吗?
作者回复: 没必要这么理解,Spark的ALS指的就通过交替最小二乘法分解共现矩阵,没有必要联系到LFM和LSA上去。
3 - 科科科科科科名儿2020-11-10王老师 : 若采用item2vec的算法 ,输入为用户的观看序列(即观看的电影序列),训练得出一个向量查找表(向量权重),再根据每个观看的电影 embedding的向量与向量权重计算相似度,推荐出相似度比较高的电影,如果我想加入电影的标签(主演,导演)等,应该从那个方面尝试入手?
作者回复: 推荐使用双塔模型,或者阿里的EGES。双塔模型我们之后的课程会涉及到。
共 5 条评论3 - 范闲2020-12-02问题一: 相似物品推荐可以从item embedding做top n的召回 问题二: 对用用户打分做归一化处理(cur-average)/(max_min)
作者回复: 正确
共 3 条评论2 - Geek_3c29c32020-11-12老师早, 人口数型特征就是性别年龄、常驻城市、手机型号等呗; 广告的分类结构特征又是什么意思呢?将广告的标签打成泛泛的类别吗? 把特定人群的一些行为泛化出去的意思是让每个广告>0.5的人群覆盖度更广,差别度更大吗? -------------------------------- 之前的问题: 老师您好,业务的指标是给不同用户推送可能点击概率比较大的广告,提高不同用户对不同广告的点击率,我这边是利用CTR模型来做的,预测每个用户点击某一个广告的概率,最后发现对于不同的广告,点击概率>0.5的人群重合度很大,目前分析有两个原因,一是测试所用的广告标签类似,导致可能点击用户群体相同;二是最可能的,就是喜欢点击广告的,就是那一波人,另外一波人无论什么广告都没有兴趣点击。老师有遇到过这种情况吗?是怎么解决的? --------------------------- 作者回复: 这是一个非常好的业界问题。我之前也是做计算广告的,确实有过类似的经历。我感觉从数据上说,第二个原因的可能性非常大,你其实可以分析一下原始的数据,是不是说点击人群的范围确实比较小。 至于解决方法我建议从特征设计的角度入手,看看能不能加入一些能增强模型泛化能力的特征,比如大家都有的一些人口属性特征,广告的分类结构特征之类的,希望能把特定人群的一些行为泛化出去。展开
作者回复: 人口属性特征就是性别年龄、常驻城市、手机型号等呗; 是的 广告的分类结构特征又是什么意思呢?将广告的标签打成泛泛的类别吗? 广告一般都有分类体系对吧,行业->细分行业之类,可以把用户点击、购买过的广告标签放到特征工程中。 把特定人群的一些行为泛化出去的意思是让每个广告>0.5的人群覆盖度更广,差别度更大吗? 是的。
3 - 因子分解机2020-11-10问题2: 可以引入用户和物品偏置项来对用户的打分习惯和物品的被打分情况进行建模。
作者回复: 完全正确
共 5 条评论2 - Geek_3c29c32020-11-09老师您好,我目前做的这个CTR有点偏推荐,不像计算广告,在做CTR预估的时候,发现预测每个广告会点击的用户重叠度很大,也就是说会点广告的永远是那一批人,这个问题一般是怎么解决的啊??
作者回复: 描述不太清楚,到底你在做计算广告,还是在做推荐,还是在做CTR模型?点击广告的永远是那一批人说明泛化性不够?
共 3 条评论2 - Geek_04634b2021-02-19请问老师如果有上亿user和上亿item也能矩阵分解吗?这需要创建一个1亿*1亿的矩阵。工业界对此是如何处理的。
作者回复: 其实大家用的都是稀疏矩阵,不可能真正建立一个1亿*1亿的稠密矩阵。而且运算的时候是只对非零的部分做运算,并没有想象中运算量那么大。
1 - haydenlo2020-11-10请问老师,lfm是否也是一种矩阵分解的方法,在实践中感觉计算量很大,在这里用als是否因为基于spark框架且运算量较少?
作者回复: als是矩阵分解方法最常用的方法。你说的lfm也可以理解为一种矩阵分解方法,可以看作是MF的进化版本,因为lfm可以加入一阶部分,而且可以加入其他特征,更灵活一些。
1 - sljoai2020-11-08老师能否再解释一下矩阵分解算是embedding的一种?还是不理解
作者回复: 因为矩阵分解最终也是生成了用户隐向量和物品隐向量,相当于是物品embedding向量和物品embedding向量。 这和其他embedding方法的生成结果是一样的。
1 - 浣熊当家2020-11-08请问老师,矩阵分解可以算是embedding的一种吗?可以把embedding定义为降维的手段的统称吗?然后我的理解是矩阵分解和item2vec的主要区别有两点:1是输入:矩阵分解用到的是共现矩阵, item2vec用到的是序列矩阵,2是算法:矩阵分解的求解用到了交叉最小二乘,而item2vec用到了神经网络(不清楚神经网络内是不是也有als?),3是结果:矩阵分解直接得到每个用户得电影推荐列表,item2vec得到的是电影的相似度,如果需要进一步得到推荐列表还需要进一步操作。想请教老师我理解的对不对,问题有点多,是我一直都没有弄清楚的,期待老师的指导!展开
作者回复: 广义讲矩阵分解就是embedding的一种。你说的都没错,但我觉得没必要强行比较这两种方法。只要分别清楚他们的原理和细节就可以了。
2 - 凌一2022-03-02目前算法应用比较多的是搜广推,目前在网上看到比较多的是推荐算法,NLP,图像识别,想了解下,搜广推的技术原理是否大致一致?召回+排序为主线?算法原理是否相通的?