02-02 矩阵分解
思维导图纲要
由于协同过滤算法的头部效应较明显、泛化能力较弱,提出了矩阵分解算法,它在协同过滤算法中“共现矩阵”的基础上,加人了隐向量的概念,加强了模型处理稀疏矩阵的能力,针对性地解决了协同过滤存在的主要问题。书中以Netflix推荐场景为例子介绍矩阵分解。
矩阵分解原理
Netflix是一个电影/电视视频平台,其主要应用场景是利用用户的行为历史,在Netflix的视频应用中为用户推荐喜欢的电影、电视剧或纪录片。
下面给出协同过滤和矩阵分解的算法原理图。
协同过滤算法找到用户可能喜欢的视频的方式很直接,基于用户的观看历史,然后找到目标用户的相似用户,然后找到
这些相似用户喜欢看的其他视频,推荐给目标用户。
矩阵分解算法则期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上( 如图 2
-4(b)所示 ),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。比如Dave离Ocean’s 11和The Lion King很近,按向量距离从近到远生成给Dave的推荐列表。
但是如何得到这些隐向量?
在“矩阵分解”的算法框架下,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的(如图 2-5 所示),这也是“矩阵分解”名字的由来。(通俗地讲:共现矩阵 分解为 用户矩阵 和 物品矩阵)
共现矩阵是 m ∗ n m * n m∗n维的;用户矩阵是 m ∗ k m * k m∗k维的;物品矩阵是 k ∗ n k * n k∗n维的。其中m是用户数量,n是物品数量,k是隐向量的维度。
k的大小决定了隐向量表达能力的强弱。k的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。
基于用户矩阵 U 和物品矩阵V , 用户 u 对物品 i 的预估评分如( 式 2-6 ) 所示。
(个人理解, p u p_u pu是 1 ∗ k 1 * k 1∗k 维的; q i q_i qi是 k ∗ 1 k * 1 k∗1维的; q i T q_i^T qiT是 1 ∗ k 1 * k 1∗k维的,因此两个向量之间可以点积/点乘 )
分解共现矩阵的求解过程
之前有提到,共现矩阵 需要分解为 用户矩阵 和 物品矩阵。而分解的主要方法有三种:特征值分解、奇异值分解、梯度下降。
- 特征值分解只能用于方阵,不适用❌
- 奇异值分解虽然可以解决矩阵分解问题,但是1 其要求 原始的共现矩阵事稠密的,实际的用户-物品的共现矩阵稀疏;2 并且计算复杂度高,也不适用❌(详细可以看书)
- 梯度下降法✅
( 式 2-7 ) 是求解矩阵分解的目标函数,该目标函数的目的是让原始评分 r u i r_{ui} rui与用户向量和物品向量之积 q i T p u q_i^T p_u qiTpu(也就是上面式2-6的预估评分)的差尽量小,这样才能最大限度地保存共现矩阵的原始信息。
其中K是所有用户评分样本的集合。
为了减少过拟合现象,可以加入正则化项。
待整理知识,过拟合和正则化可以看参考文献(值形式)和书本原文(矩阵形式)(尽管不同的人公式有区别,但是正则化根本目的是为了减少w的复杂度,减少波动,防止过拟合)
在完成矩阵分解过程后,即可得到所有用户和物品的隐向量。在对某用户进行推荐时,可利用该用户的隐向量与所有物品的隐向量进行逐一的内积运算,得出该用户对所有物品的评分预测,再依次进行排序,得到最终的推荐列表。自此完成推荐过程。
在矩阵分解算法中,由于隐向量的存在,使任意的用户和物品之间都可以得到预测分值。而隐向量的生成过程其实是对共现矩阵进行全局拟合的过程,因此隐向量其实是利用全局信息生成的,有更强的泛化能力。(个人理解的意思是,为了将共现矩阵分解为用户矩阵和物品矩阵,中间需要一个隐向量,而隐向量利用的是共现矩阵的“信息”,它是利用全局信息生成的,泛化能力更强)
而对协同过滤来说,如果两个用户没有相同的历史行为,两个物品没有相同的人购买,那么这两个用户和两个物品的相似度都将为 0 ( 因为协同过滤只能利用用户和物品自己的信息进行相似度计算,这就使协同过滤不具备泛化利用全局信息的能力)。
消除用户和物品打分的偏差
- 由于不同用户的打分体系不同(比如在 5 分为满分的情况下,有的用户认为打 3 分已经是很低的分数了,而有的用户认为打 1 分才是比较差的评价 )
- 不同物品的衡量标准也有所区别( 比如电子产品的平均分和日用品的平均分差异有可能比较大)
因此需要消除这些偏差(Bias),常用的做法是在矩阵分解时加入用户和物品的偏差向量,如图所示。
与此同时,矩阵分解目标函数也需要在(式 2-8 ) 的基础上做相应改变,如( 式 2-11 ) 所示。
加人用户和物品的打分偏差项之后,矩阵分解得到的隐向量更能反映不同用户对不同物品的 “真实” 态度差异,也就更容易捕捉评价数据中有价值的信息,从而避免推荐结果有偏。(个人理解为本质上就是消除用户和物品打分的偏差)
优点和局限性
优点
相比协同过滤,矩阵分解有如下非常明显的优点。
( 1 ) 泛化能力强。在一定程度上解决了数据稀疏问题。
( 2 )空间复杂度低。不需再存储协同过滤模型服务阶段所需的“庞大”的用户相似性或物品相似性矩阵,只需存储用户和物品隐向量。空间复杂度由
n
2
n^2
n2 级别降低到 (n+m)*k 级别。
( 3 ) 更好的扩展性和灵活性。矩阵分解的最终产岀是用户和物品隐向量,这其实与深度学习中的 Embedding 思想不谋而合,因此矩阵分解的结果也非常便于与其他特征进行组合和拼接,并便于与深度学习网络进行无缝结合。
局限性
与协同过滤一样,矩阵分解同样不方便加人用户、物品和上下文相关的特征,这使得矩阵分解丧失了利用很多有效信息的机会,同时在缺乏用户历史行为时,无法进行有效的推荐。为了解决这个问题,逻辑回归模型及其后续发展出的因子分解机等模型,凭借其天然的融合不同特征的能力,逐渐在推荐系统领域得到更广泛的应用。