LFM隐因子算法理解
一、推荐算法介绍
(一)背景知识
1. 推荐算法分类
推荐算法通常被分为五大类,再加上高级非传统方法,形成5+1 结构:1) 协同过滤推荐算法。利用用户对物品的偏好数据集,计算出物品或者用户之间的相似度,然后再基于计算出的相似度得到用户对物品的预测评分,将预测评分最高的物品推荐给用户。2) 基于内容的推荐算法。 向用户推荐和其过去喜欢项的内容(例如元数据、描述、话题等等)相似的项。包括信息检索(例如 tf-idf 和 Okapi BM25)机器学习(例如朴素贝叶斯、支持向量机、决策树等等)。 3) 混合推荐算法。综合利用协同过滤推荐算法和基于内容的推荐算法各自的优点同时抵消各自的缺点。类型:加权、交换、混合、特性组合、案列、特征增强、元层次。4) 流行度推荐算法。一种推荐流行项的方法(例如最多下载、最多看过、最大影响的项)。5) 关联规则推荐。关联规则:所有的事物么间都可能存在一定的关联性是基于关联规则的推荐的基本理念。 6) 高级非传统的推荐算法。类型:深度学习、学习等级、Multi-armed bandits(探索/开发)、上下文感知推荐、张量分解、分解机、社会推荐等。
2.常用协同过滤算法及优缺点
图片.png3. 著名企业常用推荐算法
图片.png协同过滤算法是最常用,表现较好的推荐算法。下面对这个推荐算法进行简单介绍。
(二) 协同过滤推荐算法
协同过滤定义:通过在用户的一系列行为中寻找特定模式来产生用户个性化特殊推荐。
仅仅依赖于惯用数据(例如评价、购买、下载等用户偏好行为)作为输入来源。类型有两种,一种是基于邻域的协同过滤(基于用户和基于项),是一种统计方法。一种是基于模型的协同过滤(矩阵因子分解、受限玻尔兹曼机、贝叶斯网络等等)。
1. 基于领域/内存的推荐算法
从主体的不同设定分为两种。
(1)基于用户的协同过滤推荐算法
该算法以用户为中心,借助于用户与项目之间的交互寻找与该用户相似的用户群,这种算法的核心就是相似性计算方法,得到信任用户才能进一步得到推荐结果。
(2)基于项目的协同过滤推荐算法
同上一个算法相反,它从项目的角度出发,通过不同用户在与同一项目的交互中计算出项目的相似性。而且就表面来看和基于内容的推荐算法有些相似,但仔细研究就会发现基于内容的算法是根据项目标签来计算相似度,而基于项目的算法本质还是协同过滤,数据源是用户项目间的交互数据。
两者相似度计算的数据获取渠道完全不同。但是得出的推荐结果是不一样的。
2. 基于模型的推荐算法
基于模型的推荐算法用部分己有的稀疏数据来预测空白交互,并对这个过程进行数学建模得到预测模型。
举一个例子。一个用户看电视节目有偏好,对TA 的行为进行0~5分的评分。针对一个特定的节目,如果直接选择不喜欢或者拉黑了,得0分;打开了但是30秒内就关掉,得1分;看了0.5~2分钟,得2分;看了10分钟以上,得3分;看完了得4分,看完了并且保存或者推荐给其他用户,得5分。根据以上规则,可以把所有用户和所有的节目构造成一张巨大的表,叫做 U—i 矩阵,见表格 1 用户 User —— 对象 item 评分rating 矩阵,U-i矩阵
图片.png
以上对用户-项目评分矩阵 是非常稀疏的,毕竟一个人看的一个电视台(如央视)的节目是非常有限的,表格中基本上只有 0.1% 的单元格有数据。如果我们能通过预测把上述表格填满,这样就可以实现对用户的推荐了。填满上表有两种方式,一种是直接估计空格,一种是对评分矩阵通过矩阵分解来实现填满空格。矩阵分解方法中,LFM(Latent factor model)隐/潜语义模型是目前使用最多,并且效果很好的一种方法。
三、 隐/潜语义模型(LFM)实现推荐过程
(一) LFM实现推荐原理
LFM采取基于特征推荐算法,即对视频的兴趣进行分类,针对于一个用户,最先得到他的兴趣分类,再从兴趣分类中找到他可能会喜欢的视频。LFM直接从数据出发,自动找到那些隐类,也就是所谓的潜在因子,并进行个性化推荐。见 图 1 LFM实现原理
图片.png
图片.png
对于以上内容举一个例子。用户小李被LFM模型自动识别其观看节目的潜在因子。见下表。
注意,隐因子不是喜剧、动作、科幻、爱情、悬疑、恐怖、剧情、冒险等可以辨识的标签,而是模型自动分辨出的,比如 Lf3有可能是色彩艳丽,lf6有可能是表示英格丽·褒曼等,但是这些隐因子究竟是什么,许多时候也是不好解释的,这也是这种方法受到诟病的一个方面。
现在有两部电影,LFM模型自动识别其包含隐因子的程度
图片.png
现在可以计算小李和卡萨布兰卡的匹配程度:.80.2+0.10.9+0.50.1+00.4+0.30+11+0.40.8+0.20.6=1.79,小李和夏日友晴天的匹配程度:0.80.3+0.10+0.50.7+00.2+0.30.9+10+0.40.1+0.20.3=1.61
于是卡萨布兰卡比夏日友晴天更适合小李。上述过程是通过矩阵分解方式实现的。
(二) 矩阵奇异值分解方法
在公式①中,表格2是矩阵V中一列,表格3是矩阵U中一行。通过评分矩阵R怎样得到U和V?这就需要专业的矩阵分解方法实现。
图片.png
1. 矩阵的奇异值分解实现功能理解
对矩阵R进行奇异值分解(SVD)
图片.png
图片.png
看到②和①是不一样的,②多了Σ这个矩阵,而且X和Y还是方阵。
图片.png∑1中奇异值σ 的减少特别快,在很多情况下,前 10%甚至 1%奇异值的和就占了全部奇异值之和 99%以上了。也就是说,可以用前 r 个奇异值来近似描述矩阵。⑤式中表示潜在因子的矩阵维度k还是太大了,需要降维再简化,找到一个 r≪k,但是又最大限度地保留了R信息。通过矩阵分块,可以近似地找到一个简化矩阵,即对角矩阵 S,见公式⑥
图片.png
奇异值分解能够产生初始矩阵 R 的所有秩等于 r 的矩阵中与矩阵 R 最近似的一个。
图片.png
2006 年,隐语义模型首先由 Simon Funk 在博客上公布,后来被 Netflix Prize的冠军 Koren 称为 Latent Factor Model 即 LFM。它在 SVD 分解的基础上,将中间的奇异矩阵分解并(hua)合(zhong)并(点)到左右奇异矩阵中,这个过程如下:
图片.png
到了这样才回到了公式①的形状。这一点是许多人都不知道的。
在降低维度的同时尽可能的保持原有数据的信息,然后基于该低阶近似矩阵进行协同过滤推荐,提高了推荐算法的可扩展性,同时还可以得到用户和项目之间潜在的关联。
2. 实现路线
求取用户-特征矩阵P和特征-项目矩阵Q。让P×Q可以得到稠密的拟合矩阵,拟合矩阵R’约等于评分矩阵R,就完成了分类和推荐。
图片.png
求取方法有两种,一种是利用线性代数方法根据奇异值分解理论求解。另外一种方法是利用机器学习将原矩阵分解为两个稠密矩阵。
3. 线性代数方法分解矩阵
补全 用户——项目 矩阵R。由于R非常稀疏,不易分解。该方法首先需要用一个简单方法补全稀疏评分矩阵。而一旦补全,评分矩阵就会变为一个稠密矩阵,从而使评分矩阵的存储需要非常大的的空间,这种空间需求在实际系统中是不可接受的。
计算复杂度太高。特别是在稠密的大规模矩阵中更是非常慢。一般来说,这里的 SVD 分解用于 1000 维以上的矩阵就已经非常慢了,而实际系统动辄就是上千万的用户和上百万的物品,所以这一方法无法使用。况且补全矩阵R时采用的方法如果出现偏差会对结果造成很大影响。
SVD分解方法还容易出现过拟合现象。
4. 利用机器学习方法构造P和Q
采用机器学习的方法通过迭代拟合原始数据,可以有效降低计算代价并获得良好的训练结果。篇幅所限,本次不展开了。基本原理就是以P中已有数据单元格(含打分为0的项)值和对应的拟合数据值的均方误为损失函数,加入适当的正则项,利用梯度下降法训练参数。
如何求取新矩阵P和Q呢?我们希望P和Q的乘积R’得到能尽量的逼近原矩阵R, 也就是相乘后得到的R’中的元素如果在原矩阵R中相应的位置有非0值,那对应位置所有元素间预测值和观察值相差最小,通过令对应位置元素差的平方和最小化来判断。
定义损失函数为:
标准的LMF预测公式: 图片.png
加入偏执项后改进预测公式:
图片.png
图片.png
引入三个偏执项后损失函数
图片.png
参考文献:
[1]王锴钺. 基于矩阵分解的协同过滤推荐算法研究[D].安徽理工大学,2021.DOI:10.26918/d.cnki.ghngc.2021.000262.
[2]于蒙,何文涛,周绪川,崔梦天,吴克奇,周文杰.推荐系统综述[J/OL].计算机应用:1-16[2021-12-13].http://kns.cnki.net/kcms/detail/51.1307.tp.20210922.1115.002.html.
[3]赵俊逸,庄福振,敖翔,何清,蒋慧琴,马岭.协同过滤推荐系统综述[J].信息安全学报,2021,6(05):17-34.DOI:10.19363/J.cnki.cn10-1380/tn.2021.09.02.
[4]周熙然. 基于隐语义模型的推荐算法研究与应用[D].西安科技大学,2021.