《论文阅读》SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS
文章目录
- SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS
-
-
论文概况
-
GRU-based RNN
-
- GRU
- 改进
-
- Seesion-Parallel Mini-Batches
-
Sampling On The Output
-
Ranking Loss
-
Experiments
-
- Dataset
- evaluation metric
- Baseline
-
总结
-
SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS
论文概况
论文发布在ICLR 2016上,首次将递归神经网络RNN应用于推荐系统,在传统RNN的基础上进行了GRU单元的优化,并且为了使实际效果更佳的好,进行了Seesion-Parallel、 Mini-BatchesSampling On The Output、Ranking Loss等改进。
GRU-based RNN

RNN的输入时会话的实际状态,输出是会话中下一个事件的item。
会话的状态可以是实际事件的item,也可以是会话中迄今为止的事件
前者中,使用1-of-N编码,即输入向量的长度等于item的长度,对应的item为1,其余为0。
后者中,使用representations的加权和来表示,如果事件发生的较早,则会对其进行折扣。
文章还尝试了添加额外的embedding层,但是i-of-N 编码的表现更好。
在最后的GRU层和输出之间再添加一个额外的Feedforward layers(前馈层)。
GRU
一般的RNN是使用公式(1)来更新隐藏状态h
\mathbf{h}_{\mathbf{t}}=g\left(W \mathbf{x}_{\mathbf{t}}+U \mathbf{h}_{\mathbf{t}-\mathbf{1}}\right)\tag{1}
其中g是一个光滑且有界的函数,并入logistic sig moid函数,x_t是t时刻的unit输入,h_t的作用就是,给定当前状态h_t,RNN会输出序列中下一个元素的概率分布。
本文采用了由Cho等人在论文《 On the proper-ties of neural machine translation: Encoder-decoder approaches》提出的GRU(Gated Recurrent Unit),用来解决梯度消失的问题。

\mathbf{h}_{\mathbf{t}}=\left(1-\mathbf{z}_{\mathbf{t}}\right) \mathbf{h}_{\mathbf{t}-\mathbf{1}}+\mathbf{z}_{\mathbf{t}} \hat{\mathbf{h}_{\mathbf{t}}}\tag{2}
\mathbf{z}_{\mathbf{t}}=\sigma\left(W_{z} \mathbf{x}_{\mathbf{t}}+U_{z} \mathbf{h}_{\mathbf{t}-\mathbf{1}}\right)\tag{3}
\hat{\mathbf{h}_{\mathbf{t}}}=\tanh \left(W \mathbf{x}_{\mathbf{t}}+U\left(\mathbf{r}_{\mathbf{t}} \odot \mathbf{h}_{\mathbf{t}-\mathbf{1}}\right)\right)\tag{4}
\mathbf{r}_{\mathbf{t}}=\sigma\left(W_{r} \mathbf{x}_{\mathbf{t}}+U_{r} \mathbf{h}_{\mathbf{t}-\mathbf{1}}\right)\tag{5}
- z_t是更新门,决定h_t的更新情况
- r_t是重置门,决定是否要放弃h_{t-1}
- \hat{h_t}是候选输出,接收[x_t,h_{t-1}]
- h_t是当前输出,接收[h_{t-1},\hat{h_t}]
改进
- Seesion-Parallel Mini-Batches
- Sampling On The Output
- Ranking Loss
Seesion-Parallel Mini-Batches
用户序列数据与NLP序列数据做的任务不同,NLP中的mini-batch会用一个滑动窗口来选择句子中的单词,预测其他单词,mini-batch中的每一个元素对应一个滑动窗口;但是对于用户序列数据我们更想要建模用户的长期行为,因此不能用NLP中的这种方式来做mini-batch。文中提出了一种用于用户序列行为数据建模的mini-batch组织方式:
- 首先对会话进行排序,session1,i_{1,1}
- 前X个会话的第一个事件作为第一个mini-batch的输入,期望的输出是active 会话的第二个事件,第二个mini-batch由第二个事件组成
- 如果任何会话结束,则放置下一个可用会话。我们认为每个会话都是独立的,因此当发生切换的时候,会重置相应的隐藏状态

Sampling On The Output
当拥有数十万个甚至上百万个item的时候,计算每个步骤中的每个item的分数将使得算法与item数量和事件数量的乘积成比例,这在实践中是不可行的,本文对输出进行了采样,计算了一小部分item的分数,这就意味着只更新了一些权重。除了期望的输出外,本文还计算了一些negative examples的分数,并修改权重,来使得期望的输出的排名变高。
本文根据item流行的程度来进行抽样而不是为每个训练。没有为每个training example生成单独的样例,而是mini-batch其他training examples来作为negative examples。优点:可以通过跳过采样来进一步减少计算时间,并且在代码实现方面,代码会更加的简单,矩阵的运算会更加的快。同时,这种方法也是基于流行度的抽样,因为一个item出现在mini-batch的其他training example的概率与其流行程度成正比
Ranking Loss
推荐系统的核心是基于相关性的item排序,为了在序列化推荐中实现这一点,需要选择合适的ranking loss函数。排序的学习方式通常有以下三种:
- Pointwise ranking可以独立地估计item的得分或排名,并且loss的定义方式应使相关item的排名较低。
- Pairwise ranking比较一个正item和一个负item的得分或成对的排名,loss强制要求正item的排名应低于负item的排名。
- Listwise ranking使用所有item的分数和排名,并将它们与完美排序进行比较。由于它包括排序,通常计算成本更高,因此不经常使用。此外,如果只有一个相关的item(如我们的案例),listwise排序可以通过pairwise排序解决。
作者采用了多种排序损失函数,发现pointwise的损失函数表现不稳定,pairwise的表现更好,文章列出了两种pairwise损失函数:
- BRP: Bayesian Personalized Ranking,一种使用成对排名损失的矩阵分解方法。它比较了一个正item和一个抽样负item的得分。本文将正item的得分与几个抽样负item项目进行比较,并使用他们的平均值作为损失。
L_s=-\frac{1}{N_{S}} \cdot \sum_{j=1}^{{N}_{S}} \log \left(\sigma\left(\hat{r}_{s, i}-\hat{r}_{s_{s}, d_{j}}\right)\right)\tag{6}
其中N_s是样本量,\hat{r}_{s, i}是会话给定点上的item i的得分,i是期望的item(会话中的下一个item),j是负item sample
- TOP1:它是本文设计的。是相关item相对等级的正则化近似值。相关item的相对等级由\frac{1}{N_{S}} \cdot \sum_{j=1}^{N_{S}} I\left\{\hat{r}_{s, j}>\hat{r}_{s, i}\right\}确定,其中I\{\cdot\}是sigmod的近似,再添加正则化项,最终损失表达式为:
L_{s}=\frac{1}{N_{S}} \cdot \sum_{j=1}^{N_{S}} \sigma\left(\hat{r}_{s, j}-\hat{r}_{s, i}\right)+\sigma\left(\hat{r}_{s, j}^{2}\right)\tag{7}
Experiments
Dataset
- RCS15:包含电子商务网站的点击流,有时候会以购买时间结束
- VIDEO:从类似于Youtube的OTT视频服务平台收集的,收集了观看视频至少一定时间的事件。
evaluation metric
recall@20(所有测试用例前20个item中最具有期望item的用例比例),MRR@20(平均倒数排名),值越大越好
\mathbf{M R R}=\frac{1}{|S|} \sum_{i=1}^{|S|} \frac{1}{\operatorname{rank}_{i}}=\frac{1}{|S|}\left(\frac{1}{\operatorname{rank}_{1}}+\frac{1}{\operatorname{rank}_{2}}+\ldots+\frac{1}{\operatorname{rank}_{|S|}}\right)
一个item如果被排到了20名开外,记为0分
Baseline
- POP:
- S-POP
- Item-KNN
- BPR-MF

总结
作为首次将RNN引入到SR中,创新性十足,并且后面的讨论也十分的清晰,适合入门观看,但是文章的结构排版并不是特别的优秀,在输出采样的时候描述的不是特别清楚。
