八、RRN[2017]

  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 representationmovie representation,是 transductive learning,它无法应用到未见过的时间戳。
      • 而前者采用模型(如马尔科夫链模型)来建模 user representationmovie 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 representationmovie 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 是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 state-of-the-art 的结果。

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

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

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

      z^t+1=f(ht,zt),ht+1=g(ht,zt+1)

      其中:

      • zttime step tobservationztobservation ztrepresentationz^ttime step t 对应的估计值 estimate
      • httime step tlatent state

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

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

      ft=σ(Whfht1+Wzfzt+bf)it=σ(Whiht1+Wzizt+bi)ot=σ(Whoht1+Wzozt+bo)h^t=tanh(Whht1+Wzzt+b)ct=ftct1+ith^tht=ottanh(ct)

      其中:

      • ft 为遗忘门 forget gateit 为输入门 input gateot 为输出门 output gate
      • {Wh,Wz,b,Wh(),Wz(),b()} 为待学习的参数矩阵和参数向量。
      • 为逐元素乘积,σ()sigmoid 非线性激活函数。

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

      • 用于遗忘门、输入门、输出门的 sigmoid 非线性激活函数:由于门控单元的性质,门的输出必须是 0.0 ~ 1.0 之间。因此,如果要替换为新的非线性激活函数,则该激活函数的输出范围也必须满足 0.0 ~ 1.0 之间。
      • 用于 h^thttanh 非线性激活函数:用于对输入数据进行非线性变换,因此也可以替换为 relu 等其它非线性激活函数。但是对于 RNN 网络需要注意梯度消失和梯度爆炸,这也是为什么通常选择 tanh 非线性激活函数的原因。但是,也有论文和网上材料指出,通过仔细挑选合适的权重初始化(权重初始化为 1 附近),那么 relu 非线性激活函数的模型效果会更好。

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

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

8.1 模型

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

    令用户 ilatent stateui,电影 jlatent statemj 。为了处理时间动态temporal dynamic,我们给两者赋予时间索引,即 ui,tmj,t 。现在要做的就是定义latent state 的更新函数update function。我们将更新函数定义为:

    r^i,jt=f(ui,t,mj,t)ui,t+1=g(ui,t,{ri,jt}j=1|M|)mj,t+1=h(mj,t,{ri,jt}i=1|U|)

    其中:

    • r^i,jt 是用户 i 在电影 j 上的预测评分,ri,jttime 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| 部电影的数据集,我们用 xtR|M| 表示给定用户在time step t 的评分向量。如果用户在time step t 对电影 j 的评分为 k ,则 xt,j=k ,否则 xt,j=0 。此外,我们定义 τttime step twallclock ,并且使用 Inewbie=1 来表示用户是否新用户。我们定义 yt 为:

    yt=Wembed[xt,Inewbie,τt,τt1]

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

    注意:

    • 由于评分序列的时间跨度很长,因此这里的 time step 可以按照天粒度、月粒度、甚至年粒度来进行。此时 xt 表示在这个区间内,用户对所有电影的评分向量。这可以大大降低 RNN 序列的长度,降低计算复杂度。粒度越长则越反应长期的趋势(短期趋势被抹平)。
    • 这种线性投影的方式本质上是:将用户在 time step t 区间内评分的电影 embedding 进行 sum 聚合。也可以进行 self attention 聚合、max pooling 聚合等等其它非线性聚合。
    • Inewbieembedding 的方式添加到 yt 中的。
    • yt 包含三个 field:评分向量 fieldnewbie fieldwallclock field。这三个 field 的投影结果直接拼接在一起。也可以采用更复杂的融合方式(如 MLP 或者 attention)。

    yt 作为 LSTMtime step t 的输入。也就是说,我们有以下模型:

    ut=LSTM(ut1,yt)

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

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

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

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

    r^i,jt=f(ui,t,mj,t,ui,mj)=u~i,tm~j,t+uimju~i,t=Wuserui,t+buserm~j,t=Wmoviemj,t+bmovie

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

    这里通过 WuserWmodiedynamic user statedynamic movie state 映射到公共的空间。

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

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

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

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

    minθ(i,j,t)Dtrain(ri,jtr^i,jt(θ))2+R(θ)

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

    虽然我们模型中的目标函数和 building block 都是相当标准的,但是朴素的反向传播无法轻易地解决这个问题。关键的挑战在于每个单独的评分都同时取决于 user-state RNNmovie-state RNN。对于每个单独的评分,通过 2 个序列的反向传播在计算上是很难进行的。我们可以通过仅考虑 user-state RNN 的反向传播来稍微缓解这个问题,但是每个评分仍然取决于 movie state。反过来,我们也可以仅考虑 movie-state RNN,但是每个评分仍然取决于 user state

    相反,我们提出了一种解决该问题的交替子空间下降策略alternating subspace descent strategy 。也就是说,我们仍然考虑 user-state RNN 的反向传播,但现在我们假设电影状态是固定的,因此不需要将梯度传播到这些电影序列中。然后我们交替更新用户序列和更新电影序列。这样,我们可以为每个用户(电影)执行一次标准的前向传播和反向传播。这种策略被称作子空间下降subspace descent

8.2 实验

  1. 数据集:

    • IMDB 数据集:包含 19987 月到 20139 月期间收集的 140 万个评分。
    • Netflix 数据集:包含 199911 月到 200512 月期间收集的 1 亿个评分。

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

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

  2. 配置:

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

      • 在以下的实验中,我们使用具有 40 个隐单元(即 u~i 的维度)、 input embedding 维度 40 维(即 Wembed 的维度)、dynamic state 维度 20 维(即 ut 的维度)的单层 LSTM
      • 我们分别对 NetflixIMDB 数据集使用 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,,105}factor size k{20,40,80,160} 从而调优超参数。
    • TimeSVD++TimeSVD++ 是捕获temporal dynamic 的最成功的模型之一,并在 Netflix 竞赛中展示了强大的结果。我们使用网格搜索 grid search 来搜索正则化系数 λ{100,,105}factor size k{20,40,80,160} 从而调优超参数。
    • AutoRecAutoRec 学习一个自编码器从而将每个电影(或每个用户)编码到低维空间,然后解码从而进行预测。就评分预测而言,它是迄今为止最好的神经网络模型之一,并在多个数据集上取得了 state-of-the-art 结果。我们使用原始论文中的超参数((latent state 维度 k=500)。
  4. 我们的评估指标是标准的 root-mean-square error: RMSE。不同数据集的结果如下表所示。这里,我们对 Netflix fullIMDB 使用 2 个月粒度的 time step ,对 6-month Netflix 数据集使用 1day/7 days (对应于 user/movie)粒度的 time step 。我们将在后续讨论 time step 粒度的选择。我们将模型运行 10epoch,在每个 epoch 结束之后计算验证集的 RMSE。我们报告在验证集上效果最好的模型在测试集上的测试 RMSE

    • 模型准确性accuracy 和大小 size

      • 在所有方法中,我们的模型在所有数据集上均达到了最佳的准确性。和 PMF 相比,RRNIMDB 上提供了 1.7%的改进,在 6-month Netflix 上提供了 1.6% 的改进。

        注意,下表展示的 RMSE 高于 Netflix 竞赛的 RMSE,因为我们测试的纯粹是未来的评分。

      • 此外,我们的模型非常简洁,因为我们存储转移函数 transition function 而不是实际状态从而建模 temporal dynamic。虽然 RRN 优于所有 baseline,但是 RRNPMFTimeSVD++2.7 倍、比 I-AutoRec15.8 倍。具体而言,具有 40embedding20stationary stateRRN 足以超越 160 维的 PMF160 维的 TimeSVD++500 维的 AutoRec

        下图展示了6-month Netflix 数据集上的模型大小和 RMSE

        对于 IMDBRRN 的大小与 PMF, TImeSVD++, U-AutoRec 相当,但是比 I-AutoRec 小得多。这是因为 RRN 使用与分解模型相同维度的 stationary state,并且包含一个相对较小的模型来捕获 temporal dynamic 。我们看到 RRN 在灵活性和准确性方面的明显优势,而不会牺牲模型大小。

    • 鲁棒性 robustnessRNN 在不同数据集上显示出一致的改进,而其它方法在不同数据集上的排名在变化。

      PMFIMDB 数据集上的表现要比 Time-SVD++ 差得多,这再次强调了对 temporal dynamic 建模的必要性。

      但是 PMFNetflix fullNetflix 6 months 上的表现要比 Time-SVD++ 更好,是否说明建模 temporal dynamic 是无用的?

  5. 时间动态:

    • 电影中的外生动态 exogenous dynamic:外生动态指的是电影的评分如何随着外部效应exogenous effect(如电影获奖或得到提名)而变化。我们的目标是了解我们的模型如何对外生动态作出反应。

      具体而言,我们在 1-year 数据集上运行 RNNtime 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 形成对比,PMFembedding 是静态的,因此随着时间的推移平均预测是恒定的。

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

    • 如下图所示,对于训练集中评分很少的用户,RRNPMF 有所改进。对于训练集中评分非常少的用户,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 数据集上不同粒度(usermovie 采用不同的粒度)的训练时间和测试 RMSE。这里我们看到了 RMSE 和训练时间之间的 trade-off。可以通过更长的训练时间为代价来获得更好的准确性。注意,性能对粒度不是特别敏感,即使采用最差 RMSE 的粒度,它也优于所有的 baseline 模型。这可能是因为 RRN 是完全通用的,因为它没有假设数据的特定形式或分布。

九、Caser[2018]

  1. 大多数推荐系统根据用户的一般偏好 general preference 来推荐 item,但是没有关注用户最近交互的 item 。例如,一些用户总是更喜欢苹果的产品(而不是三星的产品),这反应了用户的一般偏好。一般偏好代表用户的长期long term的、静态static的行为。

    另一种类型的用户行为是序列模式 sequential pattern,其中 next item 或者 next action 更可能取决于用户最近互动的 itemaction 。序列模式代表了用户的短期short term的、动态dynamic的行为。序列模式源自在相近时间内互动的 item 之间的某种关系 relationship 。例如,用户可能会在购买 iPhone 之后不久购买手机配件,但是通常而言用户是不会突然购买手机配件的(没有人会对手机配件产生长期兴趣)。在这种情况下,仅考虑一般偏好的推荐系统将错过在销售 iPhone 之后向用户推荐手机配件的机会,因为购买手机配件不是长期的用户行为。

  2. top-N 序列推荐 Sequential Recommendation:令用户集合 U={u1,,u|U|} 以及 item 集合 I={i1,,i|I|},每个用户 u 关联一个 item 序列,记做 Su={S1u,,S|Su|u},StuIStu 的下标 t 代表该 item 在用户行为序列 Su 中发生交互的次序 order 。注意,t 并不是代表发生交互的绝对时间戳absolute timestamp

    给定所有用户的行为序列 S={Su}uUtop-N 序列推荐的目标是:通过考虑一般偏好和序列模式,向每个用户推荐一个 item list ,从而最大化用户的未来需求 future need

    与传统的 top-N 推荐不同,top-N 序列推荐将用户行为建模为 item 的序列sequence,而不是 item 的集合 set (序列是有序的,集合是无序的)。

  3. 先前工作的局限性:基于马尔科夫链的模型是一种早期的 top-N 序列推荐方法,其中 L 阶马尔科夫链根据先前的 Laction 进行推荐。

    • 一阶马尔科夫链使用最大似然估计maximum likelihood estimation来学习 item-to-item 的转移矩阵 transition matrix
    • Factorized personalized Markov chain: FPMC 及其变体通过将转移矩阵分解为两个潜在latent 的、低秩low-rank的子矩阵来改进该方法。
    • Factorized Sequential Prediction with Item Similarity Models: Fossil 通过对先前的 itemlatent representation 进行加权的 sum 聚合,从而将该方法推广到高阶马尔科夫链。

    但是,现有方法受到两个主要限制:

    • 无法建模 union-level 的序列模式。如下图 (a) 所示,马尔科夫链仅建模 point-level 序列模式,其中每个先前的 action (蓝色)独自地individually (而不是协同地collectively)影响 target action (黄色)。

      FPMCFossil 就属于 point-level 序列模式。尽管 Fossil 考虑了一个高阶马尔科夫链,但是它的总体影响 overall influence 是:从一阶马尔科夫转移矩阵分解的、先前的 item latent representation 的加权和。这种 point-level 影响不足以建模下图 (b) 中的 union-level 影响,其中若干个先前的 action 以给定的顺序共同影响 target action 。例如,同时购买牛奶和黄油之后再购买面粉的概率,要比单独购买牛奶(或者单独购买黄油)之后再购买面粉的概率更高。再例如,同时购买内存和硬盘之后再购买操作系统的概率,要比单独购买其中一个配件之后再购买操作系统的概率更高。

      假设同时购买牛奶和黄油之后再购买面粉的概率为 p0,单独购买牛奶之后再购买面粉的概率为 p1,单独购买黄油之后再购买面粉的概率为 p2 。假设加权的权重为 α1,α2 且满足 0.0α1,α21.0 以及 α1+α2=1.0 。假设采用 point-level 的加权和的形式,则有:

      p0=α1×p1+α2×p2,min(p1,p2)p0max(p1,p2)

      一种缓解方案是调整加权的权重范围,如选择 α1=1.0,α2=1.0

    • 不允许 skip 行为behavior。现有模型不考虑 skip 行为的序列模式,如下图 (c) 所示,其中过去的行为可能会 skip 几个 step 之后仍然产生影响。例如,游客在机场、酒店、餐厅、酒吧以及景点依次进行 check-ins。虽然机场check-ins 和酒店 check-ins 并不是景点 check-ins 的直接前驱,但是它们也与景点 check-ins 密切相关。另一方面,餐厅check-ins 和酒吧 check-ins 对景点 check-ins 的影响很小(因为到访景点之前不一定需要到访餐厅或到访酒吧,但是几乎一定意味着到访机场和酒店)。L 阶马尔科夫链没有显式地建模这种 skip 行为,因为它假设前面的Lstep 对紧接的 next step 有影响。

    为了提供关于 union-level 影响以及 skip 行为的证据,论文《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》从两个现实生活数据集 MovieLensGowalla 中挖掘了以下形式的序列关联规则sequential association rule

    (StLu,,St2u,St1u)Stu

    对于上述形式的规则 XY,支持度统计 support count sup(XY)XY 按照规则顺序出现的序列的数量。置信度 confidence sup(XY)sup(X) 是在 X 出现的序列中, X 之后跟随着 Y 的序列的占比。该规则表示 X 中所有 item 对于 Y 的联合影响。

    通过将右侧调整为 St+1uSt+2u,该规则还可以进一步捕获 skip 1 step或者 skip 2 step 的影响。

    下图总结了找到的有效规则数量(过滤掉无效的规则)与马尔科夫阶次 L 、以及 skip 步数的关系。过滤条件为:支持度 >= 5、置信度 >= 50% (作者还尝试了最小置信度为 10%, 20%, 30%,但是这些趋势是相似的)。可以看到:

    • 大多数规则的阶次为 L=2L=3,并且 L 越大则规则的置信度越高。

      可以看到 L=1 阶的规则数量最少,主要是因为大量的 L=1 阶的规则被置信度所过滤。 L=1 阶的规则就是 point-level 规则,L>1 阶的规则就是 union-level 规则。

    • 该图还表明,相当多的规则是 skip 一步或两步的。

    这些发现支持 union-level 以及 skip 行为的影响。

    注意,这里并不意味着 L=1 阶的规则不重要。下图的一个迷惑之处在于:它仅保留置信度 >= 50% 的规则。通常而言,L=1 阶的规则噪音更大(即置信度更低),因此绝大多数 L=1 阶的规则被置信度阈值所过滤掉。但是,即使 L=1 阶的规则包含更少的有效信息,考虑到庞大的数量(过滤前的),L=1 阶的规则也是相当重要的。

    因此下图仅能说明 union-levelskip 行为比较重要,但是并不能说明 point-level 行为不重要,更不能说明 union-levelskip 行为比 point-level 行为更重要。事实上,在现实世界的数据集中,point-level 行为才是占据统治地位。

    从论文后面的实验部分(Caser 组件分析)也能验证这一点:point-level 行为比 union-level 行为更重要。

  4. 为了解决现有工作的上述限制,论文《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》提出了一个 ConvolutionAl Sequence Embedding Recommendation Model: Caser 模型 作为 top-N 序列推荐的解决方案。Caser利用卷积神经网络,其创新之处在于:将前面 Litem 表示为一个embedding 矩阵 ERL×d,其中 dembedding的维度,并且矩阵的行保留了 item 之间的次序order 。论文将这个 embedding 矩阵视为潜在空间中由 Litem 构成的 image ,并使用各种卷积 filter 来搜索序列模式从而作为该 image 的局部特征。然而,与图像识别不同的是,这个 image 并不是通过input 直接给出的,而是必须与所有 filter 同时学习。

    论文主要贡献:

    • Caser 使用水平卷积filter和垂直卷积filter 来捕获 point-levelunion-level 、以及skip 行为的序列模式。
    • Caser 同时建模一般偏好以及序列模式,并在单个统一框架中概括了几种现有的 state-of-the-art 方法。
    • 在现实生活的数据集上,Caser 优于 state-of-the-arttop-N 序列推荐方法。
  5. 相关工作:

    • 传统的推荐方法,如协同过滤、矩阵分解、以及 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 i1 之后购买了 item1 i2 仅仅是因为用户喜欢 i2 (而不是因为 i2i1 之间存在依赖关系)。我们将在实验部分验证这一点:当数据集中包含相当多的序列模式时,RNN-based 方法表现更好。

      这也意味着,如果数据集中包含的序列模式较少,那么 RNN-based 方法的表现会很差。所以应用 RNN-based 方法之前首先需要评估数据集中序列模式的占比。

      然而我们提出的方法没有将序列模式建模为邻接adjacentaction,我们的方法采用了来自 CNN 的卷积 filter ,并将序列模式建模为先前Litemembedding 的局部特征 local feature 。这种方法在单个统一框架中提供了灵活性,从而同时建模 point-level 序列模式、 union-level 建模序列模式、以及 skip 行为。事实上,我们将展示 Caser 概括了几种 state-of-the-art 方法。

    • 一个相关的、但是不同的问题是时间推荐 temporal recommendation,例如应该在早晨而不是在晚上推荐咖啡。而我们的 top-N 序列推荐会在用户购买 iPhone 后不久推荐手机配件,这与时间无关。显然,这两个问题是不同的,需要不同的解决方案。

9.1 模型

  1. 我们提出的 ConvolutionAl Sequence Embedding Recommendation: Caser 模型结合了卷积神经网络 Convolutional Neural Network: CNN 来学习序列特征、以及 Latent Factor Model: LFM 来学习 user specific 特征。Caser 网络设计的目标是多方面的:同时捕获一般偏好以及序列模式、同时在 union-levelpoint-level 进行捕获、捕获 skip 行为、所有一切都在 unobserved space 中进行。

    如下图所示,Caser 由三个组件构成:Embedding Look-upConvolutional LayersFully-connected Layers。为了训练 CNN,对于每个用户 u,我们从用户的action序列 Su 中提取每 L 个连续的 item 作为输入,并将它们的 next T items 作为 target (如下图左侧所示)。这是通过在用户的 action 序列上滑动一个大小为 L+T 的窗口来完成的。每个窗口为用户 u 生成一个训练实例,该实例以三元组 (u, previous L items, next T items) 来表示。

9.1.1 Embedding Look-up

  1. Caser 通过将前面 Litemembedding 馈入神经网络中来捕获潜在空间中的序列特征。item iembedding eiRd 是类似于 latent factor 的概念,这里 dembedding 维度。embedding look-up 操作检索前面 Litem 对应的 item embedding,并将它们拼接在一起,从而为用户 u 生成在 time step tembedding matrix E(u,t)RL×d

    E(u,t)=[eStLueSt2ueSt1u]RL×d

    E(u,t) 的第 l 行代表这 Litem 中的第 litemembedding

    除了 item embedding 之外,我们还为用户 u 提供了一个 embedding 向量 PuRd ,它表示潜在空间中的 user featureitem embeddinguser embedding 分别由上图中 Embedding Look-up 方框中的蓝色圆圈和紫色圆圈来表示。

9.1.2 卷积层

  1. 参考在文本分类中使用 CNN 的思想,我们的方法将 embedding 矩阵 ERL×d 视为潜在空间中由前面 Litem 组成的 image ,并将序列模式视为该 image 的局部特征。这种方法可以使用卷积 filter 来搜索序列模式。

    下图展示了两个 horizontal filter (不同颜色的方块代表不同的参数值,颜色越深则数值越大),它们捕获两个 union-level 的序列模式。这些 filter(表示为 h×d 的矩阵),高度为 h=2,宽度 d 等于 embedding 维度(称作 full width)。它们通过在 E 的行row 上滑动从而筛选序列模式的信号。例如,第一个 filter 通过在潜在维度中具有更大的值(其中酒店和机场具有更大的值)来选择序列模式 (Airport, Hotel) -> Great Wall

    Latent Space 给出的是 embedding 矩阵,颜色越深则数值越大。Horizontal FIlters 给出的是 filter 矩阵,颜色越深则数值越大。第一个 filter 主要捕获前面3 个维度(filter 末尾2 个维度的取值几乎为零),而 AirportHotelembedding 在前面3 个维度取值较大、末尾 2 个维度取值几乎为零。

    类似地,vertical filter 是一个 L×1 的矩阵,将在 E 的列上滑动。更多细节将在后面解释。

    与图像识别不同,这里的 image E 并不是直接提供,因为所有 item iembedding 向量 ei 必须与所有 filter 一起同时学习。

  2. 水平卷积层Horizontal Convolutional Layer:该层有 Khorizontal filter F(k)Rh×d,1knh{1,,L}filter 的高度。例如,如果 L=4 ,首先可以选择 K=8filter,然后可以选择 h{1,2,3,4}

    F(k) 将在 E 上从上到下滑动,并且与 E 的所有水平维度horizontal dimension (每个水平的行表示一个 itemembedding )交互。第 i 次交互的结果得到第 i 个卷积值:

    ci(k)=ϕc(Ei:i+h1F(k))

    其中: 表示内积算子inner product operatorϕc() 为卷积层的激活函数,第 i 次交互覆盖了第 iitem 到第 i+h1itemembedding

    卷积值是 F(k)E 的子矩阵 Ei:i+h1 (这个子矩阵是由 E 的第 i 行到第 ih+1 行构成)的内积。F(k) 的最终卷积结果是向量:

    c(k)=[c1(k),c2(k),,cLh+1(k)]RL

    然后我们对 c(k) 应用最大池化max pooling操作,从而从该特定 filter 产生的所有卷积值中提取最大值。这个最大值捕获了 filter 抽取的最重要的特征。因此,对于卷积层的 Kfilter,它们最终总的输出为 oRK

    o=[max(c(1)),max(c(2)),,max(c(K))]RK

    horizontal filter 通过 embedding E 从而与每连续的 hitem 交互。模型同时学习 embeddingfilter 从而最小化目标函数,这个目标函数编码了 target item 的预测误差prediction error

    通过滑动不同高度的 filter,模型将会接收到重要的信号,无论这些信号处在什么位置。因此,可以训练 horizontal filter 从而捕获具有多种 union sizeunion-level 序列模式。

    Kfilter 可以采用不同的高度,因此这些 filterh 是很重要的超参数。

  3. 垂直卷积层Vertical Convolutional Layer:我们用 tilde 符号 来表示垂直卷积层。假设垂直卷积层有 K~filter F~(k)RL×1,1kK~ 。每个 filter F~(k) 通过在 E 上从左到右滑动 d 次从而与 E 的列交互,最终产生垂直卷积结果 c~(k)

    c~j(k)=E:,jF~(k)c~(k)=[c~1(k),c2(k),,cd(k)]Rd

    其中: 表示内积算子inner product operatorE:,jRL 表示 E 的第 j 列。

    由于内积算子的性质,可以很容易地证明:c~(k) 等于 E 各行的加权和,权重为 F~i(k) ,即:

    c~(k)=i=1LF~i(k)×eiRd

    其中 eiRdE 的第 i 行,代表第 iitemembedding 。因此,通过 vertical filter 我们可以学习聚合前面 Litemembedding,类似于 Fossil 的加权 sum 来聚合前面 Litemlatent representation 。不同之处在于每个 filter F~(k) 扮演了不同的聚合器。因此,与 Fossil 类似,这些 vertical filter 通过对前面 itemlatent representation 的加权和来捕获 point-level 序列模式。然而 Fossile 对每个用户使用a single weighted sum ,我们的方法使用 K~ 个全局 vertical filter 为所有用户生成 K~ 个加权和 o~R(dK~)

    o~=[c~(1)||c~(2)||||c~(K~)]R(dK~)

    其中 || 表示向量拼接(因此 o~ 向量的长度为 dK~ )。

    注:

    • 原始论文中,垂直卷积层没有使用激活函数,理论上也可以添加激活函数。
    • 垂直卷积层并没有使用最大池化,而是直接将不同 filter 产生的卷积结果进行拼接。

    虽然 vertical filterhorizontal filter 的用途都是聚合,但是二者稍有不同:

    • 每个 vertical filter 的尺寸固定为 L×1 (而不是 L×ss>1 为宽度)。这是因为 E 的每一列对我们来说都是潜在latent 的,单次与多个连续的列进行交互是没有意义的。
    • 不需要对垂直卷积的结果应用最大池化操作,因为我们希望对每个潜在维度 latent dimension 保留聚合结果。

9.1.3 全连接层

  1. 我们将两个卷积层的输出拼接起来,并将它们馈入一个全连接层,从而获得更 high-level、更抽象的特征: