基础推荐模型——传送门:
- 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化
- 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
- 推荐系统 | 基础推荐模型 | 逻辑回归模型 | LS-PLM | PyTorch实现
- 推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现
- 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现
一、矩阵分解模型
为了使协同过滤能够更好地处理稀疏共现矩阵问题 ,增强模型的泛化能力,从协同过滤衍生出矩阵分解模型( Matrix Factorization , MF
) ,并发展出矩阵分解的各分支模型,比如:隐语义模型LFM
。
针对协同过滤算法的头部效应较明显、泛化能力较弱的问题,同时增加模型的泛化能力,矩阵分解技术被提出。该方法在协同过滤共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征,在一定程度上弥补了协同过滤模型处理稀疏矩阵能力不足的问题。
1.矩阵分解算法的原理
Netflix
是美国最大的流媒体公司,其推荐系统的主要应用场景是利用用户的行为历史,在 Netflix
的视频应用中为用户推荐喜欢的电影、电视剧或纪录片等。
下面用图例的方式分别描述协同过滤算法和矩阵分解算法在视频推荐场景下的算法原理。
如上图所示,协同过滤算法找到用户可能喜欢的视频的方式很直接,即基于用户的观看历史,找到跟目标用户 Joe
看过同样视频的相似用户,然后找到这些相似用户喜欢看的其他视频,推荐给目标 Joe
。
如上图所示,矩阵分解算法则期望为每一个用户和视频生成一个隐向量 ,将用户和视频定位到隐向量的表示空间上,距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。例如,如果希望为用户 Dave
推荐视频,可以发现离 Dave
的用户向量最近的两个视频向量分别是 “Qcean’s 11”、 “The Lion King” ,那么可以根据向量距离由近到远的顺序生成 Dave
的推荐列表。
在"矩阵分解"的算法框架下,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的。矩阵分解算法将 m × n m×n m×n 维的共现矩阵 R R R分解为 m × k m×k m×k维的用户矩阵 U U U和 k × n k×n k×n维的物品矩阵 V V V相乘的形式。 其中, m m m是用户数, n n n是物品数, k k k是隐向量维度的大小,决定了隐向量表达能力的强弱, k k k的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之, k k k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。 此外, k k k的取值还与矩阵分解的求解复杂度直接相关。在具体应用中, k k k的取值要经过多次试验找到一个推荐效果和工程开销的平衡点。
基于用户矩阵 U U U和物品矩阵 V V V,用户 u u u对物品 i i i的预估评分为:
r ^ u i = q i T p u = ∑ f = 1 F 𝑝 𝑢 , 𝑘 𝑞 𝑖 , 𝑘 \widehat{r}_{ui}=q_i^Tp_u=\sum_{f=1}^F 𝑝_{𝑢,𝑘}𝑞_{𝑖,𝑘} r
ui=qiTpu=f=1∑Fpu,kqi,k
其中,
- p u p_u pu是用户 u u u在用户矩阵 U U U中的对应行向量;
- q i q_i qi是物品 i i i在物品矩阵 V V V中的对应列向量。
- 𝑝 𝑢 , 𝑘 𝑝_{𝑢,𝑘} pu,k度量了用户的兴趣和第 k k k个隐类的关系
- 𝑞 𝑖 , 𝑘 𝑞_{𝑖,𝑘} qi,k度量了第 k k k个隐类和物品之间的关系
隐语义模型(LFM)是一种基于兴趣分类的方法,可以对物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。 𝑝 𝑢 , 𝑘 𝑝_{𝑢,𝑘} pu,k可以认为是判断用户属于某个兴趣分类的打分, 𝑞 𝑖 , 𝑘 𝑞_{𝑖,𝑘} qi,k可以认为是物品属于该兴趣分类的分数。
2.矩阵分解的求解过程
对矩阵进行矩阵分解的主要方法有三种:特征值分解( Eigen Decomposition
)、奇异值分解( Singular Value Decomposition , SVD
) 和梯度下降( Gradient Descent
)。 其中,特征值分解只能作用于方阵,显然不适用于分解用户-物品矩阵
。
奇异值分解的具体描述如下:
- 假设矩阵 M M M是一个 m × n m×n m×n 的矩阵,则一定存在一个分解 M = U ∑ V T ,其中 M=U\sum{V^T}, 其中 M=U∑VT,其中U是 m × m m×m m×m的正交矩阵, V V V是 n × n n×n n×n的正交矩阵, ∑ \sum ∑是 m × n m×n m×n的对角阵。
- 取对角阵 ∑ \sum ∑中较大的 k k k个元素作为隐含特征,删除 ∑ \sum ∑的其他维度及 U U U和 V V V中对应的维度,矩阵 M M M被分解为 M ≈ U m × k ∑ k × k V k × n T M≈U_{m×k}\sum_{k×k}V_{k×n}^T M≈Um×k∑k×kVk×nT,至此完成了隐向量维度为 k k k的矩阵分解。
可以说,奇异值分解似乎完美地解决了矩阵分解的问题,但其存在两点缺陷,使其不宜作为互联网场景下矩阵分解的主要方法。文章来源:https://www.toymoban.com/news/detail-405732.html
- 奇异值分解要求原始的共现矩阵是稠密的,互联网场景下大部分用户的行为历史非常少,用户-物品的共现矩阵非常稀疏,这与奇异值分解的应用条件相悖。如果应用奇异值分解,就必须对缺失的元素值进行填充。
- 传统奇异值分解的计算复杂度达到了 O ( m n 2 ) O(mn^2) O(mn2)级别 ,这对于商品数量动辄上百万、用户数往往上千万的互联网场景来说几乎是不可接受的。
由于上述两个原因,传统奇异值分解也不适用于解决大规模稀疏矩阵的矩阵分解问题 因此,梯度下降法成了进行矩阵分解的主要方法。
2006年的Netflix Prize之后, Simon Funk公布了一个矩阵分解算法叫做Funk-SVD
,后来被Netflix Prize的冠军Koren称为Latent Factor Model(LFM)
。Funk-SVD
的思想: 把求解上面两个矩阵的参数问题转换成一个最优化问题, 可以通过训练集里面的观察值利用最小化来学习用户矩阵和物品矩阵。
下面介绍梯度下降进行矩阵分解的方法。求解矩阵分解的目标函数为
m i n q ∗ p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 min_{q^* p^*}\sum_{(u,i)∈K}(r_{ui}-q_i^Tp_u)^2 minq∗p∗(u,i)∈K∑(rui−qiTpu)2
其中, K K K是所有用户评分样本的集合。
该目标函数的目的是让原始评分 r u i r_{ui} rui与用户向量和物品向量之积 q i T p u q_i^Tp_u qiTpu变小,这样才能最大限度地保存共现矩阵的原始信息。
为了减少过拟合现象,加入正则化项后的目标函数为:
m i n q ∗ p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 + λ ( ∣ ∣ q i ∣ ∣ + ∣ ∣ p u ∣ ∣ ) 2 min_{q^* p^*}\sum_{(u,i)∈K}(r_{ui}-q_i^Tp_u)^2+\lambda(||q_i||+||p_u||)^2 minq∗p∗文章来源地址https://www.toymoban.com/news/detail-405732.html
到了这里,关于推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!