前言
本文对 Recurrent Neural Network 在推荐领域的序列数据建模进行梳理,整理推荐领域和深度学习领域顶会 RecSys、ICLR 等中的 9 篇论文进行整理。图片和文字来源于原文,帮助读者理解,有争议的请联系我。
Session-based neural recommendation
首先介绍下 session-based 的概念:session 是服务器端用来记录识别用户的一种机制。典型的场景比如购物车,服务端为特定的对象创建了特定的 Session,用于标识这个对象,并且跟踪用户的浏览点击行为。我们这里可以将其理解为具有时序关系的一些记录序列。
写作动机
传统的两类推荐方法——基于内容的推荐算法和协同过滤推荐算法(model-based,memory-based)在刻画序列数据中存在缺陷:每个 item 相互独立,不能建模 session 中 item 的连续偏好信息。
传统的解决方法
1. item-to-item recommendation approach (Sarwar et al.,2001; Linden et al., 2003) : 采用 session 中 item 间的相似性预测下一个 item。缺点:只考虑了最后一次的 click 的 item 相似性,忽视了前面的的 clicks, 没有考虑整个序列信息。
2. Markov decision Processes (MDPs)(Shani et al., 2002):马尔科夫决策过程,用四元组<S,A, P, R>(S: 状态, A: 动作, P: 转移概率, R: 奖励函数)刻画序列信息,通过状态转移概率的计算点击下一个动作:即点击 item 的概率。缺点:状态的数量巨大,会随问题维度指数增加。MDPs 参见博客[1]。
Deep Neural Network 的方法
Deep Neural Network(RNN:LSTM 和 GRU 的记忆性)被成功的应用在刻画序列信息。因为论文中主要采用 GRU,下面简单介绍下 GRU(LSTM 详解参考博客[2])。
GRU的原理:GRU 输入为前一时刻隐藏层和当前输入,输出为下一时刻隐藏层信息。GRU 包含两个门:reset 门和: update 门,其中用来计算候选隐藏层,控制的是保留多少前一时刻隐藏层的信息;用来控制加入多少候选隐藏层的信息,从而得到输出。GRU 可以灵活控制长短距离的依赖信息,适合刻画序列数据。
到此,已经说明用 GRU 来刻画 session 中的序列的合理性。下面我们来梳理相关的工作。
Session-based recommendations with recurrent neural networks
ICLR 2016
本文的贡献在于首次将 RNN 运用于 Session-based Recommendation,针对该任务设计了 RNN 的训练、评估方法及 ranking loss。
- Motivation (Why):第一篇提出将 RNN 应用到 session-based recommendation 的论文。
- Main Idea (What):一个 session 中点击 item 的行为看做一个序列,用 GRU 来刻画。
- How:
模型(GRU4REC)架构
模型输入:session 中的点击序列,, 1 ≤ r < n,通过 one hot encoding 编码,通过 embedding 层压缩为低维连续向量作为 GRU 的输入。
模型输出:每一个 item 被点击的预测概率,y=M(x), where y=[y1, y2...ym]。
M:模型函数。yi 是 item i 的预测点击概率。
训练策略
为了提高训练的效率,文章采用两种策略来加快简化训练代价,分别为:
Training strategy:为了更好的并行计算,论文采用了 mini-batch 的处理,即把不同的session 拼接起来,同一个 sequence 遇到下一个 Session 时,要注意将 GRU 中的一些向量重新初化。
Training data sample:因为 item 的维度非常高,item 数量过大的概率会导致计算量庞大,所以只选取当前的正样本(即下一个点击的 item)加上随机抽取的负样本。论文采用了取巧的方法来减少采样需要的计算量,即选取了同一个 mini-batch 中其他 sequence 下一个点击的 item 作为负样本,用这些正负样本来训练整个神经网络。
损失函数
损失函数的选择也影响着模型的效果,文章尝试两种损失函数:
Point-wise ranking loss,即认为负样本为 0,正样本为 1 的 loss function,发现训练出来的模型并不稳定,因为在推荐里面,并不存在绝对的正样本和负样本,用户可能对多个 item 存在偏好。
故采用 Pairwise ranking,即正样本的 loss 要低于负样本。本文使用了两种基于 Pairwise ranking 的 loss function:
- BPR:一种矩阵分解法,公式:
- TOP1:一种正则估计,公式:
数据集
- RecSys Challenge 2015:网站点击流
- Youtube-like OTT video service platform Collection
评价指标
recall@20、MRR
Baselines
POP:推荐训练集中最受欢迎的 item;
S-POP:推荐当前 session 中最受欢迎的 item;
Item-KNN:推荐与实际 item 相似的 item,相似度被定义为 session 向量之间的余弦相似度;
BPR-MF:一种矩阵分解法,新会话的特征向量为其内的 item 的特征向量的平均,把它作为用户特征向量。
实验结果及总结
Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations
RecSys 2016
这篇文章主要贡献:探究如何将 item 属性信息(如文本和图像)加入到 RNN 框架中,探究了几种融合 item 属性的模型框架。
- Motivation (Why): Items typically have rich feature representations such as pictures and text descriptions that can be used to model the sessions.
- Main Idea (What): Here we investigate how these features can be exploited in Recurrent Neural Network based session models using deep learning.
- How:
模型架构
模型输入:item ID, Item features (texts and image)
模型输出:next click scores of each items
1. Baseline architectures: ID only, Feature only, Concatenated input
2. p-RNN architectures: Parallel, Parallel shared-W, Parallel interaction
实验结果及结论
Parallel 并行更新 item ID 和 feature 的模型达到最好的效果,Parallel shared-W 和 Parallel interaction 交互模型并没有好的效果,可能原因重复的序列信息加重了模型的训练负担。
Incorporating Dwell Time in Session-Based Recommendations with Recurrent Neural Networks
RecSys 2017
本文的贡献在于将用户在 session 中 item 上的停留时间长短考虑进去。
- Motivation (Why): 用户在 session 中的 item 停留时间越长,越感兴趣。
- Main Idea (What): We explore the value of incorporating dwell time into existing RNN framework for session-based recommendations by boosting items above the predefined dwell time threshold.
- How:
模型架构
对于 session 中的一个序列 item 集合 x= { [x1,x2...xn] },以及每个 item xi 的停留时间
,设定单位时间阈值 t。如此我们可以将每个 item 按照单位时间划分成 个时间片。如下图所示,其余训练方式与第一篇文章相同,实验证明可以提升推荐效果。实验结果
Personalizing Session-based Recommendations with Hierarchical Recurrent Neural Networks
RecSys 2017
本文的贡献在于提出一种层次化的 RNN 模型,相比之前的工作,可以刻画 session 中用户个人的兴趣变化,做用户个性化的 session 推荐。
- Motivation (Why): 用户的历史信息反映了用户的兴趣爱好,应该在下一个 session 的推荐中考虑进去。
- Main Idea (What): 提出一种层次化的 RNN 模型,可以解决 (1) session-aware recommenders:传递用户的历史兴趣爱好到下一个 session 中;(2) session-based recommenders:当用户没有历史记录时,对用户当前 session 进行建模。
- How:
模型架构
用两个 GRU,Session-level GRU 和 User-level 的 GRU 分别刻画 session 信息和 user历史信息,模型架构图如下,对于一个用户的多个 sessions,当一个 session 结束时,用该 session 的输出作为当前的 user 的表示,并用来初始化下一个 session 的输入。
数据集
Baseline
实验结果
When Recurrent Neural Networks meet the Neighborhood for Session-Based Recommendation
RecSys 2017
本文的贡献在于提出将 session 中的 RNN 模型,与 KNN 方法结合起来,能够提高推荐的效果。
- Motivation (Why): 如果一个 item 在与当前 item 相似的 session 中出现,那么这个 item 出现的可能性更大。
- Main Idea (What): 提出一种 Session-based kNN 算法。
- How:
session-based 方法
找出与当前 session 最相近的 k most similar past sessions in the training data。
item i 在当前 session 中出现的概率是:
如果 item i 有出现在 k 个最相近的 session 中,,如果没有,那么认为该 item 不会出现在当前 session 中。
Hybrid Approach:将 session-based 方法和 kNN 方法结合推荐效果最好。
实验结果及结论
结论:item 的共现信号 co-occurrence signals 可以用来预测 sequential patterns。
Improved Recurrent Neural Networks for Session-based Recommendations
DLRS 2016
本文的贡献在于提出将在 GRU4REC 中引入了四条优化方法。
Data augmentation(数据增强)
给定一个session的输入序列 [x1,x2...xn] , 可以产生多条训练数据,如([x1,V(x2)], [x1,x2, V(x3)] )如下图,可以增加训练数据。此外,用户可能出现误点击的,用 dropout 的方式来泛化数据,可以增强训练的鲁棒性。
Model pre-training
在推荐中,对于 user 和 item 更新都很快的推荐场景,最近的信息更为重要,文本提出先利用历史所有数据预训练出一个模型,然后只选取最近的数据,以预训练得到的模型权重作为初始化参数,再训练一个最终模型。
Use of Privileged information
这是一个 generalized distillation framework。给定序列 [x1,x2...xr] 和对应 label,其相应的 privileged sequence 为,对应 label 为,其中 n 为该 session 总长度(剩余序列的逆序列)。此时 loss function 变为:
其中 L 为距离函数,V(xr) 是 xr 的标签。
Output embedding
直接预测 item 的 embedding 向量。使预测结果更具有泛化意义,相当于预测了用户 embedding 后的语义空间中兴趣表示,训练时定义的 loss 为输出层与该样本在 embedding 层的 cosine 相似度。
现有 session-based neural recommendation 论文对比如下:
原文发布时间为:2017-11-9
本文作者:白婷
本文来自云栖社区合作伙伴“PaperWeekly”,了解相关信息可以关注“PaperWeekly”微信公众号