推荐系统召回之LFM算法详解(一)
一 个性化找回
召回:从item中选取一部分作为候选集
1)不同的用户喜欢不同的item
2)部分作为候选集,降低系统的负担
根据用户的属性行为上下文等信息从物品全集中选取其感兴趣的物品做为候选集,召回的重要作用:召回决定了最终推荐结果的天花板个性化召回解析分为三种:
1.基于用户行为
2.基于user profile
3.基于隐语义的LFM
工业界个性化召回架构:个性化召回算法LFM(latent factor model)即潜在因素模型:隐语义模型
1.FLM算法的来源
相比UserCF算法(基于类似用于进行推荐)和ItemCF(基于类似物品进行推荐)算法:我们还可以直接对物品和用户的兴趣分类,对应某个用户先得到他的兴趣分类,确定他喜欢哪一类的物品,再这个类中挑选他喜欢的物品。
提到协同领导,很多人想到是itemCF 和userCF ,那么说到的LFM与这两者又有什么区别?
首先简单回忆一下itemCF和UserCF
Item CF
缺点:
1)用户对商品的评价非常稀疏,这样基于用户的评价所得到的用户间的相似性可能不准确(即稀疏性问题);
2)随着用户和商品的增多,系统的性能会越来越低。
3)如果从来没有用户对某一商品加以评价,则这个商品就不可能被推荐(即最初评价问题)
LFM
先对所有的物品进行分类,再根据用户的兴趣分类给用户推荐该分类的物品
LFM由于得到了User和Item向量,计算用户的toplike 物品时候,入股哦推荐系统的总量很大,那么就要将每一个item向量做点乘运算,复杂度比较高,也比较耗时,得到了用户的toplike之后,写入到Redis当中,线上系统访问系统的时候,直接推荐toplike的链表,但是实时性稍微会差一点
LFM只是存储user想和item向量,需要空间复杂度=用户隐类数 +物品数隐类数;
假设D样本,迭代N次,F为隐类的个数,那么LFM训练的时间复杂度=DFN
Item CF算法是将item(物品)进行划分,这样一旦item贡献次数越多,就会照成两个item🈷相近。举个例子,就是当你看你喜欢的节目时候,为了不错过精彩的内容,的你广告部分也会看;这时,后天就会统计,你看 了电视节目,也看了广告。这样就可能分析出电视节目和广告比较接近。
然而,事实两者并不一样, 为了解决这一问题,就会需要人工打标签,进行降维处理。这种方式就需要消耗大量人力,不适用。对此,就需要LFM。LFM是根据用户对item的点击与否,来获取user和item之间的关系,item与item之间的关系。我的理解就是LFM不仅会考虑item,也会考虑item
什么是FLM算法?
为了方便了解,这里用具体的例子介绍算法的思想
对于音乐,每一个用户都有自己的喜好,比如A喜欢带有小清新的,吉他伴奏,王菲等元素。如果一首歌的(item)带有这些蒜素,那么就将这首歌推荐该用户,也就是用元年苏去连接用户和音乐。每个人对于不同的酸雨偏好不同,而每首歌的元素也不一样。
所以我们希望能够找到这样两个矩阵:潜在因子-用户矩阵Q,潜在因子-音乐矩阵P
(1) 潜在因子-用户举证:表示不同的用户对于不用元素的偏好程度,1代表很喜欢,0代表不喜欢。
比如:
image.png
(2)潜在因子-音乐绝症:表示每种音乐含有各种元素的成分,比如下表中,音乐A是一个偏小清晰的音乐,含有小清晰的这个Latent Factor的成分是0.9,重口味成分是0.1,优雅的成分是0.2
image.png
利用这两个矩阵,我们能得出张三对音乐A的喜欢程度是:张三对小清晰的偏好 音乐A 含有小清晰的成分+最重口味的偏好音乐A含有重口味的成分+对优雅的偏好的因为A含有优雅的成分+.....................
即:0.60.9 + 0.80.1 + 0.10.2 + 0.10.4 + 0.70 = 0.68
每个用户的对每首歌对都是这样的计算可以额得到不同用户对于不同歌曲的评分矩阵。(注,这里的破浪线表示的是估计的评分,接下来我们还会用到不带波浪线的R表示实际的评分):
image.png
因此我们对张三推荐四首歌中得分最高的B,对里斯推荐得分最高的C,王五推荐B
基于思想,基于兴趣分类的方法大概需要解决3个问题
- 如果对物品分类
- 如何确定用户对那些物品分类,以及感兴趣程度
-
确定了用户的兴趣,选择这个类的哪些物品推荐给用户?以及如何确定这些物品再这个类中的权重?
下面问题来了,这个潜在因子(latent factor)是怎么得到的呢?
由于面对海量的让用户自己给音乐分类并告诉我们自己的偏好系数显然是不现实的,事实上我们能获得的数据只有用户行为数据。我们沿用 @邰原朗的量化标准:单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-2 , 拉黑=-5,在分析时能获得的实际评分矩阵R,也就是输入矩阵大概是这个样子:
image.png
事实上这是个非常非常稀疏的矩阵,因为大部分用户只听过全部音乐中很少一部分。如何利用这个矩阵去找潜在因子,这里主要用到的是UV分解。也就是将上面的评分矩阵分解为两个低纬度的矩阵。用Q和P 两个矩阵对的乘积去估计实际的评分矩阵,而且我们希望估计的评分矩阵
image.png
隐语义模型计算用户u对物品i兴趣的公式:
image.png
Pu,k表示用户u的兴趣和第k个隐类的关系,而Qi,k表示物品i与第k个隐类的数量,r便是用户对物品的兴趣度。接下的问题便是如何计算两个参数p和q了。对于这种线性模型的计算方法,这使用的是梯度下降法。
下面给出公式,对于正样本,我们规定r=1,负样本r=0:
image.png
其中P矩阵表示:特定用户对特定类的喜好程度,Q表示特定电影属于特定类的权重。这样就实现了由用户行为对电影自动的聚类。如果推荐一部电影给某个特定用户,通过查询这部电影再PQ矩阵内的具体值就能预测这个用户对这部电影的评分。
image.png
Latent Factor Model ,很多人称为SVD,其实是比较伪的SVD,一直是最近今年推荐系统研究的热点。但LFM的研究一直是在评分预测问题上,很多好用人生成TOPN推荐的列表,而且也很少有人研究如何把这个模型应用到非评分数据上,其实LFM模型在评分预测和TopN上的应用道理是一样的。
在topN问题上,道理都是一样的,(隐反馈数据集上R只有1.0,分布表示感兴趣,不感兴趣,并且原始数据明确1类的正样本,负反馈数据需要我们自己收集生成,如何生成负样本是个需要解决的问题,上面也讲到依据什么原则解决,但是还需要改进,正负样本比例是个比较中重要的参数获取PQ 矩阵,就可以向某个特定的用户推荐给他喜欢的电影内点中权重最高的电影或者按权重从大到小排序N个电影给他)
3.LFM算法的应用场景
根据上面内容,可以得到相应的模型输出,即两个潜在因子矩阵。其中潜在因子的维度是之前的设定,可以理解为有那些特征可能对user和item的喜好程度。
(1) 计算用户toplike:对于与用户没有被展示的item,可以计算出一个用户对item的倾向性得分,取toplike后可以直接完成对用户的item的喜爱程度列表,写入离线即可以完成对在线的推荐。
(2) 计算item的topsim:得到的item 的向量可以用很多表示距离的公式包含cos等等,计算每一个item的相似度矩阵。该举证可以用于线上推荐,当用户点击item之后,给其推荐与该item的topsim item
(3)计算item的topic:根据得到的item向量,可以用聚类的方法,如K-means等等,取出一些隐含的类别。也就是一些隐含的topic能将item分成不的蔟,推荐按蔟推荐。
实战:分别实现LFM算法再预测评分和TopN上的代码