9 篇顶会论文解读推荐中的序列化建模:Session-based Neural Recommendation

简介:

前言

本文对 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”微信公众号

相关文章
|
机器学习/深度学习 存储 人工智能
推荐系统序列化建模总结(三)
推荐系统序列化建模总结(三)
543 0
推荐系统序列化建模总结(三)
|
机器学习/深度学习 人工智能 搜索推荐
推荐系统序列化建模总结(二)
推荐系统序列化建模总结(二)
415 0
推荐系统序列化建模总结(二)
|
机器学习/深度学习 存储 人工智能
推荐系统序列化建模总结(一)
推荐系统序列化建模总结(一)
826 0
推荐系统序列化建模总结(一)
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
3月前
|
存储 开发框架 .NET
解锁SqlSugar新境界:利用Serialize.Linq实现Lambda表达式灵活序列化与反序列化,赋能动态数据查询新高度!
【8月更文挑战第3天】随着软件开发复杂度提升,数据查询的灵活性变得至关重要。SqlSugar作为一款轻量级、高性能的.NET ORM框架,简化了数据库操作。但在需要跨服务共享查询逻辑时,直接传递Lambda表达式不可行。这时,Serialize.Linq库大显身手,能将Linq表达式序列化为字符串,实现在不同服务间传输查询逻辑。结合使用SqlSugar和Serialize.Linq,不仅能够保持代码清晰,还能实现复杂的动态查询逻辑,极大地增强了应用程序的灵活性和可扩展性。
142 2
|
15天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
25天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
25天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
24 0