因子分解模型——SVD、SVD++、timeSVD++

因子分解模型

隐语义模型主要是根据隐含特征将用户与物品联系起来。用隐语义模型来进行协同过滤的目标是揭示隐藏的特征。这些隐藏的特征能够解释观测到的评分,该模型的一些实例包括pLSA模型、神经网络模型、隐式Dirichlet分配模型,以及由用户-物品评分矩阵的因子分解推导出的模型(也叫做基于SVD的模型)。

1. SVD

矩阵因子分解模型把用户和物品两方面的信息映射到一个维度为f的联合隐语义空间中,因此用户—物品之间的交互作用被建模为该空间中的内积。这个隐语义空间试图通过描述物品和用户在各个因子上的特征来解释评分值,而这些因子是从用户反馈自动推断出的。例如物品是电影,因子将会是喜剧或悲剧、情结的数量或者面向儿童的等级等这些明显的维度,以及如性格发展的深度或者“突变”等隐式维度,甚至是完全无法解释的维度。
每个物品i都与一个f维向量 q i ∈ R f q_i\in R^f qiRf有关,每个用户都与一个f维向量 q u ∈ R f q_u\in R^f quRf相关。给定一个物品i,q,向量的维度值代表了该物品拥有这些因子的程度(例如,某部电影的搞笑因子程度为5,恐怖因子程度为1),其取值大小反应了物品拥有这些因子的积极或消极的程度。给定一个用户u,向量 p u p_u pu的维度值代表了用户对这些因子的偏好程度(例如,某用户对搞笑因子的偏好程度为1,而对恐怖因子的偏好程度为)同样的,这些值的大小反映了用户对物品的积极或消极的评价。点积 q i T p u q_i^Tp_u qiTpu记录了用户和物品之间的交互,也就是用户对物品的总体兴趣程度。加上之前提到的只依赖于用户或者物品之间的交互,也就是用户对物品的基准预测可以得到最终的评分。因此,评分通过下面的规则预测得到 : r ^ u i = μ + b i + b u + q i T p u \widehat{r}_{ui}=\mu+ b_i + b_u + q_i^Tp_u r ui=μ+bi+bu+qiTpu
为了学习模型中的参数,也就是 b u , b i , p u , q i b_u , b_i, p_u, q_i bu,bi,pu,qi可以最小化以下正则化的平法误差: min ⁡ b ∗ , q ∗ , p ∗ ∑ ( u , i ) ∈ K ( r u i − μ − b i − b u − q i T p u ) 2 + λ 4 ( b i 2 + b u 2 + ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ p u ∣ ∣ 2 ) \min\limits_{b_*,q_*,p_*}\sum_{\mathclap{(u,i)\in\Kappa}}(r_{ui}-\mu-b_i-b_u-q_i^Tp_u)^2+\lambda_4(b_i^2+b_u^2+||q_i||^2+||p_u||^2) b,q,pmin(u,i)K(ruiμbibuqiTpu)2+λ4(bi2+bu2+qi2+pu2)常量 λ 4 \lambda_4 λ4控制了正则化程度,一般通过交叉验证来获得。最小化过程=一般是通过随机梯度下降算法交替最小二法来实现。交替最小二乘法技术就是交替固定 p u p_u pu来计算 q i q_i qi和固定 q i q_i qi来计算 p u p_u pu。注意到当其中的一个是常量时,最优化问题变成了二次的,就可以优化求解。

2. SVD++

隐式反馈信息可以增加预测精确度,这些隐式反馈信息提供了用户爱好的额外指示。这对于那些提供大量隐式反馈但是仅仅提供少量显示反馈的用户尤为重要。正如之前解释的那样,即使在独立的隐式反馈缺失的时候,也可以通过考虑用户评分的物品来得到用户兴趣的信息,而无需考虑这些物品的评分值。
在SVD++模型中,我们增加了第二个物品因子集合,即为每个物品i关联了一个因子向量 y i ∈ R f y_i\in R^f yiRf,这些新的物品因子向量根据用户评分的物品集合来描述用户的特征。确切的模型如下: r ^ u i = μ + b i + b u + q i T ( p u + ∣ R ( u ) ∣ − 1 2 ∑ j ∈ R ( u ) y j ) \widehat{r}_{ui}=\mu+ b_i + b_u + q_i^T(p_u+|R(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in R(u)}} y_{j}) r ui=μ+bi+bu+qiTpu+R(u)21jR(u)yj其中集合R(u)包含了用户u评分的所有物品。
现在,用户u的因子偏好程度被建模为 p u + ∣ R ( u ) ∣ − 1 2 ∑ j ∈ R ( u ) y j p_u+|R(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in R(u)}} y_{j} pu+R(u)21jR(u)yj
用户u的因子偏好程度 p u p_u pu是从已知的显示评分记录学习得到,这个向量由 ∣ R ( u ) ∣ − 1 2 ∑ j ∈ R ( u ) y j |R(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in R(u)}} y_{j} R(u)21jR(u)yj这一项做补充,这一项是从隐式反馈的角度出发。由于 y i y_i yi在0的附近取值(根据正则化),为了在观察值 ∣ R ( u ) ∣ | R(u)| R(u)的整个范围内稳定其方差,我们用 ∣ R ( u ) ∣ − 1 2 |R(u)|^{-\frac{1}{2}} R(u)21来对其和作规范化。模型的参数通过采用随机梯度下降方法最小化相关联的正则化平法误差函数而取得的。
通过使用额外的物品因子集合,可以把几种类型的隐式反馈同时引入模型中,例如,如果一个用户u对 N 1 ( u ) N^1(u) N1(u)中的有某种类型的隐式偏好(如她租借了他们),对 N 2 ( u ) N^2(u) N2(u)中的物品有另一种不同类型的偏好(如她检索过她们),我们可以使用下面的模型: r ^ u i = μ + b i + b u + q i T ( p u + ∣ N 1 ( u ) ∣ − 1 2 ∑ j ∈ N 1 ( u ) y j ( 1 ) + ∣ N 2 ( u ) ∣ − 1 2 ∑ j ∈ N 2 ( u ) y j ( 2 ) ) \widehat{r}_{ui}=\mu+ b_i + b_u + q_i^T(p_u+|N^1(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in N^1(u)}} y_{j}^{(1)} +|N^2(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in N^2(u)}} y_{j}^{(2)}) r ui=μ+bi+bu+qiTpu+N1(u)21jN1(u)yj(1)+N2(u)21jN2(u)yj(2)每种隐式反馈信息的相对重要性将通过对模型参数各自值的设定由算法自动学习得到。

3. timeSVD++

在[https://blog.csdn.net/weixin_43631296/article/details/86356836]这篇博客中,已经讨论了时间因子对基准预测器的影响。然而,时间效应不仅对基准预测器有影响,也对用户的偏好有影响,从而影响用户和物品的交互作用。用户的偏好随着时间变化。例如,“心理惊悚片”类型的电影迷或许一年后变成“罪案片”的电影迷。相类似,人们会改变他们对特定导演和演员的看法。这种演进通过把用户因子(向量) p ( u ) p_{(u)} p(u)作为时间的函数来建模。再一次,我们需要在面临用户评分的内置稀疏的困境下,以每天这样的精细时间粒度来对这些变化建模。事实上,这些时间效应是最难捕捉到的,因为用户偏好并不像主要影响(用户偏置)那样明显,而是被分割成许多因素。
与处理用户偏置的方式相似,我们对用户偏好的每一个组成部分进行建模,即 p u ( t ) T = ( p u l ( t ) , … , p u f ( t ) ) p_u(t)^T=(p_{ul}(t),\dots,p_{uf}(t)) pu(t)T=(pul(t),,puf(t)).在电影评分数据集中,我们发现以[https://blog.csdn.net/weixin_43631296/article/details/86356836]中的 b u 3 ( t ) b_u^{3}(t) bu3(t)来建模是很有效的,如下所示: p u k ( t ) T = p u k + α u k ⋅ d e v u ( t ) + p u k , t p_{uk}(t)^T=p_{uk}+\alpha_{uk}\cdot dev_u(t)+p_{uk,t} puk(t)T=puk+αukdevu(t)+puk,tk=1,…,f 。 这里 p u k p_{uk} puk代表因子的不变部分。 α u k ⋅ d e v u ( t ) \alpha_{uk}\cdot dev_u(t) αukdevu(t)是对可能随时间线性变化的那部分的近似, p u k , t p_{uk,t} puk,t代表了非常局部性的、与特定天相关的变化。
这时,我们可以把所有的碎片拼凑起来并通过整合这些随时间变化的参数来扩展SVD因子模型。得到的扩展模型记为timeSVD++,且预测规则如下所示: r ^ u i = μ + b i ( t u i ) + b u ( t u i ) + q i T ( p u ( t u i ) + ∣ R ( u ) ∣ − 1 2 ∑ j ∈ R ( u ) y j ) \widehat{r}_{ui}=\mu+ b_{i(t_{ui})} + b_{u(t_{ui})}+ q_i^T(p_{u(t_{ui})}+|R(u)|^{-\frac{1}{2}}\sum_{\mathclap{j\in R(u)}} y_{j}) r ui=μ+bi(tui)+bu(tui)+qiTpu(tui)+R(u)21jR(u)yj

参考

[1]:《推荐系统技术、评估及高效算法》

你可能感兴趣的:(推荐系统,推荐系统)