- 用隐语义模型来进行协同过滤的目标
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
- 通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
- 隐语义模型的实例
- 基于概率的隐语义分析(pLSA)
- 隐式迪利克雷分布模型(LDA)
- 矩阵因子分解模型(基于奇异值分解的模型,SVD)
LFM 降维方法 —— 矩阵因子分解
- 假如用户物品评分矩阵为 R,现在有 m 个用户,n 个物品
- 我们想要发现 k 个隐类,我们的任务就是找到两个矩阵 P 和 Q,使这两个矩阵的乘积近似等于 R,即将用户物品评分矩阵 R 分解成为两个低维矩阵相乘:
R m × n ^ = P m × k T ⋅ Q k × k ≈ R \hat{R_{m\times n}} = P_{m\times k}^{T}\cdot Q_{k\times k} \approx R Rm×n^=Pm×kT⋅Qk×k≈R
LFM 的进一步理解
- 我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评价电影与这些隐藏因素的关联度,决定此未评价电影的预测评分
- 应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代… 甚至不一定是人直接可以理解的隐藏因子
- 找到隐藏因子,可以对 user 和 item 进行关联(找到是由于什么使得 user 喜欢/不喜欢此 item,什么会决定 user 喜欢/不喜欢此 item),就可以推测用户是否会喜欢某一部未看过的电影
- 对于用户看过的电影,会有相应的打分,但一个用户不可能看过所有电影,对于用户没有看过的电影是没有评分的,因此用户评分矩阵大部分项都是空的,是一个稀疏矩阵
`Movie1 Movie2 Movie3 Movie4 user1 1 2 user2 5 1 user3 2 0 user4 4 2 user5 1 2 user6 3 5 user7 5 1 user8 1 0 user9 2 3
- 如果我们能够根据用户已有电影的打分推测出用户会给没有看过的电影的打分,那么就可以根据预测结果给用户推荐他可能打高分的电影
矩阵因子分解
- 我们现在来做一个一般性的分析
- 一个 m × n m\times n m×n 的打分矩阵 R 可以用两个小矩阵 P m × n P_{m\times n} Pm×n 和 Q k × n Q_{k\times n} Qk×n 的乘积 R ^ \hat{R}