在推荐系统中,一种常见的方法是研究 Netflix
竞赛中介绍的问题形式:给定由用户、电影、时间戳、评分组成的元组所构成的数据集,目标是在给定用户、电影、时间戳的条件下预估评分。然后通过预估评分和实际评分的偏离deviation
来衡量预测的效果。
这个公式很容易理解,并导致了许多非常成功的方法,如概率矩阵分解 Probabilistic Matrix Factorization: PMF
、基于最近邻的方法、聚类。此外,很容易定义适当的性能度量,只需要选择数据集的一个子集进行训练,并用剩余的数据用于测试。
但是,当涉及数据中固有的时间方面temporal aspect
和因果方面causal aspect
时,这些方法是存在不足。下面的例子更详细地说明了这一点:
Movie Perception
的变化:由于社会观念的变化,曾经被认为很糟糕的电影可能现在变得值得观看。为了适当地捕获这一点,电影属性的参数parameter
必须随时间变化从而跟踪到这种趋势。seasonal
的。而且,用户不太可能在夏天观看关于圣诞老人的电影。《No country for old members: User lifecycle and linguistic change in online communities》
),并且可以说也适用于在线消费。由于更成熟或生活方式的改变,用户对特定节目的兴趣可能会变化。任何这方面的变化都会使得现有的用户画像失去意义,但是很难显式地对所有这类变化进行建模。除了需要建模时间演变temporal evolution
之外,事后评估也违反了因果关系的基本要求。例如,假如知道用户将在未来一个月内对 Pedro Almodfiovar
产生好感,那么就可以更容易地估计该用户对 La Mala Educacifion
的看法。换句话讲,当我们使用未来评分来估计当前的 review
时,我们在统计分析中违反了因果关系。这使得我们在 benchmark
上报告的准确性无法作为有效评估,从而确定我们的系统能否在实践中运行良好。虽然 Netflix prize
产生了一系列研究,但是评估不同模型的未来预测future prediction
受到训练数据和测试数据的混合分布mixed distribution
的阻碍,如下图所示。相反,通过显式建模画像动态 profile dynamic
,我们可以根据当前趋势来预测未来的行为。
下图为
Netflix
竞赛中的数据密度。注意,测试数据在近期的评分上的密度要大得多,而训练数据的评分密度要更为均匀。这说明竞赛中提出的问题更多的是利用事后诸葛亮的插值评分interpolating rating
(泄露了未来的评分来评估当前评分),而不是预测未来的用户行为。这段话的意思是说:对于真实世界的推荐,测试集不应该是随机选择的,而只能是未来预测
future prediction
。
一个能够捕获推荐系统中固有的实际数据分布的模型,除了同时捕获用户集合和电影集合的评分交互之外,还需要能够同时建模每个用户和电影的时间动态temporal dynamic
。这意味着使用潜在变量模型 latent variable model
来推断控制用户行为和电影行为的、unobserved
的状态。下图所示为这类模型的一个例子,该模型与《Collaborative filtering with temporal dynamics》
提出的时间模型temporal model
之间的区别在于:
temporal model
使用特定的参数化parametrization
来插值时间行为 interpolate temporal behavior
。
相反,前者使用非参数化模型nonparametric model
,该模型能够通过学习固有的用户动态 user dynamic
和电影动态movie dynamic
,从而将行为外推extrapolate
到未来。这使得该模型更适合 true dynamic
,对实验者的统计建模技能要求更低。
这段话的意思是:
temporal model
显式采用带时间戳的user parameter
、带时间戳的movie parameter
来建模user representation
和movie representation
,是transductive learning
,它无法应用到未见过的时间戳。- 而前者采用模型(如马尔科夫链模型)来建模
user representation
和movie representation
,它将时间戳作为模型输入,是inductive learning
,能够应用到见过的时间戳。
下图左侧为时间无关time-independent
的推荐,用户parameter
和电影 parameter
都是静态stationary
的。右侧为时间相关time-dependent
的推荐,用户模型和电影模型都遵循马尔科夫链。
给定模型的整体结构,我们可以自由地为潜在变量latent variable
设定一种特定类型的状态state
。流行的选择是假设一个离散的潜在状态(即离散的状态空间)。同样地,我们也可以求助于谱方法spectral method
或非参数估计nonparametric estimator
,如循环神经网络Recurrent Neural Network: RNN
。为了解决梯度消失问题,论文 《Recurrent Recommender Networks》
使用 LSTM
。
论文 《Recurrent Recommender Networks》
的贡献如下:
非线性nonlinear
的、非参数化nonparametric
的推荐系统已被证明有些难以理解。具体而言,使用非线性函数来代替内积公式在论文的实验中仅显示有限的前景。据作者所知,这是第一篇以完全因果fully causal
的、整体integrated
的方式解决电影推荐的论文。也就是说,作者相信这是第一个试图捕获用户动态和电影动态的模型。此外,论文的模型是非参数nonparametric
的。这使得我们能够建模数据,而不必假设状态空间state space
的特定形式。
Recurrent Recommender Network: RRN
非常简洁,因为模型仅学习动态 dynamic
而不是状态 state
。这是与经典的潜在变量模型 latent variable model
的关键区别之一,其中潜在变量模型花了相当大的精力来用于估计潜在状态 latent state
。在这个方面上,RRN
非常类似于 《Autorec: Autoencoders meet collaborative filtering》
提出的神经自编码器neural autoencoder
。事实上可以将神经自编码器视为RRN
模型的一个特例。
state
:即user representation
和movie representation
。
实验表明,论文的模型优于所有其它模型。例如在现实场景中,作者尝试在给定数据的情况下估计未来的评分。实验表明,论文的模型能够非常准确地捕获外生动态 exogenous dynamic
和内生动态 endogenous dynamic
。此外,论文证明该模型能够准确地预测用户偏好在未来的变化。
外生动态:电影收到外界因素(如电影获得大奖)导致电影评分发生变化。内生动态:电影随着上映时间的增加从而导致评分发生变化。
相关工作:
推荐系统:基础basic
的推荐系统忽略时间信息 temporal information
。这是一个合理的近似,特别是对于 Netflix
竞赛,因为在大多数情况下,关于电影的意见opinion
和用户的意见不会发生太快、太剧烈的变化。
Probabilistic Matrix Factorization: PMF
可能最流行的模型之一。PMF
尽管简单,但是它在评分预测方面取得了鲁棒的、强大的结果。我们提出的模型采用了与 PMF
相同的分解来建模稳态效应 stationary effect
。从这个意义上讲,我们的模型是 PMF
的一个严格的泛化。
TimeSVD++
是 SVD++
矩阵分解算法的时间扩展 temporal extension
。这里的关键创新是使用一个单独的模型来捕获时间动态,即允许数据中显式的时间偏差temporal bias
。这使得 TimeSVD++
能够以整体的方式integrated fashion
来捕获由于评分 label
的变化以及流行度popularity
的变化而导致的时间不均匀性 temporal inhomogeneity
。
注意,TimeSVD++
的特征是手工设计的,依赖于对数据集的深入了解,这使得模型难以移植到新问题,如从电影推荐到音乐推荐或书籍推荐。
其次,该模型显式地不估计未来的行为,因为 Netflix
比赛不需要估计未来的行为。相反,该模型仅仅在过去的observation
之间进行插值。
相比之下,我们的模型不依赖于特征工程,并且能够在未看到未来的用户行为的情况下(看到未来的用户行为本来就是不切实际的)预测未来的评分。
可能与我们的方法最密切相关的是 AutoRec
,它是少数用于推荐的神经网络模型之一。AutoRec
将矩阵分解视为编码问题:找到用户活动user activity
的低维 representation
,以便我们可以从该向量重构所有的用户评分。就评分预测而言,AutoRec
是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 state-of-the-art
的结果。
循环深度网络:下图描述的 graphical model
的关键挑战之一是:它要求我们根据observation
推断未来的状态,例如通过消息传递 message passing
或粒子滤波particle filtering
(粒子滤波通过非参数化的蒙特卡洛模拟方法来实现递推贝叶斯滤波)。这是昂贵且困难的,因为我们需要将评分的 mission model
与 latent state
相匹配。换句话讲,将关于评分的信息 feed back
到 latent state
的唯一方法是通过 likelihood
Sequential Monte Carlo sampling
。
这种方法需要学习
这些 latent state
(作为模型的parameter
),这是昂贵且困难的。
或者,我们可以简单地学习 mapping
作为非参数的状态更新的一部分,即通过 Recurrent Neural Network: RNN
。关键思想是使用潜在变量自回归模型latent variable autoregressive model
,如下所示:
其中:
time step
observation
,observation
representation
,time step
estimate
。time step
latent state
。所谓的 ”非参数“ 指的是
latent state
不是作为模型的parameter
来学习的,而是通过某个函数来生成的。通过函数来生成并更新latent state
,然后通过训练数据来学习这个函数,这就是论文的核心思想。
上式给出了通用的函数形式,但是还可以引入非线性以及一些解决稳定性和梯度消失的工具。一个流行的选择是 Long Short-Term Memory: LSTM
,它捕获时间动态。我们将 LSTM
作为协同过滤系统的 building block
。 整体模型如下图所示。状态更新如下:
其中:
forget gate
,input gate
,output gate
。sigmoid
非线性激活函数。
LSTM
中有两种类型的非线性激活函数:
- 用于遗忘门、输入门、输出门的
sigmoid
非线性激活函数:由于门控单元的性质,门的输出必须是0.0 ~ 1.0
之间。因此,如果要替换为新的非线性激活函数,则该激活函数的输出范围也必须满足0.0 ~ 1.0
之间。- 用于
和 的 tanh
非线性激活函数:用于对输入数据进行非线性变换,因此也可以替换为relu
等其它非线性激活函数。但是对于RNN
网络需要注意梯度消失和梯度爆炸,这也是为什么通常选择tanh
非线性激活函数的原因。但是,也有论文和网上材料指出,通过仔细挑选合适的权重初始化(权重初始化为1
附近),那么relu
非线性激活函数的模型效果会更好。
为简单起见,在本文中我们使用 LSTM
不是唯一的选择,例如也可以选择 GRU
(GRU
的计算成本更低且结果通常相似)。在本文中,我们使用 LSTM
因为它稍微更通用。
《Session-based recommendations with recurrent neural networks》
没有考虑个性化,也没有尝试建模 user state transition
和 item state transition
。
我们使用 LSTM RNN
来捕获用户的时间依赖性temporal dependency
和电影的时间依赖性。通过这种方式,我们能够融合 incorporate
过去的observation
并以整体的方式预测未来的轨迹。
令用户 latent state
为 latent state
为 temporal dynamic
,我们给两者赋予时间索引,即 latent state
的更新函数update function
。我们将更新函数定义为:
其中:
time step
latent state
。我们不是解决优化问题来找到 user parameter/ movie parameter
,而是解决优化问题来找到生成 user parameter/movie parameter
的函数。这方面类似于深度自编码器,其中深度自编码器学习一个编码器函数来编码过去的评分。
然而深度自编码器的目标是最小化重构误差,而这里的问题是最小化预测评分与真实评分之间的误差。
用户状态和电影状态:为简单起见,我们首先描述 user-state RNN
,因为 movie-state RNN
也是以相同的方式来定义的。
给定一个包含 time step
time step
time step
wallclock
,并且使用
其中: source information
投影到 embedding
空间中的、待学习的变换 transformation
。
注意:
- 由于评分序列的时间跨度很长,因此这里的
time step
可以按照天粒度、月粒度、甚至年粒度来进行。此时表示在这个区间内,用户对所有电影的评分向量。这可以大大降低 RNN
序列的长度,降低计算复杂度。粒度越长则越反应长期的趋势(短期趋势被抹平)。- 这种线性投影的方式本质上是:将用户在
time step
区间内评分的电影 embedding
进行sum
聚合。也可以进行self attention
聚合、max pooling
聚合等等其它非线性聚合。是 embedding
的方式添加到中的。 包含三个 field
:评分向量field
、newbie field
、wallclock field
。这三个field
的投影结果直接拼接在一起。也可以采用更复杂的融合方式(如MLP
或者attention
)。
LSTM
在time step
注意,如果在time step
time step
(即 no-rating step
)不应该包含在 RNN
中,这可以节省计算。尽管如此,wallclock
的引入为模型提供了考虑 no-rating step
所需的信息,并且额外捕获了诸如 rating scale
变化、电影年龄之类的效果。
rating scale
变化指的是,比如某个时刻之前的评分范围是1 ~ 5
分,之后的评分范围是1 ~ 10
分。
为了区分不同的用户,我们添加了用户
评分发射 rating emission
(即,评分函数):尽管用户状态和电影状态可以随时间变化,但是我们推测仍然存在一些静态分量 stationary component
来编码固定属性,例如用户画像、用户的长期偏好、电影的题材。为了实现这一点,我们分别用固定的 time-varying
的 dynamic state
和 stationary state
的函数,即:
简而言之,标准的分解模型仅考虑了静态效应 stationary effect
,而我们使用 LSTM
从而考虑了更长期的动态更新 dynamic update
。这使得我们的模型成为矩阵分解matrix factorization
模型的严格超集 strict superset
。
这里通过
和 将 dynamic user state
和dynamic movie state
映射到公共的空间。另外,上式等价于经
dynamic state
和stationary state
拼接之后再内积,即:
评分预测rating prediction
:与传统的推荐系统不同,在预测时我们使用外推状态 extrapolated state
(即通过LSTM
生成的 state
)而不是估计状态 estimated state
来进行评分预测。也就是说,我们将最新的 observation
作为输入,更新状态,并根据更新后的状态进行预测。
通过这种方式,我们自然会考虑到之前评分带来的因果关系。例如,我们能够解决享乐适应 hedonic adaptation
,它指的是在电影推荐的背景下,用户观看了一部令人满意的电影之后,用户对电影的满意度的 level
会降低。对于令人失望的电影也是类似的。
训练:模型的优化目标函数是找到合适的 parameter
从而产生最接近实际评分的预测,即:
其中:parameter
,(user, movie, timestamp)
元组的集合,
虽然我们模型中的目标函数和 building block
都是相当标准的,但是朴素的反向传播无法轻易地解决这个问题。关键的挑战在于每个单独的评分都同时取决于 user-state RNN
和 movie-state RNN
。对于每个单独的评分,通过 2
个序列的反向传播在计算上是很难进行的。我们可以通过仅考虑 user-state RNN
的反向传播来稍微缓解这个问题,但是每个评分仍然取决于 movie state
。反过来,我们也可以仅考虑 movie-state RNN
,但是每个评分仍然取决于 user state
。
相反,我们提出了一种解决该问题的交替子空间下降策略alternating subspace descent strategy
。也就是说,我们仍然考虑 user-state RNN
的反向传播,但现在我们假设电影状态是固定的,因此不需要将梯度传播到这些电影序列中。然后我们交替更新用户序列和更新电影序列。这样,我们可以为每个用户(电影)执行一次标准的前向传播和反向传播。这种策略被称作子空间下降subspace descent
。
数据集:
IMDB
数据集:包含 1998
年 7
月到 2013
年 9
月期间收集的 140
万个评分。Netflix
数据集:包含 1999
年 11
月到 2005
年 12
月期间收集的 1
亿个评分。每个数据点是一个 (user id, item id, time stamp, rating)
元组,时间戳的粒度为 1 day
。为了更好地理解我们模型的不同方面,我们在具有不同训练和测试周期的几个不同时间窗口上测试我们的模型。详细的数据统计如下表所示。
注意,我们根据时间来拆分数据从而模拟实际情况:我们需要预测未来的评分(而不是对以前的评分插值interpolate
)。测试期间的评分被平均拆分为验证集和测试集。
配置:
我们发现即使使用非常少的参数,我们的模型也能够达到良好的准确性。
40
个隐单元(即 input embedding
维度 40
维(即 dynamic state
维度 20
维(即 LSTM
。Netflix
和 IMDB
数据集使用 20
维和 160
维的 stationary latent factor
。我们的模型在 MXNet
上实现。
我们使用 ADAM
来优化神经网络参数、使用 SGD
来更新 stationary latent factor
。
我们通过交叉验证调优超参数。
我们发现:如果我们首先仅训练 stationary state
,然后联合训练完整的模型,则通常可以获得更好的结果。在接下来的实验中,stationary latent state
分别由一个小的预训练的 PMF
初始化(对于 Netflix
数据集)、以及一个 U-AutoRec
模型来初始化(对于 IMDB
数据集)。
wallclock
baseline
方法:
PMF
:尽管简单,然而 PMF
在评分预测方面取得了鲁棒的、强大的结果。由于我们的模型采用与 PMF
相同的因子分解来建模静态效应,因此和 PMF
比较的结果直接展示了我们的方法建模 temporal dynamic
的好处。我们使用 LIBPMF
,并使用网格搜索 grid search
来搜索正则化系数 factor size
TimeSVD++
:TimeSVD++
是捕获temporal dynamic
的最成功的模型之一,并在 Netflix
竞赛中展示了强大的结果。我们使用网格搜索 grid search
来搜索正则化系数 factor size
AutoRec
:AutoRec
学习一个自编码器从而将每个电影(或每个用户)编码到低维空间,然后解码从而进行预测。就评分预测而言,它是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 state-of-the-art
结果。我们使用原始论文中的超参数((latent state
维度 我们的评估指标是标准的 root-mean-square error: RMSE
。不同数据集的结果如下表所示。这里,我们对 Netflix full
和 IMDB
使用 2
个月粒度的 time step
,对 6-month Netflix
数据集使用 1day/7 days
(对应于 user/movie
)粒度的 time step
。我们将在后续讨论 time step
粒度的选择。我们将模型运行 10
个 epoch
,在每个 epoch
结束之后计算验证集的 RMSE
。我们报告在验证集上效果最好的模型在测试集上的测试 RMSE
。
模型准确性accuracy
和大小 size
:
在所有方法中,我们的模型在所有数据集上均达到了最佳的准确性。和 PMF
相比,RRN
在 IMDB
上提供了 1.7%
的改进,在 6-month Netflix
上提供了 1.6%
的改进。
注意,下表展示的 RMSE
高于 Netflix
竞赛的 RMSE
,因为我们测试的纯粹是未来的评分。
此外,我们的模型非常简洁,因为我们存储转移函数 transition function
而不是实际状态从而建模 temporal dynamic
。虽然 RRN
优于所有 baseline
,但是 RRN
比 PMF
和 TimeSVD++
小 2.7
倍、比 I-AutoRec
小 15.8
倍。具体而言,具有 40
维 embedding
和 20
维 stationary state
的 RRN
足以超越 160
维的 PMF
、160
维的 TimeSVD++
、500
维的 AutoRec
。
下图展示了6-month Netflix
数据集上的模型大小和 RMSE
。
对于 IMDB
,RRN
的大小与 PMF, TImeSVD++, U-AutoRec
相当,但是比 I-AutoRec
小得多。这是因为 RRN
使用与分解模型相同维度的 stationary state
,并且包含一个相对较小的模型来捕获 temporal dynamic
。我们看到 RRN
在灵活性和准确性方面的明显优势,而不会牺牲模型大小。
鲁棒性 robustness
:RNN
在不同数据集上显示出一致的改进,而其它方法在不同数据集上的排名在变化。
PMF
在 IMDB
数据集上的表现要比 Time-SVD++
差得多,这再次强调了对 temporal dynamic
建模的必要性。
但是
PMF
在Netflix full
和Netflix 6 months
上的表现要比Time-SVD++
更好,是否说明建模temporal dynamic
是无用的?
时间动态:
电影中的外生动态 exogenous dynamic
:外生动态指的是电影的评分如何随着外部效应exogenous effect
(如电影获奖或得到提名)而变化。我们的目标是了解我们的模型如何对外生动态作出反应。
具体而言,我们在 1-year
数据集上运行 RNN
,time step
粒度为一个月,并且查看平均预测评分如何沿着时间序列而演变。平均预测评分是根据 1000
名随机抽样的用户计算而来。这个平均预测评分代表了电影在当时的平均预测评分,并避免了当时谁选择给该电影评分的 bias
。
这里评估的是全体用户中随机选择的,而不是从对某个电影有评分的用户中选择的。后一种方式存在选择偏差
select bias
,使得仅评估未来review
过该电影的用户。
下图展示了获奖电影的平均预测评分。可以看到,当一部电影获奖或得到提名时,预测评分会显著上升,这与数据趋势相符。这证实了我们的预期,即 RNN
应该自动适应外生变化 exogenous change
并调整预测。
电影中的内生动态endogenous dynamic
:除了外生事件之外,电影还可能由于内生原因而随着时间的推移而发生变化。为了了解 RRN
如何对内生原因的影响进行建模,我们以 2
个月粒度的 time step
对完整的 6-year
数据集进行了测试。实验与前一个实验相同的方式进行,但是考虑到大多数用户仅在系统上活跃一段时间这个事实,这里对每个 time step
我们随机采样了 5000
个当时活跃的用户(因此这里采用的是 time step
粒度随机选择的用户)。如果用户在 time step
内对任何电影进行了评分,那么我们认为该用户是活跃的。我们观察评分变化较大的电影,并观察 RRN
如何建模它的 temporal dynamic
。
首先,我们观察到年龄效应 age effect
。也就是说,一部电影的评分往往在上映后的第一年略有下降,然后随着年龄的增长而上升。在下图中,我们看到我们的模型显著地捕获到这种年龄效应并有效地适应。
下图为精心挑选的某部电影的平均预测评分。论文并未讲述这种效应产生的原因,只是说明有这种现象。
此外,我们还注意到 RRN
如何对具有不同反响的电影进行不同的建模。下图展示了奥斯卡最佳影片提名(蓝色曲线)、以及金酸莓最差影片提名(红色曲线)的预测评分。我们看到每个分组中的电影都显示出符合直觉的一致模式:金酸莓提名电影最初经历了平均评分下降,然后上升;而奥斯卡提名电影在开始时平均评分上升,然后保持相对稳定。注意,这些模式不是简单地通过一个 bias
项来捕获的 shift
。
用户偏好User Interface
改变:正如 《Collaborative filtering with temporal dynamics》
中所指出的,2004
年初评分的 scale
发生了改变。显然,没有考虑到这一点的系统将具有较差的估计准确性。我们在完整的 Netflix
数据集上测试我们的模型,time step
粒度为 2
个月,并查看每个 time step
上随机选择的用户所生成的平均评分。注意,由于我们计算随机用户随时间的平均预测,因此我们观察模型的 dynamic embedding
如何随时间变化。
下图显示了按电影发行年份分组的平均预测评分。我们看到所有的曲线在 2004
年初都有一个与 scale change
相匹配的显著上升。这与 PMF
形成对比,PMF
的 embedding
是静态的,因此随着时间的推移平均预测是恒定的。
冷启动:为了了解我们模型的优势和劣势,我们在训练集中评分很少的用户和电影上与静态 PMF
模型进行了比较。
如下图所示,对于训练集中评分很少的用户,RRN
比 PMF
有所改进。对于训练集中评分非常少的用户,RRN
(相比较 PMF
)的相对改进最大。
整体而言,训练集中评分数量越多,则相对改进越小。
如下图所示,我们发现 RRN
仍然一致性地为评分很少的电影提供改进,但是改进幅度与观察次数之间的关系更加 noisy
。这可能是由于这些电影在测试集中的评分相对较少。
这个理由缺乏数据的支撑,因为前面关于评分数量少的用户的结论中,这些用户也可能在测试集中的评分很少。
无需重新训练re-training
从而融合新数据:估计转移函数transition function
而不是估计状态本身的一个优势是:即使没有重新训练re-training
,我们也能够融合新观察到的评分信息从而更新状态(只需要将新的评分输入到网络中)。
这里,我们在 6-month Netflix
数据集上评估该策略。具体而言,我们使用从第一个测试 time step
观察到的评分来外推状态extrapolate state
,并使用外推到的状态来预测第二个 time step
的评分。我们测试了具有不同的评分波动水平的电影。波动fluctuation
被定义为:评分最高的 time step
的平均评分,与评分最低的 time step
的平均评分之间的差异。
下图总结了该策略的 RMSE
改进。我们观察到:虽然我们的预训练模型没有捕获到小的波动,但是它成功地捕获了大的波动,从而显著提高了预测准确性。也就是说,使用 RRN
不仅缓解了频繁昂贵的重新训练的需要,而且还开辟了提供实时推荐的新途径。
通常小的波动不太重要,此时这些电影的评分比较稳定,甚至直接将它们的评分预估为一个恒定值就足够可以。
time step
粒度granularity
和敏感性 sensitivity
:较小的 time step
允许模型频繁地更新并捕获短期影响。然而,这也会导致更长的 LSTM
序列,从而进一步导致更高的训练成本。
下表总结了 6-month
数据集上不同粒度(user
和 movie
采用不同的粒度)的训练时间和测试 RMSE
。这里我们看到了 RMSE
和训练时间之间的 trade-off
。可以通过更长的训练时间为代价来获得更好的准确性。注意,性能对粒度不是特别敏感,即使采用最差 RMSE
的粒度,它也优于所有的 baseline
模型。这可能是因为 RRN
是完全通用的,因为它没有假设数据的特定形式或分布。
大多数推荐系统根据用户的一般偏好 general preference
来推荐 item
,但是没有关注用户最近交互的 item
。例如,一些用户总是更喜欢苹果的产品(而不是三星的产品),这反应了用户的一般偏好。一般偏好代表用户的长期long term
的、静态static
的行为。
另一种类型的用户行为是序列模式 sequential pattern
,其中 next item
或者 next action
更可能取决于用户最近互动的 item
或 action
。序列模式代表了用户的短期short term
的、动态dynamic
的行为。序列模式源自在相近时间内互动的 item
之间的某种关系 relationship
。例如,用户可能会在购买 iPhone
之后不久购买手机配件,但是通常而言用户是不会突然购买手机配件的(没有人会对手机配件产生长期兴趣)。在这种情况下,仅考虑一般偏好的推荐系统将错过在销售 iPhone
之后向用户推荐手机配件的机会,因为购买手机配件不是长期的用户行为。
top-N
序列推荐 Sequential Recommendation
:令用户集合 item
集合 item
序列,记做 item
在用户行为序列 order
。注意,absolute timestamp
。
给定所有用户的行为序列 top-N
序列推荐的目标是:通过考虑一般偏好和序列模式,向每个用户推荐一个 item list
,从而最大化用户的未来需求 future need
。
与传统的 top-N
推荐不同,top-N
序列推荐将用户行为建模为 item
的序列sequence
,而不是 item
的集合 set
(序列是有序的,集合是无序的)。
先前工作的局限性:基于马尔科夫链的模型是一种早期的 top-N
序列推荐方法,其中 action
进行推荐。
maximum likelihood estimation
来学习 item-to-item
的转移矩阵 transition matrix
。Factorized personalized Markov chain: FPMC
及其变体通过将转移矩阵分解为两个潜在latent
的、低秩low-rank
的子矩阵来改进该方法。Factorized Sequential Prediction with Item Similarity Models: Fossil
通过对先前的 item
的 latent representation
进行加权的 sum
聚合,从而将该方法推广到高阶马尔科夫链。但是,现有方法受到两个主要限制:
无法建模 union-level
的序列模式。如下图 (a)
所示,马尔科夫链仅建模 point-level
序列模式,其中每个先前的 action
(蓝色)独自地individually
(而不是协同地collectively
)影响 target action
(黄色)。
FPMC
和 Fossil
就属于 point-level
序列模式。尽管 Fossil
考虑了一个高阶马尔科夫链,但是它的总体影响 overall influence
是:从一阶马尔科夫转移矩阵分解的、先前的 item latent representation
的加权和。这种 point-level
影响不足以建模下图 (b)
中的 union-level
影响,其中若干个先前的 action
以给定的顺序共同影响 target action
。例如,同时购买牛奶和黄油之后再购买面粉的概率,要比单独购买牛奶(或者单独购买黄油)之后再购买面粉的概率更高。再例如,同时购买内存和硬盘之后再购买操作系统的概率,要比单独购买其中一个配件之后再购买操作系统的概率更高。
假设同时购买牛奶和黄油之后再购买面粉的概率为
,单独购买牛奶之后再购买面粉的概率为 ,单独购买黄油之后再购买面粉的概率为 。假设加权的权重为 且满足 以及 。假设采用 point-level
的加权和的形式,则有:一种缓解方案是调整加权的权重范围,如选择
。
不允许 skip
行为behavior
。现有模型不考虑 skip
行为的序列模式,如下图 (c)
所示,其中过去的行为可能会 skip
几个 step
之后仍然产生影响。例如,游客在机场、酒店、餐厅、酒吧以及景点依次进行 check-ins
。虽然机场check-ins
和酒店 check-ins
并不是景点 check-ins
的直接前驱,但是它们也与景点 check-ins
密切相关。另一方面,餐厅check-ins
和酒吧 check-ins
对景点 check-ins
的影响很小(因为到访景点之前不一定需要到访餐厅或到访酒吧,但是几乎一定意味着到访机场和酒店)。skip
行为,因为它假设前面的step
对紧接的 next step
有影响。
为了提供关于 union-level
影响以及 skip
行为的证据,论文《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》
从两个现实生活数据集 MovieLens
和 Gowalla
中挖掘了以下形式的序列关联规则sequential association rule
:
对于上述形式的规则 support count
confidence
item
对于
通过将右侧调整为 skip 1 step
或者 skip 2 step
的影响。
下图总结了找到的有效规则数量(过滤掉无效的规则)与马尔科夫阶次 skip
步数的关系。过滤条件为:支持度 >= 5
、置信度 >= 50%
(作者还尝试了最小置信度为 10%, 20%, 30%
,但是这些趋势是相似的)。可以看到:
大多数规则的阶次为
可以看到
阶的规则数量最少,主要是因为大量的 阶的规则被置信度所过滤。 阶的规则就是 point-level
规则,阶的规则就是 union-level
规则。
该图还表明,相当多的规则是 skip
一步或两步的。
这些发现支持 union-level
以及 skip
行为的影响。
注意,这里并不意味着
阶的规则不重要。下图的一个迷惑之处在于:它仅保留置信度 >= 50%
的规则。通常而言,阶的规则噪音更大(即置信度更低),因此绝大多数 阶的规则被置信度阈值所过滤掉。但是,即使 阶的规则包含更少的有效信息,考虑到庞大的数量(过滤前的), 阶的规则也是相当重要的。 因此下图仅能说明
union-level
和skip
行为比较重要,但是并不能说明point-level
行为不重要,更不能说明union-level
和skip
行为比point-level
行为更重要。事实上,在现实世界的数据集中,point-level
行为才是占据统治地位。从论文后面的实验部分(
Caser
组件分析)也能验证这一点:point-level
行为比union-level
行为更重要。
为了解决现有工作的上述限制,论文《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》
提出了一个 ConvolutionAl Sequence Embedding Recommendation Model: Caser
模型 作为 top-N
序列推荐的解决方案。Caser
利用卷积神经网络,其创新之处在于:将前面 item
表示为一个embedding
矩阵 embedding
的维度,并且矩阵的行保留了 item
之间的次序order
。论文将这个 embedding
矩阵视为潜在空间中由 item
构成的 image
,并使用各种卷积 filter
来搜索序列模式从而作为该 image
的局部特征。然而,与图像识别不同的是,这个 image
并不是通过input
直接给出的,而是必须与所有 filter
同时学习。
论文主要贡献:
Caser
使用水平卷积filter
和垂直卷积filter
来捕获 point-level
、union-level
、以及skip
行为的序列模式。Caser
同时建模一般偏好以及序列模式,并在单个统一框架中概括了几种现有的 state-of-the-art
方法。Caser
优于 state-of-the-art
的 top-N
序列推荐方法。相关工作:
传统的推荐方法,如协同过滤、矩阵分解、以及 top-N
推荐,都不适合捕获序列模式,因为它们没有建模 action
的顺序。
序列模式挖掘的早期工作基于统计共现来找到显式的序列关联规则 sequential association rule
。这种方法依赖于模式的显式表示explicit representation
,因此可能会错过未观察到的状态unobserved state
下的模式。此外,这种方法还存在:过大的搜索空间、阈值设置的敏感性(置信度阈值)、大量的规则(大多数规则是冗余的)等等问题。
observed state
下的模式指的是训练数据中已经观察到的序列模式,unobserved state
下的模式指的是所有可能的序列模式。
受限玻尔兹曼机Restricted Bolzmann Machine: RBM
是首个成功应用于推荐问题的 2
层神经网络。自编码器autoencoder
框架及其变体降噪自编码器denoising autoencoder
也产生了良好的推荐性能。卷积神经网络已用于从用户的评论中提取用户的偏好。这些工作都不是用于序列推荐的。
循环神经网络 RNN
已被用于 session-based
推荐。虽然 RNN
在序列建模方面已展示出卓越的能力,但是其顺序地连接的网络结构在序列推荐setting
下可能无法正常工作。因为在序列推荐的问题中,并非所有相邻的 action
都有依赖关系,例如,用户在购买 item
item1
RNN-based
方法表现更好。
这也意味着,如果数据集中包含的序列模式较少,那么
RNN-based
方法的表现会很差。所以应用RNN-based
方法之前首先需要评估数据集中序列模式的占比。
然而我们提出的方法没有将序列模式建模为邻接adjacent
的 action
,我们的方法采用了来自 CNN
的卷积 filter
,并将序列模式建模为先前item
的 embedding
的局部特征 local feature
。这种方法在单个统一框架中提供了灵活性,从而同时建模 point-level
序列模式、 union-level
建模序列模式、以及 skip
行为。事实上,我们将展示 Caser
概括了几种 state-of-the-art
方法。
一个相关的、但是不同的问题是时间推荐 temporal recommendation
,例如应该在早晨而不是在晚上推荐咖啡。而我们的 top-N
序列推荐会在用户购买 iPhone
后不久推荐手机配件,这与时间无关。显然,这两个问题是不同的,需要不同的解决方案。
我们提出的 ConvolutionAl Sequence Embedding Recommendation: Caser
模型结合了卷积神经网络 Convolutional Neural Network: CNN
来学习序列特征、以及 Latent Factor Model: LFM
来学习 user specific
特征。Caser
网络设计的目标是多方面的:同时捕获一般偏好以及序列模式、同时在 union-level
和 point-level
进行捕获、捕获 skip
行为、所有一切都在 unobserved space
中进行。
如下图所示,Caser
由三个组件构成:Embedding Look-up
、Convolutional Layers
、Fully-connected Layers
。为了训练 CNN
,对于每个用户 action
序列 item
作为输入,并将它们的 next T items
作为 target
(如下图左侧所示)。这是通过在用户的 action
序列上滑动一个大小为 (u, previous L items, next T items)
来表示。
Caser
通过将前面 item
的 embedding
馈入神经网络中来捕获潜在空间中的序列特征。item
embedding
latent factor
的概念,这里 embedding
维度。embedding look-up
操作检索前面 item
对应的 item embedding
,并将它们拼接在一起,从而为用户 time step
embedding matrix
item
中的第 item
的 embedding
。
除了 item embedding
之外,我们还为用户 embedding
向量 user feature
。item embedding
和 user embedding
分别由上图中 Embedding Look-up
方框中的蓝色圆圈和紫色圆圈来表示。
参考在文本分类中使用 CNN
的思想,我们的方法将 embedding
矩阵 item
组成的 image
,并将序列模式视为该 image
的局部特征。这种方法可以使用卷积 filter
来搜索序列模式。
下图展示了两个 horizontal filter
(不同颜色的方块代表不同的参数值,颜色越深则数值越大),它们捕获两个 union-level
的序列模式。这些 filter
(表示为 embedding
维度(称作 full width
)。它们通过在 row
上滑动从而筛选序列模式的信号。例如,第一个 filter
通过在潜在维度中具有更大的值(其中酒店和机场具有更大的值)来选择序列模式 (Airport, Hotel) -> Great Wall
。
Latent Space
给出的是embedding
矩阵,颜色越深则数值越大。Horizontal FIlters
给出的是filter
矩阵,颜色越深则数值越大。第一个filter
主要捕获前面3
个维度(filter
末尾2
个维度的取值几乎为零),而Airport
和Hotel
的embedding
在前面3
个维度取值较大、末尾2
个维度取值几乎为零。
类似地,vertical filter
是一个
与图像识别不同,这里的 image
item
embedding
向量 filter
一起同时学习。
水平卷积层Horizontal Convolutional Layer
:该层有 horizontal filter
filter
的高度。例如,如果 filter
,然后可以选择
horizontal dimension
(每个水平的行表示一个 item
的 embedding
)交互。第
其中:inner product operator
,item
到第 item
的 embedding
。
卷积值是
然后我们对 max pooling
操作,从而从该特定 filter
产生的所有卷积值中提取最大值。这个最大值捕获了 filter
抽取的最重要的特征。因此,对于卷积层的 filter
,它们最终总的输出为
horizontal filter
通过 embedding
item
交互。模型同时学习 embedding
和 filter
从而最小化目标函数,这个目标函数编码了 target item
的预测误差prediction error
。
通过滑动不同高度的 filter
,模型将会接收到重要的信号,无论这些信号处在什么位置。因此,可以训练 horizontal filter
从而捕获具有多种 union size
的 union-level
序列模式。
这
个 filter
可以采用不同的高度,因此这些filter
的是很重要的超参数。
垂直卷积层Vertical Convolutional Layer
:我们用 tilde
符号 filter
filter
其中:inner product operator
,
由于内积算子的性质,可以很容易地证明:
其中 item
的 embedding
。因此,通过 vertical filter
我们可以学习聚合前面 item
的 embedding
,类似于 Fossil
的加权 sum
来聚合前面 item
的 latent representation
。不同之处在于每个 filter
Fossil
类似,这些 vertical filter
通过对前面 item
的 latent representation
的加权和来捕获 point-level
序列模式。然而 Fossile
对每个用户使用a single weighted sum
,我们的方法使用 vertical filter
为所有用户生成
其中
注:
- 原始论文中,垂直卷积层没有使用激活函数,理论上也可以添加激活函数。
- 垂直卷积层并没有使用最大池化,而是直接将不同
filter
产生的卷积结果进行拼接。
虽然 vertical filter
和 horizontal filter
的用途都是聚合,但是二者稍有不同:
vertical filter
的尺寸固定为 latent
的,单次与多个连续的列进行交互是没有意义的。latent dimension
保留聚合结果。我们将两个卷积层的输出拼接起来,并将它们馈入一个全连接层,从而获得更 high-level
、更抽象的特征:
其中:bias
向量,
convolutional sequence embedding
,它对前面 item
的各种序列特征进行编码。
为了捕获用户的一般偏好,我们还 look-up
了 user embedding
output layer
,即:
其中:bias
向量。
输出层的值 time step
item
user embedding
user embedding
generalize
其它模型的能力。pre-train
我们模型的参数。正如 《Neural collaborative filtering》
所述,这种预训练对模型性能至关重要。为了训练模型,我们将输出层的值
其中:sigmoid
函数。
这里本质上是通过负采样技术将
softmax
输出转换变sigmoid
输出。
令 time step
的集合。数据集中所有序列的似然 likelihood
为:
其中
为进一步捕获 skip
行为,我们通过用 next item
next T target items
。采用负的对数似然之后,我们得到目标函数(即二元交叉熵损失):
参考已有的工作,对于每个 target item
3
)。
模型参数 grid search
调优得到。我们使用 Adam
优化算法,batch size = 100
。
为了控制模型复杂度并避免过拟合,我们使用了两种正则化方法:应用于所有参数的 drop ratio = 50%
的 Dropout
技术。
我们使用 MatConvNet
实现了 Caser
。整个训练时间与训练样本数量成正比。例如,在 4-cores i7 CPU
和 32 GB RAM
的机器上,MovieLens
数据大约需要 1
小时、Gowalla
数据需要 2
小时、Foursquare
数据需要 2
小时、TMall
数据需要 1
小时。这些时间与 Fossil
的运行时间相当,并且可以通过使用 GPU
进一步减少。
在训练好模型之后,为了在 time step
latent embedding
item
的 embedding
作为网络的输入。我们向用户 item
。向所有用户进行推荐的复杂度为
注意,target item
数量 item
数量。
读者注:Caser
模型的几个不足的地方:
水平卷积虽然 “宣称” 捕获了 union-level
序列模式,但是卷积操作本身是 non-sequential
的。更准确的说法是:水平卷积捕获了 union-level
的局部模式 local mode
。
如果需要捕获序列模式,那么可以用 RNN
代替水平卷积。
超参数 filter
的大小,它刻画了 local mode
究竟有多 local
。目前 Caser
模型中,fixed
。这使得模型不够灵活,因为不同的样本可能需要不同的
可以通过 self attention
机制自适应地选择相关的 item
,从而得到自适应的、soft
的
超参数 local mode
影响到未来的第几个 target item
。目前 Caser
模型中,fixed
。这使得模型不够灵活,因为不同的样本可能需要不同的
此外,Caser
模型考虑 local mode
会影响未来的多个 target item
。这会引入大量的噪声,因为很可能当前的 local mode
仅与其中的某个(而不是连续的多个) target item
相关。
可以通过 target attention
机制自适应地选择与 target item
最相关的 item
,从而过滤掉无关的 item
。然后对剩下的 item
应用 CNN
或 RNN
。
Caser vs MF
:通过丢弃所有卷积层,我们的模型变成一个普通的 LFM
,其中 user embedding
作为 user latent factor
,它们关联的权重作为 item latent factor
。MF
通常包含 bias
项,在我们的模型中为 MF
相同:
其中:
Caser vs FPMC
:FPMC
将分解的一阶马尔科夫链与 LFM
融合,并通过 Bayesian personalized ranking : BPR
进行优化。尽管 Caser
使用了不同的优化准则(即,交叉熵),但是它能够通过将前一个 item
的 embedding
复制到 hidden layer
bias
项来概括 FPMC
:
由于 FPMC
使用 BPR
作为准则,因此我们的模型与 FPMC
并不完全相同。然而,BPR
被限制为在每个 time step
仅有一个 target
样本和一个 negative
样本。我们的交叉熵损失没有这些限制。
Caser vs Fossil
:通过忽略水平卷积层并使用单个 vertical filter
(即 hidden layer
正如垂直卷积层中所讨论的那样,这个 vertical filter
将前面 item
的 embedding
进行加权和,就像在 Fossil
中一样(然而 Fossil
使用 Similarity Model
而不是 LFM
) ,并将其分解在与马尔科夫模型相同的潜在空间中。
另一个区别是 Fossil
对每个用户使用一个局部权重,而我们通过 vertical filter
使用多个全局权重。
数据集:仅当数据集包含序列模式时,序列推荐才有意义。为了识别这样的数据集,我们对几个公共数据集应用了序列关联规则挖掘 sequential association rule mining
,并计算了它们的序列强度sequential intensity: SI
:
分子是 1
到 5
)找到的,并对支持度(最小支持度为 5
)和置信度(最低置信度为 50%
)进行过滤。分母是用户总数。我们使用 SI
来估计数据集中序列信号sequential signal
的强度。
下表描述了四个数据集及其 SI
。
MovieLens
是广泛使用的电影评分数据集。Gowalla
和 Foursquare
包含通过 user-venue check-ins
得到的隐式反馈。Tmall
是从 IJCAI 2015
竞赛中获得的用户购买数据,旨在预测重复的购买者 buyer
。根据前人的工作,我们将所有数字评分转换为取值为 1
的隐式反馈。我们还删除了冷启动cold-start
的用户和 item
(反馈数量少于 item
) ,因为处理冷启动推荐通常在文献中被视为一个单独separate
的问题。对于 MovieLens, Gowalla, Foursquare, Tmall
,5, 16, 10, 10
。
前人的工作所使用的的 Amazon
数据集由于其 SI
太小(Office Products
的 SI
为 0.0026
,Clothing, Shoes, Jewelry
和 Video Games
的SI
为 0.0019
)而未被使用。换句话讲,该数据集的序列信号远远低于前面的四个数据集。
我们将每个用户序列中前 70%
的 action
作为训练集,使用接下来的 10%
的 action
作为验证集来调优所有模型的最佳超参数,使用最后的 20%
的 action
作为测试集来评估模型性能。
评估指标:
Precision@N
和 Recall@N
:给定一个用户的、长度为 action
记做 action
序列中最后 20%
的 action
)。则 Precision@N
、Recall@N
定义为:
我们报告所有用户的平均 Precision@N
和平均 Recall@N
,并且选择
Mean Average Precision: MAP
:给定用户的、全量 item
的推荐列表,记做
其中:如果 item
位于
也有文献移除了
这个系数。
MAP
是所有用户的 AP
均值。
baseline
方法:
POP
:根据 item
的流行度popularity
进行推荐,而流行度取决于 item
的交互次数。BPR
:结合了矩阵分解模型的 Bayesian personalized ranking: BPR
是对隐式反馈数据进行非序列推荐的 state-of-the-art
方法。FMC
和 FPMC
:FMC
将一阶马尔科夫转移矩阵分解为两个低维子矩阵,而 FPMC
是 FMC
和 LFM
的融合。它们都是 state-of-the-art
的序列推荐方法。FPMC
在每一步都允许推荐一个 basket
的若干个 item
。对于我们的序列推荐问题,每个 basket
都只有一个 item
。Fossil
:Fossil
对高阶马尔科夫链进行建模,并使用 Similarity Model
而不是 LFM
来建模一般用户偏好。GRU4Rec
:GRU4Rec
使用 RNN
来捕获序列依赖性并进行预测。配置:对每种方法,都在验证集上使用 grid search
调优最佳超参数。调优的超参数包括:
POP
):潜在因子维度 Fossil, Caser, GRU4Rec
:马尔科夫链阶次 Caser
:horizontal filter
的高度 target
数量 {identity, sigmoid, tanh, relu}
。对于每个高度 horizontal filter
的数量 vertical filter
的数量 我们报告每种方法在其最佳超参数 setting
下的结果。
实验结果:下表总结了所有方法的最佳结果。每一行中表现最好的结果以粗体突出显式。最后一列是 Caser
相对于最佳 baseline
的改进,定义为 (Caser-baseline)/baseline
。结论:
MovieLens
之外,Caser
在所有指标上相对于最佳 baseline
都取得了大幅提升。baseline
方法中,序列推荐器(如 FPMC
和 Fossil
)通常在所有数据集上都优于非序列推荐器(即 BPR
),这表明考虑序列信息sequential information
的重要性。FPMC
和 Fossil
在所有数据集上的表现都优于 FMC
,这表明个性化的有效性。MovieLens
上,GRU4Rec
的性能接近于 Caser
,但在其它三个数据集上的性能要差得多。MovieLens
比其它三个数据集具有更多的序列信号,因此 RNN-based
的 GRU4Rec
可以在 MovieLens
上表现良好,但是在其它三个数据集上效果不佳。此外,GRU4Rec
的推荐是 session-based
的,而不是个性化的,这在一定程度上扩大了泛化误差。接下来我们研究超参数 setting
。我们聚焦于 MAP
超参数,因为它是一个整体的性能指标,并且与其它指标一致。
维度
MovieLens
数据集上,更大的 Caser
通过使用较小的 baseline
方法。马尔科夫阶次 target
数量 Caser-1, Caser-2, Caser-3
表示target
数量 Caser
,从而研究 skip
行为的影响。
MovieLens
数据集上,Caser
较好地利用了较大 Caser-3
表现最好,这表明 skip
行为的好处。Caser-2
在这三个稀疏数据集上的表现略优于 Caser-1
和 Caser-3
。Caser
组件分析:现在我们评估 Caser
每个组件,水平卷积层(即 setting
。
MovieLens
和 Gowalla
的结果如下表所示,其它两个数据集的结果是类似的因此没有列出。对于 Caser-x
表示启用了组件 x
的 Caser
,其中 h
表示水平卷积层,v
表示垂直卷积层,p
表示个性化。任何缺失的组件都通过将其对应的位置填充零向量来解决。例如,vh
表示采用垂直卷积层和水平卷积层,同时将
结论:
Caser-p
表现最差,而 Caser-h
、Caser-v
、Caser-vh
显著提高了性能,这表明将 top-N
序列推荐视为传统的 top-N
推荐将丢失有用的信息(如序列信息),并且同时在 union-level
和 point-level
建模序列模式有助于改进预测。Caser
的所有组件(即 Caser-pvh
)可以获得最佳性能。
Caser-pvh
与Caser-pv
之间的gap
刻画了水平卷积层的收益,Caser-pvh
与Caser-ph
之间的gap
刻画了垂直卷积层的收益。可以看到,垂直卷积层要远比水平卷积层更重要,这也间接说明了point-level
序列模式要比union-level
序列模式更重要。
网络可视化:我们仔细研究了一些训练好的网络及其预测。
vertical filter
:下图显示了在 MovieLens
数据集上训练 Caser
之后,四个 vertical filter
的值(指的是卷积核的权重)。在微观上四个 filter
被训练为多元化 diverse
的,但是在宏观上它们遵循从过去位置past position
到最近位置recent position
的上升趋势。由于每个 vertical filter
都是作为对前面 action
的 embedding
进行加权的一种方式,这一趋势表明 Caser
更加重视最近的 action
,这与传统的 top-N
推荐有很大不同(传统的 top-N
推荐认为每个 action
的重要性是相同的)。
horizontal filter
:为了查看 horizontal filter
的有效性,下图 (a)
显示了 Caser
针对一名用户推荐的、排名 top N = 3
的电影,即: (Mad Max
)、Star War
)、Star Trek
)。该用户的前面 13th Warrior
)、American Beauty
)、Star Trek II
)、Star Trek III
)、Star Trek IV
)。ground truth
(即用户序列中的 next movie
)。注意,
下图 (b)
显示了将该用户前面 embedding
屏蔽为全零之后(即 item mask
),模型预测
屏蔽 2
(从排名第 3
)。事实上
既然如此,为什么不屏蔽
和 呢?论文并未提出讨论。读者认为,一种比较好的方法是通过 target attention
机制对历史action
序列过滤掉与target item
无关的action
。
屏蔽
当同时屏蔽
这项研究清晰地表明:我们的模型正确地捕获到了 union-level
序列特征。
传统的推荐系统算法中,通常假设用户历史日志(如点击、购买、或浏览)是可用的。但是这种假设在许多现实世界的推荐场景中并不成立:许多电商网站不需要用户认证也可以下单购买(无法获取历史行为信息),在视频流服务中用户也很少登录,许多网站的回头客占比很少(因此没有历史行为信息)。用户跟踪 user tracking
可以部分解决跨 session
的用户识别问题(例如,通过指纹技术、cookies
等等),但是这通常不可靠并且通常会引发隐私问题。因此,在这种情况下,典型的解决方案是采用 item-to-item
推荐。这里,论文 《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
研究如何利用 session
数据来改进推荐。
鉴于没有用户画像(指的是用户历史行为信息),从 session
点击中获取尽可能多的信息至关重要。除了 session
的点击流 click-stream
数据(被点击的 item-ID
序列),还可以考虑被点击 item
的特征。item
通常带有丰富的 feature representation
,如详细的文本描述或图像(比如缩略图)。可以预期,例如,购买特定类型item
的用户会点击具有相似文本描述或相似视觉特征的 item
。图像、文本、甚至更丰富的特征(例如动画 gif
)是最终被用户所看到的,并且将决定一个 item
对用户的吸引力。在历史 user-specific
数据缺失或者不重要的 session modeling
的 setting
中,特征变得尤为重要。应该利用这些特征来帮助 session modeling
过程。 item
特征也是处理 item
冷启动问题的一种非常好的方法。
这项工作同时利用深度学习技术从视觉信息中抽取高质量特征、以及建模 session
(论文还通过 bag-of-words
从文本中抽取特征)。论文采用 parallel RNN: p-RNN
架构来联合建模 click
以及被点击 item
的特征(文本特征或图像特征)。具体而言,论文并未使用单个RNN
(其中所有数据源以拼接的方式作为 input
使用)来联合建模被点击的 item
及其特征,而是代替以并行架构parallel architecture
,因为数据的性质非常不同:图像特征往往比 item-ID
的 one-hot representation
或文本的 bag-of-words representation
要稠密得多。论文介绍了 3
种不同的 p-RNN
架构,它们将 click
数据与被点击 item
的特征相结合。不同的架构有不同的共享模型参数,以及不同的隐状态交互。
论文还指出,训练 p-RNN
并非易事。标准的同时训练 standard simultaneous training
会浪费网络的容量,因为同一个网络的不同部分可能会从数据中学习相同的关系。因此,论文设计了3
种替代的优化程序来训练 p-RNN
。论文在实验中评估了所提出的 p-RNN
架构,并与 item-kNN
进行对比。
相关工作:
用于推荐系统的神经模型neural model
:大多数关于深度模型和推荐的工作都集中在经典的协同过滤 collaborative filtering: CF
上。
受限玻尔兹曼机Restricted Boltzmann Machines: RBMs
是最早用于经典 CF
和推荐系统的神经网络之一。最近,降噪自编码器denoising autoencoder
已被用于以类似的方式执行 CF
。深度学习也被用于跨域推荐,其中使用深度学习技术将 item
映射到联合潜在空间。
Recurrent Neural Models: RNNs
:在处理序列数据时,RNN
是首选的深度模型。Long Short-Term Memory: LSTM
网络是一种已被证明工作得特别好的 RNN
,它能够解决经常困扰标准 RNN
模型的梯度消失问题。LSTM
的略微简化的版本是我们在这项工作中使用的 Gated Recurrent Units: GRUs
。
session-based
推荐:当无法从过去的用户行为构建用户画像时,经典的 CF
方法(例如矩阵分解)在 session-based
的 setting
中失效。这个问题的一个自然解决方案是 item-to-item
推荐。在这个 setting
中,从可用的 session
数据中预先计算出一个 item-to-item
相似度矩阵,其中在 session
中经常被一起点击的 item
被认为是相似的。然后这些相似性被用于推荐。虽然简单,但是这种方法已被证明是有效的并被广泛采用。但是,该方法仅考虑用户的最后一次点击,实际上忽略了之前点击的信息。
session
中,两个item
“共现”的前提是 “兼容”。例如,用户可以在同一个session
(比如一个小时内)内点击两篇不同的新闻,但是用户通常难以在同一个session
内消费两个不同的马桶(例如该用户最近有装修房子的需求),即使这两个马桶非常相似。
马尔科夫决策过程 Markov Decision Processes: MDPs
是另一种方法,旨在以 session-based
方式来提供推荐,同时考虑到最后一次点击之外的信息。最简单的 MDP
可以归结为一阶马尔科夫链,其中 next recommendation
可以简单地通过 item
之间的转移概率 transition probability
来计算。在 session-based
推荐中应用马尔科夫链的主要问题是:当试图在所有 item
上包含所有可能的、潜在的用户行为序列时,状态空间很快变得难以管理。
《Session-based Recommendations with Recurrent Neural Networks》
是神经模型在session-based
推荐中的首次应用,它使用 RNN
来建模 session
数据。这项工作仅关注被点击的 item ID
,而这里我们的目标是建模被点击 item
的更丰富的 representation
。
feature-rich
的推荐:深度模型已被用于从音乐或图像等非结构化内容中抽取特征。在推荐系统中,这些特征通常与更传统的协同过滤模型一起使用。
《Collaborative deep learning for recommender systems》
引入了一种更通用的方法,其中使用深度网络从 item
中抽取通用内容特征,然后将这些特征融合到标准 CF
模型中从而提高性能。这种方法似乎在没有足够 user-item
交互信息的环境中特别有用。作为 baseline
,我们采用 《Session-based recommendations with recurrent neural networks》
中的最佳 RNN
的 setting
:单层 GRU layer
,没有前馈层,采用 TOP1 pairwise loss
函数,采用 session-parallel
的 mini-batch
。网络的输入是被点击的 item ID
。
在训练期间,将预测分数的分布与 session
中真实的 next event
对应的 target item id
(以 one-hot
的形式)进行比较,从而计算 TOP1
损失。为了降低计算成本,在训练期间仅计算 target item
的分数以及一小部分 negative item
。于给定的 session
,我们使用当前 mini-batch
中其它 session
中的 item
作为 negative item
。
target item
即真实被点击的那个item
,也是我们要预测的ground truth
。
一个 p-RNN
由多个 RNN
子网组成,每个 RNN
子网用于 item
的某个 representation/aspect
,如一个 RNN
用于 item ID
、另一个 RNN
用于 item image
、还有一个 RNN
用于 item text
。
模型有三个输入源:一个 one-hot ID vector
代表 item ID
输入源、一个预先计算的稠密的 image feature vector
代表 item image
输入源、一个稀疏的 unigram+ bigram text feature vector
代表 image text
输入源。关于特征提取,本文后面将详细介绍。
p-RNN
架构如下图所示,由于篇幅有限,我们仅展示具有 ID
和图像特征的架构。对于文本特征,可以与图像特征类似地进行。p-RNN
架构还可以同时处理 ID
、图像特征、文本特征。
架构分为两组:
baseline
架构:
ID only
:此架构仅使用 one-hot ID vector
作为输入,与 《Session-based recommendations with recurrent neural networks》
中使用的相同。它作为我们实验的 baseline
。
output
就是GRU
的最后一个hidden state
经过一个投影矩阵(即hidden to output
权重矩阵)之后的结果。
Feature only:
:此架构的输入是内容特征向量之一(图像或文本)。其它的工作方式与 ID only
网络类似。
Concatenated input
:组合不同 item representation
的最简单方法是将它们拼接起来。该架构的输入是 one-hot ID vector
和内容特征向量的拼接。
input level
的融合,不同数据源融合之前,需要分别乘以和 从而投影到相同的空间。
p-RNN
架构:
Parallel
:该架构为每个 representation
训练一个 GRU
子网,output
是从子网 hidden layer
的拼接中计算出来的(等价于独立计算每个子网的 output score
并加权output score
,然后通过激活函数 f()
)。
output level
的融合,每个子网的output
融合之前,需要分别乘以和 从而投影到相同的空间。
Parallel shared-W
:这种架构与 Parallel
架构的不同之处在于,每个子网具有共享的 hidden to output
的权重矩阵 。这种架构中不会为每个子网单独计算output
,相反,hidden state
的加权和乘以单个权重矩阵来产生 output
。采用一个共享的权重矩阵大大减少了参数的数量,从而减少了训练时间和过拟合。
hidden state level
的融合,每个子网的hidden state
融合之前,需要分别乘以和 从而投影到相同的空间。 它的模型容量相比
Parallel
更小,并且实验表明其效果相比Parallel
更差。
Parallel interaction
:在该架构中,item feature subnet
的隐状态在计算子网的分数之前以逐元素乘积的方式乘以 ID subnet
的隐状态 。混合session
的不同方面来计算 item
分数,这类似于 context-aware
偏好建模。
类似于
Parallel
架构,但是融合发生了两次:一次是output level
的融合(和Parallel
相同),另一次是对item feature subnet
隐状态的加权融合。论文中的图表可能有误(或者论文对该架构的描述有误),这里逐元素乘积的时刻应该是在
subnet output
和GRU layer
之间,而不应该是subnet output
和combined output
之间。
读者注:p-RNN
的核心就在于,信息源融合的时机(输入时?hidden state
时?输出时?)、融合的方式(拼接?加权和?逐元素乘积?)、融合几次(一次?两次?)。该论文并未评估所有的这些可能性,因此不太完善。并且实验表明仅在输出时进行信息源融合的效果是最佳的(独立处理每一路,并在预测之前融合)。
读者注:本文的主要贡献是两点:验证信息源如何融合、以及不同子网的训练方式(交替训练)。最佳的方式是 Parallel
架构加 Residual
或 Interleaving
训练方式。这种残差式的训练模式,可以作为一种多模型 ensemble
训练的范式:后续子模型在残差上训练,然后 ensemble
在一起。
训练 p-RNN
:训练p-RNN
架构并非易事。由于架构的不同组件从数据中学习相同的关系,整个架构的标准反向传播可能会产生次优结果。这可以通过预训练网络的某些组件并在后续训练剩余组件来避免。这种循环的训练可以进行多次,这得益于交替方法(如 ALS
) 在矩阵分解中的成功。我们为 p-RNN
制定了以下训练策略:
Simultaneous
:每个子网的每个参数都是同时训练的。它作为 baseline
。Alternating
:每个 epoch
以交替的方式训练子网。如,ID subnet
在第一个 epoch
进行训练,而其它子网是固定的。然后我们在下一个 epoch
固定 ID subnet
并训练 image subnet
,以此类推。当每个子网都被训练一个 epoch
之后,循环往复。Residual
:在先前训练的子网的 ensemble
的残差上,子网一个接一个地被训练。不会重新循环往复,但是与 Alternating
方法相比,每个子网的训练时间更长。例如,ID subnet
训练 10
个 epoch
,然后 image subnet
在 ID subnet
的残差上继续训练10
个 epoch
,等等。Interleaving
:每个 mini-batch
交替训练。例如,ID subnet
训练一个 mini-batch
,然后 image subnet
在 ID subnet
的残差上继续训练一个 mini-batch
,以此类推。更频繁的交替允许跨子网进行更平衡的训练,而没有Simultaneous
训练的缺点。读者认为后两种残差式的更新方式是存在一定问题的。
- 如果两个子网之间几乎是独立的(如
Parallel
架构),那么一个子网的更新不会影响另一个子网的能力,那么一个子网去学习另一个子网的残差是合理的。这使得两个子网之间能力。- 如果两个子网之间是耦合的(如
Parallel interaction
架构),那么一个子网的更新会影响另一个子网的能力,那么一个子网在学习另一个子网残差的过程中,也会影响这个残差本身。即,子网参数的更新会改变子网学习的目标(即,残差)。这使得模型很难学习(没有固定的目标)。最终实验部分的效果也验证了这一点:在
Residual
和Interleaving
学习策略上,Parallel iinteraction
架构的效果不如Parallel
架构的效果。
特征抽取:图像特征image feature
是从视频缩略图thumbnail
中抽取的,而文本特征text feature
是基于产品描述的。
编码图像:我们使用 Caffe
深度学习框架实现的 GoogleNet
从视频缩略图中抽取特征。该网络在 ImageNet ILSVRC 2014
数据集上被预训练。视频缩略图首先必须按比例缩小和裁剪,以便适应网络的输入。我们从最后一个均值池化层中抽取图像特征。特征向量被归一化为 l2
范数为 1
。我们最终得到的image feature representation
是一个长度为 1024
的实值向量。
下图通过显示与两个 query image
最相似的 3
个图像来说明图像特征的质量,其中相似度被定义为图像特征向量之间的余弦相似度。鉴于图像特征的质量良好,我们不会将 CNN
直接插入 RNN
,因为这会给训练带来不必要的复杂性,而且也不实用。因为:
item representation
上学习模型。item
数量较少的数据集,因为 1
万个 item
不足以充分利用 CNN
的潜力。retraining
需要更长的时间(因为模型更复杂、计算复杂度更高)。另一种可能的选择是在 RNN
训练期间微调 image feature representation
。这对我们的实验没有太大影响,因此我们没有使用微调fine tuning
。
编码文本:鉴于在线分类广告平台对描述文本长度的严格限制,广告主通常为其 item
提供相当简洁的文本。描述文本的主要目的是吸引潜在感兴趣的用户的注意。因此,描述文本通常仅包含 item
的主要特点,并使用语法错误的句子。此外,用多种语言编写描述文本从而吸引更广泛的受众也很常见。我们的数据集的大部分描述文本使用了 3
种主要语言,另外也有少数不太常见的语言。
鉴于我们数据中非结构化文本和多种语言的固有噪声,我们采用经典的 bag-of-words representation
来编码产品描述文本。
item
的标题和描述文本拼接起来。stopword
并从文本中抽取 unigram
和 bigram
,并丢弃所有仅出现一次的项。TF-IDF
对生成的 bag-of-words
进行加权。最终的 text feature representation
是一个长度为 1099425
的稀疏向量,平均有 5.44
个非零元素。
我们尝试了其它方法从非结构化文本中抽取特征,例如 distributed bag-of-word
、Language Modeling with RNN
。然而,我们发现带有 TF-IDF
的经典 bag-of-words
最适合我们的数据。我们将此归因于用户生成内容user generated content: UGC
的噪音。由于缺乏英文的文本、以及存在多种语言,所以我们无法使用预训练的 word representation
,如来自 word2vec
的 word embedding
。
我们尝试在输入特征和网络之间插入 embedding layer
,实验结果发现性能更差。因此我们使用经典的 bag-of-words/TF-IDF
特征作为 text feature representation
,并直接用于 RNN
的输入。
数据集:
VIDXL
数据集:该数据集是从 2
个月内从类似 YouTube
的视频网站收集的,其中包含至少具有预定时长的视频观看事件。在收集期间,item-to-item
的推荐展示在精选视频旁边,由一系列不同的算法生成。CLASS
数据集:该数据集由在线分类网站的商品查看事件组成。该网站在收集期间也展示了不同算法给出的推荐。在原始 event-stream
的预处理过程中,我们过滤掉了不切实际的长 session
,因为这些 session
可能是由于机器人 bot
流量造成的。我们删除了单个事件的 session
,因为它们对 session-based
推荐没有用。我们还删除了频次低于五次的 item
,因此低频的 item
不适合建模。
每个数据集最后一天的 session
作为 测试集,其它session
作为训练集。每个 session
要么分配给训练集、要么分配给测试集,我们不在 session
中间拆分数据。对于测试集 session
中的 item
,如果它们不在训练集中那么我们也会将它们过滤掉。
数据集的统计信息如下表所示。
评估方式:我们评估 next-event prediction task
,即,给定 session
事件,算法预测session
的 next event
。我们将测试集 session
中的事件一个接一个地馈入训练好的模型,然后检查 next event
的 item
的排名。当 session
结束后,网络的隐状态重置为零。
由于推荐系统一次只能推荐几个 item
,用户选择的实际 item
(即 next item
,也称作 target item
)应该包含在推荐列表的前面几个 item
中。因此,我们的主要评估指标是 recall@20
,即:在所有 test case
的推荐列表的 top-20
中,具有 target item
的 case
的比例。召回不考虑 target item
的实际排名,只需要它位于推荐列表的 top-N
。这很好地建模了某些实际场景,在这些场景中推荐位置和顺序无关紧要。召回率通常也与重要的在线 KPI
密切相关,如点击率 CTR
。
实验中使用的第二个指标是 Mean Reciprocal Rank: MRR@20
,它是target item
的排名倒数reciprocal rank
的均值。如果 target item
的 rank > 20
,那么排名倒数设为零。MRR
考虑 target item
的排名,这适用于推荐顺序很重要的场景,例如尾部排名的 item
仅在屏幕滚动之后才可见。
我们从视频的缩略图中抽取图像特征。我们对不同架构和训练策略进行了实验,从而了解图像数据如何有助于提高推荐准确性。
和《Session-based Recommendations with Recurrent Neural Networks》
类似,所有网络使用 adagrad
来优化 TOP1
损失。 ID only
网络和 feature only
网络的参数(如 dropout
、学习率、动量、batch size
等等)在留出 hold out
的验证集上进行了优化。然后在完整的训练集(包括验证集)上重新训练网络,并在测试集上测量最终结果。
由于 VIDXL
数据集太大,更复杂网络的子网使用对应的 ID only
网络或 feature only
网络的最佳超参数。子网的权重被设置为相等,因为我们没有得到显著不同的结果(除非任何一个子网的权重设为零,此时才会有显著不同的结果)。
为了加快评估速度,我们计算了 target item
与 50000
个最热门 item
的排名。
评估列表的长度会影响评估指标,列表越长则
recall
指标越高、precision
指标越低。但是对于相同的评估列表,不同算法之间的比较仍然是公平的。
下表总结了不同架构和训练策略的效果。在本实验中,对于 baseline
架构,隐单元数量设为 100
。对于 p-RNN
,每个子网的隐单元设为 100
。网络训练了 10
个 epoch
,因为之后的损失没有显著变化。我们将这些网络与 item-kNN
算法进行了比较。
由于额外的信息源和网络整体容量的增加,具有 100 + 100
个隐单元的 p-RNN
可以轻松超越具有 100
个单元 的 ID only
网络。因此,我们还评估了 200
个隐单元的 ID only
网络的准确性从而作为一个强大的 baseline
。
结论:
baseline
方法之间:
与 《Session-based Recommendations with Recurrent Neural Networks》
类似,RNN
(即,ID only
网络)的性能大大优于 item-kNN baseline
。RNN
在这项任务上的召回率非常高,因此更先进的架构很难显著改善这一结果。
仅在图像特征上训练的网络(即,Feature only
网络)明显比 ID only
网络更差,甚至比 item-kNN
更差,这表明 item
特征序列本身并不足以很好地建模 session
。
将 ID
和图像特征拼接起来作为网络的输入,因为在训练期间更强的输入占主导地位,因此该网络(即 Concatenated
网络)的性能与 ID only
网络的性能相差无几。
单个 GRU layer
很难同时处理两种类型的输入,导致性能与 ID only
网络的性能非常相似。使用朴素的方法添加 item
特征没有明显的好处,因此我们建议改用 p-RNN
架构。
p-RNN
架构之间:
若干个 p-RNN
架构的性能显著优于 ID only
网络这个强大的 baseline
。由于 baseline
的高召回率,这些新颖的架构主要提升了 MRR
,即:它们没有找到更多的 target item
,但是它们对 target item
进行了更合适的排名。
性能最好的架构是经典的Parallel
架构。通过简单的 Simultaneous
训练,它在 MRR
指标上显著优于 ID only
网络,但是在 recall
指标上稍差。
通过Simultaneous
训练,p-RNN
的不同组件从数据中学习相同的关系,因此没有利用网络的全部容量。因此,我们建议使用其它训练策略。
训练策略之间(对于 Parallel
架构):
Residual
训练,紧随其后的是 Interleaving
训练,但 Alternating
训练也紧随其后。Risidual
训练的 Parallel
架构在MRR
指标上比 ID only
网络显著提升,同时实现了类似的召回率。和 item-kNN
相比, Risidual
训练的 Parallel
架构的改进更大,召回率提升 12.21%
、MRR
提升 18.72%
。可以看到
Shared-W
的效果不如Parallel
的效果,这是可以预期的,因为Shared-W
的模型容量更低。在
Residual
和Interleaving
学习策略上,Parallel interaction
架构的效果不如Parallel
架构的效果,原因如前所述。
通过增加隐单元数量,RNN
的模型容量增加,因此这个参数对模型性能有很大的影响。然而,这个参数也遵循收益递减规模 。我们发现超过 1000
个隐单元的结果并没有显著改善,因此我们实验了具有 1000
个隐单元的 non-parallel
架构,以及具有 500 + 500
个隐单元的性能最好的 Parallel
架构,从而确认在增加网络容量和/或 epoch
数量的收益递减时,添加 item
特征也可以使得 session modeling
受益。下表给出了实验结果。
随着隐单元的增加,网络性能会提高,甚至 Feature only
网络的性能也优于 item-kNN baseline
,因为网络的容量足以利用图像特征中的信息。但是除此之外,结果之间的关系与前面的实验结果相似。
进一步增加隐单元的数量和/或 epoch
的数量并没有显著提高任何网络的性能,但是 Parallel
架构在 MRR
方面显著优于更大模型容量的 ID only
网络,并且具有相似的召回率。这意味着我们的架构以及我们的训练策略可以显著提高网络性能,即使随着网络容量的增加而收益递减。
换句话讲,添加额外的数据源( item
特征)可以提高推荐的准确性。然而,处理多个数据源需要特殊的架构(Parallel
架构)和训练策略( Residual
或 Interleaving
)。
我们在 CLASS
数据集上重复了上一个实验,即 baseline RNN
有 1000
个隐单元、 Parallel
架构每个子网有 500
个隐单元,其中特征是从产品描述文本而不是图像中抽取的。实验设置与前面相同,只是我们选择在评估期间对所有 item
排名,因为该数据集的 item set
规模明显更小(相比 VIDXL
数据集),因此可以在合理的时间内进行全面的评估。
结果如下表所示,可以看到结果与前面图像特征实验的结果一致。
MRR
指标上,Feature only
网络明显优于 item-kNN baseline
。这证实了可以有效地利用文本特征来产生更好的排名。ID only
的网络相比,Feature only
网络的效果较差。这表明单独的文本特征是不够的。ID
拼接作为输入的情况下,Concatenated
网络的性能类似于 ID only
网络,类似于前面的实验 。non Simultaneous
训练策略在训练 Parallel
架构时至关重要,Simultaneous
训练策略在推荐准确性方面显然不是最佳的。 Residual
训练策略被证明是该实验中的最佳训练策略,相比 ID only
网络,其召回率提高了 6%
、MRR
提高 了 6.5%
。baseline RNN
的隐单元数量或 epoch
数量并没有进一步改善结果。在下图中,通过我们的方法与 item-kNN
和具有 1000
个隐单元的 ID only
网络进行比较,从而说明了我们的解决方案(每个子网 500
个隐单元)的能力。
在推荐系统中,RNN
已被应用于 session-based
推荐,并取得了令人印象深刻的结果。与传统的 similarity-based
方法相比,RNN
的优势在于它们可以有效地建模整个 session
的用户交互(如点击、查看等等)。通过建模整个session
,RNN
实际上可以学到 session
的“主题theme
”,从而提供比传统方法更准确的推荐(效果提升在 20% ~ 30%
之间)。
推荐的主要目标之一是根据用户偏好对 item
进行排名。即,item list
尾部的 item
(用户不喜欢的 item
)的确切排名或评分并不那么重要,但是将用户喜欢的 item
正确地排名在 item list
头部(如 top 5/10/20
的位置)非常重要。为了通过机器学习实现这一点,通常必须利用 learning to rank
技术,具体而言是 ranking
目标和 ranking loss
函数。当前的 session-based RNN
方法使用 ranking loss
函数,具体而言是 pairwise ranking loss
函数。
与大多数深度学习方法一样,选择良好的 ranking loss
会对模型性能产生非常重要的影响。
layer
上传播梯度,损失函数的梯度会反向传播,因此损失函数的质量会影响优化的质量和模型的参数。large output space
(因为系统的 item set
较大)。这为 ranking loss
的设计带来了独特的挑战。我们将看到,解决这个大输出空间问题的方式对于模型性能非常关键。在论文《Recurrent Neural Networks with Top-k Gains for Session-based Recommendations》
中,作者分析用于session-based
推荐的 RNN
中使用的 ranking loss
函数。这种分析导致了一组新的 ranking loss
函数,与之前的常用损失函数相比,RNN
的性能提高了 35%
而没有显著的计算开销。论文本质上设计了一组新的损失函数,它结合了深度学习的 learning
、以及 learning to rank
的文献。来自工业界的若干个数据集的实验结果表明:论文方法的推荐准确性得到显著提升。结合这些改进,RNN
与传统 memory-based
协同过滤方法的差异提高到 53%
(以 MRR
和 Recall@20
指标衡量),这表明深度学习方法为推荐系统领域带来了潜力。
相关工作:
session-based
推荐中采用的主要方法之一是 item-to-item
推荐方法,该方法主要用于缺失用户画像(指的是用户历史行为信息)时的 session-based
推荐。在该 setting
中,item-to-item
相似度矩阵是从可用的 session
数据中预先计算的,并且在 session
中经常被一起点击的 item
被认为是相似的。然后在 session
期间使用这个相似度矩阵向用户推荐当前点击 item
最相似的 item
。
Long Short-Term Memory: LSTM
网络是一种 RNN
,已被证明可以解决困扰普通类型 RNN
的优化问题。LSTM
的一个稍微简化的版本是我们在这项工作中使用的 Gated Recurrent Unit: GRU
。RNN
已被成功应用于 session-based
推荐领域。
《Session-based Recommendations with Recurrent Neural Networks》
为 session-based
推荐任务提出了一个具有 pairwise ranking loss
的 RNN
。《Improved Recurrent Neural Networks for Session-based Recommendations》
提出了数据增强技术来提高用于 session-based
推荐的 RNN
的性能,但是这些技术具有增加训练时间的副作用,因为单个 session
被拆分为若干个 sub-session
进行训练。《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
提出了通过特征信息(如来自被点击 item
的文本和图像)增强的 RNN
用于 session-based
推荐,并显示出比普通RNN
模型更好的性能。RNN
也被用于更标准的 user-item
协同过滤 setting
,其目的是建模 user factor
和 item factor
的演变,结果不那么引人注目,所提出的方法几乎没有优于标准的矩阵分解方法。这是意料之中的,因为在数据集的时间范围内,没有强有力的证据表明用户口味的演变,并且对不在相同 session
中消费的 item
进行序列建模(指的是协同过滤中未考虑 session
信息),可能不会带来很大收益。
这项工作涉及的另一个领域是针对推荐系统量身定制的损失函数。在这个领域,特别是在矩阵分解技术的背景下,已有一些工作。协同过滤中最早的 learning to rank
技术之一是由《COFIRANK Maximum Margin Matrix Factorization for Collaborative Ranking》
引入的。本质上,该论文引入了一个 listwise loss
函数以及用于优化因子的 alternating bundle
方法。后续一些工作为协同过滤引入了更多的 ranking loss
函数。注意,这些损失函数虽然在矩阵分解中运行良好,但是并不能以任何方式保证它们是 RNN
的最佳选择,因为在 RNN
中进行反向传播要比在矩阵分解中更加困难。事实上,我们将看到 BPR
(一种流行的损失函数)需要进行重大修改,从提高 session-based
推荐中的 RNN
的效果。
与在深度网络中对大输出空间进行采样从而对语言模型进行有效损失计算相关的另一项工作是 blackout
方法(《Blackout: Speeding up recurrent neural network language models with very large vocabularies》
),该方法本质上应用了类似于《Session-based Recommendations with Recurrent Neural Networks》
中使用的采样过程,以便有效地计算 categorical cross-entropy loss
。
我们将 《Session-based Recommendations with Recurrent Neural Networks》
中实现的 RNN
算法称作 GRU4Rec
。在本节中,我们将重新审视 GRU4Rec
如何对输出进行负采样并讨论其重要性。我们扩展了负采样技术,增加了 additional sample
,并认为这对于提高推荐准确性至关重要。
注意,“样本” 有两种含义:一种含义是用于训练的实例,也称作
example
;另一种含义是采样程序所采样到的实例。在这一章节,我们避免使用 “样本”,而代替以example
(用于模型训练)、sample
(用于采样程序)。
在每个训练 step
中,GRU4Rec
将 session
中当前事件event
的 item
(以 one-hot
向量表示)作为输入。网络的输出对应于item set
中每个 item
的分数 score
,代表每个 item
成为 session
中的 next item
的可能性。
训练过程会遍历 session
中的所有事件。基于 backpropagation through time: BPTT
训练的复杂度为 training event
的数量,item set
规模)。计算所有 item
的分数是非常不切实际的,因为这使得模型 unscalable
。因此,GRU4Rec
使用采样机制并在训练期间仅计算 item set
的某个子集的分数。
神经网络通常并不是每次训练一个实例example
,而是每次训练一批example
,这种做法被称作 mini-batch training
。mini-batch training
有若干好处:
training faster
。converging faster
。GRU4Rec
引入了基于 mini-batch sampling
。对于 mini-batch
中的每个example
,相同 mini-batch
的其它example
作为negative sample
,如下图所示。从算法实现的角度来看,这种方法是实用的,并且对于 GPU
也可以有效地实现。
可以使用三种不同的 listwise ranking loss
函数之一来训练网络(参考后面的小节)。所有损失函数都需要 target item
(即 next item
的 ground truth
)的分数、以及至少一个negative item
(即 target item
以外的 item
)的分数。ranking loss
的一个特性是:模型只有当 target item
的分数没有大幅超越negative item
的分数时才会进行学习,否则 item
已经按正确的顺序排列因此模型没有什么可学的(此时梯度接近于零,模型参数几乎不更新)。因此,在进行负采样时,采样到高分 item
作为 negative item
中至关重要。
一个 item
是否高分取决于实际计算分数的 context
(即 item
序列)。热门 item
在许多情况下通常分数都很高,因此基于热度的采样 popularity-based sampling
是一种很好的采样策略。mini-batch sampling
基本上是一种popularity-based sampling
的形式,因为一个 item
作为negative item
的概率与它在数据集中出现的频次(即,热门程度)成正比。
一个
item
在数据集中出现次数越多,则它成为target item
的机会越多,那么它的平均预估分也就越高。
popularity-based sampling
的问题在于:当算法学到将 target item
排在热门 item
之上,模型几乎停止学习(因为 target item
已经排序正确,模型接下来没什么可学的),但是模型对于长尾高分 item
(这部分 item
不是热门的因此未被负采样,但是预估分数仍然很高) 的排序仍然可能不准确。
即,模型对热门
item
学习较好,对中长尾item
的学习较差。
另一方面,如果使用均匀负采样,那么由于大量低分negative item
的存在,均匀负采样会减慢学习速度(对于大部分negative item
, target item
已经排序正确因此模型没什么可学)。但是,如果无限期训练,可能会产生整体上更准确的模型(相比 popularity-based sampling
)。
根据我们的经验,popularity-based sampling
通常会产生更好的结果(因为均匀负采样需要“无限期”训练才能得到更好的结果)。
将负采样与 mini-batch
联系起来有若干实际好处,但由于以下三个原因导致过于严格:
mini-batch size
一般较小,从几十到几百不等。如果 item set
的规模很大,那么较小的采样规模使得无法包含所有高分的negative item
。
mini-batch size
对训练有直接影响。例如,我们发现使用更小的 mini-batch size
(30 ~ 100
)进行训练会产生更准确的模型。但是由于并行化,在 GPU
上使用更大的 mini-batch size
训练会更快。
mini-batch sampling
方法本质上是 popularity-based
的,这通常是一个很好的策略,但可能不是对所有数据集都是最优的。
第三条理由有点无赖,作者并未给出一些例子来说明。
因此,我们使用 additional sample
来扩展 GRU4Rec
。我们采样了 item
用作 mini-batch
内所有example
所共享的negative item
。 这些additional sample
与来自 mini-batch sampling
的 sample
一起使用,其中 mini-batch size
。additional sample
可以通过任何策略采样得到。我们以
item
support
(即数据集中出现的次数)。popularity-based sampling
。添加更多 sample
自然会增加复杂度,因为输出单元的数量从 popularity-based sampling
)增加到 additional sample
)。然而,计算很容易并行化,因此当 sample
规模达到一定规模之前,增加更多 sample
对于现代 GPU
上的训练时间并没有实际增加。
既然
additional sample
的核心是增加高分negative item
,那么我们可以根据先验知识,为每个target item
构建一批高分的negative item
。例如 :当前用户历史点击的item
、当前用户相似的用户历史点击的item
(基于user-to-user
规则)、已有高分negative item
相似的item
(基于item-to-item
规则),等等。这些就是hard
负样本。注意:
- 训练期间不仅要有
hard
负样本,还要有easy
负样本(即低分negative item
)。至于采样到的negative item
的分数分布是否和item set
保持一致,可以探讨。- 验证、测试、上线推断期间,必须使得采样到的
negative item
的分数分布和item set
保持一致,否则评估结果可能没有说服力。
然而, additional sample
的有效实现并非易事。根据 GPU
上的分布进行采样目前还没有得到很好的支持,因此采样速度很慢,因此它应该由 CPU
处理或者需要某种形式的解决方法。
CPU
处理,则被采样的 item ID
应该与 mini-batch
的 item ID
一起提供给 GPU
。然而,每次生成一个新的 mini-batch
时对分布进行采样需要一些时间,因此 GPU
的执行经常被中断,导致 GPU
利用率低,从而训练缓慢。GPU
上某种形式的解决方法,则基于分布的采样被转换为包含多个 GPU
操作的一个序列,与我们使用的深度学习框架的内置采样方法相比,整体执行速度更快。在这两种情况下,单次采样几个 item
的效率都低于单次采样大量 item
的效率。因此,我们还实现了一个缓存 cache
用于预采样 pre-sample
以及存储大量 negative sample
。当训练用完这些 sample
并且一旦缓存变空(每用一个 sample
就会清空对应的缓存),就会重新计算缓存。我们发现,与完全不使用缓存的方案相比,预采样 1
千万到 1
亿个 item ID
显著提高了训练速度。
本小节中,我们检查 GRU4Rec
中实现的损失函数并确定它们的弱点。我们提出了两种方法来解决交叉熵损失函数的数值不稳定性 numerical instability
。我们展示了当我们向输出中添加更多 sample
时,使用 TOP1 pairwise loss
和 BPR pairwise loss
的 learning
如何降级 degrade
,并提出一组基于 pairwise losse
的损失函数来缓解这个问题。
我们注意到,虽然我们的目标是改善 GRU4Rec
,但是本小节中提出的损失函数也可以与其它模型一起使用,例如矩阵分解模型。
categorical cross-entropy
衡量了预测的概率分布
该损失函数常用于机器学习和深度学习,特别是多类分类问题。next item
推荐任务可以解释为分类任务,其中 class label
是系统中的 item id
,每个 item
序列所分配的 label
是该序列的 next item
。 在 single-label
场景下(如 next item
推荐),真实分布是 next item
的 one-hot
向量,其中 target item
对应的元素为 1
而其它所有位置全零。预测的概率分布由分配给每个 item
的预测分数组成。注意,output score
需要执行转换从而形成分布的形式,常见的转换是使用 softmax
。
交叉熵本身是一个 pointwise loss
,因为它是在单个 coordinate
上(即分布上的每个点)定义的独立损失的总和。将交叉熵与 softmax
相结合会在损失函数中引入 listwise
属性,因为 coordinate
现在不再是独立的了。结合交叉熵与 softmax
,我们得到如下的、定义在score
上的损失函数(假设 target item
的索引为
其中:item
item set
大小。
修复不稳定性 instability
:GRU4Rec
中可用的损失函数之一是带 softmax
的交叉熵。《Session-based Recommendations with Recurrent Neural Networks》
在实验部分报告了交叉熵比其它损失函数略好的结果,但是论文认为交叉熵损失对于大部分超参数空间而言是不稳定的,因此建议不要使用它。
这种不稳定性来自于有限的数值精度 limited numerical precision
。假设存在item
前者引入了一些噪声,而后者不允许 transformation
和 loss
分开使用(即,transformation
和 loss
融合在一起,无法分离使用)。这两种方法都可以稳定stabilize
损失函数,我们没有观察到这两种变体的结果存在任何差异。
GRU4Rec
提供了两个基于 pairwise loss
的损失函数。pairwise loss
将 target item
分数与一个 negative item
进行比较。如果 target item
分数低于 negative item
分数,那么损失较大。GRU4Rec
对每个 target item
计算多个 negative item
的损失,因此损失函数由这些 pairwise loss
的均值组成。这导致了一个 listwise loss
函数,它由多个 pairwise loss
组成。
其中一个损失函数是 TOP1
,其定义为:
其中:negative item
数量,negative item
上迭代,target item
。
这是一个由两部分组成的、启发式的组合损失:
target item
分数推高到 negative item
分数之上。negative item
分数降低到零。这一部分充当正则化器regularizer
,但它并不是直接约束模型权重,而是惩罚 negative item
的高分。由于每个 item
在某个训练 example
中都充当 negative item
,因此通常会降低整体的分数。另一个损失函数是基于流行的 Bayesian Personalized Ranking: BPR
损失,其定义为:
该损失函数最大化 target item
分数超过 negative item
分数的概率。由于概率
梯度消失 vanishing gradient
:取每个 pairwise loss
的均值会产生不想要的副作用。我们分析 TOP1
损失和 BPR
损失相对于 target item
分数 TOP1
损失和 BPR
损失相对于 target item
分数
对于 pairwise loss
,人们通常希望得到高分的 negative item
,因为这些sample
会产生大的梯度。或者直观而言,如果 negative item
的分数已经远低于 target item
的分数,那么就不再可以从该 negative item
中学到任何东西了。
我们将 negative item
记做 negative irrelevant item
,negative item
记做 negative relevant item
。对于一个 negative irrelevant item
negative irrelevant item
基本上不会对总梯度增加任何东西。同时,平均梯度总是被 negative item
的数量所打折(即,除以 sample
数量negative irrelevant item
数量的增加速度比 negative relevant item
数量的增加速度更快,因为大多数 item
作为 negative item
是不相关irrelevant
的。对于 non popularity-based sampling
以及大的 sample
数量,情况尤其如此。因此,随着 sample
数量
本质上是由于
negative relevent item
的稀疏性导致。
- 如果
negative relevent item
和negative irrelevent item
的数量是1:1
的关系,那么的增加不大可能出现梯度消失,因为 的增加使得 negative relevent item
也同比例的增加。- 如果
negative relevent item
和negative irrelevent item
的数量是1:100000
的关系,那么的增加很可能出现梯度消失,因为 增加一万个但是 negative relevent item
数量几乎不变(需要增加十万个才会新增一个 negative relevent item
),因此使得损失函数的梯度下降很多。
注意,TOP1
损失对于 negative relevant item
也有些敏感,这是损失函数设计中的疏忽。虽然这种情况不太可能发生,但是也不能排除。例如,在将一个冷门的 target item
与非常热门的 sample
进行比较时,尤其在学习的早期阶段,target item
分数可能远低于这个热门 sample
的分数。
我们专注于损失函数对于 target item
分数 negative item
分数
这意味着即使某些 negative item
relevant
的,损失函数的梯度也会随着 negative item
数量
为了克服随着sample
数量 pairwise loss
的、新的 listwise loss
系列。基本思想是:将 target item
分数与最相关的 negative item
分数进行比较。令最相关的 negative item
(即分数最大的 negative item
)为
max
函数是不可微的,因此无法应用于梯度下降。因此,我们使用 softmax
函数代替 max
从而保持损失函数的可微性。注意,这里的 softmax
变换仅用于 negative item
(即排除 negative item
中寻找最大的分数。这使得在 negative item
都需要考虑它获得最大分数的可能性。基于这个总体思路,我们现在推导出 TOP1-max
损失函数和 BPR-max
损失函数。
softmax
在交叉熵损失、ranking-max
损失中有所区别:
- 在交叉熵损失中需要考虑
target item
和negative item
,即,这里 为考虑了 target item
的集合大小- 在
ranking-max
损失中仅考虑negative item
,即,这里 为不考虑 target item
的集合大小。另外这里的
softmax
还可以引入温度超参数,但是注意数值稳定性问题(例如 太大导致梯度不稳定)。
TOP1-max
损失函数:TOP1-max
损失相当简单,它被定义为:
其中:softmax
值。
可以对所有negative item
应用正则化(即,negative item
应用正则化。但是我们发现对最大分数的 negative item
应用正则化的实验效果更好,因此我们保持这种方式。
TOP1-max
损失的梯度是对单个 pairwise
梯度的加权平均(注意,negative item
分数的 softmax
值
example
将有更大的权重。这解决了更多 sample
导致梯度的问题,因为 negative irrelevant item
将被忽略,最终梯度将指向 negative relevant item
的梯度。sample
都是 irrelevant
的,那么每个 pairwise
梯度将接近于零。这不是什么问题,因为如果 target item
分数大于所有 negative item
分数,则没有什么可以学习的。不幸的是, TOP1-max
损失对于分数很大的 negative item
是敏感的,如 TOP1 pairwise loss
本身所引起的,与我们的聚合方式无关。
BPR-max
:BPR
的概率性解释为,最大化 target item
分数
其中:
negative item
target item
分数高于最大分数的 negative item
我们想要最小化负的对数似然,则得到损失函数:
这个损失函数对于 target item
BPR-max
的梯度是单个 BPR
梯度的加权平均,权重为
negative item
如果 softmax
。否则这个相对权重就是一个平滑的 softmax
。
这意味着当 negative item
之间的权重分布会更均匀,但是较高分数的 negative item
将得到更多关注。随着 negative item
上。这是一种理想的行为。
读者注:BPR-max
并不是简单地对 BPR
的softmax
加权,而是移动了 log
的位置:
Top1-max
损失函数仅仅是将 Top1
损失的均匀权重 softmax
权重 BPR-max
损失函数将 BPR
的均匀权重log
函数变为作用于
另一个版本的 BPR-max
是:
这个损失函数似乎比论文中的 negative item
是敏感的(如
损失函数(TOP1-max
和BPR-max
损失)对于 negative item
softmax score
target item
negative item
才会被更新。这是有益的,因为如果 negative item
的分数很低,则不需要进行参数更新 。
negative item
的分数远高于其它 negative item
,那么它的参数将是唯一被更新的,并且梯度将与 target item
分数和 negative item
分数之间 pairwise loss
的梯度一致。negative item
的分数比较平衡,那么梯度介于上述梯度和零之间。下图描述了在不同 target item
排名的条件下, BPR
损失的梯度和 BPR-max
损失的梯度(针对target item
分数 target item
排名指的是超过 target item
分数的 negative item
数量,例如 rank 0
表示 target item
分数高于所有 negative item
。较小的rank
值意味着 negative relevant item
较少。
该图描述了两种损失相对于epoch
(训练开始)、第十个 epoch
(训练结束)对整个数据集进行评估:
additional sample
,仅使用来自 mini-batch size = 32
的 batch
内其它 example
。2048
个 additional negative item
,其中右图聚焦于前 200
的排名。可以看到:
当有更多 negative relevant item
(即 rank
值更大)时,BPR
的梯度略高。这是很自然的,因为 BPR-max
关注的是最接近 sample
,而忽略了其它 negative relevant item
。当 target item
排名在 list
末尾时,这减慢了 BPR-max
的学习,但是差异并不显著。
另一方面,随着 negative relevant item
数量的减少(即 rank
值更小),BPR
的梯度迅速消失。梯度消失的点与 sample
总量有关。
sample
总量较小的情况下(左图),BPR
的梯度在 rank = 5
附近开始消失。相比之下,BPR-max
直到 rank 0
才开始消失。sample
的增多(中图),BPR
梯度非常低(例如在右图看到 rank = 5
时 BPR
的梯度相比左图要小得多),即使对于 rank 100 - 500
也是如此。相比之下,BPR-max
的梯度仍然是在 rank
较小的点才开始显著下降。这意味着,比如说,我们可以优化算法将 target item
的排名从 500
优化到 50
,但是很难继续推进到排名为 5
(因为这时发生了梯度消失,模型无法继续学习)。并且发生梯度消失的点随着 sample
量的增加而提前。另一方面,BPR-max
表现良好,并且能够一路提高 target item
分数。
分数正则化score regularization
的 BPR-max
:尽管我们表明启发式的 TOP1
损失对于分数非常高的 negative relevant item
很敏感,但是在 《Session-based Recommendations with Recurrent Neural Networks》
中发现它的性能优于 BPR
。据我们的观察,TOP1-max
也是优于 BPR-max
。部分原因在于很少同时出现 TOP1
的正则化部分保证 TOP1
中的分数正则化对整个学习过程非常有益,因此即使损失函数可能不是理论上的最优,它也可以取得很好的效果。
GRU4Rec
支持两种形式的正则化:模型参数的 dropout
和 L2
正则化。TOP1
的正则化与这些正则化是不同的。根据我们的经验,模型参数的 L2
正则化会降低模型性能。我们的假设是:某些模型权重不应该被正则化,如用于计算更新门 update gate
和复位门 reset gate
的权重矩阵。对 negative item
高分进行惩罚可以约束模型,但是没有显式地正则化权重。
因此,我们也在 BPR-max
损失函数中添加了分数正则化。我们尝试了几种分数正则化的方法。性能最好的一种方法是:我们将 negative item
分数设置在独立的零均值高斯分布上,高斯分布的方差与 softmax
分数成反比。这需要对接近 negative item
分数进行更强的正则化,这在我们的 case
中是理想的。
我们最小化负的对数似然并像以前一样进行函数近似,从而得到最终形式的 BPR-max
损失函数:
其中:正则化项是 negative item
分数进行加权 L2
正则化,权重为 softmax
分数
这里的正则化与
TOP1
正则化有三个区别:
- 这里使用平方正则化,而
TOP1
使用正则化。 - 这里使用了正则化系数
,而 TOP1
没有使用系数。猜测的原因是:在TOP1
中损失部分和正则化部分处于同一个量级(0.0 ~ 1.0
之间),而这里的损失部分和正则化部分处于不同量级。- 这里更关注
negative item
的高分,使得尽可能将negative item
高分打压下来。而TOP1
是一视同仁,认为negative item
高分的下降,与negative item
低分的下降,效用是相同的。这意味着我们也可以改造
TOP1
损失,利用平方正则化、正则化系数、以及权重。
数据集:
RSC15
数据集:基于 RecSys Challange 2015
的数据集,其中包含来自在线电商的点击事件和购买事件。这里我们仅保留点击事件。VIDEO
数据集和 VIDXL
数据集:是专属数据集proprietary dataset
,其中包含来自在线视频服务的观看事件。CLASS
数据集:也是一个专属数据集,包含来自在线分类站点的网页浏览事件。数据集经过轻微的预处理,然后划分为训练集和测试集。单个 session
要么属于训练集、要么属于测试集。我们基于 session
首个事件的时间来拆分数据集。
RSC15
数据集以及拆分与 《Session-based Recommendations with Recurrent Neural Networks》
中的完全相同。VIDXL
数据集和 CLASS
数据集以及拆分与 《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
中的完全相同。VIDEO
数据集与《Session-based Recommendations with Recurrent Neural Networks》
中的来源相同,但是子集略有不同。下表给出了数据集的主要特性。
评估方式:我们评估 next item prediction
,即我们迭代测试集 session
以及它们包含的事件。对于每个事件,算法都预测该 session
的 next event
对应的 item
。由于 VIDXL
测试集很大,我们将 target item
分数与测试期间最热门的 50000
个 item
的分数进行比较。
由于推荐系统一次只能推荐几个 item
,用户选择的实际 item
应该包含在推荐列表的前面几个 item
中。因此,我们的主要评估指标是 recall@20
,即:在所有 test case
的推荐列表的 top-20
中,具有 target item
的 case
的比例。召回不考虑 target item
的实际排名,只需要它位于推荐列表的 top-N
。这很好地建模了某些实际场景,在这些场景中推荐位置和顺序无关紧要。召回率通常也与重要的在线 KPI
密切相关,如点击率 CTR
。
实验中使用的第二个指标是 Mean Reciprocal Rank: MRR@20
,它是target item
的排名倒数reciprocal rank
的均值。如果 target item
的 rank > 20
,那么排名倒数设为零。MRR
考虑 target item
的排名,这适用于推荐顺序很重要的场景,例如更尾部排名的 item
仅在屏幕滚动之后才可见。
baseline
方法和配置:我们的 baseline
是原始的 GRU4Rec
算法,我们的目标是对其进行改进。我们将原始论文提出的 TOP1
损失视为 baseline
。隐层有 100
个单元。
item-kNN
的性能,这是 next item prediction
的一个 natural baseline
。RSC15
、VIDXL
、CLASS
的结果直接取自相应的论文(《Session-based Recommendations with Recurrent Neural Networks》
、《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
)。VIDEO
数据集以 《Session-based Recommendations with Recurrent Neural Networks》
中给出的最佳超参数进行评估。这些方法在 Python
中的 Theano
框架下实现。
第一组实验检查了 additional negative item
对于推荐准确性的影响。我们在 CLASS
数据集和 VIDEO
数据集上进行了实验。由于结果非常相似,因此我们剔除了 VIDEO
数据集的结果从而节省一些空间。下图描述了不同损失函数(TOP1
、交叉熵、TOP1-max
、BPR-max
)的网络的性能。我们度量了不同数量的 additional sample
下的推荐准确性,也度量了没有任何采样并计算所有得分时的推荐准确性(即 x
轴为 ALL
的点)。正如我们之前所讨论的,后一种情况更具理论性,因为它是不可 scalable
的。
正如理论所暗示的,TOP1
损失不能很好地处理大量的 sample
。当增加少量的 additional sample
时,模型性能略有提高,因为包含 negative relevant item
的机会在增加。但是随着sample
的继续增加,模型性能迅速下降,因为会包含大量 negative irrelevant item
。
另一方面,所有其它三个损失函数都对添加更多 sample
反应良好。
对于交叉熵损失,收益递减的点发生在大约几千个 additional sample
。
而 TOP1-max
在那个点之后开始略微降低准确性。
BPR-max
随着更多的 sample
而性能一直提升,但是在使用到所有 item
时会略微降低准确性。
BPR-max
使用所有item
时,会失去随机性。众所周知,一定程度上的随机性有利于学到更好的模型。
添加 additional sample
会增加计算成本,但由于现代 GPU
上易于并行化,大部分成本都得到了缓解。下图显示了不同 sample size
的训练时间。注意,y
轴的时间为对数坐标。
实际的训练时间不仅取决于数据集,还取决于模型超参数(尤其是 mini-batch size
)以及框架如何支持某些用于计算损失函数的算子。然而,所有损失的趋势都是相似的。
6 ~7
分钟,即使增加到 512
个 additional sample
也不会增加训练时间。2048
个 additional sample
时,训练时间仍然在 7 ~ 8
分钟左右,只是略有增加。GPU
的并行化能力,训练时间迅速增加。VIDEO
数据集上的趋势也是相似的,训练时间从 20
分钟左右开始,在 2048
个 additional sample
时开始增加(到 24
分钟),此后迅速增加。这意味着与数据增强方法不同,我们提所提出的方法在实践中使用时可以是零成本或很少的额外成本的。
在接下来的实验中,我们对控制采样的 TOP1-max
、BPR-max
在不同
对于交叉熵,当 sample size
较小时它倾向于较高的 sample size
较大时它倾向于较低的 sample
在 sample size
非常有限并且训练开始阶段非常有用,但是可能很快就会耗尽。 因此,如果我们有办法(例如足够大的 sample size
)切换到更平衡的采样,那么可能是有益的。此外,在这种情况下,均匀采样可以被少量的、从 minibatch
采样得到的 popularity based sample
所补充。
另一方面,ranking-max loss
似乎更喜欢中间略偏高一点的值,而在极端情况下的表现最差。我们假设这主要是由于:
pairwise losse
,而这通常需要 popular sample
。score regularization
:通过 popularity based sampling
,最热门 item
的分数将降低到超出预期的水平,因此效果较差。我们度量了所提出的改进在 baseline
上的性能增益。准确性的大幅提升来自于 additional sample
和损失函数的组合。下图展示了我们最重要的结果。除了原始版本的 GRU4Rec
和 item-kNN
之外,我们还包括了没有 additional sampling
的交叉熵 cross-entropy: XE
损失的结果,从而确认固定交叉熵损失的性能仍然略好于 TOP1
。
additional sample
和适当的损失函数的组合,其效果是惊人的,其最好的结果比原始 GRU4Rec
的准确性高出 18% ~ 37.5%
、比 item-kNN
的准确性高出 55%
。当都采用 additional sample
时,BPR-max
的性能与交叉熵相似或更好。
实际上发现带
additional sample
的交叉熵损失函数已经效果很好了,将交叉熵损失替换为ranking-max
损失的收益不大。
在 RSC15
上,《Improved Recurrent Neural Networks for Session-based Recommendations》
使用数据增强报告了 recall@20
大约在 0.685
、MRR@20
大约在 0.29
。与我们的解决方案不同,数据增强大大增加了训练时间。数据增强和我们的改进并不互斥,因此通过结合这两种方法,可以获得更好的结果。
以前的实验没有发现在 GRU layer
之前使用 embedding layer
的任何好处。embeddinhg layer
的作用是将 item ID
转换为潜在 representation
空间。在推荐系统的术语中,item embedding
对应于 item feature vector
。现有的 GRU
网络已有另外一个 item feature matrix
,它是 output weight matrix
的形式。通过统一representation
,即在 embedding layer
和 output layer
之间共享权重矩阵,我们可以更快地学习更好的 item representation
。
初步实验(如下表)显式,对于大多数数据集,recall@20
有额外的轻微改进,而 MRR@20
则略有下降。然而,对于 CLASS
数据集,当使用统一 embedding
时,召回率和 MRR
都显著增加。此外,统一 embedding
还具有将整体内存占用和模型大小减少约 4
倍的额外好处。
作者并没有探索这里的原因,遗憾。
基于本文提出的改进,在 online video portal
上的大规模在线 A/B test
中评估 GRU4Rec
在技术上也变得可行。推荐展示在每个视频页面上,并且在页面加载后立即可用。该网站具有自动播放功能,类似于 Youtube
上的。如果用户点击推荐的某个 item
、或者通过自动播放来访问推荐的某个 item
(这意味着用户开始访问推荐队列),那么系统不会计算新的推荐列表,因此用户可以与一组推荐的 item
进行多次交互。用户也可以直接访问视频(而不是通过推荐列表的方式,比如直接访问视频的 url
地址),那么系统为该用户生成一组新的视频推荐。
实验配置:将 GRU4Rec
与经过微调的复杂推荐逻辑进行比较,持续时间为 2.5
个月。用户分为三组:
第一组由 baseline
逻辑提供推荐服务。
第二组由 GRU4Rec
以 next best
来提供推荐服务,这意味着算法推荐的 item
很可能是用户 session
中的 next item
。
第三组由 GRU4Rec
以 sequence mode
来提供推荐服务,其中 GRU4Rec
根据迄今为止的 session
来生成一个 item
序列。序列是贪婪地生成的,即算法假设它的 next guess
到目前为止是正确的。
sequence mode
会生成next item
、next next item
... 等等的序列,而不是next item
。
机器人bot
和 power
用户(例如,长时间播放视频的用户)会从评估结果中过滤掉,因为它们可能会扭曲结果。机器人是根据 user agent
过滤的。每天过滤掉身份不明的机器人和 power
用户以及具有不切实际行为模式的用户。受过滤影响的 non-bot
用户比例非常低(占比大约 0.1%
)。
评估指标:我们使用不同的 KPI
来评估效果,每个 KPI
都与推荐请求的数量相关:观看时长是该组观看视频的总秒数,视频播放量是改组至少观看了一定时长的视频数量,点击量是改组点击推荐的次数。
当实验组和对照组的请求数量几乎相等时,总量的比较结果与均值的比较结果几乎相同。
下图展示了 GRU4Rec
相对于复杂逻辑的相对性能增益。error bar
代表 p=0.05
的置信区间。
GRU4Rec
在两种预测模式下都优于 baseline
。观看时长提高了 5%
、视频播放量提高 了 5%
、点击量提高了 4%
。sequence mode
比next best
的表现更好,但是在点击量方面则不然。这是因为 sequence mode
更适合自动播放功能,从而导致用户的点击量减少。另一方面,虽然基于 next best guess
的预测是相关的,但是它们是更加多样化的,并且用户更有可能跳过推荐列表中的视频。sequence mode
更适合视频系列 video series
和其它紧密结合的视频。feedback loop
从彼此的推荐中学习,它们之间观看时长和视频播放量的差异开始慢慢消失。序列推荐系统的目标是将用户行为的个性化模型personalized model
(基于历史活动)与基于用户最近行为的 context
概念相结合。从序列动态 sequential dynamic
中捕获有用的模式pattern
具有挑战性,主要是因为输入空间的维度随着作为 context
的历史行为的数量呈指数增长。因此,序列推荐的研究主要关注如何简洁地捕获这些高阶动态 high-order dynamic
。
马尔科夫链Markov Chains: MC
是一个典型的例子,它假设next action
仅依赖于前一个(或者前几个)行为,并已成功用于刻画短程short-range
的 item
转移transition
从而用于推荐。另一项工作使用循环神经网络 RNN
通过隐状态 summarize
所有先前的行为,从而用于预测 next action
。这两种方法虽然在特定情况下很强大,但是在某种程度上仅限于某些类型的数据。
MC-based
方法通过作出强有力的简化假设,在高度稀疏的 setting
中表现良好,但可能无法捕获更复杂场景的复杂动态 intricate dynamic
。RNN
虽然具有表达能力,但是需要大量数据(特别是稠密数据)才能超越更简单的 baseline
。最近,一种新的序列模型 Transfomer
在机器翻译任务中实现了 state-of-the-art
的性能和效率。与现有的使用卷积模块或循环模块的序列模型不同,Transformer
完全基于一种叫做 self-attention
的注意力机制,该机制非常高效并且能够揭示句子中单词之间的句法模式syntactic pattern
和语义模式semantic pattern
。
受到这种方法的启发,论文 《Self-Attentive Sequential Recommendation》
寻求将自self-attention
机制应用于序列推荐问题。论文希望这个想法可以解决上述两个问题:一方面能够从过去的所有行为中提取上下文(类似于 RNN
),但另一方面能够仅根据少量行为来构建预测(类似于 MC
)。具体而言,论文构建了一个 Self-Attention based Sequential Recommendation: SASRec
模型, 该模型在每个 time step
自适应地为先前的 item
分配权重(如下图所示)。
所提出的模型在几个 benchmark
数据集上显著优于 state-of-the-art
的、MC/CNN/RNN-based
的序列推荐方法。具体而言,论文将模型性能作为数据集稀疏性的函数来进行检查,其中模型性能与前面描述的 pattern
密切相关。由于self-attention
机制,SASRec
倾向于在稠密数据集上考虑长期依赖,而在稀疏数据集上关注最近的行为。而这被证明对于自适应地处理不同密度 density
的数据集至关重要。
此外,SASRec
的核心组件(即 self-attention block
)适用于并行加速,从而使得模型比 CNN/RNN-based
的替代方案快一个数量级。此外,论文分析了 SASRec
的复杂性和可扩展性,进行了全面的消融研究以展示关键组件的效果,并将注意力权重可视化从而定性地揭示模型的行为。
相关工作:有一些工作与我们密切相关。在讨论序列推荐之前,我们首先讨论通用推荐 general recommendation
,然后是时间推荐 temporal recommendation
。最后我们介绍了注意力机制,尤其是我们模型核心的 self-attention
模块。
通用推荐General Recommendation
:
推荐系统专注于根据历史反馈(如点击、购买、喜欢)来建模用户对 item
的偏好。用户反馈可以是显式的(如评分)或隐式的(如点击、购买、评论)。由于解释 non-observed
数据的模糊性ambiguity
,建模隐式反馈可能具有挑战。
为了解决这个问题,《Collaborative filtering for implicit feedback datasets》
提出了 point-wise
方法、《BPR: bayesian personalized ranking from implicit feedback》
提出了 pairwise
方法来解决这些挑战。
Matrix Factorization: MF
方法试图发现潜在维度来表示用户的偏好和 item
的属性,并通过 user embedding
和 item embedding
之间的内积来估计交互。
此外,另一个方向的工作基于 Item Similarity Models: ISM
,并没有显式地使用潜在因子建模每个用户(如 FISM
)。他们学习一个 item-to-item
的相似度矩阵,然后用户对 item
的偏好是通过该 item
与该用户历史交互 item
之间的相似性来衡量。
最近,由于深度学习在相关问题上的成功,深度学习技术已被引入推荐领域。一个方向的工作旨在使用神经网络来抽取 item
特征(如图像特征、文本特征等等)从而进行 content-aware
推荐。
另一个方向的工作旨在取代传统的 MF
。例如 NeuMF
通过多层感知机来估计用户偏好,而 AutoRec
使用自编码器来预测评分。
时间推荐Temporal Recommendation
:追溯到 Netflix Prize
时代,时间推荐通过显式建模用户活动的时间戳,从而在各种任务上显示出强大的性能。
TimeSVD++
通过将时间分成若干区间segment
,并在每个区间中分别对用户和 item
进行建模,从而取得了很好的效果。 此类模型对于理解那些表现出显著时间漂移temporal drift
的数据集(例如,过去 10
年电影偏好如何变化、用户在下午 4
点访问什么样的企业)至关重要。
序列推荐(或 next-item
推荐)与此不同,因为序列推荐仅考虑操作的顺序,并且建模与时间无关的顺序模式sequential pattern
。本质上,序列模型试图根据用户最近的活动建模用户行为的 context
,而不是考虑 temporal pattern
本身。
序列推荐 Sequential Recommendation
:许多序列推荐系统试图建模 item-item
转移矩阵,并将其作为捕获连续 item
之间的序列模式的一种手段。例如,FPMC
融合了一个 MF
项、以及一个 item-item
项从而分别捕获长期偏好和短期转移。本质上,被捕获的短期转移是一阶马尔科夫链Markov Chain: MC
,而高阶马尔科夫链假设 next action
与之前的几个行为有关。由于最近一个访问的 item
通常是影响用户 next action
的最关键因素(本质上是提供 context
),因此基于一阶马尔科夫链的方法表现出强大的性能,尤其是在稀疏数据集上。
还有一些方法采用考虑更多先前 item
的高阶马尔科夫链。具体而言,Convolutional Sequence Embedding: Caser
是一种 CNN-based
方法,将 item
的 embedding
矩阵视为 image
,并运用卷积运算来抽取转移 transition
。
除了基于马尔科夫链的方法之外,另一个方向的工作采用 RNN
来建模用户序列。利用 GRU4Rec
使用 GRU
建模点击序列从而用于 session-based
推荐,而 《Recurrent neural networks with top-k gains for session-based recommendation》
改进了 GRU4Rec
并进一步提高了 Top-N
推荐的性能。在每个 time step
,RNN
将 last step
的状态和当前行为作为输入。尽管人们已经提出了诸如 session parallelism
之类的技术来提高效率,但是 step
之间的依赖关系使得 RNN
的效率更低。
注意力机制:注意力机制已被证明在各种任务中是有效的。本质上,这种机制背后的思想是:序列输出 sequential output
中的每个输出都依赖于某些输入的 relevant
部分,而这些输入部分是模型应该持续关注的。 基于注意力的方法的额外好处是,方法更容易解释。最近,注意力机制已被引入推荐系统,例如 Attentional Factorization Machine: AFM
学习每个特征交互对于 content-aware
推荐的重要性。
然而,上面使用的注意力技术本质上是原始模型的附加组件 additional component
,如 attention+RNN
、attention+FM
等等。最近,一种纯粹基于注意力的 sequence-to-sequence
,叫做 Transfomer
,在之前 RNN/CNN-based
方法主导的机器翻译任务上实现了 state-of-the-art
的性能和效率。Transformer
模型在很大程度上依赖于所提出的 self-attention
模块来捕获句子中的复杂结构,并检索 relevant word
(在 source language
)从而生成 next word
(在 target language
)。
受 Transformer
的启发,我们试图建议一个基于 self-attention
方法的、新的序列推荐模型,然而序列推荐问题与机器翻译问题有很大不同因此需要专门设计的模型。
令用户集合为 item
集合为 setting
下,给定用户 next item
。在训练过程中,在 time step
item
来预测 next item
(即,第 item
)。
如下图所示,可以方便地将模型的输入视为 shifted
版本:embedding layer
、若干个 self-attention block
、以及一个 prediction layer
来构建序列推荐模型。我们还分析了它的复杂性,并进一步讨论了 SASRec
与相关模型的不同之处。
我们将训练序列
如果训练序列长度超过
如果训练序列长度小于 padding item
直到序列长度为
注意,训练序列按照发生时间从远到近的顺序排列,因此
padding item
填充在左侧(代表最远时刻)。
对于每个 item
embedding
向量 embedding
维度。所有 item
的 embedding
向量构成了 embedding
矩阵 item
embedding
向量。
对于序列 item
embedding
向量 postion
的 item
的 embedding
。序列 input embedding matrix
记做 position
item
的 embedding
,并且对于 padding item
采用常数
Positional Embedding
:我们将在后面章节看到,由于 self-attention
模型不包含任何循环模块或卷积模块,因此它对于先前 item
的position
是无感知的。因此,我们将一个可学习的 position embedding
矩阵 input embedding
中:
其中:position
的 position embedding
,它是
我们还尝试了 《Attention is all you need》
中使用的固定的 position embedding
,单发现这在我们的 case
中导致性能更差。我们在实验中定量和定性地分析了 position embedding
的影响。
《Attention is all you need》
中定义的 scaled dot-product attention
为:
其中:query
矩阵,key
矩阵,value
矩阵。item
数量(每一行代表一个 item
),query/key embedding
的维度,value embedding
的维度,并且
直观而言,attention layer
计算所有value
的加权和,其中 query
value
query
key
interaction
有关。比例因子 softmax
的计算出现数值不稳定从而影响效果。
也可以用超参数
来代替 ,并根据验证集来调优超参数 ,这样更灵活。
Self-Attention layer
:在机器翻译等 NLP
任务中,注意力机制通常采用 《Attention is all you need》
提出了一个 self-attention
方法,它使用相同的对象作为 query
、key
、以及 value
。在我们的 case
中,self-attention
操作将 embedding
attention layer
:
其中:
self-attention
的 representation
,第 representation
(对应于time step
引入投影可以使得模型更加灵活。例如,模型可以学习非对称交互asymmetric interaction
,即 <query i, key j>
和 <query j, key i>
可以有不同的交互。
因果关系Causality
:由于序列的性质,模型在预测第 item
时,只能考虑开始的前 item
。然而,self-attention layer
的第 item
的 embedding
的输入信息,这不符合真实的情况。因此,我们通过禁止 attention
。
即:
key
的时刻不能超过query
的时刻。
Point-Wise Feed-Forward Network
:尽管 self-attention
能够使用自适应权重聚合所有先前 item
的 embedding
,但是它仍然是一个线性模型。为了赋予模型非线性并考虑不同潜在维度之间的交互,我们应用一个 point-wise
的、双层的 feed-forward network: FFN
到所有的 FFN
是跨 time step
共享权重的:
其中:
注意,
注意,这里只有一个
ReLU
,为什么?个人猜测是为了方便后面直接接入output layer
。
在第一层 self-attention block
之后,item
的 embedding
,即 self-attention block
来学习更复杂的 item transition
可能是有益的。具体而言,我们堆叠 self-attention block
(即,一个 self-attention layer
和一个 FFN
),并且第 block
(
然而,当网络更深时,有几个问题变得更加严重:
受到 《Attention is all you need》
的启发,我们执行以下操作来缓解这些问题:
其中:self attention layer
或 FFN
。
也就是说,对于 block
中的每个 layer
layer normalization
。dropout
。我们接下来依次介绍这些操作。
残差连接 Residual Connections
:在某些情况下,多层神经网络已经证明了分层hierarchically
地学习有意义特征的能力。然而,在提出残差网络之前,简单地添加更多层并不容易得到更好的性能。残差网络背后的核心思想是:通过残差连接将 low-layer
特征传播到更高的层。因此,如果 low-layer
特征有用,模型可以轻松地将它们传播到最后一层。
同样地,我们假设残差连接在我们的 case
中也很有用。例如,现有的序列推荐方法表明,最近一个访问的 item
对预测 next item
起着关键作用。然而,经过几个 self-attention block
之后,最近一个访问的 item
的 embedding
与之前的所有 item
纠缠在一起。添加残差连接从而将最近一个访问的item
的 embedding
传播到最后一层将使模型更容易利用 low-level
信息。
假设在
time step
来预测 next item
,那么self attention layer
的残差连接为:这里有一个细节:是采用
(未考虑 position embedding
)、还是采用(考虑 position embedding
)?论文并未提及。这可以通过实验来验证。
Layer Normalization
:layer normalization
用于跨特征对输入进行归一化(即,零均值和单位方差),这有利于稳定和加速神经网络的训练。和 batch normalization
不同, layer normalization
中使用的统计数据独立于同一个 batch
中的其它样本。
具体而言,假设输入是包含了一个样本中所有特征的向量 layer normalization
定义为:
其中:
Hadamard
积)。Dropout
:为了缓解深度神经网络中的过拟合问题,Dropout
正则化技术已被证明在各种神经网络架构中是有效的。Dropout
的思想很简单:在训练期间以概率 turn off
神经元,并在测试期间使用所有神经元。
除了在 self attention layer
或 FFN
上应用 dropout
之外,我们还在 embedding
dropout layer
。
在 self-attention block
之后,给定开始的 item
我们基于 next item
。具体而言,我们采用一个 MF layer
来预测与 item
relevance
:
其中:
item
的条件下,item
next item
的 relevance
,也称作交互分 interaction score
。item embedding
矩阵。因此,一个更高的 item
next item
。我们根据
Shared Item Embedding
:为了降低模型大小并缓解过拟合,我们考虑在 MF layer
中使用 item embedding
注意:
使用同一套 item embedding
的一个潜在问题是:它们的内积不能表示非对称的 item
转移,例如 item
item
FPMC
这样的方法倾向于使用异质heterogeneous
的 item embedding
(即,
然而,我们的模型没有这个问题,因为它学习了非线性变换。例如,FFN
可以通过同一套 item embedding
轻松实现不对称:embedding
显著提高了我们模型的性能。
Explicit User Modeling
:为了提供个性化推荐,现有方法通常采用以下两种方法之一:
user embedding
从而表达用户的偏好(如 MF
、FPMC
、Caser
)。item
的 embedding
中导出一个隐式的 user embedding
(如 FSIM
、Fossil
、GRU4Rec
)。我们的方法属于后者,因为我们通过考虑用户的所有行为来生成 embedding
user embedding
,例如:
其中 user embedding
矩阵。
然而,我们根据经验发现添加显式的 user embedding
并不能提高性能(可能是因为模型已经考虑了所有用户的行为)。
回忆一下我们通过截断或填充从而将每个用户行为序列(排除最后一个行为) output
:
其中 <pad>
表示 padding item
。
我们的模型以序列 next item
)。我们采用二元交叉熵损失作为目标函数:
其中:session
所组成的集合。
注意,我们忽略当
上式本质是
softmax
交叉熵损失的负采样版本,它是pointwise loss
。我们也可以考虑pairwise loss
。
网络通过 Adam
优化器进行优化。在每个 epoch
中,我们为每个序列中的每个 time step
随机生成一个 negative item
空间复杂度:我们模型中待学习的参数来自embedding
,以及 self-attention layer
、FFN
、layer normalization
中的参数,参数的总数为 FPMC
的
时间复杂度:我们模型的计算复杂度主要来自于 self-attention layer
和 FFN
,即 self-attention layer
的 self-attention layer
中的计算是完全可并行的,这适合 GPU
加速。相反,RNN-based
方法(如 GRU4Rec
)依赖于 time step
(即,time step
time step
我们经验性地发现我们的方法比采用 GPU
的 RNN/CNN-based
方法快十倍以上(结果类似于 《Attention is all you need》
中机器翻译任务的结果),并且最大长度 benchmark
数据集,
在测试阶段,对于每个用户,在计算 embedding
MF
方法相同。评估每个 item
的计算复杂度为
处理长的序列:尽管我们的实验从经验上验证了我们方法的效率,但最终它无法扩展到非常长的序列。我们有望在未来调查一些方向:
restricted self-attention
(《A time-restricted self-attention layer for asr》
),它仅关注最近的行为而不是所有行为,并且可以在更高的 layer
考虑远距离行为 distant action
。《Personalized top-n sequential recommendation via convolutional sequence embedding》
中那样将长序列分段 。未来工作:
结合丰富的上下文信息(如停留时长、行为类型 action type
、 location
、设备等等)来扩展模型。
通过这些上下文信息,我们不仅知道行为序列中每个行为作用的
item
,还知道发生该行为的上下文。
研究处理非常长的序列。
我们发现 SASRec
可以视为某些经典协同过滤模型的推广generalization
。我们还在概念上讨论了我们的方法和现有方法如何处理序列建模。
SASRec
可以简化为一些现有模型:
Factorized Markov Chains: FMC
:FMC
分解一阶的 item
转移矩阵,并且依赖于最近的一个 item
next item
如果我们将 self-attention block
设为零、使用非共享的 item embedding
、并且移除 position embedding
,SASRec
将简化为 FMC
。
此外,SASRec
还与 Factorized Personalized Markov Chains: FPMC
密切相关,后者融合 MF
和 FMC
从而分别捕获用户偏好和短期动态:
其中:
遵从上面类似于 FMC
的简化操作,并添加显式的 user embedding
(通过向量拼接),SASRec
等效于 FPMC
。
Factorized Item Similarity Models: FISM
:FISM
通过考虑 item
item
之间的相似性来估计对 item
如果我们使用一个 self-attention layer
(不包含 FFN
)、在 item
上设置均匀的注意力权重(即 item embedding
、并移除 position embeddnig
,则 SASRec
将简化为 FISM
。因此,我们的模型可以被视为用于 next item
推荐的自适应的、分层的、序列的 item similarity model
。
MC-based
推荐:马尔科夫链Markov Chains: MC
可以有效地捕获局部序列模式local sequential pattern
,它假设next item
仅依赖于前面的 item
。现有的 MC-based
的序列推荐方法要么依赖于一阶马尔科夫链(如 FPMC, HRM, TransRec
)、要么依赖于高阶马尔科夫链(如 Fossil, Vista, Caser
)。基于一阶马尔科夫链方法往往在稀疏数据集上表现最好。相比之下,基于高阶马尔科夫链的方法有两个限制:
scale
,因此 我们的方法解决了第一个问题,因为 SASRec
可以自适应地关注相关的前面的 item
(如,在稀疏数据集上仅关注最近一个 item
,以及在稠密数据集上关注更多的 item
)。
此外,对于第二个问题,我们的模型建模了前面 item
,并且
RNN-based
推荐:另一个方向的工作使用 RNN
来建模用户行为序列。RNN
通常用于建模序列,但是最近的研究表明:CNN
和 self-attention
在某些序列的 setting
中表现得比 RNN
更强。
我们的 self-attention based
模型可以从 item similarity model
中推导出来,这是用于推荐的序列建模的合理替代方案。对于 RNN
,除了并行计算效率低下外,它们的最大路径长度(从输入节点到相关的输出节点)为 long-range dependency
。
我们进行实验并回答以下几个问题:
RQ1
:SASRec
是否超越了 state-of-the-art
方法(包括 CNN/RNN-based
方法)?RQ2
:SASRec
架构中各种组件的影响是什么?RQ3
:SASRec
的训练效率和可扩展性(关于 n
的)如何?RQ4
:注意力权重是否能够学到与position
相关的、或者与 item
属性相关的有意义的pattern
?数据集:我们在来自现实世界应用程序的四个数据集上评估我们的方法。数据集在领域 domain
、平台platform
、稀疏性sparsity
方面差异很大:
Amazon
:来自于 Amazon.com
的数据集,其中 Amazon
上的 top-level
产品类别被视为单独的数据集。我们考虑两个类别,美妆Beauty
、游戏 Games
。该数据集以高度的稀疏性和可变性variability
而著称。Steam
:来自于一个大型在线视频游戏分发平台 Steam
。数据集包含 2567538
名用户、15474
款游戏、7793069
条英文评论,时间跨度从 2010
年 10
月到 2018
年 1
月。该数据集还包含可能对未来工作有用的丰富信息,如用户游戏时长(小时)、游戏定价信息、媒体评分(对游戏的评分)、游戏类别 category
、游戏开发者developer
等等。MovieLens
:用于评估协同过滤算法的、广泛使用的 benchmark
数据集。我们使用包含 100
万用户评分的版本MovieLens-1M
。我们遵循与 《Factorizing personalized markov chains for next-basket recommendation 》
、《Translation-based recommendation》
、《Fusing similarity models with markov chains for sparse sequential recommendation》
相同的预处理程序:
对于所有数据集,我们将评论或评分的存在视为隐式反馈(即,用户和 item
的交互),并使用时间戳来确定行为的顺序。
对于评分,如果太低是不是要移除?否则高分和低分没有差异。
我们丢弃频次低于 5
的用户、以及频次低于 5
的 item
。
我们将每个用户
这个和
GRU4Rec
的不同。在GRU4Rec
中,仅在用户之间完整的session
划分数据集(即,user-level
),而不对session
内部进行拆分(即,session-level
)。区别在于:
user-level
的划分:测试用户是全新的,相当于冷启动cold-start
。session-level
的划分:测试用户不是全新的,已经在训练期间见过用户前面的个行为,预测最后一个行为。
数据集的统计特性参考下表。我们看到:两个 Amazon
数据集的 actions per user
和 actions per item
更少,Steam
的 actions per item
更高,而 MovieLens-1m
是最稠密的数据集。
baseline
方法:我们考虑三组 baseline
。
第一组 baseline
仅考虑用户反馈而不考虑行为顺序的通用推荐方法general recommendation method
:
PopRec
:这是一个简单的 baseline
,根据 item
的热门程度(即数据集中的频次)对 item
进行排名。Bayesian Personalized Ranking: BPR
:是一种从隐式反馈中学习个性化排名的经典方法。biased
的矩阵分解模型作为底层的推荐器 recommender
。第二组 baseline
包含基于一阶马尔科夫链的序列推荐方法,它考虑最近一个访问的 item
:
Factorized Markov Chains: FMC
:一阶马尔科夫链方法。FMC
使用两个 item embedding
来分解 item
转移矩阵,并根据最近一个访问的 item
生成推荐。Factorized Personalized Markov Chains: FPMC
:FPMC
组合了矩阵分解和分解的一阶马尔科夫链,从而捕获了用户的长期偏好以及 item-to-item
的转移。Translation-based Recommendation: TransRec
:一种 state-of-the-art
的一阶序列推荐方法,它将每个用户建模为一个翻译向量 translation vector
从而捕获从current item
到 next item
的转移。最后一组 baseline
包含基于深度学习的序列推荐方法,这些方法考虑了最近访问的一些 item
或者所有访问的item
:
GRU4Rec
:一种开创性的、使用 RNN
来建模用户行为序列的 session-based
推荐方法。我们将每个用户的反馈序列视为一个 session
。
一个用户只有一个
session
。理论上最好进行时间间隔的拆分,将用户行为序列基于时间间隔拆分为多个session
,使得每个session
集中体现用户的某个意图。
GRU4Rec+
:GRU4Rec
的改进版本(《Recurrent neural networks with top-k gains for session-based recommendations》
),它采用不同的损失函数和采样策略,并在 Top-N
推荐上显示出显著的性能提升。
Convolutional Sequence Embeddings: Caser
:最近提出的一种 CNN-based
方法,它通过对 item
的 embedding
矩阵应用卷积运算来捕获高阶马尔科夫链,并实现了 state-of-the-art
的序列推荐性能。
由于其它序列推荐方法(如 PRME, HRM, Fossil
)在类似数据集上的性能逊色于上述 baseline
,因此我们不考虑与它们进行比较。我们也不包含 TimeSVD++, RRN
等时间推荐方法 temporal recommendation method
,因为它们的 setting
与我们这里考虑的不同。
配置:
Adam
优化器的 TemsorFlow
来实现 BPR, FMC, TransRec
。对于 GRU4Rec, GRU4Rec++, Caser
,我们使用相应作者提供的代码。PopRec
之外所有方法,我们从 {10, 20, 30, 40, 50}
中考虑潜在维度 BPR, FMC, FPMC, TransRec
,我们考虑 L2
正则化并且正则化系数从 {0.0001, 0.001, 0.01, 0.1, 1}
之间选择。20
个 epoch
内没有提高,那么终止训练。SASRec
实现细节:
对于默认版本的 SASRec
中的架构,我们使用两个 self-attention block
(positional embedding
。
embedding layer
和 prediction layer
中的 item embedding
是共享的。
我们使用 TensorFlow
实现了 SASRec
。优化器是 Adam
,学习率为 0.001
,batch size = 128
。
MovieLens-1m
的 dropout rate = 0.2
,而其它三个数据集由于稀疏性因此 dropout rate = 0.5
。
数据集越稀疏所以
dropout rate
越大?可能需要进行超参数调优来观察实验效果。
MovieLens-1m
的最大序列长度
我们在后面检查 SASRec
的不同变体以及不同超参数的性能。SASRec
的代码公布在 https://github.com/kang205/SASRec
。
评估指标:我们使用两个常见的 Top-N
指标 Hit Rate@10, NDCG@10
来评估推荐性能。
Hit@10
计算了 ground-truth
的 next item
出现在推荐列表的 top 10
个 item
比例(分母为推荐列表的个数,即推荐结果中有多少是命中的)。
注意,由于我们对每个用户仅有一个 test item
,因此 Hit@10
相当于 Recall@10
,并且与Precision@10
成正比(Precision@10
还要除以推荐列表长度,这里是 10
)。
而 NDCG@10
是一个position-aware
的指标,它在排名靠前的位置分配更大的权重。
为了避免对所有 user-item pair
进行大量的计算,我们对每个用户随机采样 100
个 negative item
,并将这些 negative item
与 ground-truth item
进行排名。我们根据这 101
个 item
的排名来评估 Hit@10
和 NDCG@10
指标。
下表展示了所有方法在四个数据集上的推荐性能(用于回答问题RQ1
)。
考虑排除 SASRec
以外的其它方法在所有数据集上的表现,我们发现一种通用模式,即:non-neural
方法((a) ~ (e)
)在稀疏数据集上表现更好,而神经网络方法((f) ~ (h)
)在稠密数据集上表现更好。
这可能是由于神经网络方法具有更多参数来捕获高阶转移high order transition
(即,它们具有表达能力但是容易过拟合),而精心设计但更简单的模型在高度稀疏的 setting
中更有效。
我们的方法 SASRec
在稀疏数据集和稠密数据集上都优于所有 baseline
,并且相对于最强的 baseline
在 Hit Rate
上平均提升 6.9%
、在 NDCG
上平均提升 9.6%
。
一个可能的原因是我们的模型可以自适应地关注不同数据集上不同范围内的 item
(例如,在稀疏数据集上仅关注前一个 item
,在稠密数据集上关注更多的 item
)。我们在后面内容进一步分析了这种行为。
在下图中,我们还通过展示 10
到 50
的变化时所有方法的 NDCG@10
指标,从而分析关键超参数 SASRec
在
由于我们的架构中有许多组件,我们通过消融研究来分析它们的影响(用于回答问题RQ2
)。下表显示了我们的默认方法及其 8
个变体在所有四个数据集上的性能(
Remove PE(Positional Embedding)
:没有 positional embedding
item
的注意力权重仅取决于 item embedding
。也就是说,该模型根据用户过去的行为进行推荐,但是行为的顺序并不重要。
该变体可能适用于用户行为序列通常较短的稀疏数据集。该变体在最稀疏的数据集 Beauty
上的表现优于默认的模型,但是在其它更稠密的数据集上的表现更差。
移除
positional embedding
不一定效果下降,主要还是要看数据集的性质。
Unshared IE(Item Embedding)
:我们发现,使用两种 item embedding
(非共享的 item embedding
)会一致性地损害性能,可能是由于过拟合。
Remove RC(Residual Connections)
:我们发现,移除残差连接之后模型性能显著更差。这大概是因为 lower layer
中的信息(如,最近一个 item
的 embedding
,第一个 block
的 output
)无法轻易地传播到最后一层,而这些 lower layer
中的信息对于推荐非常有用,尤其是在稀疏数据集上。
Remove Dropout
:我们的结果表明,dropout
可以有效地正则化模型从而实现更好的性能,尤其是在稀疏数据集上。结果还暗示了:过拟合在稠密数据集上不严重。
过拟合在稠密数据集上也比较严重,只是相对稀疏数据集而言不太严重。
因为稀疏数据集更容易陷入过拟合,因此更需要正则化。
Number of blocks
:
block
的结果较差,因为模型效果仅取决于最近一个 item
。block
的变体的表现相当不错。block
的变体(即 default
模型)的表现仍然进一步提升,尤其是在稠密数据集上,这意味着 hierarchical self-attention structure
有助于学习更复杂的 item
转移。block
的变体可以获得与 default
模型(即两个 block
)相似的性能。Multi-head
:Transformer
的作者发现使用 multi-head
的注意力很有用,它将注意力应用于 case
中,two head attention
的性能始终比 single-head attention
稍差。这可能是由于我们的问题中的 Transformer
中,
我们评估了我们模型的训练效率的两个方面(用于回答问题 RQ3
):训练速度(一个训练 epoch
所花费的时间)、收敛时间(达到令人满意的性能所花费的时间)。我们还根据最大长度 GTX-1080 Ti GPU
进行。
训练效率:下图展示了使用 GPU
加速的、基于深度学习的方法的效率。GRU4Rec
由于性能较差而被省略。为公平比较,Caser
和 GRU4Rec+
有两种训练选项:使用完整的训练数据、或仅使用最近的 200
个行为(SASRec
中就是使用最近的 200
个行为)。
SASRec
一个 epoch
的模型更新时间仅为 1.7
秒,比 Caser
快 11
倍(19.1 s/epoch)
)、比 GRU4Rec+
快 18
倍(30.7s/epoch
)。SASRec
在 ML-1M
数据集上大约在 350
秒内收敛到最佳性能,而其它模型需要更长的时间。Caser
和 GRU4Rec+
的性能。可扩展性:与标准 MF
方法一样,SASRec
与用户总数、item
总数、action
总数呈线性关系。一个潜在的可扩展性问题是最大长度 GPU
并行化。这里我们测量 SASRec
在不同 SASRec
的可扩展性,并分析它是否可以在大多数情况下处理序列推荐。
下表显示了具有不同序列长度的 SASRec
的性能和效率。
99.8%
的行为序列)。2000
秒内完成训练,这仍然比 Caser
和 GRU4Rec+
更快。因此,我们的模型可以轻松地扩展到多达数百个行为的用户行为序列,这适用于典型的评论数据集和购买数据集。我们计划在未来研究处理非常长的序列的方法。
回想一下,在 time step
self-attention
机制根据前面 item
的 position embedding
和 item embedding
自适应地为它们分配权重。为了回答 RQ4
,我们检查所有训练序列,并通过展示 position
上的平均注意力权重、以及 item
之间的平均注意力权重来揭示有意义的pattern
。
position
上的注意力:下图展示了最近 15
个 time step
在最近 15
个 position
上的平均注意力权重的四种热力图。注意,我们在计算平均权重时,分母是有效权重的个数,从而避免短序列中 padding item
的影响。
我们考虑了不同热力图之间的一些比较:
(a) vs (c)
:这种比较表明:
Beauty
,SASRec
倾向于关注更近more recent
的 item
。ML-1M
,SASRec
倾向于关注不那么近less recent
的 item
。这是使我们的模型能够自适应地处理稀疏数据集和稠密数据集的关键因素,而现有方法往往仅侧重于某一头。
即,表明我们的
self-attention
机制的行为是自适应的。
(b) vs (c)
:这种比较展示了使用 positional embedding: PE
的效果。
positional embedding
(即,(b
),注意力权重基本上均匀分布在先前的 item
上。positional embedding
(即,(c)
,也是默认的模型),模型对 position
更敏感,因为模型倾向于关注最近的 item
。即,表明我们的
self-attention
机制的行为是position-aware
的。
(c) vs (d)
:由于我们的模型是分层hierarchical
的,这里展示了不同 block
之间的注意力是如何变化的。显然, high layer
的注意力往往集中在更近more recent
的position
上。这大概是因为第一个 self-attention block
已经考虑了所有之前的 item
,而第二个 block
不需要考虑很远的 position
。
即,表明我们的
self-attention
机制的行为是hierarchical
的。此外,既然第二个
block
不需要考虑很远的position
,那么是否使用简单的last representation
就可以?毕竟self-attention block
的计算复杂度比直接引入last representation
更高。
总而言之,可视化表明我们的 self-attention
机制的行为是自适应的、position-aware
的、以及 hierarchical
的。
item
之间的注意力:展示几个精心挑选的 item
之间的注意力权重可能没有统计学意义。在 MovieLens-1M
上,每部电影都有多个类别。为了进行更广泛的比较,我们随机选择两个不相交的集合,每个集合包含来自 4
个类别的 200
部电影:科幻 Sci-Fi
、浪漫Romance
、动画 Animation
、恐怖 Horror
(注,这两个集合共享相同的四个类别)。第一个集合用于 query
,第二个集合用于 key
。
下图展示了两个集合内不同 item
之间的平均注意力权重的热力图(item
粒度的,而不是类别粒度的),每个集合内的 item
根据类别进行分组。我们可以看到:热力图大概是一个块对角矩阵 block diagonal matrix
,这意味着注意力机制可以识别相似的 item
(如,同一个类别的 item
),并倾向于在相似 item
之间分配更大的权重( SASRec
事先不知道类别,我们也没有将 item
类别作为特征馈入模型)。
在许多现实世界的 application
中,用户当前的兴趣受到他们历史行为的影响。例如,人们在购买智能手机之后可能会购买手机壳或耳机等配件,人们可能会继续购买他们以前有过良好体验的同一品牌的衣服。
为了建模这种现象,人们已经提出了一些方法来使用用户历史记录user historical record
进行序列推荐。例如,《Factorizing personalized markov chains for next-basket recommendation》
采用马尔科夫链对用户行为序列进行建模,《Context-aware sequential recommendation》
和 《dynamic recurrent model for next basket recommendation》
利用 RNN
来嵌入先前购买的商品从而进行当前兴趣预测 current interest prediction
。
现有方法取得了令人振奋的结果,但是它们倾向于将用户以前的所有记录record
压缩为一个固定的 hidden representation
。如下图所示,用户购买手机壳(item E
)的关键原因可能是他之前购买了一部手机(item B
),而之前其它购买的商品不一定与这个 new purchase
(即,手机壳)有关。然而,RNN
(和其它的 latent representation
方法)会强制将所有先前的 item
(即 item A
到 item D
)summarize
到一个向量(即,next interest
。
不同历史记录(它们用于 next interest prediction
)的这种区分性的缺乏导致了两个不利的后果:
item
的信号。为了缓解这些问题,论文 《Sequential Recommendation with User Memory Networks》
将用户行为视为描述神经图灵机 neural turing machine: NTM
的决策程序,并提出使用 external memory
来建模用户历史记录。凭借显式地、动态地、和有效地表达、存储和操作记录的能力,external memory network: EMN
已经在许多序列预测任务中展示出良好的性能,例如知识问答 question answering: QA
、natural language transduction: NLT
、knowledge tracking: KT
。EMN
架构不是合并先前的状态state
来进行预测,而是引入了一个 memory matrix
来将状态分别存储在 memory slot
中。然后通过在这个矩阵上设计适当的操作,EMN
与传统的 RNN/LSTM
模型相比在许多任务中实现了显著的提升。
受到 EMN
的启发,论文 《Sequential Recommendation with User Memory Networks》
提出了一种将 Recommender system
和 external User Memory network
相结合的新颖框架,简称 RUM
。然后论文进一步研究 RUM
在 top-N
推荐任务上的直觉和性能。下图 (b)
和 (c)
说明了论文提出的框架的基本思想:
external user memory matrix
来维护该用户的历史信息。与传统的 RNN hidden vector
相比,这丰富了 representation capacity
。memory matrix
被注意力地 attentively
读出 read out
从而生成一个 embedding
来作为 user representation
,其中注意力机制学习先前记录对于当前推荐的不同重要性。item
后,将重写 memory
从而更新用户历史 user history
。为了更好地探索论文的想法,作者提供了框架的两个规范 specification
,即 item-level RUM
和 feature-level RUM
,它们分别建模 item-level
的用户记录和 feature-level
的用户记录。与现有方法相比,论文的方法基于 memory network
对用户历史记录进行了更细粒度的使用,提高了推荐性能,同时基于注意力分析抽取了消费者行为的直观的因果关系intuitive causality
。
总之,这项工作的主要贡献包括:
insight
与memory-augmented neural network: MANN
相结合从而进行推荐。这种结合以更有效的方式利用了用户历史记录。据作者所知,这是将 MANN
引入推荐系统领域的首次尝试。representation
和 operation
设计的潜在 memory network
(item-level
和 feature-level
)。论文进一步研究并比较了它们在序列推荐和 top-N
推荐任务中的表现。state-of-the-art
的方法进行了比较,并通过对现实世界数据集的定量分析来验证所提出模型的优越性。分析结果表明论文的方法能够更有效地利用用户历史记录。empirical analyse
来解释所提出的模型如何、以及为什么推荐一个 item
。分析结果表明通过 memory network
中的注意力机制,所提出的模型能够直观地解释用户历史记录如何影响该用户当前的和未来的决策。相关工作:我们的工作本质上是序列推荐和 memory-augmented neural network
的集成。接下来我们回顾一下这两个研究方向的相关工作。
序列推荐:在文献中,人们已经提出了许多模型以序列方式利用用户历史记录来进行 future behavior
的预测和推荐。
通过集成矩阵分解和马尔科夫链,factorized personalized Markov chain: FPMC
将相邻行为之间的转移信息transition information
嵌入到 item latent factor
从而进行推荐。
而 hierarchical representation model: HRM
通过利用 representation learning
作为 latent factor
从而进一步扩展了这个想法。
这些方法主要对每两个相邻记录之间的局部序列模式local sequential pattern
进行建模。
为了建模 multiple-step
序列行为,《Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation》
采用马尔科夫链来提供稀疏序列的推荐。
《A dynamic recurrent model for next basket recommendation》
提出了 dynamic recurrent basket model: DREAM
来捕获全局序列模式global sequential pattern
并学习基于 recurrent neural network: RNN
的 dynamic user interest representation
。在 DREAM
中,用户的所有历史记录都被嵌入到 RNN
的 final hidden state
中,从而代表该用户的当前偏好。DREAM
这种方法取得了相对于 HRM
和 FPMC
的显著改进。
类似地,《Session-based recommendations with recurrent neural networks》
、《Improved recurrent neural networks for session-based recommendations》
利用用户之前的点击和购买行为,使用 RNN
对短期偏好进行建模,从而用于 session-based
推荐。
《Translation-based recommendation》
采用度量空间学习metric space learning
方法来学习用于序列推荐的、加性additive
的 user-item
关系。
除了电商之外,序列推荐也被应用于 POI
推荐、音乐推荐、浏览browsing
推荐等各种 application
场景。
现有模型通常将用户先前的记录隐式编码为一个 latent factor
或 hidden state
,而不区分每条记录在预测当前兴趣时可能扮演的不同角色。然而,在这项工作中,我们利用 user memory network
来存储和操作每个用户先前的记录,这有助于增强用户历史的表达能力。
Memory-Augmented Neural Network
:近年来出现了能够有效处理序列数据的 external memory network: EMN
。简而言之,EMN
利用一个 memory matrix
来存储历史的 hidden state
。通过正确读取和更新这个 memory matrix
,EMN
可以在许多面向序列的任务上获得更好的性能。遵循这个思想,《End-to-end memory networks》
设计了一个端到端的 memory-augmented model
,它在训练期间需要的监督信息显著减少从而使其更好地适用于real-world setting
。最近,研究人员已经成功地将 EMN
的概念应用于多个领域,如 question answering: QA
、natural language transduction: NLT
、knowledge tracking: KT
。
通常,EMN
由两个主要组件构成:一个 memory matrix
用于维护 state
、一个 controller
用于操作(包括读取和写入)。更具体而言:
对于读取过程,大多数方法采用注意力机制来读取 memory matrix
。即,对于输入 memory matrix
中每个 memory slot
similarity
slot
的注意力权重为:
其中 memory
被注意力 attentively
地读出read out
。
对于写入过程,《Neural turing machines》
通过考虑内容和 slot location
来更新 user memory
,从而促进 facilitate
memory
的所有 location
。
然而,《Meta-learning with memory-augmented neural networks》
提出了一种单纯地 content-based
的写入策略,称之为 least recently used access: LRUA
,从而将 memory
写入到最少使用的 memory location
、或者最近使用的 memory location
。
在本文中,我们旨在将 EMN
的思想应用于推荐系统,从而更有效地利用用户历史行为。这种应用方式还有待学术界探索。
user memory network
与协同过滤相结合。然后,我们通过描述通用框架的两个具体实现(即,item-level user memory network
和 feature-level user memory network
)来聚焦于设计 memory component
,从而从不同的角度审视我们的框架。为了更好地理解,我们首先将广泛使用的矩阵分解 matrix factorization: MF
模型重新描述为神经网络。假设有 item
(item
集合为 one-hot
格式的 user ID/ item ID
可以作为输入并馈送到架构中,然后 look-up layer
将这些 sparse representation
投影到稠密向量中(即 user embedding/ item embedding
)。
假设用户 user embedding
为 item
embedding
为 MF
模型中 likeness score
memory enhanced user embedding
:为了在我们的框架中利用用户历史记录,我们从两部分生成一个用户的 embedding
:
memory component
有关,该组件对用户以前的记录进行编码(称作 memory embedding
,记做 free vector
,用于编码不受用户先前行为影响的内在偏好 intrinsic preference
(称作 intrinsic embedding
,记做 memory embedding
类似于传统的 RNN-based
方法中的 hidden vector
。然而,hidden vector
盲目地将用户的所有历史记录压缩成一个固定的向量,而在我们的框架中,用户记录通过更具表达能力的结构(个性化的 memory matrix
这种方式内存消耗大(每个用户分配一个
memory matrix
,内存需求为,其中 为 memory slot
个数,为 memory embedding
维度)。此外,模型的mini-batch
训练也是一个难点。
具体而言:
对于用户 memory embedding
item embedding
其中
然后,通过将 memory embedding
intrinsic embedding
final user embedding
为:
其中
其中
我们还测试了逐元素乘法合并、以及向量拼接合并,但是它们的效果都不如加权加法合并。加权加法合并的另一个优点是:我们可以调整权重超参数 memory
机制进行推荐的效果,这将在实验部分展示。
预测函数:在进行预测时,我们将 final user embedding
item embedding
其中 《Neural collaborative filtering》
中的 prediction neural network
。在这里,我们选择 sigmoid
内积
训练:我们采用二元交叉熵作为模型优化的损失函数,要最大化的目标函数为:
其中:
ground truth
,如果用户 item
1
,否则取值为 0
。item
的集合,item
的集合。我们从 unobserved
的 item
集合 negative item
。应该注意的是,非均匀采样策略可能会进一步提高性能,我们将非均匀采样策略留待未来的工作。在这个等式中,我们通过前两项来最大化我们预测结果的可能性,最后一项对所有模型参数正则化从而避免过拟合。在训练阶段,我们通过随机梯度下降 stochastic gradient descent: SGD
来学习模型参数。
memory updating
:在每次购买行为之后,我们通过以下方式更新 user memory matrix
dynamic nature
:
在接下来的内容中,我们将描述个性化的 memory matrix
item-level
和 feature-level
设计
在本节中,我们首先通过简单的方式扩展以前的方法来实现我们的思想(如下图 (a)
)。与现有模型类似,我们将每个 item
视为一个单元unit
,并建模先前购买的 item
对下一个 item
的影响。许多工作表明(《Factorizing personalized markov chains for next-basket recommendation》
、《Learning hierarchical representation model for nextbasket recommendation》
),用户最近的行为可能对当前决策更重要。因此,对于每个用户 memory matrix
item
的 embedding
,如下图 (a)
中的紫色虚线框所示。
假设用户 item
集合定义为:item
。
令 item
embedding
。假设 memory matrix
有 memory slot
),即 column vector
。我们设计 reading
操作和 writing
操作如下:
reading
操作:直观上看,之前的 item
可能对当前的 item
有不同的影响,影响越大的 item
在 final memory embedding
中应该越重视。形式上,在我们的模型中,当对 user-item pair
FPMC
类似的方式来计算 user memory
item
与当前 item
其中 strength
超参数。
然后我们使用 memory embedding
,这为我们提供了一个能力:根据用户历史行为对当前 item
的影响来访问用户历史行为。即:
与之前的模型不同,我们不会在 reading
过程中强行合并所有 item embedding
。相反,我们现将这些 item embedding
单独存储在 item
给予更多的关注。这为我们提供了一种更细粒度的方法来利用用户历史记录。
writing
操作:如前所述,用户最近的行为通常对当前的预测起着更重要的作用。因此,我们采用简单的 first-in-first-out: FIFO
机制来维护 user memory matrix
item
。
具体而言,用户 memory matrix
item
。假设当前 item
是 memory matrix
为:memory
时,最早的 item
将被替换,memory
未满时,直接添加 item
而不必替换 memory
内的任何其它 item
。
这种做法的思想类似于
DIN
。由于的更新是简单的规则,因此可以在样本生成阶段就把 拼接到样本中作为特征,这就是 DIN
。但是,与
DIN
相比,这里的是固定 size
的,因此需要进行序列padding
或截断,因此会一定程度上损害性能。
受到经典潜在因子模型 latent factor model: LFM
推荐的启发,我们进一步探索在 feature-level
上实现 RUM
框架。在 LFM
中,我们假设用户在作出购买决策时可能会考虑一组产品特征 product feature
,并且 LFM
中的每个 embedding
维度代表了产品域 product domain
中的一个潜在特征,其中所有的潜在特征张成了一个 latent representation space
。然后,LFM
将用户对这些特征的偏好估计为该空间中的向量。
在这项工作中,我们使用 memory network
的能力来显式地建模这些潜在特征。直观而言,用户对这些特征的偏好应该动态地反映在该用户的购买行为中。例如,如果用户在新购买的 iPhone
上体验非常好,那么该用户未来可能会继续在品牌 brand
特征上选择苹果的产品。
受这些直觉的启发,我们维持用户对 memory matrix
中不同特征的偏好。这些特征将被读取从而生成 user memory embedding
, 并由该用户购买的每个 item
来写入。更具体而言,我们将我们的方法形式化为一个 key-value memory neural network
,如下图 (b)
所示。
我们首先设计了一个 global latent feature table: GLFT
来存储每个 feature
的 embedding
,并且在进行预测时,item
将与这个 table
交互从而识别其相关的特征。
对于每个用户,我们利用 user memory matrix
GLFT
上特征的偏好。基于上述识别的特征,该用户会注意力 attentively
地合并 memory embedding
。
与 LFM
中的全局特征空间一样,这里的 global latent feature table
在所有用户之间共享,而 memory matrix
以个性化的方式进行 per-user level
的维护。
最后,我们使用 item embedding
更新 user memory matrix
形式上,令用户 embedding
为 item
embedding
为 global latent feature table
为 embedding
。对于用户 memory matrix
定义为 embedding
。
reading
操作:为了使得读取过程可微,我们采用 soft-attention
机制来读取 user memory matrix
。具体而言,在对 user-item pair
item
global latent feature table
中每个特征的相关性:
其中 strength
超参数。
我们也使用 memory matrix
中的 slot
,从而计算该用户的 memory embedding
:
这里的
reading
操作和Item-level RUM
的reading
操作的区别在于注意力权重的生成:Item-level RUM
中,是基于 和 得到的;而 Feature-level RUM
中,是基于 和 得到的。因此, Feature-level RUM
的参数更多、模型容量更高。
writing
操作:受神经图灵机neural turing machine: NTM
的启发,在写入 user memory matrix
擦除:我们首先从 erase vector
sigmoid
函数,erase parameter
。给定注意力权重和擦除向量,feature preference memory
更新为:
其中:
因此:仅当该 location
的注意力权重和 erase element
均为 1
时,这个 memory location
才会被重置为零;当该 location
的注意力权重为零或者 erase element
为零,那么 memory vector
保持不变。
添加:当擦除操作之后,我们使用一个 add vector
feature preference memory
:
其中: add parameter
。
这种 erase-add
更新策略允许在学习过程中遗忘和加强 user feature preference embedding
,并且模型可以通过学习 erase parameter
和 add parameter
来自动地决定哪些信号需要减弱、哪些信号需要加强。
这种更新方式类似于
RNN
,按顺序地馈入并更新状态 。但是, RNN
之后一个状态而feature-level RUM
有个状态。如果 feature-level RUM
每次更新的是不同的slot
,那么一定程度上丢失序列信息。甚至feature-level RUM
不知道哪个item
是最近购买的,而根据现有的研究表明,最近购买的item
是相当重要的。
为了提供对我们的方法的更多洞察,我们分析了 item-level RUM
和 feature-level RUM
之间的关系。然后通过将其与 matrix factorization: MF
和 factorized personalized Markov chain: FPMC
进行比较,我们进一步将我们的方法与以前的方法联系起来。
Item-level RUM
和 Feature-level RUM
:一般而言,item-level RUM
和 feature-level RUM
都是下图 (c)
所示同一框架的特定实现。但是,它们从不同的角度管理用户历史信息。
item-level RUM
将每个 item
视为一个单元unit
,并将 item embedding
直接存储在 memory matrix
中,其中 memory matrix
旨在捕获 item-to-item
的转移模式 transition pattern
。feature-level RUM
中,历史信息以 feature-centered
的方式被利用。memory matrix
用于存储用户偏好在不同潜在维度上的 embedding
,并且每个 item
都被间接用于改变这些 embedding
。在实际应用中使用这些模型时,实际上存在 explanation-effectiveness
的 trade-off
:
item-level RUM
可以明确地告诉我们过去哪些 item
对于当前决策更重要,这为系统提供了一定的可解释能力。feature-level RUM
在 black box
中通过更细粒度的建模可以获得更好的性能。我们将在后的内容讨论更多细节和实验结果。
RUM
和 MF
的关系:当 user memory network
设置为不可用时(即,user memory embedding
设置为全零的向量),RUM
将简化为传统的 MF
。然而,通过启用 user memory network
,RUM
可以从历史行为中收集有价值的信息,这可以提高 Top-N
推荐任务的性能,如后面的实验所示。
RUM
和 FPMC
的关系:RUM
和 FPMC
都利用用户的历史行为来预测当前行为。为了对每个用户建模 item-to-item
转移模式,FPMC
构建张量分解模型,并在 Bayesian personalized ranking: BPR
准则下进行优化。目标函数如下:
其中:
basket
,
basket
中购买 item
当应用于序列推荐时,FPMC
中的每个 basket
仅包含一个 item
,因此有:
其中:item
(即时刻 item
) 的 embedding
。
为展示我们模型与 FPMC
的区别,我们考虑 item-level RUM
并且仅使用一个 memory slot
(即,
通过将 RUM
的 user intrinsic embedding
FPMC
中的 user embedding
RUM
的损失函数可以重写为:
对比 FPMC
与一阶的 item-level RUM
共享相同的预测函数(即,observed
的交互、unobserved
的交互:
FPMC
通过最大化 margin
来学习模型。RUM
分别尝试最大化 实际上,我们也可以使用 Bayesian personalized ranking: BPR
来优化 RUM
,此时,FPMC
相当于一个一阶的 item-level RUM
从而用于序列推荐。
基于以上分析,我们可以看出 RUM
是一个非常通用的推荐框架。一方面,RUM
是许多现有推荐模型的推广。另一方面,RUM
可以通过将 merge
函数、predict
函数、以及 reading/writing
策略修改为其它的形式,从而为我们提供机会来探索其它有前景的模型。
未来工作:
feature-level RUM
中的 memory unit
与不同的语义对齐,因此我们可以构建一个更可解释的推荐系统。RUM
模型是一个具有灵活泛化能力的框架,因此我们可以研究其它类型的 memory network
设计(而不仅限于这里的 item-level RUM
和 feature-level RUM
),从而使得我们的框架适应不同的应用场景。数据集:我们在 Amazon
数据集上进行了实验。该数据集包含 1996
年 5
月至 2014
年 7
月亚马逊的 user-product
购买行为。我们在四个产品类别上评估我们的模型,包括即时视频 Instant Video
、乐器 Musical Instrument
、汽车 Automotive
、婴儿护理 Baby Care
。
为了提供序列推荐,我们选择至少有 10
条购买记录的用户进行实验,最终数据集的统计数据如下表所示:
评估指标:对于每个模型,我们定义为用户 item
的预测分数(根据预测分数进行降序排列,分数越高排则名越靠前)。
假设测试集中用户 item
集合为
Precision (P), Recall (R), F1-score
:我们采用 per-user
的均值而不是全局均值从而为了更好的可解释性:
Hit-ratio(HR)
:命中率 HR
给出了可以收到至少一个正确推荐的用户占比:
其中:
normalized discounted cumulative gain(NDCG)
:NDCG
通过考虑 ground truth item
的排名来评估性能:
其中:DCG@N
所有可能取值的最大值,此时每个 grount-truth
都排在非 ground-truth
之前)。
DCG@N
是位于推荐列表中的ground-truth
收益的加权和,其中收益固定为1
,权重为, 为 ground-truth
的排名。最大的DCG@N
需要推荐列表满足两个条件:
- 所有
ground-truth
都位于DCG@N
中,即累加的项足够多。- 所有
ground-truth
的排名都最低,即足够小。
Baseline
方法:
MostPopular: MP
:非个性化的、基于热门item
的推荐。其中 item
的热门程度根据它在数据集中出现的频次来得到。BPR
:bayesian personalized ranking
,一种流行的 top-N
推荐方法。我们采用矩阵分解作为 BPR
的 prediction component
。FPMC
:factorized personalized Markov chains
,它是基于马尔科夫链的、 state-of-the-art
的序列推荐模型之一。在我们的数据集中,每个 item
都被视为一个 basket
。DREAM
:dynamic recurrent basket model
,它是 RNN-based
的、state-of-the-art
的序列推荐方法。配置:
SGD
进行更新。SGD
的学习率是在 {1, 0.1, 0.01, 0.001, 0.0001}
的范围内通过网格搜索来确定的。memory slot
数量 20
。merge
函数中设置权重超参数 item
(即,positive instance
),我们从用户未交互的 item
中均匀采样一个 negative instance
。embedding
维度 {10, 20, 30, 40, 50}
范围内网格搜索来确定。{0.1, 0.01, 0.001, 0.0001}
范围内网格搜索来确定。70%
的item
用于训练、剩余的 item
用于测试。5
个 item
,即推荐列表长度 模型整体性能:我们首先研究默认设置(item-level RUM
和 feature-level RUM
的性能,如下表所示。可以看到:
非个性化的 Most Popular
方法几乎在所有情况下都给出了最差的性能。由于它没有考虑用户的个性化信息,因此这一观察突出了个性化在推荐任务中的重要性。
正如预期的那样,通过单独分析用户并直接优化 ranking-based
目标函数,在大多数情况下 BPR
的性能优于 Most Popular
。
FPMC
和 DREAM
在大多数指标上都可以达到比 BPR
更好的性能,而这两种方法之间的差异不是很明显。考虑到 BPR
和 FPMC
之间的主要区别在于后者以序列方式对用户历史记录进行建模,这一观察结果验证了序列推荐有助于提高推荐性能。
有趣的是,DREAM
在 instant video
上获得了比 FPMC
更好的性能。DREAM
建模用户的 multi-step behavior
而不是 pair-wise behavior
,能够更好地捕获用户对视频偏好的长期兴趣。
然而,在其它数据集上,pair-wise
的短期影响可能更有助于预测 next behavior
,但是 DREAM
通过 RNN
将之前的所有 item
均等 equally
地合并为单个 hidden vector
,这可能会削弱序列推荐的 pair-wise
信号。
这突出了我们动机的重要性,即需要一个精心设计的机制来自动地确定哪些先前的 item
对当前兴趣预测很重要。
在稠密数据集上,
multi-step behavior
可能更重要;在稀疏数据集上,pair-wise behavior
可能更重要。而instant video
数据集是这四个数据集中最稠密的。
令人振奋的是,我们发现在大多数情况下,item-level RUM
或 feature-level RUM
的性能都优于最佳 baseline
。这些结果表明了我们提出的序列推荐方法的有效性。
这实际上并不惊讶,因为我们模型中的 memory
机制和 reading/writing
设计为建模用户历史记录提供了更好的表达能力。
通过在更细粒度的 level
上建模 item
关系,feature-level RUM
在大多数指标上都优于 item-level RUM
。这很直观,因为两个 item
的功能可能不直接相关,但是它们可能具有一些共同的特征,这些特征可能会影响用户的决策,例如它们都属于同一个品牌。
权重超参数 memory
是否有助于、以及如何帮助序列推荐。为此,我们分析权重超参数 merge
函数中 memory embedding
相对于 intrinsic embedding
的重要性。
具体而言,我们通过在 0 ~ 1
的范围内以 0.1
的步长调整 F1@5
上的性能。结果如下图所示。可以看到:
memory component
不可用(即 feature-level RUM
和 item-level RUM
都简化到相同的模型并共享相同的性能。在这种情况下,它们都在所有数据集中给出了不利的结果(但不一定是最差的)。memory network
之后,模型性能大幅提升,并且在 memory embedding
的权重继续上升时,模型性能下降。这一观察在四个数据集上是一致的。这些结果表明:考虑用户历史行为记录的序列影响 sequential influence
确实有助于提供更好的推荐,但是过分关注这个最近购买信号 recent purchase signal
可能会削弱用户的内在偏好 intrinsic preference
。这些结果进一步验证了学术界经常观察到的现象:短期用户偏好和长期用户偏好对于个性化推荐都很重要。
Item-level RUM
中的 AttentionWeights
的直觉:为了说明 item-to-item
转移的直觉 intuition
,我们在下图展示了一些示例用户(每个用户一个子图),这些用户是从 Baby Care
数据集上带 5
个memory slot
的 item-level RUM
(即,
这里只有
6
个case
,所以一些结论不具备说服力?最好给出一批case
的统计结果。
当用户购买第 item
时(对应于 x
轴,用蓝色小网格表示),我们在该用户的子图中绘制一个长度为 5
的列向量(如上面中间子图中,(15,14)
对应处的、高度为5
的细长条)。这个列向量对应于 y
轴的位置 item
上的注意力权重 item
的注意力越高。当用户继续购买 item
时,最近购买的 5
个 item
被保留在 memory
中,因此列向量填充的位置从左下角到右上角。基于这幅图,我们得到以下有趣的观察:
通常,靠近对角线的网格的颜色较深。这意味着历史最有影响力的 item
通常是距离当前行为附近的 item
。这进一步证实了 item-level RUM
背后的假设,即:最近的行为对当前的决策更为重要。
然而,最有影响力的 item
的具体位置并不总是最近的,这可以解释为什么 FPMC
仅通过建模 pair-wise
相邻行为并未取得良好的性能。
此外,我们发现了两种有趣的用户行为模式:
某些行为序列是由最近行为连续触发的(用绿色实线框来表示),这符合 FPMC
的假设。我们称之为 one-to-one
的行为模式。
一个真实的例子是用户购买了一些婴儿配方奶粉,然后购买了奶瓶,这导致该用户接下来购买了奶嘴,而这些奶嘴导致该用户进一步购买了奶嘴清洁器。
某些行为序列中,多个行为主要受到相同的历史行为的影响(用棕色虚线框来表示),而这多个行为之间的关系并不那么重要。我们称之为 one-to-multiple
的行为模式。
一个真实的例子是用户购买了婴儿床,然后该用户为婴儿床购买了防水床垫保护套、蚊帐,然后又购买了床铃来装饰婴儿床。在这种情况下,我们的带注意力机制的 RUM
模型可以根据大规模的用户购买记录自动学习先前 item
的重要性。这优于假设相邻影响adjacent influence
的 FPMC
,也优于合并所有先前行为的 RNN
。
基于这些发现的模式,item-level RUM
可以从序列行为的角度解释推荐系统,这与以前通常利用辅助信息(如用户文本评论)进行解释的方法不同。
不同于传统的推荐系统,在序列推荐场景存在新的挑战:
unobserved item
、还是仅仅因为没有意识到它们。因此,通过传统的潜在因子模型latent factor model
直接优化这样的 one-class
分数(如 1
或 0
)是不合适的。session
或交易 transaction
,形成了用户的序列模式sequential pattern
和短期偏好。例如,用户离开机场后更喜欢在酒店休息而不是运动,用户在购买相机后更可能购买相机相关的配件而不是衣服。然而,以前的方法主要关注用户的通用品味general taste
,而很少考虑序列信息,这导致重复的推荐repeated recommendation
。在文献中,研究人员通常分别使用独立的模型来分别刻画用户的长期偏好(即,通用品味)和短期偏好(即序列模式),然后将它们集成在一起。例如,FPMC
分解观察到的 user-item
矩阵从而学习用户的长期偏好,并利用 item-item
转移信息来建模序列信息sequential information
,然后将二者线性相加从而获得最终分数。
然而,这些模型忽略了用户通用品味的动态变化,即,用户的长期偏好会随着时间的推移而不断演变。为每个用户学习一个静态的、低维的向量来建模该用户的通用品味是不够的。此外,这些模型主要通过线性模型来为 user-item
交互、 item-item
交互分配固定权重,这限制了模型的表达能力。已有研究表明,非线性模型可以更好地建模用户活动中的 user-item
交互。
为此,论文 《Sequential Recommender System based on Hierarchical Attention Network》
提出了一种新颖的方法,即 Sequential Hierarchical Attention Network: SHAN
,从而解决 next item
推荐问题。注意力机制可以自动为用户分配 item
的不同影响(即,权重)从而捕获动态特性 dynamic property
,而层次结构 hierarchical structure
结合了用户的长期偏好和短期偏好。具体而言:
item
嵌入到低维稠密空间中。attention layer
计算用户长期行为中每个 item
的权重,并使用这个权重对长期行为中的 item vector
进行加权和从而生成用户的 long-term representation
。attention layer
将近期的用户序列行为与 long-term representation
相结合。同一个 user embedding
向量在两个 attention network
中作为 context
信息,从而计算不同用户的不同权重。为了学习模型参数,论文采用 Bayesian personalized ranking: BPR
优化准则来生成一个 pair-wise
损失函数。从实验中,可以观察到论文所提出的模型在两个数据集上优于 state-of-the-art
的算法。
最后,论文的贡献如下:
user dynamic
、个人偏好从而进行序列推荐。high-level hybrid representation
。AUC
指标上始终优于 state-of-the-art
方法。相关工作:
为了联合建模用户的个性信息individual information
和序列信息,人们引入了马尔科夫链来用于传统的推荐。《Factorizing personalized markov chains for next-basket recommendation》
结合了分解方法(用于建模用户的通用品味)、以及马尔科夫链(用于挖掘用户序列模式)。遵从这个思想,研究人员利用不同的方法来抽取这两种不同的用户偏好。
《Playlist prediction via metric embedding》
和 《Personalized ranking metric embedding for next new poi recommendation》
使用 metric embedding
从而将 item
投影到低维欧氏空间中的点point
,从而用于play list
预测、以及successive location
预测。《Factorization meets the item embedding: Regularizing matrix factorization with item co-occurrence》
利用 word embedding
从 item-item
共现中抽取信息,从而提高矩阵分解性能。然而,这些方法在捕获 high-level
的 user-item
交互方面的能力有限,因为不同组件component
的权重是固定的。
最近,研究人员转向推荐系统中的图模型和神经网络。
《Unified point-of-interest recommendation with temporal interval assessment》
提出了一种双加权bi-weighted
的低秩low-rank
的图构建模型graph construction model
,该模型将用户的兴趣和序列偏好,与时间间隔评估temporal interval assessment
相结合。
《Wide & deep learning for recommender systems》
将 wide linear model
与 cross-product feature transformation
相结合,并采用深度神经网络来学习 feature embedding
之间的高度非线性交互。然而,该模型需要特征工程来设计交叉特征,而交叉特征在高度稀疏的真实数据中很少观察到。
为解决这个问题,《Neural factorization machines for sparse predictive analytics》
和 《Attentional factorization machines: Learning the weight of feature interactions via attention networks》
分别设计了 B-Interaction layer
和 attentional pooling layer
,从而基于传统的分解机factorization machine: FM
技术自动学习二阶特征交互。
《Sessionbased recommendations with recurrent neural networks》
和 《Recurrent recommender networks》
采用循环神经网络 RNN
来挖掘轨迹数据 trajectory data
中的用户动态 user dynamic
和 item
偏好。然而,在许多实际场景中,session
中的 item
可能不会遵守严格的顺序(例如,在线购物中的交易),此时 RNN
不太适用。
除此之外,《Learning hierarchical representation model for nextbasket recommendation》
和 《Diversifying personalized recommendation with user-session context》
学习了user hierarchical representation
,从而结合用户的长期偏好和短期偏好。
我们遵循这个 pipeline
,但是有以下贡献:
我们的模型建立在 hierarchical attention network
之上,可以捕获动态的长期偏好和短期偏好。
一些
RNN-based
推荐方法也是捕获动态的长期偏好,而MF-based
推荐方法才是捕获静态的长期偏好。
我们的模型利用 user-item
交互的非线性建模。它能够学习不同用户对相同 item
的不同的 item influence
(即,权重)。
令 item
集合,user-item
反馈数据(如,用户的连续 check-in
记录、连续的购买交易记录)中抽取信息。
对于每个用户 time step
的总数,time step
item
集合。
time step
item
集合 next item
的重要因素。time step
item
集合,记做 在后面的内容中,我们将 time step
item set
,将 time step
item set
。
形式上,给定用户 next item
。
我们根据用户偏好的以下特点,提出了一种基于 hierarchical attention network
的新方法,如下图所示。这些特点为:
用户偏好在不同的 time step
是动态dynamic
的。
不同的 item
对将要被购买的 next item
有不同的影响。
对于不同的用户,相同的 item
可能对 next item prediction
产生不同的影响。
例如,用户
A/B
的行为序列都是,但是由于用户 A
和B
之间存在差异(例如年龄、性别、收入水平等等),导致相同的行为序列得到不同的注意力权重。
我们方法的基本思想是:通过联合学习长期偏好和短期偏好从而为每个用户生成一个 hybrid representation
。更具体而言,我们首先将稀疏的 user input
和 item input
(即,one-hot representation
)嵌入到低维稠密向量中。之后,我们通过结合长期偏好和短期偏好的双层结构来学习每个用户的 hybrid representation
。
time step
long-term user representation
,它是长期的 item set
item embedding
的加权和,权重由 user embedding
导出的、attention-based pooling layer
来生成。final hybrid user representation
将 long-term user representation
和短期 item set
中的 item embedding
相结合,其中权重根据另一个 attention-based pooling layer
学习而来。如上所述,我们的模型同时考虑了动态的长期用户偏好和动态的短期用户偏好。此外,通过使用不同的、学到的权重,长期用户偏好和短期用户偏好对将要购买的 next item
具有不同的影响。
最后,值得指出的是,相同 item
在不同用户上的影响也是不同的,因为 attention layer
中权重的学习过程是由 user embedding
指导的,而 user embedding
是个性化的。
接下来我们详细介绍我们模型的各个部分。
Embedding Layer
:与自然语言处理中的、离散的 word symbol
类似,原始的 user ID
和 item ID
的表达能力非常有限。因此,我们的模型首先采用 embedding layer
将 user ID
和 item ID
(即,one-hot representation
)嵌入到两个连续的低维空间中。
形式上,令 user embedding
矩阵,令 item embedding
矩阵,其中 embedding
空间的维数。 user embedding
向量。item
item embedding
向量。
从理论上讲,传统的矩阵分解相当于一个双层神经网络:第一层为 user
和 item
构建低维的 embedding
,第二层执行内积运算。然而,通过矩阵分解的 embedding
只能捕获 low-level
、bi-linear
、以及静态的 representation
,这限制了模型的表达能力。不同的是,我们的模型基于这些 basic embedding
来学习high-level
、非线性的、动态的 user representation
,这些将在后面解释。
Long-term Attention-based Pooling Layer
:在序列推荐系统中,长期偏好和短期偏好分别对应于用户的通用品味和序列行为。
item set
通常会随着时间而变化,因此为每个用户学习静态的长期偏好 rerepsentation
并不能完全表达长期偏好的 dynamic
。item set
中重构 long-term user representation
更为合理。item
可能在不同用户上产生不同的影响。例如,假设用户 item
item
next item
时,item
为了满足上述要求,我们提出使用已经成功应用于许多任务的注意力机制。注意力机制首先计算给定用户的长期 item set
中每个 item
的重要性,然后聚合这些 item
的 embedding
从而形成 long-term user preference representation
。形式上,注意力网络定义为:
其中:
user embedding
向量,item set
中 item
item embedding
。ReLU
非线性激活函数。与传统的注意力模型对每个用户的每个 input
使用相同的 context
向量不同(即,global
的),我们将用户 embedding
context
向量(因此不同用户的 context
向量不同,即 personalized
的)。
注意,和
DIN/RUM
不同,这里的attention
并不是将target item
与历史item
进行注意力计算,而是将用户静态偏好(以来衡量)与历史 item
进行注意力计算。
对于
DIN/RUM
,相同用户的、不同的target item
会得到不同的注意力权重,因此在推断期间对于每个候选item
都需要重新计算。此外,不同用户的、相同的
target item
会得到相同的注意力权重,因此它是non-personalized
的。对于
SHAN
,相同用户的、不同的target item
会得到相同的注意力权重,因此在推断期间对于每个候选item
无需重新计算。此外,不同用户的、相同的
target item
会得到不同的注意力权重,因此它是personalized
的。本质上,
SHAN
的注意力机制是类似于self-attention
,它仅用到了target user
侧的信息,而并没有使用target item
侧的信息。由于没有进行user-item
的信息交互,因此有利于模型的在线推断(类似于双塔模型的架构比较容易在线部署,例如将target user
侧的emebdding
离线计算好并推送到线上,target item
侧的embedding
实时计算并基于embedding
向量的相似度来做召回)。
最后,我们计算 long-term user representation
item embedding
的加权和,即:
Long- and Short-term Attention-based Pooling Layer
:除了用户的通用品味之外,还需要考虑用户的序列行为(即,短期偏好)。短期偏好对于预测 next item
很重要,并且已有研究将长期偏好和短期偏好相结合从而进行序列推荐。然而,在这些早期工作中,短期偏好和长期偏好的交互仍然是线性的。并且, item
被分配以相同的权重,这无法反映 item
对 next item prediction
的影响,因此限制了模型的性能。
与建模用户长期偏好类似,我们也采用注意力网络,从而为 long-term representation
和短期 item set
中的item
的 embedding
分配权重,进而捕获用户 high-level representation
。正式地,
其中:
user embedding
向量,item set
中 item
item embedding
。注意,当 long-term user representation
。类似地,user embedding
被作为 context vector
从而实现个性化的注意力(即,相同 item
在不同用户上分配不同的权重)。在获得归一化的注意力分数之后,hybrid user representation
计算为:
其中
总而言之,item
对预测 next item
的贡献。此外,两个层级的注意力网络可以捕获 user
和 item
之间的非线性交互。
这里的注意力机制并不是基于向量内积的,而是基于
MLP
的,因此引入了非线性交互。
注意,《Learning hierarchical representation model for nextbasket recommendation》
还可以通过使用最大池化聚合 final representation
来实现非线性的目的。但是,它同时丢失了很多信息。我们将通过实验证明我们的模型可以实现比它更好的性能。
注意力加权和聚合的方式是介于
sum
池化和max
池化之间的版本:
- 当注意力均匀分布时,注意力加权和聚合退化为
sum
池化。- 当注意力极度不均时,注意力加权和聚合退化为
max
池化。此外,还可以通过
CNN/RNN
来进行聚合,它们是与sum
池化、max
池化完全不同的聚合方式。
模型推断Model Inference
:当计算出 hybrid user representation
item
但是,用户交易记录是一种隐式数据。由于数据稀疏性问题和 unobserved data
的模糊性 ambiguity
,我们很难直接优化偏好分
我们模型的目标是在给定用户在时刻 item set
和短期 item set
的情况下,提供一个 ranked list
。因此,我们更感兴趣的是 item
的排名而不是真实的偏好分。遵循 BPR
优化准则,我们为我们的模型提出一个 pair-wise ranking
目标函数。我们假设用户更喜欢 next purchased item
而不是 unobserved item
,并在 item
item
ranking order
其中 time step
next item
,bootstrap sampling
生成的 unobserved item
。
对于每个 observation
pairwise preference order
的一个集合 maximizing a posterior: MAP
来训练我们的模型:
其中:
user embedding
和 item embedding
待学习参数集合,
logistic function
,
为什么使用不同的正则化系数?用一个正则化系数不行吗?猜测的原因是不同的参数的取值不同,这可以通过后面的消融实验来验证。如果使用同一个正则化系数,那么该系数的选择被取值较大的参数所主导(可以通过统计参数范数的均值来观察)。进一步地,是否需要针对每个参数设置一个正则化系数?
SHAN
算法:
输入:
item set
item set
输出:模型参数集合
算法步骤:
从正态分布
从均匀分布
为什么采用不同的权重初始化策略?论文并未解释。
重复以下过程直到算法收敛:
混洗 observation
集合 observation
unobserved item
返回参数集合
我们进行实验回答以下几个问题:
state-of-the-art
方法相比,我们的模型的性能如何?embedding
维度)如何影响模型性能?数据集:
Tmall
数据集:包含中国最大的在线购物网站(即,Tmall.com
)上的用户行为日志。Gowalla
数据集:记录了用户在 location-based
社交网站 Gowalla
中 check-in
的时间的 point-of-interest: POI
信息。我们专注于这两个数据集上过去七个月生成的数据。在此期间,少于 20
个交互的 item
被剔除。此后,将一天内的用户记录视为一个 session
(即,交易 transaction
)来表示短期偏好,并删除所有的 singleton session
(即,session
中仅有一个 item
)。
类似于 《Diversifying personalized recommendation with user-session context》
,我们随机选择最近一个月 20%
的 session
进行测试,其余的用于训练。我们还在每个 session
中随机保留一个 item
作为待预测的 next item
。
预处理之后,这两个数据集的基本统计信息如下表所示:
评估指标:我们采用两个广泛使用的指标 Recall@N
和 AUC
。
Recall@N
指标评估在所有测试 session
中,ground truth item
排在 top-N
的 case
占所有 ground truth item
的比例。
AUC
指标评估 ground truth item
在所有 item
中的排名有多高。
这里将
ranking list
中非ground truth
的其它item
视为负样本,将ground truth item
视为正样本,因此AUC
指标严重依赖于负样本的采样方式。事实上,
Recall@N
指标也会依赖于负样本的采样方式。
baseline
方法:
TOP
:基于流行度的推荐,其中流行度通过训练集中item
的出现频次来统计。
BPR
:BPR
是一种用于隐式用户反馈数据的、 state-of-the-art
的 pairwise learning to rank
框架。我们选择矩阵分解作为 internal predictor
。
FPMC
:该方法通过矩阵分解建模用户偏好、通过一阶马尔科夫链建模序列信息,然后通过线性方式将它们组合起来进行 next basket recommendation
。
FOSSIL
:该方法将 factored item similarity
和马尔科夫链相结合,从而建模用户的长期偏好和短期偏好。注意,我们将 session
的长度是可变的。
HRM
:该方法生成 user hierarchical representation
来捕获序列信息和通用品味。我们使用 max pooling
作为聚合操作,因为这样可以达到最佳效果。
SHAN
:这是我们提出的模型,它使用两个注意力网络来挖掘长期偏好和短期偏好。
我们还展示了简化版本的性能(叫做 SAN
),它忽略了层次结构,并通过单个注意力网络从长期 item set
和短期 item set
中计算 item
的权重。
为了公平地比较,所有 model-based
方法都基于 BPR
优化准则来优化一个 pair-wise ranking
目标函数。
对比结果:下图展示了所有方法在 Tmall
和 Gowalla
数据集上的 Top-5 to Top-100
的召回率和 AUC
指标。从结果可以看到:
SHAN
在 Tmall
数据集的所有指标下始终以较大的优势优于所有其它方法。
HRM
)相比,SHAN
在 Tmall
数据集上和 Gowalla
数据集上的召回率指标分别提高了 33.6%
和 9.8%
。这表明:我们的模型通过注意力网络为 long-term representation
和 short-term representation
捕获了更 high-level
的、更复杂的、非线性的信息,而 HRM
可能会通过 hierarchical max pooling
操作丢失很多信息。SHAN
的性能优于 SAN
,可能是因为长期 item set
的 item
数量远远多于短期 item set
。因此,单个注意力网络很难为属于短期 item set
的较少、但是更重要的 item
分配适当的权重。HRM
在大多数情况在这两项指标下的表现普遍优于 FPMC
。
具体而言,HRM
在 Tmall
和 Gowalla
数据集上的 Recall@50
的相对性能(相对于 FPMC
方法)提升分别为 6.7%
和 4.5%
。这证明了多个因子 factor
之间的交互可以通过最大池化操作来学习。
此外,尽管是简单的最大池化,该操作引入的非线性交互将提高模型性能。另外,SHAN
实现了比 HRM
更好的性能,这表明注意力网络在建模复杂交互方面比最大池化更强大。
在大多数情况下,所有混合模型(即,FPMC, FOSSIL, HRM, SHAN
)在两个数据集的不同指标下均优于 BPR
。以 AUC
为例,混合模型相对于 BPR
的性能提升持续保持在非常高的水平。这表明序列信息对于我们的任务非常重要,而 BPR
忽略了它。另外,SHAN
在这些混合模型中获得了最佳性能。
令人惊讶的是,在 Tmall
数据集上,当 50
继续增加时,TOP
方法在召回率方面超越了 BPR
,甚至在 AUC
指标上超越了 FPMC
。
这种现象可以解释为:
item
。因此,当 TOP
方法可以达到更好的性能。Gowalla
数据集中的用户 check-in
数据更加个性化,因此 TOP
方法的性能要比其它方法差很多。最后,我们的模型可以在不同的 baseline
。
不同组件的影响:为了评估每个组件对 final user hybrid representation
的贡献,我们进行实验来分析下表中每个组件。SHAN-L
表示仅建模用户的通用品味,SHAN-S
表示仅建模用户的短期偏好。
与同样仅建模长期偏好的 BPR
相比,SHAN-L
实现了更好的性能。例如,BPR
在 Tmall
数据集和 Gowalla
数据集上的 Recall@20
指标分别为 0.019
和 0.204
。这表明通过动态方式 dynamic way
来建模通用品味,要比通过固定的 embedding
向量更好。
SHAN-S
在很大程度上优于 SHAN-L
,这表明短期序列信息在 predicting next item task
上更为重要。
令人惊讶的是,SHAN-S
在两个数据集上都优于 HRM
。例如,HRM
在 Tmall
数据集和 Gowalla
数据集上的 AUC
指标分别为 0.734
和 0.966
。原因可能是 SHAN-S
中的 basic user embedding vector
(它融合了 user basic preference
)是通过短期 item set
中每个 item
的权重从而计算得到的。因此,SHAN-S
还考虑了用户的静态通用品味、以及序列信息从而生成 hybrid representation
。
结果还表明:一层的注意力网络优于两层的最大池化操作。
SHAN-S
在 Tmall
数据集上的 Recall@20
指标要好于 SHAN
。这表明在该数据集上,用户在上一个 session
中的点击行为对当前 session
中的 next clicked item
没有太大影响。
最后,在大多数情况下,SHAN
的性能优于两个单组件的模型。这表明:将动态的用户通用品味添加到 SHAN-S
有助于预测 next item
。因为 SHAN-S
仅仅是结合了用户的 basic
的、fixed
的偏好以及序列行为。
超参数的影响:这里我们研究正则化系数和 embedding size
对模型的影响。由于篇幅所限,我们仅展示 Recall@20
指标下的结果。
在我们的模型中,我们利用 user embedding
和 item embedding
正则化系数 Recall@20
指标的影响。
可以看到:当
可以看到,
和 的取值范围不同,因此间接说明不同类型参数的范数大小位于不同量级。
我们进一步研究了维度大小 user embedding
和 item embedding
的 size
有关,还与注意力网络中的 MLP
参数有关。为简单起见,user embedding
和 item embedding
的 size
是相同的。
可以看到:大的 item
,并且将更有利于通过注意力网络构建 high-level
的因子交互 factor interaction
。这种现象类似于传统的潜在因子模型。在实验中,我们将 100
,从而平衡两个数据集的计算成本和推荐质量。