《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
(仅使用