交替最小二乘法(Alternating Least Squares, ALS)
背景知识
显式数据与隐式数据(Explicit data and implicit data)
- 显式数据(Explicit Data) 是指那些有评价得分的数据,比如对电影的评分。此类数据明确指出用户对物品的喜好程度,但往往很难获取到。
-
隐式数据(Implicit Data) 是指从用户行为中收集到的数据,缺少评分或评分所必须的特定行为。这可能是一个用户购买了某个物品、重复播放了多少次歌曲、观看某部电影多长时间以及阅读某篇文章的时长等等。此类数据优点是数据量大,缺点是噪音较多并且往往含义不明显。
举个例子,通过给商品打星的数量,我们知道 1 表示用户不喜欢该商品,5 表示用户非常喜爱。用户播放了某歌曲,我们推测用户可能喜欢该歌曲或者讨厌该歌曲,也可能介于两者之间。如果用户没有播放某歌曲,有可能是因为用户不喜欢它,也可能只是不知道这首歌曲的存在。
邻域模型(Neighborhood models)
- UserBased CF - 基于用户的协同过滤
- ItemBase CF - 基于物品的协同过滤
所有以物品为中心的模型在处理隐式数据时有个共同的劣势 -- 他们都不提供区分用户偏好与偏好的置信度的能力。
潜在因素模型(Latent factor models)
Netflix Prize开始后,Simon Funk在其个人博客中公布了一个基于 SVD 的改进算法(Funk-SVD),一下子引爆了推荐系统研究者对于矩阵分解的关注。这种改进算法称为隐语义模型或潜在因素模型。
概念
潜在因素模型,又称隐语义模型,是协同过滤系统中的另一种实现方案,其整体目标是发掘已有评分数据中的隐藏因子。通过对 user-item 评分矩阵进行 奇异值分解(Singular Value Decomposition, SVD) 推断出模型。
原理
隐语义模型也是基于矩阵分解的,但是和 SVD 不同,它是把原始矩阵分解成两个矩阵相乘而不是三个。
现在的问题就变成了确定 和 ,我们把 叫做用户因子矩阵, 叫做物品因子矩阵。通常上式不能达到精确相等的程度,我们要做的就是要最小化它们之间的差距,从而又变成了一个最优化问题。
通常一个隐语义模型为每个用户 定义一个用户因子向量 , 为每一个物品 定义物品因子向量 。通过计算两个向量的内积得到预测结果,如 。
优化目标是最小化代价函数,即:
其中 用作模型正则化。
两种求解算法
梯度下降法
Simon Funk所采用的方法,为了减少计算量,采用随机梯度下降SDG(Stochastic Gradient Descent)
交替最小二乘法
通常 SGD 比 ALS(Alternating Least Squares) 简单而且快速,但是 ALS 的并行性能比较好,而且可以较好地处理稀疏数据。
基本原理
概念定义
偏好(Preference)
布尔型变量,表示用户 对物品 的感情偏好。定义如下:
由定义可知,偏好值仅仅表示用户和物品之间有没有交互,而不表示评分高低或者喜好程度。
如果用户 消费过某物品 ,即 ,这暗示用户 喜爱物品 ;另一方面,如果用户 从未消费过物品 ,我们认为用户 对该物品 没有偏好。
置信度(Confidence)
置信度用于衡量对偏好值 的信心。定义如下:
我们的目标是发现每一个用户 的向量 和每一个物品 的向量 。分别称为用户因子 user-factor 和 物品因子 item-factor。
代价函数
迭代求解
随机初始化 ,利用公式 更新得到 ,然后利用公式 更新 ,直到误差值变化很小或者达到最大迭代次数。
通过迭代的方式交替计算两个公式,最终得到一个存储用户因子的矩阵 和 存储物品因子的矩阵 ,进而用于相似性发现和推荐结果生成。
变量说明
- 和 : 随机初始化的用户因子矩阵和物品因子矩阵,它们会被交替地更新;
- 和 : 置信度取值列表;
- : 为避免过拟合而引入的正则化参数;
- : 表示用户对物品偏好的布尔值, 表示有偏爱, 表示无偏爱;
- : 即 ,恒等矩阵,对角线取值为 所有其他位置取值为 的方阵。
应用
物品相似性
通过计算物品因子矩阵与物品因子矩阵转置的点积,得到物品间的相似性得分:
生成推荐结果
通过计算用户因子矩阵与物品因子矩阵转置的点积,得到为某个用户推荐各物品的得分: