论文原文
利用自编码器做协同过滤,协同过滤主要有如下两种情景

  • user-based:userA和userB臭味相投,那么A喜欢看的电影可以推荐给B
  • item-based: movieX和movieY比较相似,那么用喜欢看movieX,那么可以将movieY也推荐给他

Rating matrix

比如在电影推荐场景中,用户对电影(item)的打分可以构成一个RRm×nR \in \mathbb{R}^{m \times n}矩阵:

  • 行向量:m个user,uU={1m}u \in U=\{1 \ldots m\},其中每个user可以表示为r(u)=(Ru1,Run)Rn\mathbf{r}^{(u)}=\left(R_{u 1}, \ldots R_{u n}\right) \in \mathbb{R}^{n},表示该用户对各个item的打分
  • 列向量:n个item, iI={1n}i \in I=\{1 \ldots n\},其中每个item可以表示为r(i)=(R1i,Rmi)Rm\mathbf{r}^{(i)}=\left(R_{1 i}, \ldots R_{m i}\right) \in \mathbb{R}^{m},表示该item在各个用户下被打的分

模型训练

AutoEncoder的思想就是用输出当做label,如下图所示,这是一个item-based场景下的AutoRec模型,输入r(i)r^{(i)}itemiitem^{i}对应的mm维向量,分别作为输出和输出,输入层通过权重VV得到隐藏层,再通过权重WW到输出层,通过训练更新参数矩阵WWVV使得输入输出尽可能的相同。
AutoRec模型

损失函数

AutoRec模型的损失函数如下所示
minθi=1nr(i)h(r(i);θ)O2+λ2(WF2+VF2)\min _{\theta} \sum_{i=1}^{n}\left\|\mathbf{r}^{(i)}-h\left(\mathbf{r}^{(i)} ; \theta\right)\right\|_{\mathcal{O}}^{2}+\frac{\lambda}{2} \cdot\left(\|\mathbf{W}\|_{F}^{2}+\|\mathbf{V}\|_{F}^{2}\right)其中O2\|\cdot\|_{\mathcal{O}}^{2}表示只对观测到的数据去损失函数,即在Rating Matrix中,没有打分的部分不管他,encode decode的过程中只让模型去拟合已有的打分部分,让这一部分充分拟合好,然后对于没有数据的部分,训练好的权重会给出一个非零值,这就是模型预测的结果。

最终,原来Rating Matrix中为零的部分在模型训练完后也变也有了数值,可以根据此来做推荐。

相关文章:

  • 2021-12-29
  • 2021-05-12
  • 2021-10-25
  • 2021-05-01
  • 2021-07-26
  • 2022-02-28
  • 2022-12-23
  • 2021-09-12
猜你喜欢
  • 2021-06-11
  • 2021-03-30
  • 2021-12-12
  • 2021-12-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-07
相关资源
相似解决方案