一、RRN [2017]

《Recurrent Recommender Networks》

  1. 在推荐系统中,一种常见的方法是研究 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)。此外,论文证明该模型能够准确地预测用户偏好在未来的变化。

      外生动态:电影收到外界因素(如电影获得大奖)导致电影评分发生变化。内生动态:电影随着上映时间的增加从而导致评分发生变化。

  2. 相关工作:

    • 推荐系统:基础(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 是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 SOTA 的结果。

    • 循环深度网络:下图描述的(graphical model)的关键挑战之一是:它要求我们根据observation 推断未来的状态,例如通过消息传递(message passing)或粒子滤波(particle filtering)(粒子滤波通过非参数化的蒙特卡洛模拟方法来实现递推贝叶斯滤波)。这是昂贵且困难的,因为我们需要将评分的 mission model 与 latent state 相匹配。换句话讲,将关于评分的信息 feed back 到 latent state 的唯一方法是通过 likelihood p(ri,j∣u→i,t,m→j,t) 。实现这一点的常用策略是通过消息传递或粒子滤波,即通过序列的蒙特卡洛采样(Sequential Monte Carlo sampling)。

      这种方法需要学习 {u→i,t},{m→j,t} 这些 latent state (作为模型的 parameter ),这是昂贵且困难的。

      或者,我们可以简单地学习 mapping 作为非参数的状态更新的一部分,即通过 Recurrent Neural Network: RNN 。关键思想是使用潜在变量自回归模型(latent variable autoregressive model),如下所示:

      z^t+1=f(h→t,z→t),h→t+1=g(h→t,z→t+1)

      其中:

      • zt 为time step t 的 observation,z→t 为observation zt 的 representation ,z^t 为time step t 对应的估计值 estimate。

      • h→t 为time step t 的 latent state 。

      所谓的 ”非参数“ 指的是 latent state 不是作为模型的 parameter 来学习的,而是通过某个函数来生成的。通过函数来生成并更新 latent state ,然后通过训练数据来学习这个函数,这就是论文的核心思想。

      上式给出了通用的函数形式,但是还可以引入非线性以及一些解决稳定性和梯度消失的工具。一个流行的选择是 Long Short-Term Memory: LSTM ,它捕获时间动态。我们将 LSTM 作为协同过滤系统的 building block。 整体模型如下图所示。状态更新如下:

      f→t=σ(Whfh→t−1+Wzfz→t+b→f)i→t=σ(Whih→t−1+Wziz→t+b→i)o→t=σ(Whoh→t−1+Wzoz→t+b→o)h→^t=tanh⁡(Whh→t−1+Wzz→t+b→)c→t=f→t⊙c→t−1+i→t⊙h→^th→t=o→t⊙tanh⁡(c→t)

      其中:

      • f→t 为遗忘门 forget gate,i→t 为输入门(input gate),o→t 为输出门(output gate)。

      • {Wh,Wz,b→,Wh(∗),Wz(∗),b→(∗)} 为待学习的参数矩阵和参数向量。

      • ⊙ 为逐元素乘积,σ(⋅) 为 sigmoid 非线性激活函数。

      LSTM 中有两种类型的非线性激活函数:

      • 用于遗忘门、输入门、输出门的 sigmoid 非线性激活函数:由于门控单元的性质,门的输出必须是 0.0 ~ 1.0 之间。因此,如果要替换为新的非线性激活函数,则该激活函数的输出范围也必须满足 0.0 ~ 1.0 之间。

      • 用于 h→^t 和 h→t 的 tanh 非线性激活函数:用于对输入数据进行非线性变换,因此也可以替换为 relu 等其它非线性激活函数。但是对于 RNN 网络需要注意梯度消失和梯度爆炸,这也是为什么通常选择 tanh 非线性激活函数的原因。但是,也有论文和网上材料指出,通过仔细挑选合适的权重初始化(权重初始化为 1 附近),那么 relu 非线性激活函数的模型效果会更好。

      为简单起见,在本文中我们使用 h→t=LSTM(h→t−1,z→t) 来表示这些操作。注意,LSTM 不是唯一的选择,例如也可以选择 GRU(GRU 的计算成本更低且结果通常相似)。在本文中,我们使用 LSTM 因为它稍微更通用。

      《Session-based recommendations with recurrent neural networks》 没有考虑个性化,也没有尝试建模 user state transition 和 item state transition 。

1.1 模型

  1. 我们使用 LSTM RNN 来捕获用户的时间依赖性(temporal dependency)和电影的时间依赖性。通过这种方式,我们能够融合(incorporate )过去的observation 并以整体的方式预测未来的轨迹。

    令用户 i 的 latent state 为 u→i,电影 j 的 latent state 为 m→j 。为了处理时间动态(temporal dynamic),我们给两者赋予时间索引,即 u→i,t 和 m→j,t 。现在要做的就是定义latent state 的更新函数(update function)。我们将更新函数定义为:

    r^i,j∣t=f(u→i,t,m→j,t)u→i,t+1=g(u→i,t,{ri,j∣t}j=1|M|)m→j,t+1=h(m→j,t,{ri,j∣t}i=1|U|)

    其中:

    • r^i,j∣t 是用户 i 在电影 j 上的预测评分,ri,j∣t 是 time step t 上的实际评分。

    • M 是所有电影的集合,|M| 是所有电影的数量,U 是所有用户的集合,|U| 是所有用户的数量。

    • 函数 f(⋅),g(⋅),h(⋅) 是待学习的函数,一旦学到之后就可以直接推断新的latent state 。

    我们不是解决优化问题来找到 user parameter/ movie parameter,而是解决优化问题来找到生成 user parameter/movie parameter 的函数。这方面类似于深度自编码器,其中深度自编码器学习一个编码器函数来编码过去的评分。

    然而深度自编码器的目标是最小化重构误差,而这里的问题是最小化预测评分与真实评分之间的误差。

  2. 用户状态和电影状态:为简单起见,我们首先描述 user-state RNN,因为 movie-state RNN 也是以相同的方式来定义的。

    给定一个包含 |M| 部电影的数据集,我们用 x→t∈R|M| 表示给定用户在time step t 的评分向量。如果用户在time step t 对电影 j 的评分为 k ,则 xt,j=k ,否则 xt,j=0 。此外,我们定义 τt 为time step t 的 wallclock ,并且使用 Inewbie=1 来表示用户是否新用户。我们定义 y→t 为:

    y→t=Wembed[x→t,Inewbie,τt,τt−1]

    其中: Wembed 是将 source information 投影到 embedding 空间中的、待学习的变换(transformation)。

    注意:

    • 由于评分序列的时间跨度很长,因此这里的 time step 可以按照天粒度、月粒度、甚至年粒度来进行。此时 x→t 表示在这个区间内,用户对所有电影的评分向量。这可以大大降低 RNN 序列的长度,降低计算复杂度。粒度越长则越反应长期的趋势(短期趋势被抹平)。

    • 这种线性投影的方式本质上是:将用户在 time step t 区间内评分的电影 embedding 进行 sum 聚合。也可以进行 self attention 聚合、max pooling 聚合等等其它非线性聚合。

    • Inewbie 是 embedding 的方式添加到 y→t 中的。

    • y→t 包含三个 field:评分向量 field、newbie field、wallclock field。这三个 field 的投影结果直接拼接在一起。也可以采用更复杂的融合方式(如 MLP 或者 attention)。

    y→t 作为 LSTM 在time step t 的输入。也就是说,我们有以下模型:

    u→t=LSTM(u→t−1,y→t)

    注意,如果在time step t 时用户没有对任何电影进行评分,那么该time step(即 no-rating step)不应该包含在 RNN 中,这可以节省计算。尽管如此,wallclock 的引入为模型提供了考虑 no-rating step 所需的信息,并且额外捕获了诸如 rating scale 变化、电影年龄之类的效果。

    rating scale 变化指的是,比如某个时刻之前的评分范围是 1 ~ 5 分,之后的评分范围是 1 ~ 10 分。

    为了区分不同的用户,我们添加了用户 i 的索引,即 u→i,t。同样地,为了区分不同的电影,我们添加了电影 j 的索引,即 m→j,t 。

  3. 评分发射 rating emission(即,评分函数):尽管用户状态和电影状态可以随时间变化,但是我们推测仍然存在一些静态分量(stationary component)来编码固定属性,例如用户画像、用户的长期偏好、电影的题材。为了实现这一点,我们分别用固定的 u→i 和 m→j 来补充时变 time-varying 的 u→i,t 和 m→j,t 。因此,我们认为评分函数同时是 dynamic state 和 stationary state 的函数,即:

    r^i,j∣t=f(u→i,t,m→j,t,u→i,m→j)=u→~i,t⋅m→~j,t+u→i⋅m→ju→~i,t=Wuseru→i,t+b→userm→~j,t=Wmoviem→j,t+b→movie

    简而言之,标准的分解模型仅考虑了静态效应(stationary effect),而我们使用 LSTM 从而考虑了更长期的动态更新(dynamic update)。这使得我们的模型成为矩阵分解(matrix factorization)模型的严格超集(strict superset)。

    这里通过 Wuser 和 Wmodie 将 dynamic user state 和 dynamic movie state 映射到公共的空间。

    另外,上式等价于经 dynamic state 和 stationary state 拼接之后再内积,即:

    r^i,j∣t=[u→~i,t,u→i]⋅[m→~j,t,m→j]
  4. 评分预测(rating prediction):与传统的推荐系统不同,在预测时我们使用外推状态(extrapolated state)(即通过LSTM 生成的 state )而不是估计状态(estimated state )来进行评分预测。也就是说,我们将最新的 observation 作为输入,更新状态,并根据更新后的状态进行预测。

    通过这种方式,我们自然会考虑到之前评分带来的因果关系。例如,我们能够解决享乐适应(hedonic adaptation),它指的是在电影推荐的背景下,用户观看了一部令人满意的电影之后,用户对电影的满意度的 level 会降低。对于令人失望的电影也是类似的。

  5. 训练:模型的优化目标函数是找到合适的 parameter 从而产生最接近实际评分的预测,即:

    minθ∑(i,j,t)∈Dtrain(ri,j∣t−r^i,j∣t(θ))2+R(θ)

    其中:θ 表示要学习的所有 parameter,Dtrain 是训练集中观察到的 (user, movie, timestamp) 元组的集合, R(⋅) 表示正则化函数。

    虽然我们模型中的目标函数和 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)。

1.2 实验

  1. 数据集:

    • IMDB 数据集:包含 1998 年 7 月到 2013 年 9 月期间收集的 140 万个评分。

    • Netflix 数据集:包含 1999 年 11 月到 2005 年 12 月期间收集的 1 亿个评分。

    每个数据点是一个 (user id, item id, time stamp, rating) 元组,时间戳的粒度为 1 day 。为了更好地理解我们模型的不同方面,我们在具有不同训练和测试周期的几个不同时间窗口上测试我们的模型。详细的数据统计如下表所示。

    注意,我们根据时间来拆分数据从而模拟实际情况:我们需要预测未来的评分(而不是对以前的评分插值interpolate)。测试期间的评分被平均拆分为验证集和测试集。

  2. 配置:

    • 我们发现即使使用非常少的参数,我们的模型也能够达到良好的准确性。

      • 在以下的实验中,我们使用具有 40 个隐单元(即 u→~i 的维度)、 input embedding 维度 40 维(即 Wembed 的维度)、dynamic state 维度 20 维(即 u→t 的维度)的单层 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 τt 被缩放为零均值、单位方差。

  3. baseline 方法:

    • PMF:尽管简单,然而 PMF 在评分预测方面取得了鲁棒的、强大的结果。由于我们的模型采用与 PMF 相同的因子分解来建模静态效应,因此和 PMF 比较的结果直接展示了我们的方法建模 temporal dynamic 的好处。我们使用 LIBPMF ,并使用网格搜索( grid search )来搜索正则化系数 λ∈{100,⋯,10−5}、factor size k∈{20,40,80,160} 从而调优超参数。

    • TimeSVD++:TimeSVD++ 是捕获temporal dynamic 的最成功的模型之一,并在 Netflix 竞赛中展示了强大的结果。我们使用网格搜索(grid search)来搜索正则化系数 λ∈{100,⋯,10−5}、factor size k∈{20,40,80,160} 从而调优超参数。

    • AutoRec:AutoRec 学习一个自编码器从而将每个电影(或每个用户)编码到低维空间,然后解码从而进行预测。就评分预测而言,它是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 SOTA 结果。我们使用原始论文中的超参数(latent state 维度 k=500)。

  4. 我们的评估指标是标准的 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 是无用的?

  5. 时间动态:

    • 电影中的外生动态(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 是静态的,因此随着时间的推移平均预测是恒定的。

  6. 冷启动:为了了解我们模型的优势和劣势,我们在训练集中评分很少的用户和电影上与静态 PMF 模型进行了比较。

    • 如下图所示,对于训练集中评分很少的用户,RRN 比 PMF 有所改进。对于训练集中评分非常少的用户,RRN (相比较 PMF)的相对改进最大。

      整体而言,训练集中评分数量越多,则相对改进越小。

    • 如下图所示,我们发现 RRN 仍然一致性地为评分很少的电影提供改进,但是改进幅度与观察次数之间的关系更加 noisy。这可能是由于这些电影在测试集中的评分相对较少。

      这个理由缺乏数据的支撑,因为前面关于评分数量少的用户的结论中,这些用户也可能在测试集中的评分很少。

  7. 无需重新训练(re-training)从而融合新数据:估计转移函数(transition function)而不是估计状态本身的一个优势是:即使没有重新训练(re-training),我们也能够融合新观察到的评分信息从而更新状态(只需要将新的评分输入到网络中)。

    这里,我们在 6-month Netflix 数据集上评估该策略。具体而言,我们使用从第一个测试 time step 观察到的评分来外推状态(extrapolate state),并使用外推到的状态来预测第二个 time step 的评分。我们测试了具有不同的评分波动水平的电影。波动(fluctuation)被定义为:评分最高的 time step 的平均评分,与评分最低的 time step 的平均评分之间的差异。

    下图总结了该策略的 RMSE 改进。我们观察到:虽然我们的预训练模型没有捕获到小的波动,但是它成功地捕获了大的波动,从而显著提高了预测准确性。也就是说,使用 RRN 不仅缓解了频繁昂贵的重新训练的需要,而且还开辟了提供实时推荐的新途径。

    通常小的波动不太重要,此时这些电影的评分比较稳定,甚至直接将它们的评分预估为一个恒定值就足够可以。

  8. time step 粒度(granularity)和敏感性(sensitivity):较小的 time step 允许模型频繁地更新并捕获短期影响。然而,这也会导致更长的 LSTM 序列,从而进一步导致更高的训练成本。

    下表总结了 6-month 数据集上不同粒度(user 和 movie 采用不同的粒度)的训练时间和测试 RMSE。这里我们看到了 RMSE 和训练时间之间的 trade-off。可以通过更长的训练时间为代价来获得更好的准确性。注意,性能对粒度不是特别敏感,即使采用最差 RMSE 的粒度,它也优于所有的 baseline 模型。这可能是因为 RRN 是完全通用的,因为它没有假设数据的特定形式或分布。