推荐系统经常会遇到数据稀疏性的问题,即用户之间共同评分的物品很少。这种稀疏性使得直接比较的方法难以计算出有意义的相似度得分。虽然这类方法在识别直接相似性方面可能有效,但在稀疏数据集中的表现往往会下降。基于模型的方法,尤其是矩阵分解,通过不再局限于直接比较,转而识别解释用户偏好和物品特征的隐含特征,克服了这一限制。
其核心想法是使用一组共享的、未被直接观测到的属性(称为隐含因子)来描述用户和物品。对于电影数据集,这些因子可能代表诸如“喜剧”或“剧情”之类的类型、动作成分的多寡、特定导演的存在,或者是由模型根据评分模式自动学习到的更抽象的维度。这些因子被称为“隐含”因子,是因为它们并没有直接出现在数据集中;算法的任务就是找到它们。
矩阵分解通过将大型用户-物品交互矩阵 (R) 分解为两个小得多的矩阵来实现这一点:用户-因子矩阵 (P) 和物品-因子矩阵 (Q)。
- 用户-因子矩阵 (P):每一行代表一个用户,共有 K 列,其中 K 是我们选择的隐含因子数量。每一行都是一个向量 (vector),表示该用户在这些 K 个维度上的偏好。
- 物品-因子矩阵 (Q):有 K 行,每一列代表一个物品。每一列都是一个向量,表示该物品在相同的 K 个维度上的特征。
通过将 P 矩阵中的用户向量与 Q 矩阵中的物品向量相乘,我们可以重构出原始评分的近似值。这使我们能够估计任何用户-物品组合的评分,从而有效地“填补”稀疏交互矩阵中的空白。
用户-物品矩阵 R 通过用户-因子矩阵 P 和物品-因子矩阵 Q 的乘积来近似。
利用隐含因子预测评分
如果我们有 m 个用户、n 个物品,并选择寻找 K 个隐含因子,那么我们的用户-因子矩阵 P 的大小将为 m×K,而物品-因子矩阵 Q 将为 K×n。用户 u 对物品 i 的预测评分 r^ui 是通过计算用户向量 (vector) pu(P 的第 u 行)和物品向量 qi(Q 的第 i 列)的点积来得到的:
r^ui=pu⋅qi=k=1∑Kpukqki
让我们以电影为例,用一个简单的双因子(K=2)示例来说明。假设我们的模型学习到了以下隐含因子:
- 因子 1: 衡量从“严肃剧情”(-1) 到“轻松喜剧”(+1) 的程度。
- 因子 2: 衡量从“动作导向”(-1) 到“人物驱动”(+1) 的程度。
现在,考虑一个用户 Alex 和两部电影:电影 A 和 电影 B。算法可能会用以下向量表示它们:
- Alex (palex):
[0.9, 0.8]。Alex 非常偏好轻松的喜剧和人物驱动型电影。
- 电影 A (qA):
[0.7, 0.6]。这部电影是一部相当轻松、以人物为主的喜剧。
- 电影 B (qB):
[-0.8, -0.9]。这部电影是一部严肃的、动作导向的剧情片。
我们可以预测 Alex 对每部电影的评分:
- 电影 A 的预测值: r^alex,A=(0.9×0.7)+(0.8×0.6)=0.63+0.48=1.11
- 电影 B 的预测值: r^alex,B=(0.9×−0.8)+(0.8×−0.9)=−0.72−0.72=−1.44
电影 A 的高正分和电影 B 的高负分符合我们的直觉。模型预测 Alex 会喜欢电影 A 而讨厌电影 B。矩阵分解的优势在于,模型只需通过尝试找到其乘积能最好地重构 R 中已知评分的矩阵 P 和 Q,就能自行学习到这些因子表示。
优于近邻方法的优点
这种方法提供了几个主要好处:
- 紧凑的表示: 我们不需要整个用户-物品矩阵来做出预测,只需要用户和物品向量 (vector)。这是一种降维形式,在更小的空间内捕捉到了最主要的信息。
- 处理稀疏性: 因为每个用户和物品都由完整的因子向量描述,所以即使某个用户评分很少,或者某个物品被评价很少,我们也能计算出任何用户-物品组合的预测评分。它对未观测到的组合具有更好的泛化能力。
- 发现隐藏结构: 学习到的隐含因子有时能提供有趣的数据发现,揭示在特定业务中驱动用户偏好的底层维度。
当然,主要的挑战在于找到矩阵 P 和 Q 的最优值。模型必须“学习”这些因子向量,以最小化预测评分 (r^ui) 与实际已知评分 (rui) 之间的差异。接下来的部分将介绍执行此分解和学习过程的算法。