基于模型的方法也叫做基于学习的方法,通过定义一个参数模型来描述用户与物品,用户与用户(或者物品与物品)之间的关系,然后通过优化过程得到模型参数。
基于模型的方法有一些优势:
** 基于模型的方法可以分成2类:分解方法和自适应近邻学习方法。**
使用秩为n的矩阵W表示用户之间或者物品之间的相似度,然后通过用更低的秩k的Q来近似W:
W ^ = Q Q T \hat{W} = QQ^T W^=QQT
求解因子矩阵Q等同于计算矩阵W的特征值分解:
W = V D V T W = VDV^T W=VDVT
通过分解用户–物品的评分矩阵,同样可以解决冷启动和覆盖受限的问题。在这种方法中,一个 ∣ U ∣ × ∣ V ∣ |U| \times |V| ∣U∣×∣V∣的用户–物品评分矩阵R可以近似为 R ^ = P Q T \hat{R} = PQ^T R^=PQT,其中P是一个 ∣ U ∣ × k |U| \times k ∣U∣×k的用户因子矩阵,Q是一个 ∣ V ∣ × k |V| \times k ∣V∣×k的物品因子矩阵。
可以通过求解R的奇异值分解(SVD)来获得:
R = U ∑ V T R = U\sum V^T R=U∑VT
基于模型的协同过滤基本原理是,将用户对商品的评分矩阵A分解为2个(ALS)或者3个矩阵(SVD),然后就是这些矩阵相乘的结果,根据矩阵相乘结果与原有评分矩阵的误差作为损失函数计算优化。
SVD的基本原理见:【参考周志华《机器学习》P402】
!
SVD模型可以转换为一个基于相似度的方法,该方法认为用户 u u u的画像由他评分过的物品隐式的决定,因此用户 u u u的因子向量可以通过评分后的物品 j j j的因子向量权重组合得到。这就是SVD++。除此以外还有FISM,NSVD等。
在SVD++的基础上再引入时间因子,可以进一步提高预测的准确度。
这三个模型越来越复杂,引入的因子也在增多,所以准确性提升,但计算效率下降。
最新研究表明,从数据中自动学习邻域相比于预定义相似度计算存在一些优势。
(1)稀疏线性邻域模型
一个典型的邻域–学习推荐模型是SLIM算法,一个新的评分可以被预测为:
r ^ u i = r u w i T \hat {r}_{ui} = r_uw_i^T r^ui=ruwiT
其中向量 r u r_u ru是评分矩阵R的第u行,向量 w i w_i wi中的非零元素对应物品 i i i的近邻集合。
SLIM的详细内容请P43或者见https://blog.csdn.net/weixin_39064571/article/details/78835939https://blog.csdn.net/weixin_39064571/article/details/78835939
(2)融入边信息的稀疏邻域模型
在当今互联网时代,用户的属性信息(如年龄性别LBS)或物品的描述信息更容易获取,这些信息可以被融入SLIM模型。
矩阵分解模型把用户和物品2方面的信息映射到一个维度为 f f f的联合隐含义空间中,用户-物品之间的交互(评分)可由该空间的内积来建模。
关于使用到的矩阵
具体而言,对于用户 u u u对物品 i i i的评分,我们可以这样计算:
r ^ u i = μ + b i + b u + q i T p u \hat{r}_{ui} = \mu + b_i + b_u + q_i^Tp_u r^ui=μ+bi+bu+qiTpu
其中前三项表示用户或者物品的基准预测。 μ \mu μ表示整个评价区间的平均评分, b i b_i bi表示物品 i i i和所有物品平均分的偏离, b u b_u bu表示用户 u u u与所有用户平均分的偏离。
为了学习模型中的参数 b i b_i bi、 b u b_u bu、 p U p_U pU、 q i q_i qi,我们的优化目标为:
min ∑ ( r u i − μ − b i − b u − q i T p u ) 2 + λ ( b i 2 + b u 2 + ∥ q i ∥ 2 + ∥ p u ∥ 2 ) \min \sum(r_{ui} - \mu - b_i -b_u -q_i^Tp_u)^2 + \lambda(b_i^2 + b_u^2+\|q_i\|^2 + \|p_u\|^2) min∑(rui−μ−bi−bu−qiTpu)2+λ(bi2+bu2+∥qi∥2+∥pu∥2)
上述优化目标,一般可以使用随机梯度下降或者交替最小二乘法。
一种简单的优化算法是Funk推广的,该算法对训练数据中的所有评分做循环。对于给定的评分的预测误差记为: e u i = r u i − r ^ u i e_{ui} = r_{ui} - \hat{r}_{ui} eui=rui−r^ui,因此,对于每一个样本,我们可以通过朝着与梯度相反的方向来修正参数:
b u ← b u + γ ( e u i − λ b u ) b i ← b i + γ ( e u i − λ b i ) q i ← q i + γ ( e u i p u − λ q i ) p u ← p u + γ ( e u i q i − λ p u ) b_u \leftarrow b_u + \gamma (e_{ui} - \lambda b_u)\\ b_i \leftarrow b_i + \gamma (e_{ui} - \lambda b_i)\\ q_i \leftarrow q_i + \gamma (e_{ui}p_u - \lambda q_i)\\ p_u \leftarrow p_u + \gamma (e_{ui}q_i - \lambda p_u)\\ bu←bu+γ(eui−λbu)bi←bi+γ(eui−λbi)qi←qi+γ(euipu−λqi)pu←pu+γ(euiqi−λpu)
SVD的基本原理见:【参考周志华《机器学习》P402】
!
奇异值分解有着广泛的用途,例如对于低秩近似问题,给定一个秩为 r r r的矩阵 A A A,要求的其最优的 k k k秩近似矩阵 A ^ \hat{A} A^,其中 k < < r k<<r k<<r。
奇异值分解提供了上述问题的解释解:对矩阵 A A A进行奇异值分解后,将矩阵 ∑ \sum ∑中的 r − k r-k r−k个最小的奇异值置零获得的矩阵 ∑ k \sum_k ∑k,即仅保留最大的 k k k个奇异值,则:
A k = U k ∑ k v k T A_k = U_k \sum_kv_k^T Ak=Ukk∑vkT
就是最优解。
因此,可以通过SVD方式近似得到用户-物品评分矩阵。
但在实际工程中,SVD非常难解,所以会用梯度下降或者ALS的方法将矩阵分解成2个矩阵的相乘,这就是LFM。
考虑隐式反馈信息可以增加预测准确度,这对于那些提供了大量隐式反馈而仅仅提供了少量显式反馈的用户尤为重要。
我们考虑2中情况:
用户对某些物品有一些隐式反馈,我们可以在SVD的基础上,增加第二个物品因子,即为每一个物品 i i i关联一个因子向量 y i y_i yi,计算评分时:
r ^ u i = μ + b i + b u + q i T ( p u + ∣ R ( u ) ∣ − 1 / 2 ∑ j ∈ R ( u ) y i ) \hat{r}_{ui} = \mu + b_i + b_u + q_i^T(p_u + |R(u)|^{-1/2} \sum_{j \in R(u)}y_i) r^ui=μ+bi+bu+qiT(pu+∣R(u)∣−1/2j∈R(u)∑yi)
其中集合 R ( u ) R(u) R(u)包含用户 u u u评分的所有物品。也就是说用户 u u u的喜爱因子程度被建模为: p u + ∣ R ( u ) ∣ − 1 / 2 ∑ j ∈ R ( u ) y i p_u + |R(u)|^{-1/2} \sum_{j \in R(u)}y_i pu+∣R(u)∣−1/2∑j∈R(u)yi,其中 ∣ R ( u ) ∣ − 1 / 2 |R(u)|^{-1/2} ∣R(u)∣−1/2用于规范化。
同理,我们使用与SVD类似的方法做优化求解各个参数:
b u ← b u + γ ( e u i − λ b u ) b i ← b i + γ ( e u i − λ b i ) q i ← q i + γ ( e u i ( p u + ∣ R ( u ) ∣ − 1 / 2 ) − λ q i ) p u ← p u + γ ( e u i q i − λ p u ) ∀ j ∈ R ( u ) : y j ← y j + γ ( e u i ∗ ∣ R ( u ) ∣ − 1 / 2 ∗ q i − λ y i ) b_u \leftarrow b_u + \gamma (e_{ui} - \lambda b_u) \\ b_i \leftarrow b_i + \gamma (e_{ui} - \lambda b_i) \\ q_i \leftarrow q_i + \gamma (e_{ui}(p_u + |R(u)|^{-1/2}) - \lambda q_i)\\ p_u \leftarrow p_u + \gamma (e_{ui}q_i - \lambda p_u)\\ \forall _j \in R(u): y_j \leftarrow y_j + \gamma (e_{ui}*|R(u)|^{-1/2} *q_i - \lambda y_i)\\ bu←bu+γ(eui−λbu)bi←bi+γ(eui−λbi)qi←qi+γ(eui(pu+∣R(u)∣−1/2)−λqi)pu←pu+γ(euiqi−λpu)∀j∈R(u):yj←yj+γ(eui∗∣R(u)∣−1/2∗qi−λyi)
对于有多种隐式偏好的情况,模型可以调整为:
r ^ u i = μ + b i + b u + q i T ( p u + ∣ N 1 ( u ) ∣ − 1 / 2 ∑ j ∈ N 1 ( u ) y i + ∣ N 2 ( u ) ∣ − 1 / 2 ∑ j ∈ N 2 ( u ) y i ) \hat{r}_{ui} = \mu + b_i + b_u + q_i^T(p_u + |N^1(u)|^{-1/2} \sum_{j \in N^1(u)}y_i + |N^2(u)|^{-1/2} \sum_{j \in N^2(u)}y_i) r^ui=μ+bi+bu+qiT(pu+∣N1(u)∣−1/2j∈N1(u)∑yi+∣N2(u)∣−1/2j∈N2(u)∑yi)
其中 ∣ N 1 ( u ) ∣ − 1 / 2 ∑ j ∈ N 1 ( u ) y i |N^1(u)|^{-1/2} \sum_{j \in N^1(u)}y_i ∣N1(u)∣−1/2∑j∈N1(u)yi及 ∣ N 2 ( u ) ∣ − 1 / 2 ∑ j ∈ N 2 ( u ) y i |N^2(u)|^{-1/2} \sum_{j \in N^2(u)}y_i ∣N2(u)∣−1/2∑j∈N2(u)yi表示用户的2中不同隐式行为。
矩阵分解方法可以很好的对时间效应建模,这样可以提高预测结果的准确度。
回顾一下用户 u u u对物品 i i i的评分预测:
r ^ u i = μ + b i + b u + q i T p u \hat{r}_{ui} = \mu + b_i + b_u + q_i^Tp_u r^ui=μ+bi+bu+qiTpu
其中前三项表示用户或者物品的基准预测。 μ \mu μ表示整个评价区间的平均评分, b i b_i bi表示物品 i i i和所有物品平均分的偏离, b u b_u bu表示用户 u u u与所有用户平均分的偏离,$ q_i^Tp_u$表示用户评分因子模型。
上述四项中,除了 μ \mu μ相对稳定外(即使变化也可以离线重算一次),另外三项都与时间相关。一般而言,我们认为这3个随时间变化的数值由以下3部分组成:
以 b u b_u bu为例:
b u ( t ) = b u + α u ∗ d e v u ( t ) b_u(t)=b_u + \alpha_u * dev_u(t) bu(t)=bu+αu∗devu(t)
其中
d e v u ( t ) = s i g n ( t − t u ) ∗ ∣ t − t u ∣ β dev_u(t) = sign(t-t_u) * |t - t_u|^{\beta} devu(t)=sign(t−tu)∗∣t−tu∣β
这部分也可以表示为非线性的形式。
b i b_i bi与$ q_i^Tp_u$也类似。于是预测模型调整为:
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 i \hat{r}_{ui} = \mu + b_i(t_{ui}) + b_u(t_{ui}) + q_i^T(p_u(t_{ui}) + |R(u)|^{-1/2} \sum_{j \in R(u)}y_i r^ui=μ+bi(tui)+bu(tui)+qiT(pu(tui)+∣R(u)∣−1/2j∈R(u)∑yi