《RepeatNet: A Repeat Aware Neural Recommendation Machine for Session-Based Recommendation》
传统的推荐方法基于 last interaction 来处理 session-based 推荐。
《Using temporal data for making recommendations》 和 《An MDP-based recommender system》 研究如何使用马尔科夫模型抽取序列模式(sequential pattern)从而预测 next item 。
《Playlist prediction via metric embedding》 提出 logistic Markov embedding 来学习歌曲的 representation 从而进行 playlist 预测。
这些模型的一个主要问题是:当试图在所有 item 上包含所有可能的潜在用户选择序列时,状态空间很快变得难以管理。
RNN 最近被用于 session-based 的推荐,并引起了人们的极大关注。
《Session-based recommendations with recurrent neural networks》 引入了带 GRU 的 RNN,从而用于 session-based 推荐。
《Parallel recurrent neural network architectures for feature-rich session-based recommendations》引入了许多 parallel RNN: p-RNN 架构来基于被点击 item 的 click 和 feature (如,图片、文本)来建模 session 。
《Personalizing session-based recommendations with hierarchical recurrent neural networks》 通过跨 session 信息迁移来个性化 RNN 模型,并设计了一个 Hierarchical RNN 模型。这个 Hierarchical RNN 模型在 user session 中,中继( relay )和演变( evolve ) RNN 的潜在状态。
《Neural attentive session-based recommendation》 在 session-based 推荐中引入了注意力机制并表现出色。
尽管将深度学习应用于 session-based 推荐的研究越来越多,但是没有人强调所谓的重复消费(repeat consumption),这是许多推荐场景(如电商、音乐、电视节目等等场景的推荐)中的普遍现象。重复消费的意思是:随着时间的推移,相同的 item 被重复消费。
重复消费之所以存在,是因为人们有规律性的习惯(regular habit)。例如,我们经常重复购买相同的东西,我们经常去相同的餐厅吃饭,我们经常听相同的歌曲和歌手。下表展示了相关研究中常用的三个 benchmark 数据集的重复消费率。

重复消费率占比不大,那么是否意味着在这方面的改进没有多大意义?毕竟
RepeatNet是针对 “少数派” 进行的优化。
RepeatNet的效果严重依赖于具体的数据集,只有较高重复消费率的数据集的效果较好。因此使用之前需要先通过数据集来评估重复消费率。而这个重复消费率又依赖于
user ID,因此也无法应用到匿名session中。
在论文 《RepeatNet: A Repeat Aware Neural Recommendation Machine for Session-Based Recommendation》 中,作者通过融合一个 repeat-explore 机制到神经网络中从而研究重复消费,并提出了一个叫做 RepeatNet 的、具有 encoder-decoder 的新模型。与使用单个解码器来评估每个 item 的分数的现有工作不同,RepeatNet 使用两个解码器分别在 repeat mode 和 explore mode 下评估每个 item 的推荐概率。
在 repeat mode 下,模型推荐用户历史记录中的 old item 。
在 explore mode 下,模型推荐 new item 。
具体而言:
首先,模型将每个 session 编码为一个 representation。
然后,模型使用 repeat-explore 机制来学习 repeat mode 和 explore mode 之间的切换概率。
之后,作者提出了一个 repeat recommendation decoder 来学习在 repeat mode 下推荐 old item 的概率,以及提出了一个 explore recommendation decoder 来学习在 explore mode 下推荐 new item 的概率。
两个
decoder(相比较于传统的单个decoder)会大幅度增加资源消耗以及inference time。
最后,作者将模式切换概率、以及两种模式下的每个 item 的推荐概率以概率性的方式结合起来,最终确定 item 的推荐分。
mode prediction 和 item 推荐在统一框架内以端到端的方式共同学习。
论文对三个 benchmark 数据集进行了广泛的实验。结果表明:在 MRR 和 Recall 指标上,RepeatNet 在所有三个数据集上都优于 SOTA baseline 。此外,论文发现:随着数据集大小和重复率的增加,RepeatNet 相对于 baseline 的改进也增加了,这证明了它在处理重复推荐场景方面的优势。
综上所述,论文的主要贡献是:
论文提出了一种新的、基于深度学习的模型,叫做 RepeatNet 。该模型考虑了重复消费现象。据作者所知,该论文是第一个在使用神经网络的 session-based 推荐背景下考虑重复消费现象的。
论文为 session-based 推荐引入了 repeat-explore 机制,从而自动学习 repeat mode 和 explore mode 之间的切换概率。与使用单个解码器的现有工作不同,论文提出了两个解码器来学习两种模式下每个 item 的推荐概率。
论文对三个 benchmark 数据集进行了广泛的实验和分析。结果表明:RepeatNet 通过显式建模重复消费来提高 session-based 推荐的性能,从而超越了 SOTA 方法。
相关工作:
session-based 推荐:
传统的 session-based 推荐方法通常基于马尔科夫链,这些方法在给定 last action 的情况下预测 next action 。
《Using temporal data for making recommendations》 提出了一种基于马尔科夫链的序列推荐器,并研究如何使用概率性的决策树模型来抽取序列模式从而学习 next state 。
《Using sequential and non-sequential patterns in predictive web usage mining tasks》 研究了不同的序列模式(sequential pattern)用于推荐,并发现连续(contiguous)的序列模式比通用(general)的序列模式更适合序列预测任务。
《An MDP-based recommender system》 提出了一个马尔科夫链决策过程 Markov decision process: MDP 从而以 session-based 方式提供推荐。最简单的 MDP 是一阶马尔科夫链,其中 next recommendation 可以简单地通过通过 item 之间的转移概率来计算。
《Effective next items recommendation via personalized sequential pattern mining》 在个性化序列模式挖掘中引入了一种竞争力得分(competence score)指标,用于 next-item 推荐。
《Playlist prediction via metric embedding》 将 playlist 建模为马尔科夫链,并提出 logistic Markov embedding 来学习歌曲 representation 从而用于 playlist 预测。
将马尔科夫链应用于 session-based 推荐任务的一个主要问题是:当试图在所有 item 上包含所有可能的潜在用户选择序列时,状态空间很快变得难以管理。
RNN 已被证明对序列点击预测很有用。
《Session-based recommendations with recurrent neural networks》 将 RNN 应用于 session-based 推荐,并相对于传统方法取得了显著改进。他们利用session-parallel 的 mini-batch 训练,并使用 ranking-based 损失函数来学习模型。
《Parallel recurrent neural network architectures for feature-rich session-based recommendations》 引入了许多 parallel RNN: p-RNN 架构来基于被点击 item 的 click 和 feature (如,图片、文本)来建模 session 。他们提出了比标准训练更适合的、用于 p-RNN 的替代训练策略。
《Improved recurrent neural networks for session-based recommendations》 提出了两种技术来提高其模型的性能,即:数据增强、以及一种考虑输入数据分布漂移(shift)的方法。
《When recurrent neural networks meet the neighborhood for session-based recommendation》 表明,在大多数测试的setup 和数据集中,针对 session 的、基于启发式最近邻的方案优于 GRU4Rec 。
《Personalizing session-based recommendations with hierarchical recurrent neural networks》 提出了一种通过跨 session 信息迁移来对 RNN 模型进行个性化的方法,并设计了一个 Hierarchical RNN 模型,该模型在 user session 之间中继(relay)和演变(evolve)RNN的潜在状态。
《Neural attentive session-based recommendation》 探索了具有注意力机制的混合编码器以建模用户的序列行为和意图,从而捕获用户在当前 session 中的主要意图。
与上面列出的研究不同,我们强调模型中的重复消费现象。
repeat recommendation:
《The dynamics of repeat consumption》 在多个领域研究了用户随着时间的推移重复消费同一个 item 的模式,从同一个门店的重复 check-in 到同一个视频的重复观看。他们发现:消费的新近程度(recency)是重复消费的最强预测器 predictor 。
《Will you “reconsume” the near past? Fast prediction on short-term reconsumption behaviors》 得出了影响人们短期重复消费行为的四个一般特征。然后,他们提出了两种具有线性核和二次核的快速算法,从而预测在给定 context 的情况下,用户是否会在特定时间执行短期重复消费。
推荐系统的一个重要目标是帮助用户发现 new item 。除此之外,许多现实世界的系统将推荐列表用于不同的目标,即:提醒用户他们过去查看或消费的 item 。
《On the value of reminders within e-commerce recommendations》 通过一个现场实验(live experiment)对此进行了调查,旨在量化在推荐列表中此类提醒的价值。
《Modeling user consumption sequences》 确定了重复消费的两种宏观行为模式:
首先,在给定用户的生命周期(lifetime)中,很少有 item 能够存活(live)很长时间。
其次,一个 item 的 last consumption 表现出越来越大的 inter-arrival gap ,这与如下概念保持一致:无聊递增导致最终放弃。
即,用户消费相同
item的周期越来越长,最终放弃消费该item(因为越来越无聊,没有新的吸引力)。
我们的工作与之前关于重复推荐的工作之间的主要区别在于:我们是第一个提出神经推荐模型的人,从而显式强调传统的推荐任务以及 session-based 推荐任务中的重复消费。
给定一个 action session item,session-based 推荐尝试预测 next event 是什么,如以下方程所示。不失一般性,本文以点击 action 为例:
其中:
整体框架:我们提出 RepeatNet 从而从概率性的角度来建模
其中:
repeat mode),explore mode)。
repeat mode 的概率,explore mode 的概率。
repeat mode 中推荐 explore mode 中推荐
如下图所示,RepeatNet 由四个主要组件组成:一个 session encoder、一个 repeat-explore 机制、一个 repeat recommendation decoder、一个 explore recommendation decoder 。
session encoder :它将给定的 session representation timestamp session representation 。
不是 的 representation,而是截止到时刻的 session representation。
repeat-explore 机制:它以 repeat mode 或 explore mode 的概率,对应于方程中的
注意:
,因此只需要预测其中之一即可。
repeat recommendation decoder:它以 item 的重复推荐概率,对应于方程中的
explore recommendation decoder :它以 item 的探索推荐概率,对应于方程中的 item 。

session encoder:遵从先前的工作,我们使用 GRU 来编码 GRU 定义为:
其中:
embedding 向量。
sigmoid 函数,tanh 函数。
update gate,reset gate 。
GRU 的初始状态为零,即
经过 session encoder 编码之后,每个 session
repeat-explore 机制:repeat-explore 机制可以视为一个基于 representation 。具体而言:
我们首先使用 last hidden state hidden state
其中:
然后我们归一化重要性分数,并获得 hidden state 的加权和从而作为 context vector :
然后我们使用 softmax 回归将
其中:
这里的
softmax其实可以退化为sigmoid,因为这是个二分类问题。
repeat recommendation decoder:repeat recommendation decoder 评估 item 被重复点击的概率。受到 CopyNet 的启发,我们使用一个修改的注意力模型来实现这一点。item
其中:
item item 可能在
explore recommendation decoder:explore recommendation decoder 评估那些不在 new item 被点击的概率。具体而言:
首先,为了更好地捕获用户对 session item-level 注意力机制,允许解码器动态选择和线性组合输入序列中的不同部分:
其中:
在计算重要性分数
时,这里都是将 作为 query,作为 key。
然后我们将 last hidden state attentive state hybrid representation
其中:
最后,item
其中:item explore mode 下它被点击的概率为零。
目标函数:我们的目标是给定 input session 的情况下最大化 ground truth 的预测概率。因此,我们优化负对数似然损失函数:
其中:RepeateNet 的参数,session 的集合,ground truth item 的预测概率,
RepeatNet 包含了一个额外的 repeat-explore 机制从而在 repeat mode 和 explore mode 之间软切换(softly switch)。我们假设:如果 next item 已经在 repeat mode,否则切换到 explore mode 。因此,我们可以联合训练另一个损失,即 mode prediction 损失,它也是负对数似然损失:
其中:1,否则为 0 。
在联合训练的情况下,最终的损失是两种损失的线下组合:
注意:
这里可以考虑加权,如:
。 然后,作者在实验中表明,联合训练的效果要比单独训练
更差。有两个原因:
首先,
已经是学习模式预测的优秀监督器了。即,如果 next item已经完美地预测了,那么mode prediction也百分之百正确。其次,
RepeatNet(仅使用)倾向于重复推荐(为什么?作者没有分析)。添加 进一步加剧了这种情况。 因此,实验部分主要采用
来训练。 最后,为了缓解联合训练效果较差的问题,并同时利用模式预测的监督信息,可以考虑一种
warmup训练策略:在前面比例的 epoch(比如50%的epoch)优化,然后在后面的 50%比例的epoch去优化。 这是因为预测
next item是否重复点击的任务,要比预测next item是哪个item要更简单。那么我们把容易的任务作为warm up从而先把模型预热到一个良好的状态,然后再去训练困难的任务。
RepeatNet 的所有参数及其 item embedding 都是端到端通过反向传播来训练的。
未来方向:
首先,可以结合人们的先验知识来影响 repeat-explore mechanism 。
其次,可以考虑更多的信息(如元数据、文本)和更多因子(如协同过滤)来进一步提高性能。
此外,RepeatNet 的变体可以应用于其它推荐任务,如 content-based 推荐。
读者点评:
RepeatNet本质上是把困难的next item预测任务拆分成两阶段的子任务:
第一阶段子任务:预测
next item是否是重复购买。这个任务相对而言要更简单。第二阶段子任务:分别预测
repeat mode或explore mode下的next item。这个任务相对而言更难。基于类似的原理,我们也可以把
next item预测任务按照不同的维度拆分为:
第一阶段子任务:预测
next item是属于哪个category。第二阶段子任务:计算给定
next category的条件下,预测next item的概率。甚至我们可以拆分为三个阶段:
第一个阶段子任务:预测
next category是否重复出现。第二个阶段子任务:基于
repeat mode和explore mode,预测next category的概率。第三个阶段子任务:计算给定
next category的条件下,预测next item的概率。取决于具体的任务,我们还有更多的拆分方式。
这类拆分能提升效果的原因,读者觉得主要是:把困难的任务拆分成相对简单的子任务。
另外,这种拆分还引入了更多的监督信息。这些额外的监督信息来自于
next item的属性。例如RepeatNet中的额外监督信息来自于属性:next item是否重复出现。而category的例子中,监督信息来自于属性:next item的category。虽然论文的实验结果表明:这种监督信息的联合训练效果不佳。但是读者认为,这是因为作者没有很好地利用这种监督信息,理论上引入这种监督信息的效果更好。
这种方式是否有效,关键是评估:如果用传统的方法预测,那么
repeat mode的概率是否接近ground truth。如果传统的方法(如
BERT4REC)预测的next item中,计算到的repeat mode预测概率等于repeat mode真实出现的概率,那么说明传统方法已经能很好地捕获repeat mode,此时无需使用RepeatNet这种方法。否则,可以考虑使用RepeatNet这种方法。
数据集:YOOCHOOSE、DIGINETICA、LASTFM 数据集,其中 YOOCHOOSE、DIGINETICA 是电商数据集,LASTFM 是音乐数据集。数据集的拆分与 《Neural attentive session-based recommendation》 相同。
YOOCHOOSE 数据集:是 RecSys Challenge 2015 发布的公共数据集。我们遵循《Session-based recommendations with recurrent neural networks》 和《Neural attentive session-based recommendation》 ,并过滤掉长度为 1 的 session 以及出现频次少于 5 次的 item 。他们注意到 1/4 的数据集足以完成任务,增加数据量不会进一步提高性能。
DIGINETICA 数据集:是 CIKM Cup 2016 发布的公共数据集。我们再次遵循 《Neural attentive session-based recommendation》 并过滤掉长度为 1 的 session 以及出现频次少于 5 次的 item 。
LASTFM:是 Celma 2010 发布并广泛应用于推荐任务。我们将数据集用于音乐艺术家推荐。我们保留 top 40000 名最受欢迎的艺术家,并过滤掉超长的 session ( item 数量超过 50)、以及超短的 session (item 数量低于 2 )。
数据集的统计结果如下表所示。

评估指标:MRR@20 、MRR@10、Recall@20、Recall@10 。
Recall@k:ground truth item 位于 top k 推荐列表的 case ,占所有 test case 的比例。
MRR@k:ground truth item 位于推荐列表的排名倒数(reciprocal rank)的均值。如果排名落后于
实验配置:
item embedding size 和 GRU hidden state size 均设为 100 。
使用 dropout ,并且 dropout rate = 0.5 。
使用 Xavier 方法来随机初始化模型参数。
使用 Adam 优化算法,其中学习率
我们每隔三个 epoch 将学习率
我们还在训练期间应用范围为
为了加快训练速度和快速收敛,我们通过 grid search 使用 mini-batch size = 1024 。
我们对每个 epoch 在验证集上评估模型性能。
RepeatNet 是用 Chainer 编写的,并在一个 GeForce GTX TitanX GPU 上训练。
另外,这里没有采用联合训练,而是仅训练
。
baseline 方法:
传统的 session-based 推荐方法:
POP:推荐训练集中最流行的 item 。它经常被用作推荐系统领域的 baseline 。
S-POP::推荐当前 session 中最流行的 item 。它使用 session 粒度的流行度而不是全局流行度。
Item-KNN:推荐与 session 中历史互动 item 相似的 item 。item 相似度定义为:
其中还可以包括正则化项从而避免稀疏 item 的偶然的高度相似性。
BPR-MF:是一种常用的矩阵分解方法。我们使用当前 session 中截至目前为止互动的 item 的潜在因子的均值来表达一个 session,将其应用于 session-based 推荐。
FPMC:用于 next-basket 推荐的SOTA 混合模型。为了使其适用于 session-based 推荐,我们在计算推荐分时忽略了 user latent representation 。
PDP:号称是第一个建模序列重复消费(sequential repeat consumption)的方法。据我们所知,这是唯一考虑序列重复消费的推荐模型。
deep learning 的 session-based 推荐方法:先前的研究工作都没有考虑建模序列重复消费。
GRU4REC:使用 session-parallel mini-batch 的训练过程,并且还使用 ranking-based 损失函数来学习模型。
Improved-GRU4REC:通过两种技术来改进 GRU4REC,即:数据增强、以及一种考虑输入数据分布漂移 shift 的方法。
GRU4REC-TOPK:通过 top-k based ranking loss 进一步改进了 GRU4REC 。
NARM:通过神经注意力机制进一步改进了 Improved-GRU4REC 。
所有方法的实验结果如下表所示。我们运行 GRU4REC 和 NARM 发布的代码来报告 GRU4REC 和 NARM 的结果。可以看到:
首先,RepeatNet 优于传统方法和神经网络方法,包括最强的 baseline,即 GRU4REC-TOPK 和 NARM 。RepeatNet 对 NARM 的改进甚至大于 NARM 对 Improved-GRU4REC 的改进。
这些改进意味着显式建模重复消费是有帮助的,这使得 RepeatNet 在 session-based 推荐中建模复杂情况的能力更强。
其次,随着重复率的增加,RepeatNet 的性能普遍提高。我们基于对 YOOCHOOSE 和 DIGINETICA 的不同改进得出这一结论。两个数据集都来自电商领域,但是 YOOCHOOSE 的重复率更高。
第三,RepeatNet 的性能因领域而异。实验结果表明,RepeatNet 在音乐领域比电商领域具有更大的优势。我们认为这是由于不同领域的不同特性造成的。
人们更愿意重复消费曾经听过的歌。
在 LASTFM 数据集上,S-POP 的表现要比 Item-KNN 好得多,这意味着流行度在 LASTFM 数据集上非常重要。但是,Item-KNN 在 YOOCHOOSE 数据集上的表现要比 S-POP 好得多,这意味着协同过滤在 YOOCHOOSE 数据集上更重要。
此外,神经网络模型在所有数据集的所有评估指标上都比传统方法有很大的进步。最近的其它研究也得出了类似的结论。

repeat mechanism 的分析:如上表所示,一般而言,RepeatNet with repeat 在所有数据集上都优于 RepeatNet without repeat 。
作者并未解释
no repeat模型是如何实现的。个人猜测,是认为,即始终采用 explore mode来构建模型。
RepeatNet (with and without repeat) 在 repeated session 和 non-repeated session 上的表现如下表所示。
可以看到:RepeatNet 的改进主要来自 repeated session 。具体而言,在 DIGINTICA 和 LASTFM 数据集上,RepeatNet 在 repeated session 上分别提高了 33.91% 和 24.16% 的 Recall@20 。但是,RepeatNet 在 non-repeated session 上的效果有所下降。
实验结果表明,RepeatNet 通过显式建模 repeat mode 和 explore mode 从而具有更大的潜力。但是,结果也显示了 RepeatNet 的局限性:如果我们让它完全从数据中学习 mode probability,它似乎倾向于过多地重复推荐。应该增加一种机制来集成先验知识(即,不要过多地重复推荐)。
因为
RepeatNet在Non-Rep session上的效果不佳,这表明它倾向于过多地重复推荐。


attention mechanism 和 repeat mechanism 的分析:我们在下表中比较了 with and without attention 、with and without repeat 的 RepeatNet 的结果。结果表明:
attention mechanism 和 repeat mechanism 都可以改善 RepeatNet 。重要的是,attention mechanism 和 repeat mechanism 的贡献是相辅相成的,因为这种组合在所有数据集的所有指标上都带来了进一步的提升,这证明了二者的必要性。
此外,我们可以看到 attention mechanism 更有助于提高 Recall,而 repeat mechanism 更有助于提高 MRR 。

联合学习的分析:有趣的是,如果我们联合训练推荐损失
首先,RepeatNet (仅使用 repeated session 上取得了很大的改进。并且 repeated session 的改善余地相对较小(因为重复购买的比例不高)。
其次,RepeatNet (仅使用
