在推荐系统中,一种常见的方法是研究 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
、更抽象的特征: