文章目录
  1. 1. 引言
  2. 2. 写在前面
  3. 3. 矩阵分解方法
    1. 3.1. 基本思想
    2. 3.2. 基本矩阵分解
    3. 3.3. 带偏置的矩阵分解
  4. 4. 矩阵分解的优缺点
  5. 5. 参考文献

引言

随着Netflix Prize推荐比赛的成功举办,近年来隐语义模型(Latent Factor Model, LFM)受到越来越多的关注。隐语义模型最早在文本挖掘领域被提出,用于寻找文本的隐含语义,相关的模型常见的有潜在语义分析(Latent Semantic Analysis, LSA)、LDA(Latent Dirichlet Allocation)的主题模型(Topic Mdel),矩阵分解(Matrix Factorization)等等。其中矩阵分解技术是实现隐语义模型使用最为广泛的一种方法,其思想也正是来源于此,著名的推荐领域大神Yehuda Koren更是凭借矩阵分解模型勇夺Netflix Prize推荐比赛冠军,以矩阵分解为基础,Yehuda Koren在数据挖掘和机器学习相关的国际顶级会议(SIGIR,SIGKDD,RecSys等)发表了很多文章,将矩阵分解模型的优势发挥得淋漓尽致。实验结果表明,在个性化推荐中使用矩阵分解模型要明显优于传统的基于邻域的协同过滤(又称基于记忆的协同过滤)方法,如UserCF、ItemCF等,这也使得矩阵分解成为了目前个性化推荐研究领域中的主流模型。

写在前面

需要说明的是,协同过滤方法分为两大类,一类为上述基于领域(记忆)的方法,第二类为基于模型的方法,即隐语义模型,矩阵分解模型是隐语义模型最为成功的一种实现,不作特别说明的情况下,本文将隐语义模型和矩阵分解看作同一概念,User-Item矩阵和User-Item评分矩阵为同一概念。

另外,奇异值分解(Singular Value Decomposition, SVD),非负矩阵分解(Non-negative Matrix Factorization, NMF),概率矩阵分解(Probability Matrix Factorization, PMF)等方法虽然也使用矩阵分解的思想,属于矩阵分解的范畴,但是其分解方法和本文有所不同,这些不是本文的讨论重点,我会在今后的博文中逐一进行讲解。

矩阵分解方法

基本思想

我们都知道,现实生活中的User-Item矩阵极大(User数量极大、Item数量极大),而用户的兴趣和消费能力有限,对单个用户来说消费的物品,产生评分记录的物品是极少的。这样造成了User-Item矩阵含有大量的空值,数据极为稀疏。矩阵分解的核心思想认为用户的兴趣只受少数几个因素的影响,因此将稀疏且高维的User-Item评分矩阵分解为两个低维矩阵,即通过User、Item评分信息来学习到的用户特征矩阵P和物品特征矩阵Q,通过重构的低维矩阵预测用户对产品的评分。由于用户和物品的特征向量维度比较低,因而可以通过梯度下降(Gradient Descend)的方法高效地求解,分解示意图如下所示。

矩阵分解示意图

基本矩阵分解

如上所述,User-Item评分矩阵维度较高且极为稀疏,传统的奇异值分解方法只能对稠密矩阵进行分解,即不允许所分解矩阵有空值。因而,若采用奇异值分解,需要首先填充User-Item评分矩阵,显然,这样造成了两个问题。

  • 其一,填充大大增加了数据量,增加了算法复杂度。
  • 其二,简单粗暴的数据填充很容易造成数据失真。

这些问题导致了传统的SVD矩阵分解表现并不理想。之后,Simon Funk在博客上公开发表了一个只考虑已有评分记录的矩阵分解方法,称为Funk-SVD,也就是被Yehuda Koren称为隐语义模型的矩阵分解方法。他简单地认为,既然我们的评价指标是均方根误差(Root Mean Squared Error, RMSE),那么可以直接通过训练集中的观察值利用最小化RMSE学习用户特征矩阵P和物品特征Q,并用通过一个正则化项来避免过拟合。其需要优化的函数为

矩阵分解损失函数

其中$K$为已有评分记录的$(u,i)$对集合,$r_{ui}$为用户$u$对物品$i$的真实评分,${\parallel q_i \parallel}^2+{\parallel p_u \parallel}^2$为防止过拟合的正则化项,$\lambda$为正则化系数。假设输入评分矩阵为$R$为$M\times N$维矩阵,通过直接优化以上损失函数得到用户特征矩阵$P$($M\times K$)和物品特征矩阵$Q$($K\times N$),其中$K\ll M,N$。优化方法可以采用交叉最小二乘法或随机梯度下降方法。

其评分预测方法为

$$\hat{r_{ui}}=q_i^Tp_u$$

其中$p_u$和$q_i$分别为用户$u$和物品$i$的特征向量,两者的内积即为所要预测的评分。

带偏置的矩阵分解

基本的矩阵分解方法通过学习用户和物品的特征向量进行预测,即用户和物品的交互信息。用户的特征向量代表了用户的兴趣,物品的特征向量代表了物品的特点,且每一个维度相互对应,两个向量的内积表示用户对该物品的喜好程度。但是我们观测到的评分数据大部分都是都是和用户或物品无关的因素产生的效果,即有很大一部分因素是和用户对物品的喜好无关而只取决于用户或物品本身特性的。例如,对于乐观的用户来说,它的评分行为普遍偏高,而对批判性用户来说,他的评分记录普遍偏低,即使他们对同一物品的评分相同,但是他们对该物品的喜好程度却并不一样。同理,对物品来说,以电影为例,受大众欢迎的电影得到的评分普遍偏高,而一些烂片的评分普遍偏低,这些因素都是独立于用户或产品的因素,而和用户对产品的的喜好无关。

我们把这些独立于用户或独立于物品的因素称为偏置(Bias)部分,将用户和物品的交互即用户对物品的喜好部分称为个性化部分。事实上,在矩阵分解模型中偏好部分对提高评分预测准确率起的作用要大大高于个性化部分所起的作用,以Netflix Prize推荐比赛数据集为例为例,Yehuda Koren仅使用偏置部分可以将评分误差降低32%,而加入个性化部分能降低42%,也就是说只有10%是个性化部分起到的作用,这也充分说明了偏置部分所起的重要性,剩下的58%的误差Yehuda Koren将称之为模型不可解释部分,包括数据噪音等因素。

偏置部分表示为

$$b_{ui}=\mu+b_u+b_i$$

偏置部分主要由三个子部分组成,分别是

  • 训练集中所有评分记录的全局平均数$\mu$,表示了训练数据的总体评分情况,对于固定的数据集,它是一个常数。
  • 用户偏置$b_u$,独立于物品特征的因素,表示某一特定用户的打分习惯。例如,对于批判性用户对于自己的评分比较苛刻,倾向于打低分;而乐观型用户则打分比较保守,总体打分要偏高。
  • 物品偏置$b_i$,特立于用户兴趣的因素,表示某一特定物品得到的打分情况。以电影为例,好片获得的总体评分偏高,而烂片获得的评分普遍偏低,物品偏置捕获的就是这样的特征。

以上所有偏置和用户对物品的喜好无关,我们将偏置部分当作基本预测,在此基础上添加用户对物品的喜好信息,即个性化部分,因此得到总评分预测公式如下:

偏置矩阵分解损失函数

优化以上函数,分别获得用户特征矩阵$P$、物品特征矩阵$Q$、各用户偏置$b_u$、各物品偏置$b_i$,优化方法仍可采用交叉最小二乘或随机梯度下降。

矩阵分解的优缺点

矩阵分解方法将高维User-Item评分矩阵映射为两个低维用户和物品矩阵,解决了数据稀疏性问题。使用矩阵分解具有以下优点:

  • 比较容易编程实现,随机梯度下降方法依次迭代即可训练出模型。
    比较低的时间和空间复杂度,高维矩阵映射为两个低维矩阵节省了存储空间,训练过程比较费时,但是可以离线完成;评分预测一般在线计算,直接使用离线训练得到的参数,可以实时推荐。
  • 预测的精度比较高,预测准确率要高于基于领域的协同过滤以及内容过滤等方法。
  • 非常好的扩展性,很方便在用户特征向量和物品特征向量中添加其它因素,例如添加隐性反馈因素的SVD++,此方法的详细实现参见文献[3];添加时间动态time SVD++,此方法将偏置部分和用户兴趣都表示成一个关于时间的函数,可以很好的捕捉到用户的兴趣漂移,欲知详细实现请阅读文献[4]。
    矩阵分解的不足主要有:
  • 模型训练比较费时。
  • 推荐结果不具有很好的可解释性,分解出来的用户和物品矩阵的每个维度* 无法和现实生活中的概念来解释,无法用现实概念给每个维度命名,只能理解为潜在语义空间。

参考文献

[1]Funk-SVD
[2]Koren Y, Bell R, Volinsky C. Matrix factorization techniques for recommender systems
[3]Koren Y. Factorization meets the neighborhood: a multifaceted collaborative filtering model
[4]Koren Y. Collaborative filtering with temporal dynamics

文章目录
  1. 1. 引言
  2. 2. 写在前面
  3. 3. 矩阵分解方法
    1. 3.1. 基本思想
    2. 3.2. 基本矩阵分解
    3. 3.3. 带偏置的矩阵分解
  4. 4. 矩阵分解的优缺点
  5. 5. 参考文献