八、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、更抽象的特征:

    z=ϕa(W[o||o~]+b)Rd

    其中:|| 表示向量拼接,WRd×(K+dK~) 为待学习的投影矩阵(将被拼接的向量投影到一个 d 维的潜在空间),bRd 为对应的 bias 向量,ϕa() 为全连接层的激活函数。

    zRd 也就是我们所说的 convolutional sequence embedding ,它对前面 Litem 的各种序列特征进行编码。

  2. 为了捕获用户的一般偏好,我们还 look-upuser embedding Pu ,并将它与 z 拼接在一起,然后将它们投影到具有 |I| 维输出的 output layer,即:

    y(u,t)=Wo[z||Pu]+boR|I|

    其中:WoR|I|×2d 为输出层的权重矩阵,boR|I| 为输出层的 bias 向量。

    输出层的值 y(u,t) 中第 i 个元素 yi(u,t) 代表了用户 utime step titem i 交互的可能性。

  3. z 旨在捕获短期序列模式,而 user embedding Pu 捕获用户的长期一般偏好。这里我们将 user embedding Pu 放在最后一个隐层(而不是生成 z 的、第一个隐层),有几个原因:

    • 正如我们将在后文看到的,这使得我们的模型具有概括generalize 其它模型的能力。
    • 我们可以用其它被概括模型的参数来预训练pre-train我们模型的参数。正如 《Neural collaborative filtering》 所述,这种预训练对模型性能至关重要。

9.1.4 模型训练和推断

  1. 为了训练模型,我们将输出层的值 y(u,t) 变换为概率:

    p(StuSt1u,,StLu)=σ(yStu(u,t))

    其中:σ(x)=1/(1+ex)sigmoid 函数。

    这里本质上是通过负采样技术将 softmax 输出转换变 sigmoid 输出。

    Cu={L+1,L+2,,|Su|} 为我们需要对用户 u 执行预测的 time step 的集合。数据集中所有序列的似然 likelihood 为:

    p(SΘ)=uUtCuσ(yStu(u,t))jIjStu(1σ(yj(u,t)))

    其中 Θ={P,E,F,F~,W,b,Wo,bo} 为模型参数。

    为进一步捕获 skip 行为,我们通过用 Dtu={Stu,St+1u,,St+Tu} 来替代上式中的 next item Stu 从而考虑 next T target items。采用负的对数似然之后,我们得到目标函数(即二元交叉熵损失):

    L=uUtCuiDtu[logσ(yi(u,t))+jIjilog(1σ(yj(u,t)))]

    参考已有的工作,对于每个 target item i ,我们随机负采样若干个负样本 j (在我们的实验中负采样数量为 3 )。

  2. 模型参数 Θ 通过在训练集上最小化损失函数来学到,而超参数 {d,K,K~,L,T} 等等是在验证集上通过 grid search 调优得到。我们使用 Adam 优化算法,batch size = 100

    为了控制模型复杂度并避免过拟合,我们使用了两种正则化方法:应用于所有参数的 L2 正则化、应用于全连接层的 drop ratio = 50%Dropout 技术。

    我们使用 MatConvNet 实现了 Caser。整个训练时间与训练样本数量成正比。例如,在 4-cores i7 CPU32 GB RAM 的机器上,MovieLens 数据大约需要 1 小时、Gowalla 数据需要 2 小时、Foursquare 数据需要 2 小时、TMall 数据需要 1 小时。这些时间与 Fossil 的运行时间相当,并且可以通过使用 GPU 进一步减少。

  3. 在训练好模型之后,为了在 time step t 为用户 u 提供推荐,我们获取用户 ulatent embedding Pu 、以及该用户前面 Litemembedding 作为网络的输入。我们向用户 u 推荐在输出层 y 中取值最大的 Nitem 。向所有用户进行推荐的复杂度为 O(|U|×|I|×d) ,其中忽略了卷积运算的复杂度。

    注意,target item 数量 T 是模型训练期间使用的超参数,而 N 是模型推断期间向用户推荐的 item 数量。

  4. 读者注:Caser 模型的几个不足的地方:

    • 水平卷积虽然 “宣称” 捕获了 union-level 序列模式,但是卷积操作本身是 non-sequential 的。更准确的说法是:水平卷积捕获了 union-level 的局部模式 local mode

      如果需要捕获序列模式,那么可以用 RNN 代替水平卷积。

    • 超参数 h 定义了水平卷积 filter 的大小,它刻画了 local mode究竟有多 local。目前 Caser 模型中,h 是一个超参数,在训练期间对所有样本都是 fixed 。这使得模型不够灵活,因为不同的样本可能需要不同的 h 值。

      可以通过 self attention 机制自适应地选择相关的 item ,从而得到自适应的、softh 值。

    • 超参数 T 决定了当前的 local mode 影响到未来的第几个 target item 。目前 Caser 模型中,T 是一个超参数,在训练期间对所有样本都是 fixed 。这使得模型不够灵活,因为不同的样本可能需要不同的 T 值。

      此外,Caser 模型考虑 Dtu={Stu,St+1u,,St+Tu} 作为目标,这意味着当前的 local mode 会影响未来的多个 target item。这会引入大量的噪声,因为很可能当前的 local mode 仅与其中的某个(而不是连续的多个) target item 相关。

      可以通过 target attention 机制自适应地选择与 target item 最相关的 item,从而过滤掉无关的 item 。然后对剩下的 item 应用 CNNRNN

9.1.5 和现有模型的联系

  1. Caser vs MF:通过丢弃所有卷积层,我们的模型变成一个普通的 LFM ,其中 user embedding 作为 user latent factor,它们关联的权重作为 item latent factorMF 通常包含 bias 项,在我们的模型中为 bo 。丢弃所有卷积层之后,得到的模型与 MF 相同:

    yi(u,t)=wo,i[0||Pu]+bo,i

    其中:yi(u,t)y(u,t) 的第 i 个元素,wo,iWo 的第 i 行,bo,ibo 的第 i 个元素。

  2. Caser vs FPMCFPMC 将分解的一阶马尔科夫链与 LFM 融合,并通过 Bayesian personalized ranking : BPR 进行优化。尽管 Caser 使用了不同的优化准则(即,交叉熵),但是它能够通过将前一个 itemembedding 复制到 hidden layer z (即,将 z 替换为 eSt1u)并且不使用任何 bias 项来概括 FPMC

    yi(u,t)=wo,i[eSt1u||Pu]

    由于 FPMC 使用 BPR 作为准则,因此我们的模型与 FPMC 并不完全相同。然而,BPR 被限制为在每个 time step 仅有一个 target 样本和一个 negative 样本。我们的交叉熵损失没有这些限制。

  3. Caser vs Fossil:通过忽略水平卷积层并使用单个 vertical filter (即 K~=1)并将垂直卷积结果 c~ 复制到 hidden layer z ,我们得到:

    yi(u,t)=wo,i[c~||Pu]+bo,i

    正如垂直卷积层中所讨论的那样,这个 vertical filter 将前面 Litemembedding 进行加权和,就像在 Fossil 中一样(然而 Fossil 使用 Similarity Model 而不是 LFM) ,并将其分解在与马尔科夫模型相同的潜在空间中。

    另一个区别是 Fossil 对每个用户使用一个局部权重,而我们通过 vertical filter 使用多个全局权重。

9.2 实验

  1. 数据集:仅当数据集包含序列模式时,序列推荐才有意义。为了识别这样的数据集,我们对几个公共数据集应用了序列关联规则挖掘 sequential association rule mining ,并计算了它们的序列强度sequential intensity: SI

    SI=#rules#users

    分子是 (StLu,,St2u,St1u)Stu 形式的规则总数,该规则是基于 L 阶马尔科夫链(L15)找到的,并对支持度(最小支持度为 5 )和置信度(最低置信度为 50%)进行过滤。分母是用户总数。我们使用 SI 来估计数据集中序列信号sequential signal 的强度。

    下表描述了四个数据集及其 SI

    • MovieLens 是广泛使用的电影评分数据集。
    • GowallaFoursquare 包含通过 user-venue check-ins 得到的隐式反馈。
    • Tmall 是从 IJCAI 2015 竞赛中获得的用户购买数据,旨在预测重复的购买者 buyer

    根据前人的工作,我们将所有数字评分转换为取值为 1 的隐式反馈。我们还删除了冷启动cold-start 的用户和 item (反馈数量少于 n 的用户和 item) ,因为处理冷启动推荐通常在文献中被视为一个单独separate的问题。对于 MovieLens, Gowalla, Foursquare, Tmalln 的取值分别为5, 16, 10, 10

    前人的工作所使用的的 Amazon 数据集由于其 SI 太小(Office ProductsSI0.0026Clothing, Shoes, JewelryVideo GamesSI0.0019)而未被使用。换句话讲,该数据集的序列信号远远低于前面的四个数据集。

    我们将每个用户序列中前 70%action 作为训练集,使用接下来的 10%action 作为验证集来调优所有模型的最佳超参数,使用最后的 20%action 作为测试集来评估模型性能。

  2. 评估指标:

    • Precision@NRecall@N :给定一个用户的、长度为 N 的推荐列表,记做 R^1:N。该用户测试集中的 action 记做 R(即, action 序列中最后 20%action )。则 Precision@NRecall@N 定义为:

      Precision@N=|RR^1:N|NRecall@N=|RR^1:N||R|

      我们报告所有用户的平均 Precision@N 和平均 Recall@N,并且选择 N{1,5,10}

    • Mean Average Precision: MAP:给定用户的、全量 item 的推荐列表,记做 R^ ,则:

      AP=N=1|R^|Precision@N×I(N)|R^|

      其中:如果 R^ 中第 Nitem 位于 R 中 则 I(N)=1 否则 I(N)=0

      也有文献移除了 I(N) 这个系数。

      MAP 是所有用户的 AP 均值。

  3. baseline 方法:

    • POP:根据 item 的流行度popularity 进行推荐,而流行度取决于 item 的交互次数。
    • BPR:结合了矩阵分解模型的 Bayesian personalized ranking: BPR 是对隐式反馈数据进行非序列推荐的 state-of-the-art 方法。
    • FMCFPMCFMC 将一阶马尔科夫转移矩阵分解为两个低维子矩阵,而 FPMCFMCLFM 的融合。它们都是 state-of-the-art 的序列推荐方法。FPMC 在每一步都允许推荐一个 basket 的若干个 item。对于我们的序列推荐问题,每个 basket 都只有一个 item
    • FossilFossil 对高阶马尔科夫链进行建模,并使用 Similarity Model 而不是 LFM 来建模一般用户偏好。
    • GRU4RecGRU4Rec 使用 RNN 来捕获序列依赖性并进行预测。
  4. 配置:对每种方法,都在验证集上使用 grid search 调优最佳超参数。调优的超参数包括:

    • 对所有模型(除了 POP):潜在因子维度 d{5,10,20,30,50,100},正则化超参数,学习率(取值范围 {1,0.1,0.01,0.001,0.0001}) 。
    • Fossil, Caser, GRU4Rec :马尔科夫链阶次 L{1,,9}
    • 对于 Caserhorizontal filter 的高度 h{1,,L}target 数量 T{1,2,3} ,激活函数 ϕa,ϕc 来自于 {identity, sigmoid, tanh, relu} 。对于每个高度 hhorizontal filter 的数量 K{4,8,16,32,64}vertical filter 的数量 K~{1,2,4,8,16}

    我们报告每种方法在其最佳超参数 setting 下的结果。

  5. 实验结果:下表总结了所有方法的最佳结果。每一行中表现最好的结果以粗体突出显式。最后一列是 Caser 相对于最佳 baseline 的改进,定义为 (Caser-baseline)/baseline 。结论:

    • 除了 MovieLens 之外,Caser 在所有指标上相对于最佳 baseline 都取得了大幅提升。
    • baseline 方法中,序列推荐器(如 FPMCFossil )通常在所有数据集上都优于非序列推荐器(即 BPR),这表明考虑序列信息sequential information的重要性。
    • FPMCFossil 在所有数据集上的表现都优于 FMC,这表明个性化的有效性。
    • MovieLens 上,GRU4Rec 的性能接近于 Caser,但在其它三个数据集上的性能要差得多。
    • 事实上,MovieLens 比其它三个数据集具有更多的序列信号,因此 RNN-basedGRU4Rec 可以在 MovieLens 上表现良好,但是在其它三个数据集上效果不佳。此外,GRU4Rec 的推荐是 session-based的,而不是个性化的,这在一定程度上扩大了泛化误差。

  6. 接下来我们研究超参数 d,L,T 的影响,每次仅研究一个超参数并将剩余的超参数保持在之前调优的最佳 setting。我们聚焦于 MAP 超参数,因为它是一个整体的性能指标,并且与其它指标一致。

    • 维度 d 的影响:

      • 在更稠密的 MovieLens 数据集上,更大的 d 并不总能带来更好的模型性能。当 d 选择合适大小时,模型会达到最佳性能;当 d 较大时,模型会因为过拟合而变得更糟。
      • 但是对于其它三个更稀疏的数据集,每个模型都需要更大的 d 才能达到最佳效果。
      • 对于所有数据集,Caser 通过使用较小的 d 来击败最强的 baseline 方法。

    • 马尔科夫阶次 Ltarget 数量 T 的影响:Caser-1, Caser-2, Caser-3 表示target 数量 T=1,2,3Caser ,从而研究 skip 行为的影响。

      • 在更稠密的 MovieLens 数据集上,Caser 较好地利用了较大 L 提供的额外信息( L 越大效果越好)。而且 Caser-3 表现最好,这表明 skip 行为的好处。
      • 然而,对于稀疏的数据集,并非所有模型都始终受益于较大的 L 。这是合理的,因为对于稀疏的数据集,更高阶的马尔科夫链往往会引入额外的信息和更多的噪声。
      • 在大多数情况下,Caser-2 在这三个稀疏数据集上的表现略优于 Caser-1Caser-3

  7. Caser 组件分析:现在我们评估 Caser 每个组件,水平卷积层(即 o)、垂直卷积层(即 o~)、个性化(即 Pu),对于整体性能的贡献。这里我们保持所有超参数为它们的最佳 setting

    MovieLensGowalla 的结果如下表所示,其它两个数据集的结果是类似的因此没有列出。对于 xp,h,v,vh,ph,pv,pvhCaser-x 表示启用了组件 xCaser,其中 h 表示水平卷积层,v 表示垂直卷积层,p 表示个性化。任何缺失的组件都通过将其对应的位置填充零向量来解决。例如,vh 表示采用垂直卷积层和水平卷积层,同时将 Pu 置为全零。

    结论:

    • Caser-p 表现最差,而 Caser-hCaser-vCaser-vh 显著提高了性能,这表明将 top-N 序列推荐视为传统的 top-N 推荐将丢失有用的信息(如序列信息),并且同时在 union-levelpoint-level 建模序列模式有助于改进预测。
    • 对于这两个数据集,通过联合使用 Caser 的所有组件(即 Caser-pvh)可以获得最佳性能。

    Caser-pvhCaser-pv 之间的 gap 刻画了水平卷积层的收益,Caser-pvhCaser-ph 之间的 gap 刻画了垂直卷积层的收益。可以看到,垂直卷积层要远比水平卷积层更重要,这也间接说明了 point-level 序列模式要比 union-level 序列模式更重要。

  8. 网络可视化:我们仔细研究了一些训练好的网络及其预测。

    • vertical filter:下图显示了在 MovieLens 数据集上训练 L=9Caser 之后,四个 vertical filter 的值(指的是卷积核的权重)。在微观上四个 filter 被训练为多元化 diverse 的,但是在宏观上它们遵循从过去位置past position 到最近位置recent position 的上升趋势。由于每个 vertical filter 都是作为对前面 actionembedding 进行加权的一种方式,这一趋势表明 Caser 更加重视最近的 action,这与传统的 top-N 推荐有很大不同(传统的 top-N 推荐认为每个 action 的重要性是相同的)。

    • horizontal filter:为了查看 horizontal filter 的有效性,下图 (a) 显示了 Caser 针对一名用户推荐的、排名 top N = 3 的电影,即: R^1 (疯狂麦克斯(Mad Max)、R^2(星球大战Star War)、R^3(星际迷航Star Trek)。该用户的前面 L=5 部电影为:S1(第十三勇士13th Warrior)、S2(美国女士American Beauty)、S3(星际迷航二 Star Trek II)、S4(星际迷航三Star Trek III)、S5 (星际迷航四 Star Trek IV)。R^3ground truth (即用户序列中的 next movie)。注意,R^1R^2R^3 非常相似,都是动作片和科幻片,因此也推荐给用户。

      下图 (b) 显示了将该用户前面 L=5 部电影中的某些电影的 embedding 屏蔽为全零之后(即 item mask ),模型预测 R^3 的新的排名。

      • 屏蔽 S1S2 实际上将 R^3 的排名提升到第 2 (从排名第 3)。事实上 S1S2 是历史电影或爱情电影,并且在推荐 R^3 时表现得像是噪音。

        既然如此,为什么不屏蔽 S1S2 呢?论文并未提出讨论。读者认为,一种比较好的方法是通过 target attention 机制对历史 action 序列过滤掉与 target item 无关的 action

      • 屏蔽 S3,S4,S5 中的每一个都会降低 R^3 的排名,因为这些电影与 R^3 属于同一类别。

      • 当同时屏蔽 S3,S4,S5 之后,R^3 的排名下降得最多。

      这项研究清晰地表明:我们的模型正确地捕获到了 R^3 对相关的电影 {S3,S4,S5} 的依赖,并且 {S3,S4,S5} 作为推荐 R^3union-level 序列特征。

十、p-RNN[2016]

  1. 传统的推荐系统算法中,通常假设用户历史日志(如点击、购买、或浏览)是可用的。但是这种假设在许多现实世界的推荐场景中并不成立:许多电商网站不需要用户认证也可以下单购买(无法获取历史行为信息),在视频流服务中用户也很少登录,许多网站的回头客占比很少(因此没有历史行为信息)。用户跟踪 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 modelingsetting 中,特征变得尤为重要。应该利用这些特征来帮助 session modeling 过程。 item 特征也是处理 item 冷启动问题的一种非常好的方法。

    这项工作同时利用深度学习技术从视觉信息中抽取高质量特征、以及建模 session (论文还通过 bag-of-words 从文本中抽取特征)。论文采用 parallel RNN: p-RNN 架构来联合建模 click 以及被点击 item 的特征(文本特征或图像特征)。具体而言,论文并未使用单个RNN(其中所有数据源以拼接的方式作为 input 使用)来联合建模被点击的 item 及其特征,而是代替以并行架构parallel architecture,因为数据的性质非常不同:图像特征往往比 item-IDone-hot representation 或文本的 bag-of-words representation 要稠密得多。论文介绍了 3 种不同的 p-RNN 架构,它们将 click 数据与被点击 item 的特征相结合。不同的架构有不同的共享模型参数,以及不同的隐状态交互。

    论文还指出,训练 p-RNN 并非易事。标准的同时训练 standard simultaneous training 会浪费网络的容量,因为同一个网络的不同部分可能会从数据中学习相同的关系。因此,论文设计了3 种替代的优化程序来训练 p-RNN 。论文在实验中评估了所提出的 p-RNN 架构,并与 item-kNN 进行对比。

  2. 相关工作:

    • 用于推荐系统的神经模型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-basedsetting 中失效。这个问题的一个自然解决方案是 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 交互信息的环境中特别有用。
      • 一些工作使用卷积网络抽取图像特征并用于经典的矩阵分解模型从而提高推荐质量。

10.1 模型

  1. 作为 baseline,我们采用 《Session-based recommendations with recurrent neural networks》 中的最佳 RNNsetting:单层 GRU layer,没有前馈层,采用 TOP1 pairwise loss 函数,采用 session-parallelmini-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

  2. 一个 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 输入源。关于特征提取,本文后面将详细介绍。

  3. 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 的融合,不同数据源融合之前,需要分别乘以 WIDWimage 从而投影到相同的空间。

    • p-RNN 架构:

      • Parallel:该架构为每个 representation 训练一个 GRU 子网,output 是从子网 hidden layer 的拼接中计算出来的(等价于独立计算每个子网的 output score 并加权output score,然后通过激活函数 f())。

        output level 的融合,每个子网的 output 融合之前,需要分别乘以 WIDWimage 从而投影到相同的空间。

      • Parallel shared-W:这种架构与 Parallel 架构的不同之处在于,每个子网具有共享的 hidden to output 的权重矩阵 。这种架构中不会为每个子网单独计算output ,相反,hidden state 的加权和乘以单个权重矩阵来产生 output 。采用一个共享的权重矩阵大大减少了参数的数量,从而减少了训练时间和过拟合。

        hidden state level 的融合,每个子网的 hidden state 融合之前,需要分别乘以 WIDWimage 从而投影到相同的空间。

        它的模型容量相比 Parallel 更小,并且实验表明其效果相比 Parallel 更差。

      • Parallel interaction:在该架构中,item feature subnet 的隐状态在计算子网的分数之前以逐元素乘积的方式乘以 ID subnet 的隐状态 。混合session 的不同方面来计算 item 分数,这类似于 context-aware 偏好建模。

        类似于 Parallel 架构,但是融合发生了两次:一次是 output level 的融合(和 Parallel 相同),另一次是对 item feature subnet 隐状态的加权融合。

        论文中的图表可能有误(或者论文对该架构的描述有误),这里逐元素乘积的时刻应该是在 subnet outputGRU layer 之间,而不应该是 subnet outputcombined output 之间。

      读者注:p-RNN 的核心就在于,信息源融合的时机(输入时?hidden state 时?输出时?)、融合的方式(拼接?加权和?逐元素乘积?)、融合几次(一次?两次?)。该论文并未评估所有的这些可能性,因此不太完善。并且实验表明仅在输出时进行信息源融合的效果是最佳的(独立处理每一路,并在预测之前融合)。

      读者注:本文的主要贡献是两点:验证信息源如何融合、以及不同子网的训练方式(交替训练)。最佳的方式是 Parallel 架构加 ResidualInterleaving 训练方式。这种残差式的训练模式,可以作为一种多模型 ensemble 训练的范式:后续子模型在残差上训练,然后 ensemble 在一起。

  4. 训练 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 训练 10epoch,然后 image subnetID subnet 的残差上继续训练10epoch ,等等。
    • Interleaving:每个 mini-batch 交替训练。例如,ID subnet 训练一个 mini-batch,然后 image subnetID subnet 的残差上继续训练一个 mini-batch ,以此类推。更频繁的交替允许跨子网进行更平衡的训练,而没有Simultaneous 训练的缺点。

    读者认为后两种残差式的更新方式是存在一定问题的。

    • 如果两个子网之间几乎是独立的(如 Parallel 架构),那么一个子网的更新不会影响另一个子网的能力,那么一个子网去学习另一个子网的残差是合理的。这使得两个子网之间能力。
    • 如果两个子网之间是耦合的(如 Parallel interaction 架构),那么一个子网的更新会影响另一个子网的能力,那么一个子网在学习另一个子网残差的过程中,也会影响这个残差本身。即,子网参数的更新会改变子网学习的目标(即,残差)。这使得模型很难学习(没有固定的目标)。

    最终实验部分的效果也验证了这一点:在 ResidualInterleaving 学习策略上,Parallel iinteraction 架构的效果不如 Parallel 架构的效果。

  5. 特征抽取:图像特征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 并从文本中抽取 unigrambigram ,并丢弃所有仅出现一次的项。
      • 最后,我们使用 TF-IDF 对生成的 bag-of-words 进行加权。

      最终的 text feature representation 是一个长度为 1099425 的稀疏向量,平均有 5.44 个非零元素。

      我们尝试了其它方法从非结构化文本中抽取特征,例如 distributed bag-of-wordLanguage Modeling with RNN 。然而,我们发现带有 TF-IDF 的经典 bag-of-words 最适合我们的数据。我们将此归因于用户生成内容user generated content: UGC 的噪音。由于缺乏英文的文本、以及存在多种语言,所以我们无法使用预训练的 word representation,如来自 word2vecword embedding

      我们尝试在输入特征和网络之间插入 embedding layer ,实验结果发现性能更差。因此我们使用经典的 bag-of-words/TF-IDF 特征作为 text feature representation,并直接用于 RNN 的输入。

10.2 实验

  1. 数据集:

    • VIDXL 数据集:该数据集是从 2 个月内从类似 YouTube 的视频网站收集的,其中包含至少具有预定时长的视频观看事件。在收集期间,item-to-item 的推荐展示在精选视频旁边,由一系列不同的算法生成。
    • CLASS 数据集:该数据集由在线分类网站的商品查看事件组成。该网站在收集期间也展示了不同算法给出的推荐。

    在原始 event-stream 的预处理过程中,我们过滤掉了不切实际的长 session,因为这些 session 可能是由于机器人 bot 流量造成的。我们删除了单个事件的 session,因为它们对 session-based 推荐没有用。我们还删除了频次低于五次的 item,因此低频的 item 不适合建模。

    每个数据集最后一天的 session 作为 测试集,其它session 作为训练集。每个 session 要么分配给训练集、要么分配给测试集,我们不在 session 中间拆分数据。对于测试集 session 中的 item,如果它们不在训练集中那么我们也会将它们过滤掉。

    数据集的统计信息如下表所示。

  2. 评估方式:我们评估 next-event prediction task,即,给定 session 事件,算法预测sessionnext event 。我们将测试集 session 中的事件一个接一个地馈入训练好的模型,然后检查 next eventitem 的排名。当 session 结束后,网络的隐状态重置为零。

    由于推荐系统一次只能推荐几个 item,用户选择的实际 item (即 next item ,也称作 target item )应该包含在推荐列表的前面几个 item 中。因此,我们的主要评估指标是 recall@20,即:在所有 test case 的推荐列表的 top-20 中,具有 target itemcase 的比例。召回不考虑 target item 的实际排名,只需要它位于推荐列表的 top-N 。这很好地建模了某些实际场景,在这些场景中推荐位置和顺序无关紧要。召回率通常也与重要的在线 KPI 密切相关,如点击率 CTR

    实验中使用的第二个指标是 Mean Reciprocal Rank: MRR@20,它是target item 的排名倒数reciprocal rank的均值。如果 target itemrank > 20,那么排名倒数设为零。MRR 考虑 target item 的排名,这适用于推荐顺序很重要的场景,例如尾部排名的 item 仅在屏幕滚动之后才可见。

10.2.1 基于缩略图的视频推荐

  1. 我们从视频的缩略图中抽取图像特征。我们对不同架构和训练策略进行了实验,从而了解图像数据如何有助于提高推荐准确性。

    《Session-based Recommendations with Recurrent Neural Networks》 类似,所有网络使用 adagrad 来优化 TOP1 损失。 ID only 网络和 feature only 网络的参数(如 dropout、学习率、动量、batch size 等等)在留出 hold out 的验证集上进行了优化。然后在完整的训练集(包括验证集)上重新训练网络,并在测试集上测量最终结果。

    由于 VIDXL 数据集太大,更复杂网络的子网使用对应的 ID only 网络或 feature only 网络的最佳超参数。子网的权重被设置为相等,因为我们没有得到显著不同的结果(除非任何一个子网的权重设为零,此时才会有显著不同的结果)。

    为了加快评估速度,我们计算了 target item50000 个最热门 item 的排名。

    评估列表的长度会影响评估指标,列表越长则 recall 指标越高、precision 指标越低。但是对于相同的评估列表,不同算法之间的比较仍然是公平的。

  2. 下表总结了不同架构和训练策略的效果。在本实验中,对于 baseline 架构,隐单元数量设为 100。对于 p-RNN,每个子网的隐单元设为 100。网络训练了 10epoch,因为之后的损失没有显著变化。我们将这些网络与 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 baselineRNN 在这项任务上的召回率非常高,因此更先进的架构很难显著改善这一结果。

      • 仅在图像特征上训练的网络(即,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 的模型容量更低。

    ResidualInterleaving 学习策略上,Parallel interaction 架构的效果不如 Parallel 架构的效果,原因如前所述。

  3. 通过增加隐单元数量,RNN 的模型容量增加,因此这个参数对模型性能有很大的影响。然而,这个参数也遵循收益递减规模 。我们发现超过 1000 个隐单元的结果并没有显著改善,因此我们实验了具有 1000 个隐单元的 non-parallel 架构,以及具有 500 + 500 个隐单元的性能最好的 Parallel 架构,从而确认在增加网络容量和/或 epoch 数量的收益递减时,添加 item 特征也可以使得 session modeling 受益。下表给出了实验结果。

    • 随着隐单元的增加,网络性能会提高,甚至 Feature only 网络的性能也优于 item-kNN baseline ,因为网络的容量足以利用图像特征中的信息。但是除此之外,结果之间的关系与前面的实验结果相似。

    • 进一步增加隐单元的数量和/或 epoch 的数量并没有显著提高任何网络的性能,但是 Parallel 架构在 MRR 方面显著优于更大模型容量的 ID only 网络,并且具有相似的召回率。这意味着我们的架构以及我们的训练策略可以显著提高网络性能,即使随着网络容量的增加而收益递减。

      换句话讲,添加额外的数据源( item 特征)可以提高推荐的准确性。然而,处理多个数据源需要特殊的架构(Parallel 架构)和训练策略( ResidualInterleaving )。

10.2.2 使用产品描述

  1. 我们在 CLASS 数据集上重复了上一个实验,即 baseline RNN1000 个隐单元、 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 数量并没有进一步改善结果。

  2. 在下图中,通过我们的方法与 item-kNN 和具有 1000 个隐单元的 ID only 网络进行比较,从而说明了我们的解决方案(每个子网 500 个隐单元)的能力。

十一、GRU4Rec Top-k Gains [2018]

  1. 在推荐系统中,RNN 已被应用于 session-based 推荐,并取得了令人印象深刻的结果。与传统的 similarity-based 方法相比,RNN 的优势在于它们可以有效地建模整个 session 的用户交互(如点击、查看等等)。通过建模整个sessionRNN 实际上可以学到 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%(以 MRRRecall@20 指标衡量),这表明深度学习方法为推荐系统领域带来了潜力。

  2. 相关工作:

    • 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: GRURNN 已被成功应用于 session-based 推荐领域。

      • 《Session-based Recommendations with Recurrent Neural Networks》session-based 推荐任务提出了一个具有 pairwise ranking lossRNN
      • 《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 factoritem 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

11.1 输出采样

  1. 我们将 《Session-based Recommendations with Recurrent Neural Networks》 中实现的 RNN 算法称作 GRU4Rec。在本节中,我们将重新审视 GRU4Rec 如何对输出进行负采样并讨论其重要性。我们扩展了负采样技术,增加了 additional sample ,并认为这对于提高推荐准确性至关重要。

    注意,“样本” 有两种含义:一种含义是用于训练的实例,也称作 example ;另一种含义是采样程序所采样到的实例。在这一章节,我们避免使用 “样本”,而代替以 example(用于模型训练)、sample(用于采样程序)。

  2. 在每个训练 step 中,GRU4Recsession 中当前事件eventitem(以 one-hot 向量表示)作为输入。网络的输出对应于item set 中每个 item 的分数 score ,代表每个 item 成为 session 中的 next item 的可能性。

    训练过程会遍历 session 中的所有事件。基于 backpropagation through time: BPTT 训练的复杂度为 O(NE(H2+HNO)),其中: NEtraining event 的数量,H 为隐层维度(隐单元数量),NO 为输出维度(输出单元的数量,即item set 规模)。计算所有 item 的分数是非常不切实际的,因为这使得模型 unscalable 。因此,GRU4Rec 使用采样机制并在训练期间仅计算 item set 的某个子集的分数。

  3. 神经网络通常并不是每次训练一个实例example,而是每次训练一批example ,这种做法被称作 mini-batch trainingmini-batch training 有若干好处:

    • 更好地利用当前硬件的并行化能力,从而训练更快 training faster
    • 产生比随机梯度训练更稳定的梯度,从而收敛更快 converging faster

    GRU4Rec 引入了基于 mini-batch sampling 。对于 mini-batch 中的每个example,相同 mini-batch 的其它example作为negative sample,如下图所示。从算法实现的角度来看,这种方法是实用的,并且对于 GPU 也可以有效地实现。

  4. 可以使用三种不同的 listwise ranking loss 函数之一来训练网络(参考后面的小节)。所有损失函数都需要 target item (即 next itemground 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 itemtarget item 已经排序正确因此模型没什么可学)。但是,如果无限期训练,可能会产生整体上更准确的模型(相比 popularity-based sampling )。

    根据我们的经验,popularity-based sampling 通常会产生更好的结果(因为均匀负采样需要“无限期”训练才能得到更好的结果)。

  5. 将负采样与 mini-batch 联系起来有若干实际好处,但由于以下三个原因导致过于严格:

    • mini-batch size 一般较小,从几十到几百不等。如果 item set 的规模很大,那么较小的采样规模使得无法包含所有高分的negative item

    • mini-batch size 对训练有直接影响。例如,我们发现使用更小的 mini-batch size30 ~ 100)进行训练会产生更准确的模型。但是由于并行化,在 GPU 上使用更大的 mini-batch size 训练会更快。

    • mini-batch sampling 方法本质上是 popularity-based 的,这通常是一个很好的策略,但可能不是对所有数据集都是最优的。

      第三条理由有点无赖,作者并未给出一些例子来说明。

    因此,我们使用 additional sample 来扩展 GRU4Rec。我们采样了 NAitem 用作 mini-batch 内所有example 所共享的negative item。 这些additional sample 与来自 mini-batch samplingNB1sample 一起使用,其中 NBmini-batch sizeadditional sample 可以通过任何策略采样得到。我们以 suppiα 成比例的方式进行采样,其中:

    • suppiitem isupport(即数据集中出现的次数)。
    • α 为采样的超参数(0α1) 。如果 α=0 那么就是均匀采样,如果 α=1 那么就是popularity-based sampling

    添加更多 sample 自然会增加复杂度,因为输出单元的数量从 NBpopularity-based sampling)增加到 NA+BBadditional 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 保持一致,否则评估结果可能没有说服力。
  6. 然而, additional sample 的有效实现并非易事。根据 GPU 上的分布进行采样目前还没有得到很好的支持,因此采样速度很慢,因此它应该由 CPU 处理或者需要某种形式的解决方法。

    • 如果由 CPU 处理,则被采样的 item ID 应该与 mini-batchitem ID 一起提供给 GPU。然而,每次生成一个新的 mini-batch 时对分布进行采样需要一些时间,因此 GPU 的执行经常被中断,导致 GPU 利用率低,从而训练缓慢。
    • 如果利用 GPU 上某种形式的解决方法,则基于分布的采样被转换为包含多个 GPU 操作的一个序列,与我们使用的深度学习框架的内置采样方法相比,整体执行速度更快。

    在这两种情况下,单次采样几个 item 的效率都低于单次采样大量 item 的效率。因此,我们还实现了一个缓存 cache 用于预采样 pre-sample 以及存储大量 negative sample 。当训练用完这些 sample 并且一旦缓存变空(每用一个 sample 就会清空对应的缓存),就会重新计算缓存。我们发现,与完全不使用缓存的方案相比,预采样 1 千万到 1 亿个 item ID 显著提高了训练速度。

11.2 损失函数设计

  1. 本小节中,我们检查 GRU4Rec 中实现的损失函数并确定它们的弱点。我们提出了两种方法来解决交叉熵损失函数的数值不稳定性 numerical instability。我们展示了当我们向输出中添加更多 sample 时,使用 TOP1 pairwise lossBPR pairwise losslearning 如何降级 degrade ,并提出一组基于 pairwise losse 的损失函数来缓解这个问题。

    我们注意到,虽然我们的目标是改善 GRU4Rec,但是本小节中提出的损失函数也可以与其它模型一起使用,例如矩阵分解模型。

11.2.1 categorical cross-entropy

  1. categorical cross-entropy 衡量了预测的概率分布 q 和真实分布 p 之间的距离:

    H(p,q)=j=1Npjlogqj

    该损失函数常用于机器学习和深度学习,特别是多类分类问题。next item 推荐任务可以解释为分类任务,其中 class label 是系统中的 item id,每个 item 序列所分配的 label 是该序列的 next item 。 在 single-label 场景下(如 next item 推荐),真实分布是 next itemone-hot 向量,其中 target item 对应的元素为 1 而其它所有位置全零。预测的概率分布由分配给每个 item 的预测分数组成。注意,output score 需要执行转换从而形成分布的形式,常见的转换是使用 softmax

    交叉熵本身是一个 pointwise loss,因为它是在单个 coordinate 上(即分布上的每个点)定义的独立损失的总和。将交叉熵与 softmax 相结合会在损失函数中引入 listwise 属性,因为 coordinate 现在不再是独立的了。结合交叉熵与 softmax,我们得到如下的、定义在score 上的损失函数(假设 target item 的索引为 i ):

    si=exp(ri)j=1Nexp(rj)Lxe=logsi=logexp(ri)j=1Nexp(rj)

    其中:rjitem j 的预测分数,Nitem set 大小。

  2. 修复不稳定性 instabilityGRU4Rec 中可用的损失函数之一是带 softmax 的交叉熵。《Session-based Recommendations with Recurrent Neural Networks》 在实验部分报告了交叉熵比其它损失函数略好的结果,但是论文认为交叉熵损失对于大部分超参数空间而言是不稳定的,因此建议不要使用它。

    这种不稳定性来自于有限的数值精度 limited numerical precision 。假设存在item k 使得 rkri ,由于精度有限,则 si 变得非常小并且四舍五入为零。然后损失函数计算 log0,而 log0是未定义的。规避该问题的两种方法为:

    • 计算 log(si+ϵ),其中 ϵ 是一个非常小的正数(这里我们使用 1024) 。
    • 通过 ri+logj=1Nexp(rj) 来直接计算 logsi

    前者引入了一些噪声,而后者不允许 transformationloss 分开使用(即,ri+logj=1Nexp(rj)transformationloss 融合在一起,无法分离使用)。这两种方法都可以稳定stabilize损失函数,我们没有观察到这两种变体的结果存在任何差异。

11.2.2 TOP1&BPR

  1. GRU4Rec 提供了两个基于 pairwise loss 的损失函数。pairwise losstarget item 分数与一个 negative item 进行比较。如果 target item 分数低于 negative item 分数,那么损失较大。GRU4Rec 对每个 target item 计算多个 negative item 的损失,因此损失函数由这些 pairwise loss 的均值组成。这导致了一个 listwise loss 函数,它由多个 pairwise loss 组成。

    • 其中一个损失函数是 TOP1,其定义为:

      Ltop1=1NSj=1NSσ(rjri)+σ(rj2)

      其中:NSnegative item 数量,jnegative item 上迭代,itarget item

      这是一个由两部分组成的、启发式的组合损失:

      • 第一部分旨在将 target item 分数推高到 negative item 分数之上。
      • 第二部分旨在将 negative item 分数降低到零。这一部分充当正则化器regularizer,但它并不是直接约束模型权重,而是惩罚 negative item 的高分。由于每个 item 在某个训练 example 中都充当 negative item,因此通常会降低整体的分数。
    • 另一个损失函数是基于流行的 Bayesian Personalized Ranking: BPR 损失,其定义为:

      Lbpr=1NSj=1NSlogσ(rirj)

      该损失函数最大化 target item 分数超过 negative item 分数的概率。由于概率 P(ri>rj) 是不连续的,因此近似为 σ(rirj)

  2. 梯度消失 vanishing gradient:取每个 pairwise loss 的均值会产生不想要的副作用。我们分析 TOP1 损失和 BPR 损失相对于 target item 分数 ri 的梯度,结果表明:在某些情况下梯度将消失,因此模型停止学习。TOP1 损失和 BPR 损失相对于 target item 分数 ri 的梯度为:

    Ltop1ri=1NSj=1NSσ(rjri)(1σ(rjri))Lbprri=1NSj=1NS(1σ(rirj))

    对于 pairwise loss,人们通常希望得到高分的 negative item,因为这些sample 会产生大的梯度。或者直观而言,如果 negative item 的分数已经远低于 target item 的分数,那么就不再可以从该 negative item 中学到任何东西了。

    我们将 rjrinegative item 记做 negative irrelevant itemrjrinegative item 记做 negative relevant item 。对于一个 negative irrelevant item jLtop1ri 中的 σ(rjri) 将趋近于零(以及 Lbprri 中的 1σ(rirj) 也将趋于零)。因此,任何 negative irrelevant item 基本上不会对总梯度增加任何东西。同时,平均梯度总是被 negative item 的数量所打折(即,除以 NS )。通过增加 sample 数量NSnegative irrelevant item 数量的增加速度比 negative relevant item 数量的增加速度更快,因为大多数 item 作为 negative item 是不相关irrelevant的。对于 non popularity-based sampling 以及大的 sample 数量,情况尤其如此。因此,随着 sample 数量 NS 的增加,损失函数的梯度开始消失。这种梯度消失是违反直觉的,并且损害了算法的潜力。

    本质上是由于 negative relevent item 的稀疏性导致。

    • 如果 negative relevent itemnegative irrelevent item 的数量是 1:1 的关系,那么 NS 的增加不大可能出现梯度消失,因为 NS 的增加使得 negative relevent item 也同比例的增加。
    • 如果 negative relevent itemnegative irrelevent item 的数量是 1:100000 的关系,那么 NS 的增加很可能出现梯度消失,因为 NS 增加一万个但是 negative relevent item 数量几乎不变( NS 需要增加十万个才会新增一个 negative relevent item),因此使得损失函数的梯度下降很多。

    注意,TOP1 损失对于 rjrinegative relevant item 也有些敏感,这是损失函数设计中的疏忽。虽然这种情况不太可能发生,但是也不能排除。例如,在将一个冷门的 target item 与非常热门的 sample 进行比较时,尤其在学习的早期阶段,target item 分数可能远低于这个热门 sample 的分数。

    我们专注于损失函数对于 target item 分数 ri 的梯度, 而损失函数对于 negative item 分数 rj 的梯度也存在类似的问题。

    Ltop1rj=1NS[σ(rjri)×(1σ(rjri))+σ(rj2)×(1σ(rj2))×2rj]Lbprrj=1NS(1σ(rirj))

    这意味着即使某些 negative item jrelevant 的,损失函数的梯度也会随着 negative item 数量 NS 的增加而减少。

11.2.3 ranking-max 损失

  1. 为了克服随着sample 数量 NS 增加导致梯度消失的问题,我们提出了基于单个 pairwise loss 的、新的 listwise loss 系列。基本思想是:将 target item 分数与最相关的 negative item 分数进行比较。令最相关的 negative item (即分数最大的 negative item)为rmax=maxjrj,则这个损失函数定义为:

    Lpairwise-max(ri,{rj}j=1NS)=Lpairwise(ri,maxjrj)=Lpairwise(ri,rmax)

    max 函数是不可微的,因此无法应用于梯度下降。因此,我们使用 softmax 函数代替 max 从而保持损失函数的可微性。注意,这里的 softmax 变换仅用于 negative item(即排除 ri),因为我们想要从 negative item 中寻找最大的分数。这使得在 Lpairwise-max 中,每个 negative item 都需要考虑它获得最大分数的可能性。基于这个总体思路,我们现在推导出 TOP1-max 损失函数和 BPR-max 损失函数。

    softmax 在交叉熵损失、ranking-max 损失中有所区别:

    • 在交叉熵损失中需要考虑 target itemnegative item,即 sj=exp(rj)j=1Nexp(rj) ,这里 N 为考虑了 target item 的集合大小
    • ranking-max 损失中仅考虑 negative item ,即 sj=exp(rj)j=1NSexp(rj) ,这里 NS 为不考虑 target item 的集合大小。

    另外这里的 softmax 还可以引入温度超参数 T ,但是注意数值稳定性问题(例如 T 太大导致梯度不稳定)。

  2. TOP1-max 损失函数:TOP1-max 损失相当简单,它被定义为:

    Ltop1-max=j=1NSsj×(σ(rjri)+σ(rj2))

    其中:sj=exp(rj)j=1NSexp(rj)rjsoftmax 值。

    可以对所有negative item 应用正则化(即,j=1NS(sj×σ(rjri)+σ(rj2))),而不一定仅对最大分数的 negative item 应用正则化。但是我们发现对最大分数的 negative item 应用正则化的实验效果更好,因此我们保持这种方式。

    TOP1-max 损失的梯度是对单个 pairwise 梯度的加权平均(注意,j=1Nsj=1.0),权重为 negative item 分数的 softmaxsj,即:

    Ltop1-maxri=j=1NSsj×σ(rjri)(1σ(rjri))j=1Nsj=j=1NSsj×σ(rjri)(1σ(rjri))
    • 如果 rj 远小于 rmax,那么权重 sj 几乎为零,并且分数接近 rmaxexample 将有更大的权重。这解决了更多 sample 导致梯度的问题,因为 negative irrelevant item 将被忽略,最终梯度将指向 negative relevant item 的梯度。
    • 如果所有的 rj 都相差无几,这表明所有 sample 都是 irrelevant 的,那么每个 pairwise 梯度将接近于零。这不是什么问题,因为如果 target item 分数大于所有 negative item 分数,则没有什么可以学习的。

    不幸的是, TOP1-max 损失对于分数很大的 negative item 是敏感的,如 rjri 时导致 (1σ(rjri))0。这是由于 TOP1 pairwise loss 本身所引起的,与我们的聚合方式无关。

  3. BPR-maxBPR 的概率性解释为,最大化 target item 分数 ri 高于 rmax 的概率。这可以用条件概率重写为:

    P(ri>rmax)=j=1NSP(ri>rjrj=rmax)P(rj=rmax)

    其中:

    • P(rj=rmax) 表示 negative item j 为最大分数的概率,它以 sj=exp(rj)j=1NSexp(rj) 来近似。
    • P(ri>rjrj=rmax) 表示 target item 分数高于最大分数的 negative item j 的概率,它以 σ(rirj) 来近似。

    我们想要最小化负的对数似然,则得到损失函数:

    Lbpr-max=logj=1NSsj×σ(rirj)

    这个损失函数对于 target item ri 的梯度为:

    Lbpr-maxri=j=1NSsj×σ(rirj)(1σ(rirj))j=1NSsj×σ(rirj)
    • BPR-max 的梯度是单个 BPR 梯度的加权平均,权重为 sj×σ(rirj)

    • negative item jk 之间的相对权重为:

      sj×σ(rirj)sk×σ(rirk)=exp(rj)+exp(ri+rj+rk)exp(rk)+exp(ri+rj+rk)

      如果 rirj+rk 或者 rirk 都很小,那么这个相对权重的行为类似于 softmax。否则这个相对权重就是一个平滑的 softmax

      这意味着当 ri 很小的时候,negative item之间的权重分布会更均匀,但是较高分数的 negative item 将得到更多关注。随着 ri 变得更高,关注将迅速转移到分数高的 negative item 上。这是一种理想的行为。

  4. 读者注:BPR-max 并不是简单地对 BPRsoftmax加权,而是移动了 log 的位置:

    Ltop1=1NSj=1NSσ(rjri)+σ(rj2),Ltop1-max=j=1NSsj×(σ(rjri)+σ(σj2))Lbpr=1NSj=1NSlogσ(rirj),Lbpr-max=logj=1NSsj×σ(rirj)

    Top1-max 损失函数仅仅是将 Top1 损失的均匀权重 1/NS 替换为 softmax 权重 sj 。但是,BPR-max 损失函数将 BPR 的均匀权重1/NS 替换为 sj ,并且将作用于 σ()log 函数变为作用于 ()

    另一个版本的 BPR-max 是:

    Lbpr-max-var=j=1NSsj×logσ(rirj)Lbpr-max-varri=j=1NSsj×(1σ(rirj))

    这个损失函数似乎比论文中的 Lbpr-max 更好,因为 Lbpr-max 对于分数很大的 negative item 是敏感的(如 rjri,此时 σ(rirj)0) ,而 Lbpr-max-var 不存在这个问题。为什么论文不采用 Lbpr-max-var 这个损失函数,作者并未说明。读者猜测 Lbpr-max-var 的效果更好,可以通过实验来验证。

  5. 损失函数(TOP1-maxBPR-max 损失)对于 negative item rj 的梯度与softmax score sj 成正比(注,前面给的公式都是针对 target item ri 的梯度),这意味着只有接近 rmaxnegative item 才会被更新。这是有益的,因为如果 negative item 的分数很低,则不需要进行参数更新 。

    skrj={sj(1sj),k=jsjsk,kjLtop1-maxrj=sj×[σ(rjri)(1σ(rjri))+σ(rj2)×(1σ(rj2))×2rj]+sj2×[σ(rjri)+σ(σj2)]sj×Ltop1-maxLbpr-maxrj=sjsj×σ2(rirj)j=1NSsj×σ(rirj)Lbpr-max-varrj=sj×(1σ(rirj))sj×logσ(rirj)+sj×Lbpr-max-var
    • 如果一个 negative item 的分数远高于其它 negative item,那么它的参数将是唯一被更新的,并且梯度将与 target item 分数和 negative item 分数之间 pairwise loss 的梯度一致。
    • 如果如果 negative item 的分数比较平衡,那么梯度介于上述梯度和零之间。
  6. 下图描述了在不同 target item 排名的条件下, BPR 损失的梯度和 BPR-max 损失的梯度(针对target item 分数 ri 的梯度)的表现。target item 排名指的是超过 target item 分数的 negative item 数量,例如 rank 0 表示 target item 分数高于所有 negative item 。较小的rank 值意味着 negative relevant item 较少。

    该图描述了两种损失相对于ri梯度取反(即负的梯度)之后的均值,并且在第一个 epoch(训练开始)、第十个 epoch(训练结束)对整个数据集进行评估:

    • 左图没有使用 additional sample,仅使用来自 mini-batch size = 32batch 内其它 example
    • 中图和右图添加了 2048additional negative item ,其中右图聚焦于前 200 的排名。

    可以看到:

    • 当有更多 negative relevant item(即 rank 值更大)时,BPR 的梯度略高。这是很自然的,因为 BPR-max 关注的是最接近 rmaxsample,而忽略了其它 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 = 5BPR 的梯度相比左图要小得多),即使对于 rank 100 - 500 也是如此。相比之下,BPR-max 的梯度仍然是在 rank 较小的点才开始显著下降。

      这意味着,比如说,我们可以优化算法将 target item 的排名从 500 优化到 50,但是很难继续推进到排名为 5 (因为这时发生了梯度消失,模型无法继续学习)。并且发生梯度消失的点随着 sample 量的增加而提前。另一方面,BPR-max 表现良好,并且能够一路提高 target item 分数。

  7. 分数正则化score regularizationBPR-max:尽管我们表明启发式的 TOP1 损失对于分数非常高的 negative relevant item 很敏感,但是在 《Session-based Recommendations with Recurrent Neural Networks》 中发现它的性能优于 BPR。据我们的观察,TOP1-max 也是优于 BPR-max 。部分原因在于很少同时出现 rjrirj0 。如果仅满足 rjri 但是 rj>0,那么关于 ri 的梯度可能会消失,但是 TOP1 的正则化部分保证 rj 向零移动,这甚至可能使得下一次更新 ri 成为可能。TOP1 中的分数正则化对整个学习过程非常有益,因此即使损失函数可能不是理论上的最优,它也可以取得很好的效果。

    GRU4Rec 支持两种形式的正则化:模型参数的 dropoutL2 正则化。TOP1 的正则化与这些正则化是不同的。根据我们的经验,模型参数的 L2 正则化会降低模型性能。我们的假设是:某些模型权重不应该被正则化,如用于计算更新门 update gate 和复位门 reset gate 的权重矩阵。对 negative item 高分进行惩罚可以约束模型,但是没有显式地正则化权重。

    因此,我们也在 BPR-max 损失函数中添加了分数正则化。我们尝试了几种分数正则化的方法。性能最好的一种方法是:我们将 negative item 分数设置在独立的零均值高斯分布上,高斯分布的方差与 softmax 分数成反比。这需要对接近 rmaxnegative item 分数进行更强的正则化,这在我们的 case 中是理想的。

    我们最小化负的对数似然并像以前一样进行函数近似,从而得到最终形式的 BPR-max 损失函数:

    Lbpr-max=(logj=1NSsj×σ(rirj))+(λj=1NSsj×rj2)

    其中:正则化项是 negative item 分数进行加权 L2 正则化,权重为 softmax 分数 sjλ 为正则化系数(一个超参数)。

    这里的正则化与 TOP1 正则化有三个区别:

    • 这里使用平方正则化,而 TOP1 使用 σ(rj2) 正则化。
    • 这里使用了正则化系数 λ ,而 TOP1 没有使用系数。猜测的原因是:在 TOP1 中损失部分和正则化部分处于同一个量级(0.0 ~ 1.0 之间),而这里的损失部分和正则化部分处于不同量级。
    • 这里更关注negative item 的高分,使得尽可能将 negative item 高分打压下来。而 TOP1 是一视同仁,认为 negative item 高分的下降,与 negative item 低分的下降,效用是相同的。

    这意味着我们也可以改造 TOP1 损失,利用平方正则化、正则化系数、以及权重 sj

11.3 实验

  1. 数据集:

    • 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》 中的来源相同,但是子集略有不同。

    下表给出了数据集的主要特性。

  2. 评估方式:我们评估 next item prediction ,即我们迭代测试集 session 以及它们包含的事件。对于每个事件,算法都预测该 sessionnext event 对应的 item 。由于 VIDXL 测试集很大,我们将 target item 分数与测试期间最热门的 50000item 的分数进行比较。

    由于推荐系统一次只能推荐几个 item,用户选择的实际 item 应该包含在推荐列表的前面几个 item 中。因此,我们的主要评估指标是 recall@20,即:在所有 test case 的推荐列表的 top-20 中,具有 target itemcase 的比例。召回不考虑 target item 的实际排名,只需要它位于推荐列表的 top-N 。这很好地建模了某些实际场景,在这些场景中推荐位置和顺序无关紧要。召回率通常也与重要的在线 KPI 密切相关,如点击率 CTR

    实验中使用的第二个指标是 Mean Reciprocal Rank: MRR@20,它是target item 的排名倒数reciprocal rank的均值。如果 target itemrank > 20,那么排名倒数设为零。MRR 考虑 target item 的排名,这适用于推荐顺序很重要的场景,例如更尾部排名的 item 仅在屏幕滚动之后才可见。

  3. baseline 方法和配置:我们的 baseline 是原始的 GRU4Rec 算法,我们的目标是对其进行改进。我们将原始论文提出的 TOP1 损失视为 baseline 。隐层有 100 个单元。

    • 我们还对比了 item-kNN 的性能,这是 next item prediction 的一个 natural baseline
    • RSC15VIDXLCLASS 的结果直接取自相应的论文(《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 框架下实现。

11.3.1 additional sample

  1. 第一组实验检查了 additional negative item 对于推荐准确性的影响。我们在 CLASS 数据集和 VIDEO 数据集上进行了实验。由于结果非常相似,因此我们剔除了 VIDEO 数据集的结果从而节省一些空间。下图描述了不同损失函数(TOP1、交叉熵、TOP1-maxBPR-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 时,会失去随机性。众所周知,一定程度上的随机性有利于学到更好的模型。

  2. 添加 additional sample 会增加计算成本,但由于现代 GPU 上易于并行化,大部分成本都得到了缓解。下图显示了不同 sample size 的训练时间。注意,y 轴的时间为对数坐标。

    实际的训练时间不仅取决于数据集,还取决于模型超参数(尤其是 mini-batch size)以及框架如何支持某些用于计算损失函数的算子。然而,所有损失的趋势都是相似的。

    • 例如,网络的完整训练大约需要 6 ~7 分钟,即使增加到 512additional sample 也不会增加训练时间。
    • 在收益递减的点,即在 2048additional sample 时,训练时间仍然在 7 ~ 8 分钟左右,只是略有增加。
    • 在那之后,由于超出了我们使用的 GPU 的并行化能力,训练时间迅速增加。

    VIDEO 数据集上的趋势也是相似的,训练时间从 20 分钟左右开始,在 2048additional sample 时开始增加(到 24 分钟),此后迅速增加。这意味着与数据增强方法不同,我们提所提出的方法在实践中使用时可以是零成本或很少的额外成本的。

  3. 在接下来的实验中,我们对控制采样的 α 参数进行参数敏感性分析。下图给出了交叉熵、TOP1-maxBPR-max 在不同 α 值上的性能。

    • 对于交叉熵,当 sample size 较小时它倾向于较高的 α 值,当 sample size 较大时它倾向于较低的 α 值。这与我们在前面的讨论是一致的:热门 samplesample size 非常有限并且训练开始阶段非常有用,但是可能很快就会耗尽。 因此,如果我们有办法(例如足够大的 sample size )切换到更平衡的采样,那么可能是有益的。此外,在这种情况下,均匀采样可以被少量的、从 minibatch 采样得到的 popularity based sample 所补充。

    • 另一方面,ranking-max loss 似乎更喜欢中间略偏高一点的值,而在极端情况下的表现最差。我们假设这主要是由于:

      • 它们是基于 pairwise losse ,而这通常需要 popular sample
      • 它们采用了 score regularization:通过 popularity based sampling ,最热门 item 的分数将降低到超出预期的水平,因此效果较差。

11.3.2 损失函数

  1. 我们度量了所提出的改进在 baseline 上的性能增益。准确性的大幅提升来自于 additional sample 和损失函数的组合。下图展示了我们最重要的结果。除了原始版本的 GRU4Recitem-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.685MRR@20 大约在 0.29。与我们的解决方案不同,数据增强大大增加了训练时间。数据增强和我们的改进并不互斥,因此通过结合这两种方法,可以获得更好的结果。

11.3.3 统一的 item representation

  1. 以前的实验没有发现在 GRU layer 之前使用 embedding layer 的任何好处。embeddinhg layer 的作用是将 item ID 转换为潜在 representation 空间。在推荐系统的术语中,item embedding 对应于 item feature vector。现有的 GRU 网络已有另外一个 item feature matrix ,它是 output weight matrix 的形式。通过统一representation,即在 embedding layeroutput layer 之间共享权重矩阵,我们可以更快地学习更好的 item representation

    初步实验(如下表)显式,对于大多数数据集,recall@20 有额外的轻微改进,而 MRR@20 则略有下降。然而,对于 CLASS 数据集,当使用统一 embedding 时,召回率和 MRR 都显著增加。此外,统一 embedding 还具有将整体内存占用和模型大小减少约 4 倍的额外好处。

    作者并没有探索这里的原因,遗憾。

11.3.4 在线测试

  1. 基于本文提出的改进,在 online video portal 上的大规模在线 A/B test 中评估 GRU4Rec 在技术上也变得可行。推荐展示在每个视频页面上,并且在页面加载后立即可用。该网站具有自动播放功能,类似于 Youtube 上的。如果用户点击推荐的某个 item、或者通过自动播放来访问推荐的某个 item (这意味着用户开始访问推荐队列),那么系统不会计算新的推荐列表,因此用户可以与一组推荐的 item 进行多次交互。用户也可以直接访问视频(而不是通过推荐列表的方式,比如直接访问视频的 url 地址),那么系统为该用户生成一组新的视频推荐。

  2. 实验配置:将 GRU4Rec 与经过微调的复杂推荐逻辑进行比较,持续时间为 2.5 个月。用户分为三组:

    • 第一组由 baseline 逻辑提供推荐服务。

    • 第二组由 GRU4Recnext best 来提供推荐服务,这意味着算法推荐的 item 很可能是用户 session 中的 next item

    • 第三组由 GRU4Recsequence mode 来提供推荐服务,其中 GRU4Rec 根据迄今为止的 session 来生成一个 item 序列。序列是贪婪地生成的,即算法假设它的 next guess 到目前为止是正确的。

      sequence mode 会生成next itemnext next item ... 等等的序列,而不是 next item

    机器人botpower 用户(例如,长时间播放视频的用户)会从评估结果中过滤掉,因为它们可能会扭曲结果。机器人是根据 user agent 过滤的。每天过滤掉身份不明的机器人和 power 用户以及具有不切实际行为模式的用户。受过滤影响的 non-bot 用户比例非常低(占比大约 0.1%)。

  3. 评估指标:我们使用不同的 KPI 来评估效果,每个 KPI 都与推荐请求的数量相关:观看时长是该组观看视频的总秒数,视频播放量是改组至少观看了一定时长的视频数量,点击量是改组点击推荐的次数。

    当实验组和对照组的请求数量几乎相等时,总量的比较结果与均值的比较结果几乎相同。

    下图展示了 GRU4Rec 相对于复杂逻辑的相对性能增益。error bar 代表 p=0.05 的置信区间。

    • GRU4Rec 在两种预测模式下都优于 baseline。观看时长提高了 5%、视频播放量提高 了 5%、点击量提高了 4%
    • 在观看时长和视频播放量方面,sequence modenext best 的表现更好,但是在点击量方面则不然。这是因为 sequence mode 更适合自动播放功能,从而导致用户的点击量减少。另一方面,虽然基于 next best guess 的预测是相关的,但是它们是更加多样化的,并且用户更有可能跳过推荐列表中的视频。sequence mode 更适合视频系列 video series 和其它紧密结合的视频。
    • 我们还注意到,随着两种预测模式同时运行,并通过反馈环feedback loop 从彼此的推荐中学习,它们之间观看时长和视频播放量的差异开始慢慢消失。

十二、SASRec[2018]

  1. 序列推荐系统的目标是将用户行为的个性化模型personalized model(基于历史活动)与基于用户最近行为的 context 概念相结合。从序列动态 sequential dynamic 中捕获有用的模式pattern 具有挑战性,主要是因为输入空间的维度随着作为 context 的历史行为的数量呈指数增长。因此,序列推荐的研究主要关注如何简洁地捕获这些高阶动态 high-order dynamic

    马尔科夫链Markov Chains: MC 是一个典型的例子,它假设next action仅依赖于前一个(或者前几个)行为,并已成功用于刻画短程short-rangeitem 转移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 的复杂性和可扩展性,进行了全面的消融研究以展示关键组件的效果,并将注意力权重可视化从而定性地揭示模型的行为。

  2. 相关工作:有一些工作与我们密切相关。在讨论序列推荐之前,我们首先讨论通用推荐 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 embeddingitem 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 方法,将 L 个先前 itemembedding 矩阵视为 image,并运用卷积运算来抽取转移 transition

      除了基于马尔科夫链的方法之外,另一个方向的工作采用 RNN 来建模用户序列。利用 GRU4Rec 使用 GRU 建模点击序列从而用于 session-based 推荐,而 《Recurrent neural networks with top-k gains for session-based recommendation》 改进了 GRU4Rec 并进一步提高了 Top-N 推荐的性能。在每个 time stepRNNlast step 的状态和当前行为作为输入。尽管人们已经提出了诸如 session parallelism 之类的技术来提高效率,但是 step 之间的依赖关系使得 RNN 的效率更低。

    • 注意力机制:注意力机制已被证明在各种任务中是有效的。本质上,这种机制背后的思想是:序列输出 sequential output 中的每个输出都依赖于某些输入的 relevant 部分,而这些输入部分是模型应该持续关注的。 基于注意力的方法的额外好处是,方法更容易解释。最近,注意力机制已被引入推荐系统,例如 Attentional Factorization Machine: AFM 学习每个特征交互对于 content-aware 推荐的重要性。

      然而,上面使用的注意力技术本质上是原始模型的附加组件 additional component,如 attention+RNNattention+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 方法的、新的序列推荐模型,然而序列推荐问题与机器翻译问题有很大不同因此需要专门设计的模型。

12.1 模型

  1. 令用户集合为 Uitem 集合为 I ,用户 u 的行为序列为 Su=(S1u,S2u,,S|Su|u) 。在序列推荐的 setting 下,给定用户 u 的行为序列 Su ,我们寻求预测 next item 。在训练过程中,在 time step t ,模型根据前面的 titem 来预测 next item (即,第 t+1item )。

    如下图所示,可以方便地将模型的输入视为 (S1u,S2u,,S|Su|1u),并将预期的输出视为相同序列的 shifted 版本:(S2u,,S|Su|u) 。这里我们将描述如何通过一个 embedding layer、若干个 self-attention block、以及一个 prediction layer 来构建序列推荐模型。我们还分析了它的复杂性,并进一步讨论了 SASRec 与相关模型的不同之处。

12.1.1 Embedding Layer

  1. 我们将训练序列 (S1u,S2u,,S|Su|1u) 转换为固定长度的序列 s=(s1,s2,,sn) ,其中 n 为模型能够处理的最大长度。

    • 如果训练序列长度超过 n ,那么我们选择最近的 n 个行为 。

    • 如果训练序列长度小于 n ,那么我们在序列左侧填充 padding item 直到序列长度为 n

      注意,训练序列按照发生时间从远到近的顺序排列,因此 padding item 填充在左侧(代表最远时刻)。

    对于每个 item i 我们学习一个 embedding 向量 viRd ,其中 dembedding 维度。所有 itemembedding 向量构成了 embedding 矩阵 VR|I|×d ,其中第 i 行表示 item iembedding 向量。

    对于序列 sitem stembedding 向量 vst 记做 et 表示序列中第 tpostionitemembedding 。序列 sinput embedding matrix 记做 ERn×d ,第 t 行表示 position titemembedding ,并且对于 padding item 采用常数 0 向量来表示。

  2. Positional Embedding:我们将在后面章节看到,由于 self-attention 模型不包含任何循环模块或卷积模块,因此它对于先前 itemposition 是无感知的。因此,我们将一个可学习的 position embedding 矩阵 PRn×d 注入到 input embedding 中:

    E^=[vs1+p1vs2+p2vsn+pn]Rn×d

    其中:ptRd 为序列中第 tpositionposition embedding,它是 P 的第 t 行。

    我们还尝试了 《Attention is all you need》 中使用的固定的 position embedding ,单发现这在我们的 case 中导致性能更差。我们在实验中定量和定性地分析了 position embedding 的影响。

12.1.2 Self-Attention Block

  1. 《Attention is all you need》 中定义的 scaled dot-product attention 为:

    Attention(Q,K,V)=softmax(QKd)V

    其中:QRM×dk Qquery 矩阵,KRM×dkkey 矩阵,VRM×dvvalue 矩阵。Mitem 数量(每一行代表一个 item),dkquery/key embedding 的维度,dvvalue embedding 的维度,并且 dv 可以与 dk 相等也可以不等。

    直观而言,attention layer 计算所有value 的加权和,其中 query ivalue j 之间的权重与 query ikey j 之间的交互 interaction有关。比例因子 d 是为了避免内积的值过大(尤其是在维度 d 较高的情况下),使得 softmax 的计算出现数值不稳定从而影响效果。

    也可以用超参数 T 来代替 d ,并根据验证集来调优超参数 T ,这样更灵活。

  2. Self-Attention layer:在机器翻译等 NLP 任务中,注意力机制通常采用 K=V 。最近,《Attention is all you need》 提出了一个 self-attention 方法,它使用相同的对象作为 querykey、以及 value 。在我们的 case 中,self-attention 操作将 embedding E^ 作为输入,通过线性投影将它转换为三个矩阵,然后将投影后的矩阵输入到 attention layer

    H=SA(E^)=Attention(E^WQ,E^WK,E^WV)Rn×d

    其中:

    • WQ,WK,VVRd×d 为待学习的投影矩阵。
    • H 为每个时刻的、经过self-attentionrepresentation ,第 t 行表示第 t 个输出的 representation (对应于time step t )。

    引入投影可以使得模型更加灵活。例如,模型可以学习非对称交互asymmetric interaction ,即 <query i, key j><query j, key i> 可以有不同的交互。

  3. 因果关系Causality:由于序列的性质,模型在预测第 (t+1)item 时,只能考虑开始的前 titem 。然而,self-attention layer 的第 t 个输出包含后续 itemembedding 的输入信息,这不符合真实的情况。因此,我们通过禁止 j>iqikj 之间的所有连接来修改 attention

    即:key 的时刻不能超过 query 的时刻。

  4. Point-Wise Feed-Forward Network:尽管 self-attention 能够使用自适应权重聚合所有先前 itemembedding,但是它仍然是一个线性模型。为了赋予模型非线性并考虑不同潜在维度之间的交互,我们应用一个 point-wise 的、双层的 feed-forward network: FFN 到所有的 ht 上,1tn1 ,并且双层 FFN 是跨 time step 共享权重的:

    ft=FFN(ht)=W(2)ReLU(W(1)ht+b(1))+b(2)

    其中:W(1),W(2)Rd×d 为待学习的参数矩阵,b(1),b(2)Rd 为待学习的参数向量。

    注意,hthjtj)之间没有交互,这意味着我们仍然阻止了信息泄露(未来信息泄露给历史)。

    注意,这里只有一个 ReLU,为什么?个人猜测是为了方便后面直接接入output layer

12.1.3 Stacking Self-Attention Blocks

  1. 在第一层 self-attention block 之后,ft 基本上聚合了所有先前 itemembedding,即 {e^j}jt 。然而,通过另一个基于 F=[f1,,fn]R(n1)×dself-attention block 来学习更复杂的 item transition 可能是有益的。具体而言,我们堆叠 self-attention block (即,一个 self-attention layer 和一个 FFN),并且第 bblockBb>1)定义为:

    H(b)=SA(F(b1))ft(b)=FFN(ht(b)),b>1,1tn1H(1)=H,F(1)=F
  2. 然而,当网络更深时,有几个问题变得更加严重:

    • 增加的模型容量导致模型过拟合。
    • 训练过程变得不稳定(由于梯度消失等)。
    • 具有更多参数的模型通常需要更多的训练时间。

    受到 《Attention is all you need》 的启发,我们执行以下操作来缓解这些问题:

    g~(x)=x+Dropout(g(LayerNorm(x)))

    其中:g(x) 表示 self attention layerFFN

    也就是说,对于 block 中的每个 layer g

    • 我们在输入到 g 之前对输入 x 应用 layer normalization
    • 我们对 g 的输出应用 dropout
    • 此外,我们将输入 x 添加到最终输出。

    我们接下来依次介绍这些操作。

  3. 残差连接 Residual Connections:在某些情况下,多层神经网络已经证明了分层hierarchically地学习有意义特征的能力。然而,在提出残差网络之前,简单地添加更多层并不容易得到更好的性能。残差网络背后的核心思想是:通过残差连接将 low-layer 特征传播到更高的层。因此,如果 low-layer 特征有用,模型可以轻松地将它们传播到最后一层。

    同样地,我们假设残差连接在我们的 case 中也很有用。例如,现有的序列推荐方法表明,最近一个访问的 item 对预测 next item 起着关键作用。然而,经过几个 self-attention block 之后,最近一个访问的 itemembedding 与之前的所有 item 纠缠在一起。添加残差连接从而将最近一个访问的itemembedding 传播到最后一层将使模型更容易利用 low-level 信息。

    假设在 time step t 来预测 next item,那么 self attention layer 的残差连接为:

    h~t=et+ht

    这里有一个细节:是采用 et (未考虑 position embedding)、还是采用 e^t (考虑 position embedding)?论文并未提及。这可以通过实验来验证。

  4. Layer Normalizationlayer normalization 用于跨特征对输入进行归一化(即,零均值和单位方差),这有利于稳定和加速神经网络的训练。和 batch normalization 不同, layer normalization 中使用的统计数据独立于同一个 batch 中的其它样本。

    具体而言,假设输入是包含了一个样本中所有特征的向量 x ,则 layer normalization 定义为:

    LayerNorm(x)=αxμσ2+ϵ+β

    其中:

    • 为逐元素乘积(也叫做 Hadamard 积)。
    • μRσR 分别为单个样本 x 中所有元素构成的集合的均值和标准差。
    • α,β 分别为待学习的比例因子和偏置项。
  5. Dropout:为了缓解深度神经网络中的过拟合问题,Dropout 正则化技术已被证明在各种神经网络架构中是有效的。Dropout 的思想很简单:在训练期间以概率 p 随机 turn off 神经元,并在测试期间使用所有神经元。

    除了在 self attention layerFFN 上应用 dropout 之外,我们还在 embedding E^ 上应用了一个 dropout layer

12.1.4 Prediction Layer

  1. Bself-attention block 之后,给定开始的 titem 我们基于 ft(B) 来预测 next item 。具体而言,我们采用一个 MF layer 来预测与 item i 的相关性 relevance

    ri,t=ft(B)ni

    其中:

    • ri,t 为给定开始的 titem 的条件下,item i 成为 next itemrelevance ,也称作交互分 interaction score
    • NR|I|×d 为另一个 item embedding 矩阵。

    因此,一个更高的 ri,t 意味着 item i 更有可能成为 next item 。我们根据 ri,t 排序并生成推荐。

  2. Shared Item Embedding:为了降低模型大小并缓解过拟合,我们考虑在 MF layer 中使用 item embedding V

    ri,t=ft(B)vi

    注意:ft(B) 可以视为一个依赖于 V 的函数:ft(B)=ψ(vs1,,vst)

    使用同一套 item embedding 的一个潜在问题是:它们的内积不能表示非对称的 item 转移,例如 item i 经常在 item j 之后购买(这意味着 vivj 需要与 vjvi 不相等,但是从数学上看这是矛盾的)。因此,像 FPMC 这样的方法倾向于使用异质heterogeneousitem embedding (即,vinjvjni) 。

    然而,我们的模型没有这个问题,因为它学习了非线性变换。例如,FFN 可以通过同一套 item embedding 轻松实现不对称:FFN(vi)vjFFN(vj)vi 。根据经验,使用共享 embedding 显著提高了我们模型的性能。

  3. Explicit User Modeling:为了提供个性化推荐,现有方法通常采用以下两种方法之一:

    • 学习一个显式的 user embedding 从而表达用户的偏好(如 MFFPMCCaser)。
    • 考虑用户之前的行为,并从之前访问的 itemembedding 中导出一个隐式的 user embedding (如 FSIMFossilGRU4Rec)。

    我们的方法属于后者,因为我们通过考虑用户的所有行为来生成 embedding ft(B)。但是,我们也可以在最后一层插入显式的 user embedding,例如:

    ru,i,t=(uu+ft(B))vi

    其中 UR|U|×d 为一个 user embedding 矩阵。

    然而,我们根据经验发现添加显式的 user embedding 并不能提高性能(可能是因为模型已经考虑了所有用户的行为)。

12.1.5 Network Training

  1. 回忆一下我们通过截断或填充从而将每个用户行为序列(排除最后一个行为) (S1u,S2u,,S|Su|1u) 转换为一个固定长度的序列 s=(s1,s2,,sn) 。我们定义 ot 为在时刻 t 预期的 output

    ot={<pad>,if st is a padding itemst+1,1t<n

    其中 <pad> 表示 padding item

    我们的模型以序列 s 作为输入,对应的序列 o=(o1,,on1) 作为预期输出(注意,在时刻 n 我们没有下预期的 next item )。我们采用二元交叉熵损失作为目标函数:

    L=SuS1t<n[logσ(rot,t)+jSulog(1σ(rj,t))]

    其中:S 为所有用户的所有 session 所组成的集合。

    注意,我们忽略当 ot=<pad> 时的损失项。

    上式本质是 softmax 交叉熵损失的负采样版本,它是 pointwise loss。我们也可以考虑 pairwise loss

  2. 网络通过 Adam 优化器进行优化。在每个 epoch 中,我们为每个序列中的每个 time step 随机生成一个 negative item j 。更多实现细节将在后面描述。

12.1.6 复杂度分析

  1. 空间复杂度:我们模型中待学习的参数来自embedding,以及 self-attention layerFFNlayer normalization 中的参数,参数的总数为 O(|I|d+nd+d2) 。和其它方法相比(如 FPMCO(|U|d+|I|)d),我们方法的参数规模是适中的,因为我们方法的参数规模不会随着用户数量的增加而增长,并且在推荐问题中 d 通常很小。

  2. 时间复杂度:我们模型的计算复杂度主要来自于 self-attention layerFFN ,即 O(n2d+nd2) 。主要的复杂度是来自 self-attention layerO(n2d) 。然而,我们模型中的一个方便的特性是:每个 self-attention layer 中的计算是完全可并行的,这适合 GPU 加速。相反,RNN-based 方法(如 GRU4Rec)依赖于 time step (即,time step t 的计算必须等待 time step t1 的结果),这导致在序列操作 O(n) 倍时间。

    我们经验性地发现我们的方法比采用 GPURNN/CNN-based 方法快十倍以上(结果类似于 《Attention is all you need》 中机器翻译任务的结果),并且最大长度 n 可以轻松地扩展到几百(对现有的 benchmark 数据集,n 达到几百通常是足够的)。

    在测试阶段,对于每个用户,在计算 embedding ft(b) 之后,评估过程和标准的 MF 方法相同。评估每个 item 的计算复杂度为 O(d)

  3. 处理长的序列:尽管我们的实验从经验上验证了我们方法的效率,但最终它无法扩展到非常长的序列。我们有望在未来调查一些方向:

    • 使用 restricted self-attention《A time-restricted self-attention layer for asr》),它仅关注最近的行为而不是所有行为,并且可以在更高的 layer 考虑远距离行为 distant action
    • 《Personalized top-n sequential recommendation via convolutional sequence embedding》 中那样将长序列分段 。
  4. 未来工作:

    • 结合丰富的上下文信息(如停留时长、行为类型 action typelocation、设备等等)来扩展模型。

      通过这些上下文信息,我们不仅知道行为序列中每个行为作用的 item,还知道发生该行为的上下文。

    • 研究处理非常长的序列。

12.1.7 讨论

  1. 我们发现 SASRec 可以视为某些经典协同过滤模型的推广generalization 。我们还在概念上讨论了我们的方法和现有方法如何处理序列建模。

  2. SASRec 可以简化为一些现有模型:

    • Factorized Markov Chains: FMCFMC 分解一阶的 item 转移矩阵,并且依赖于最近的一个 item i 来预测 next item j

      P(ji)vinj

      如果我们将 self-attention block 设为零、使用非共享的 item embedding、并且移除 position embeddingSASRec 将简化为 FMC

      此外,SASRec 还与 Factorized Personalized Markov Chains: FPMC 密切相关,后者融合 MFFMC 从而分别捕获用户偏好和短期动态:

      P(ju,i)[uu||vi]nj

      其中:|| 表示向量拼接。

      遵从上面类似于 FMC 的简化操作,并添加显式的 user embedding (通过向量拼接),SASRec 等效于 FPMC

    • Factorized Item Similarity Models: FISMFISM 通过考虑 item j 与用户之前访问的 item 之间的相似性来估计对 item j 的偏好分数:

      P(ju)(1|Su|iSuvi)nj

      如果我们使用一个 self-attention layer(不包含 FFN)、在 item 上设置均匀的注意力权重(即 1/|Su|) 、使用非共享的 item embedding、并移除 position embeddnig,则 SASRec 将简化为 FISM 。因此,我们的模型可以被视为用于 next item 推荐的自适应的、分层的、序列的 item similarity model

  3. MC-based 推荐:马尔科夫链Markov Chains: MC 可以有效地捕获局部序列模式local sequential pattern,它假设next item 仅依赖于前面的 Litem 。现有的 MC-based 的序列推荐方法要么依赖于一阶马尔科夫链(如 FPMC, HRM, TransRec)、要么依赖于高阶马尔科夫链(如 Fossil, Vista, Caser)。基于一阶马尔科夫链方法往往在稀疏数据集上表现最好。相比之下,基于高阶马尔科夫链的方法有两个限制:

    • 需要在训练之前指定马尔科夫链的阶次 L ,而不是自适应地选择。
    • 效率和效果无法很好地随阶次 Lscale ,因此 L 通常很小(例如 L<5 )。

    我们的方法解决了第一个问题,因为 SASRec 可以自适应地关注相关的前面的 item (如,在稀疏数据集上仅关注最近一个 item ,以及在稠密数据集上关注更多的 item )。

    此外,对于第二个问题,我们的模型建模了前面 nitem,并且 n 根据经验可以扩展到数百,在训练时间适度增加的同时取得了性能的显著提升。

  4. RNN-based 推荐:另一个方向的工作使用 RNN 来建模用户行为序列。RNN 通常用于建模序列,但是最近的研究表明:CNNself-attention 在某些序列的 setting 中表现得比 RNN 更强。

    我们的 self-attention based 模型可以从 item similarity model 中推导出来,这是用于推荐的序列建模的合理替代方案。对于 RNN,除了并行计算效率低下外,它们的最大路径长度(从输入节点到相关的输出节点)为 O(n)。相比之下,我们的模型具有 O(1) 的最大路径长度,这有利于学习长程依赖long-range dependency

12.2 实验

  1. 我们进行实验并回答以下几个问题:

    • RQ1SASRec 是否超越了 state-of-the-art 方法(包括 CNN/RNN-based 方法)?
    • RQ2SASRec 架构中各种组件的影响是什么?
    • RQ3SASRec 的训练效率和可扩展性(关于 n 的)如何?
    • RQ4:注意力权重是否能够学到与position 相关的、或者与 item 属性相关的有意义的pattern
  2. 数据集:我们在来自现实世界应用程序的四个数据集上评估我们的方法。数据集在领域 domain、平台platform、稀疏性sparsity 方面差异很大:

    • Amazon:来自于 Amazon.com 的数据集,其中 Amazon 上的 top-level 产品类别被视为单独的数据集。我们考虑两个类别,美妆Beauty 、游戏 Games 。该数据集以高度的稀疏性和可变性variability而著称。
    • Steam:来自于一个大型在线视频游戏分发平台 Steam 。数据集包含 2567538 名用户、15474 款游戏、7793069 条英文评论,时间跨度从 201010 月到 20181 月。该数据集还包含可能对未来工作有用的丰富信息,如用户游戏时长(小时)、游戏定价信息、媒体评分(对游戏的评分)、游戏类别 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 的用户、以及频次低于 5item

    • 我们将每个用户 u 的历史序列 Su 划分为三部分 :最近的行为 S|Su|u 用于测试、次近的行为 S|Su|1u 用于验证、剩余的行为用于训练。注意,在测试期间,输入序列包括训练行为和验证的行为,即前面的 |Su|1 个行为。

      这个和 GRU4Rec 的不同。在 GRU4Rec 中,仅在用户之间完整的 session 划分数据集(即,user-level),而不对 session 内部进行拆分(即,session-level)。区别在于:

      • user-level 的划分:测试用户是全新的,相当于冷启动cold-start
      • session-level 的划分:测试用户不是全新的,已经在训练期间见过用户前面的 |Su|1 个行为,预测最后一个行为。

    数据集的统计特性参考下表。我们看到:两个 Amazon 数据集的 actions per useractions per item 更少,Steamactions per item 更高,而 MovieLens-1m 是最稠密的数据集。

  3. 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: FPMCFPMC 组合了矩阵分解和分解的一阶马尔科夫链,从而捕获了用户的长期偏好以及 item-to-item 的转移。
      • Translation-based Recommendation: TransRec:一种 state-of-the-art 的一阶序列推荐方法,它将每个用户建模为一个翻译向量 translation vector 从而捕获从current itemnext 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 方法,它通过对 L 个最近 itemembedding 矩阵应用卷积运算来捕获高阶马尔科夫链,并实现了 state-of-the-art 的序列推荐性能。

    由于其它序列推荐方法(如 PRME, HRM, Fossil)在类似数据集上的性能逊色于上述 baseline ,因此我们不考虑与它们进行比较。我们也不包含 TimeSVD++, RRN 等时间推荐方法 temporal recommendation method,因为它们的 setting 与我们这里考虑的不同。

  4. 配置:

    • 为了公平地比较,我们使用带 Adam 优化器的 TemsorFlow 来实现 BPR, FMC, TransRec 。对于 GRU4Rec, GRU4Rec++, Caser,我们使用相应作者提供的代码。
    • 对于除了 PopRec 之外所有方法,我们从 {10, 20, 30, 40, 50} 中考虑潜在维度 d
    • 对于 BPR, FMC, FPMC, TransRec,我们考虑 L2 正则化并且正则化系数从 {0.0001, 0.001, 0.01, 0.1, 1} 之间选择。
    • 所有其它超参数和初始化策略都是对应方法的作者所建议的。我们使用验证集调优超参数,如果验证集性能在 20epoch 内没有提高,那么终止训练。
  5. SASRec 实现细节:

    • 对于默认版本的 SASRec 中的架构,我们使用两个 self-attention blockB=2 ),并使用待学习的 positional embedding

    • embedding layerprediction layer 中的 item embedding 是共享的。

    • 我们使用 TensorFlow 实现了 SASRec。优化器是 Adam,学习率为 0.001batch size = 128

    • MovieLens-1mdropout rate = 0.2,而其它三个数据集由于稀疏性因此 dropout rate = 0.5

      数据集越稀疏所以 dropout rate 越大?可能需要进行超参数调优来观察实验效果。

    • MovieLens-1m 的最大序列长度 n=200,其它三个数据集的最大序列长度 n=50

    我们在后面检查 SASRec 的不同变体以及不同超参数的性能。SASRec 的代码公布在 https://github.com/kang205/SASRec

  6. 评估指标:我们使用两个常见的 Top-N指标 Hit Rate@10, NDCG@10 来评估推荐性能。

    • Hit@10 计算了 ground-truthnext item 出现在推荐列表的 top 10item 比例(分母为推荐列表的个数,即推荐结果中有多少是命中的)。

      注意,由于我们对每个用户仅有一个 test item,因此 Hit@10 相当于 Recall@10 ,并且与Precision@10 成正比(Precision@10 还要除以推荐列表长度,这里是 10)。

    • NDCG@10 是一个position-aware 的指标,它在排名靠前的位置分配更大的权重。

    为了避免对所有 user-item pair 进行大量的计算,我们对每个用户随机采样 100negative item ,并将这些 negative itemground-truth item 进行排名。我们根据这 101item 的排名来评估 Hit@10NDCG@10 指标。

12.2.1 不同方法结果比较

  1. 下表展示了所有方法在四个数据集上的推荐性能(用于回答问题RQ1)。

    • 考虑排除 SASRec 以外的其它方法在所有数据集上的表现,我们发现一种通用模式,即:non-neural 方法((a) ~ (e))在稀疏数据集上表现更好,而神经网络方法((f) ~ (h))在稠密数据集上表现更好。

      这可能是由于神经网络方法具有更多参数来捕获高阶转移high order transition (即,它们具有表达能力但是容易过拟合),而精心设计但更简单的模型在高度稀疏的 setting 中更有效。

    • 我们的方法 SASRec 在稀疏数据集和稠密数据集上都优于所有 baseline ,并且相对于最强的 baselineHit Rate 上平均提升 6.9%、在 NDCG 上平均提升 9.6%

      一个可能的原因是我们的模型可以自适应地关注不同数据集上不同范围内的 item(例如,在稀疏数据集上仅关注前一个 item,在稠密数据集上关注更多的 item )。我们在后面内容进一步分析了这种行为。

    在下图中,我们还通过展示 d1050 的变化时所有方法的 NDCG@10 指标,从而分析关键超参数 d 的影响。我们看到我们的模型通常受益于更大的 d 。对于所有数据集,我们的 SASRecd40 时取得令人满意的性能。

12.2.2 消融研究

  1. 由于我们的架构中有许多组件,我们通过消融研究来分析它们的影响(用于回答问题RQ2)。下表显示了我们的默认方法及其 8 个变体在所有四个数据集上的性能(d=50) 。我们将分别介绍这些变体并分析它们的作用:

    • Remove PE(Positional Embedding):没有 positional embedding P,每个 item 的注意力权重仅取决于 item embedding 。也就是说,该模型根据用户过去的行为进行推荐,但是行为的顺序并不重要。

      该变体可能适用于用户行为序列通常较短的稀疏数据集。该变体在最稀疏的数据集 Beauty 上的表现优于默认的模型,但是在其它更稠密的数据集上的表现更差。

      移除 positional embedding 不一定效果下降,主要还是要看数据集的性质。

    • Unshared IE(Item Embedding):我们发现,使用两种 item embedding (非共享的 item embedding )会一致性地损害性能,可能是由于过拟合。

    • Remove RC(Residual Connections):我们发现,移除残差连接之后模型性能显著更差。这大概是因为 lower layer 中的信息(如,最近一个 itemembedding,第一个 blockoutput )无法轻易地传播到最后一层,而这些 lower layer 中的信息对于推荐非常有用,尤其是在稀疏数据集上。

    • Remove Dropout:我们的结果表明,dropout 可以有效地正则化模型从而实现更好的性能,尤其是在稀疏数据集上。结果还暗示了:过拟合在稠密数据集上不严重。

      过拟合在稠密数据集上也比较严重,只是相对稀疏数据集而言不太严重。

      因为稀疏数据集更容易陷入过拟合,因此更需要正则化。

    • Number of blocks

      • 毫不奇怪, 零个 block 的结果较差,因为模型效果仅取决于最近一个 item
      • 带有一个 block 的变体的表现相当不错。
      • 带有两个 block 的变体(即 default 模型)的表现仍然进一步提升,尤其是在稠密数据集上,这意味着 hierarchical self-attention structure 有助于学习更复杂的 item 转移。
      • 带有三个 block 的变体可以获得与 default 模型(即两个 block)相似的性能。
    • Multi-headTransformer 的作者发现使用 multi-head的注意力很有用,它将注意力应用于 K 个子空间(每个子空间都是 d/K 维的)。然而,在我们的 case 中,two head attention 的性能始终比 single-head attention 稍差。这可能是由于我们的问题中的 d 很小,它不适合分解成更小的子空间(在 Transformer 中,d=512 )。

12.2.3 训练效率和可扩展性

  1. 我们评估了我们模型的训练效率的两个方面(用于回答问题 RQ3):训练速度(一个训练 epoch 所花费的时间)、收敛时间(达到令人满意的性能所花费的时间)。我们还根据最大长度 n 检查模型的可扩展性。所有实验均使用单个 GTX-1080 Ti GPU 进行。

  2. 训练效率:下图展示了使用 GPU 加速的、基于深度学习的方法的效率。GRU4Rec 由于性能较差而被省略。为公平比较,CaserGRU4Rec+ 有两种训练选项:使用完整的训练数据、或仅使用最近的 200 个行为(SASRec 中就是使用最近的 200 个行为)。

    • 在计算速度上,SASRec 一个 epoch 的模型更新时间仅为 1.7 秒,比 Caser11 倍(19.1 s/epoch) )、比 GRU4Rec+18 倍(30.7s/epoch)。
    • 在收敛速度上,SASRecML-1M 数据集上大约在 350秒内收敛到最佳性能,而其它模型需要更长的时间。
    • 我们还发现,使用完整数据可以提高 CaserGRU4Rec+ 的性能。

  3. 可扩展性:与标准 MF 方法一样,SASRec 与用户总数、item 总数、action 总数呈线性关系。一个潜在的可扩展性问题是最大长度 n ,但是计算可以有效地采用 GPU 并行化。这里我们测量 SASRec 在不同 n 的训练时间和性能,从而研究 SASRec 的可扩展性,并分析它是否可以在大多数情况下处理序列推荐。

    下表显示了具有不同序列长度的 SASRec 的性能和效率。

    • 较大的 n 的性能会更好,在 n=500 左右时性能会达到饱和(可能是因为这个长度已经覆盖了 99.8% 的行为序列)。
    • 然而,即使 n=600,模型也可以在 2000 秒内完成训练,这仍然比 CaserGRU4Rec+ 更快。

    因此,我们的模型可以轻松地扩展到多达数百个行为的用户行为序列,这适用于典型的评论数据集和购买数据集。我们计划在未来研究处理非常长的序列的方法。

12.2.4 可视化

  1. 回想一下,在 time step t ,我们模型中的 self-attention 机制根据前面 titemposition embeddingitem embedding 自适应地为它们分配权重。为了回答 RQ4,我们检查所有训练序列,并通过展示 position 上的平均注意力权重、以及 item 之间的平均注意力权重来揭示有意义的pattern

  2. position 上的注意力:下图展示了最近 15time step 在最近 15position 上的平均注意力权重的四种热力图。注意,我们在计算平均权重时,分母是有效权重的个数,从而避免短序列中 padding item 的影响。

    我们考虑了不同热力图之间的一些比较:

    • (a) vs (c):这种比较表明:

      • 对于稀疏数据集 BeautySASRec 倾向于关注更近more recentitem
      • 对于稠密数据集 ML-1MSASRec 倾向于关注不那么近less recentitem

      这是使我们的模型能够自适应地处理稀疏数据集和稠密数据集的关键因素,而现有方法往往仅侧重于某一头。

      即,表明我们的 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 recentposition上。这大概是因为第一个 self-attention block 已经考虑了所有之前的 item,而第二个 block 不需要考虑很远的 position

      即,表明我们的 self-attention 机制的行为是hierarchical 的。

      此外,既然第二个 block 不需要考虑很远的 position,那么是否使用简单的 last representation 就可以?毕竟 self-attention block 的计算复杂度比直接引入 last representation 更高。

    总而言之,可视化表明我们的 self-attention 机制的行为是自适应的、position-aware 的、以及 hierarchical 的。

  3. item 之间的注意力:展示几个精心挑选的 item 之间的注意力权重可能没有统计学意义。在 MovieLens-1M 上,每部电影都有多个类别。为了进行更广泛的比较,我们随机选择两个不相交的集合,每个集合包含来自 4 个类别的 200 部电影:科幻 Sci-Fi、浪漫Romance、动画 Animation、恐怖 Horror (注,这两个集合共享相同的四个类别)。第一个集合用于 query,第二个集合用于 key

    下图展示了两个集合内不同 item 之间的平均注意力权重的热力图(item 粒度的,而不是类别粒度的),每个集合内的 item 根据类别进行分组。我们可以看到:热力图大概是一个块对角矩阵 block diagonal matrix,这意味着注意力机制可以识别相似的 item (如,同一个类别的 item),并倾向于在相似 item 之间分配更大的权重( SASRec 事先不知道类别,我们也没有将 item 类别作为特征馈入模型)。

十三、RUM[2018]

  1. 在许多现实世界的 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 Aitem Dsummarize 到一个向量(即,h4),用于预测用户的 next interest

    不同历史记录(它们用于 next interest prediction )的这种区分性的缺乏导致了两个不利的后果:

    • 在序列推荐中弱化了高相关 item 的信号。
    • 忽略这样的高相关性信号使我们难以理解和解释序列推荐。

    为了缓解这些问题,论文 《Sequential Recommendation with User Memory Networks》将用户行为视为描述神经图灵机 neural turing machine: NTM 的决策程序,并提出使用 external memory 来建模用户历史记录。凭借显式地、动态地、和有效地表达、存储和操作记录的能力,external memory network: EMN 已经在许多序列预测任务中展示出良好的性能,例如知识问答 question answering: QAnatural language transduction: NLTknowledge tracking: KTEMN 架构不是合并先前的状态state来进行预测,而是引入了一个 memory matrix 来将状态分别存储在 memory slot 中。然后通过在这个矩阵上设计适当的操作,EMN 与传统的 RNN/LSTM 模型相比在许多任务中实现了显著的提升。

    受到 EMN 的启发,论文 《Sequential Recommendation with User Memory Networks》提出了一种将 Recommender systemexternal User Memory network 相结合的新颖框架,简称 RUM。然后论文进一步研究 RUMtop-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 RUMfeature-level RUM ,它们分别建模 item-level 的用户记录和 feature-level 的用户记录。与现有方法相比,论文的方法基于 memory network 对用户历史记录进行了更细粒度的使用,提高了推荐性能,同时基于注意力分析抽取了消费者行为的直观的因果关系intuitive causality

    总之,这项工作的主要贡献包括:

    • 论文提出将协同过滤的洞察insightmemory-augmented neural network: MANN 相结合从而进行推荐。这种结合以更有效的方式利用了用户历史记录。据作者所知,这是将 MANN 引入推荐系统领域的首次尝试。
    • 论文研究了两个具有不同 representationoperation 设计的潜在 memory networkitem-levelfeature-level)。论文进一步研究并比较了它们在序列推荐和 top-N 推荐任务中的表现。
    • 论文还将所提出的模型与 state-of-the-art 的方法进行了比较,并通过对现实世界数据集的定量分析来验证所提出模型的优越性。分析结果表明论文的方法能够更有效地利用用户历史记录。
    • 论文进一步提供实证分析 empirical analyse 来解释所提出的模型如何、以及为什么推荐一个 item 。分析结果表明通过 memory network 中的注意力机制,所提出的模型能够直观地解释用户历史记录如何影响该用户当前的和未来的决策。
  2. 相关工作:我们的工作本质上是序列推荐和 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: RNNdynamic user interest representation 。在 DREAM 中,用户的所有历史记录都被嵌入到 RNNfinal hidden state 中,从而代表该用户的当前偏好。DREAM 这种方法取得了相对于 HRMFPMC 的显著改进。

        类似地,《Session-based recommendations with recurrent neural networks》《Improved recurrent neural networks for session-based recommendations》 利用用户之前的点击和购买行为,使用 RNN 对短期偏好进行建模,从而用于 session-based 推荐。

        《Translation-based recommendation》 采用度量空间学习metric space learning 方法来学习用于序列推荐的、加性additiveuser-item 关系。

        除了电商之外,序列推荐也被应用于 POI 推荐、音乐推荐、浏览browsing推荐等各种 application 场景。

      现有模型通常将用户先前的记录隐式编码为一个 latent factorhidden state ,而不区分每条记录在预测当前兴趣时可能扮演的不同角色。然而,在这项工作中,我们利用 user memory network 来存储和操作每个用户先前的记录,这有助于增强用户历史的表达能力。

    • Memory-Augmented Neural Network:近年来出现了能够有效处理序列数据的 external memory network: EMN 。简而言之,EMN 利用一个 memory matrix 来存储历史的 hidden state 。通过正确读取和更新这个 memory matrixEMN 可以在许多面向序列的任务上获得更好的性能。遵循这个思想,《End-to-end memory networks》 设计了一个端到端的 memory-augmented model ,它在训练期间需要的监督信息显著减少从而使其更好地适用于real-world setting。最近,研究人员已经成功地将 EMN 的概念应用于多个领域,如 question answering: QAnatural language transduction: NLTknowledge tracking: KT

      通常,EMN 由两个主要组件构成:一个 memory matrix 用于维护 state 、一个 controller 用于操作(包括读取和写入)。更具体而言:

      • 对于读取过程,大多数方法采用注意力机制来读取 memory matrix 。即,对于输入 q ,他们首先计算输入和memory matrix 中每个 memory slot mi 的相似度 similarity s(q,mi)R ,然后第 islot 的注意力权重为:

        wi=softmax(s(q,mi))

        其中 softmax(xi)=exp(xi)jexp(xj) 。在注意力权重的基础上,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 的思想应用于推荐系统,从而更有效地利用用户历史行为。这种应用方式还有待学术界探索。

13.1 模型

  1. 在本节中,我们首先介绍我们的通用框架,详细说明如何将 user memory network 与协同过滤相结合。然后,我们通过描述通用框架的两个具体实现(即,item-level user memory networkfeature-level user memory network)来聚焦于设计 memory component ,从而从不同的角度审视我们的框架。

13.1.1 通用框架

  1. 为了更好地理解,我们首先将广泛使用的矩阵分解 matrix factorization: MF 模型重新描述为神经网络。假设有 N 个用户(用户集合为 U)和 Mitemitem 集合为 I)。在神经网络的上下文中,采用 one-hot 格式的 user ID/ item ID 可以作为输入并馈送到架构中,然后 look-up layer 将这些 sparse representation 投影到稠密向量中(即 user embedding/ item embedding)。

    假设用户 uuser embeddingpuitem iembeddingqi ,那么MF 模型中 ui 的相似分 likeness score y^u,i 可以被计算为 puqi 之间的向量内积:

    y^u,i=puqi
  2. memory enhanced user embedding:为了在我们的框架中利用用户历史记录,我们从两部分生成一个用户的 embedding

    • 一个部分与用户的 memory component 有关,该组件对用户以前的记录进行编码(称作 memory embedding,记做 pum)。
    • 另一个部分是一个 free vector ,用于编码不受用户先前行为影响的内在偏好 intrinsic preference(称作 intrinsic embedding,记做 pu)。

    memory embedding 类似于传统的 RNN-based 方法中的 hidden vector 。然而,hidden vector 盲目地将用户的所有历史记录压缩成一个固定的向量,而在我们的框架中,用户记录通过更具表达能力的结构(个性化的 memory matrix Mu)来进行编码、存储、更新。

    这种方式内存消耗大(每个用户分配一个 memory matrix,内存需求为 O(NDK) ,其中 Kmemory slot 个数,Dmemory embedding 维度)。此外,模型的 mini-batch 训练也是一个难点。

    具体而言:

    • 对于用户 u,该用户的 memory embedding pum 是根据当前 item embedding qiMu 读取而来:

      pum=read(Mu,qi)

      其中 read() 为读取函数。

    • 然后,通过将 memory embedding pum 与用户的 intrinsic embedding pu合并,我们得到用户 ufinal user embedding 为:

      pu=merge(pu,pum)

      其中 merge() 是将两个向量合并为一个向量的函数。在我们的模型中,我们选择简单的加权加法,即:

      merge(x,y)=x+αy

      其中 α 为一个加权超参数。

      我们还测试了逐元素乘法合并、以及向量拼接合并,但是它们的效果都不如加权加法合并。加权加法合并的另一个优点是:我们可以调整权重超参数 α 来研究融合了 memory 机制进行推荐的效果,这将在实验部分展示。

  3. 预测函数:在进行预测时,我们将 final user embedding puitem embedding qi 输入到一个函数中:

    y^u,i=predict(pu,qi)

    其中 predict() 是任意预测函数,甚至可以是 《Neural collaborative filtering》 中的 prediction neural network。在这里,我们选择 sigmoid 内积 y^u,i=σ(puqi)作为具体实现,因为它为我们的数据提供了更好的训练效率。然而,没必要严格限定该函数的实现,根据具体的应用领域,可以在实践中使用许多其它方式的实现。

  4. 训练:我们采用二元交叉熵作为模型优化的损失函数,要最大化的目标函数为:

    LRUM=(log(u,i)(y^u,i)yu,i(1y^u,i)1yu,i)λ||Θ||F2=(uiIu+logy^u,i)+(uiIIu+log(1y^u,i))λ||Θ||F2

    其中:

    • Θ 为模型的参数集合。
    • yu,iground truth,如果用户 u 购买了 item i 则取值为 1,否则取值为 0
    • I 为所有 item 的集合,Iu+ 为用户 u 所有购买的 item 的集合。我们从 unobserveditem 集合 Iu=IIu+ 中均匀采样 negative item 。应该注意的是,非均匀采样策略可能会进一步提高性能,我们将非均匀采样策略留待未来的工作。

    在这个等式中,我们通过前两项来最大化我们预测结果的可能性,最后一项对所有模型参数正则化从而避免过拟合。在训练阶段,我们通过随机梯度下降 stochastic gradient descent: SGD 来学习模型参数。

  5. memory updating:在每次购买行为之后,我们通过以下方式更新 user memory matrix Mu 从而维持其动态特性 dynamic nature

    Muwrite(Mu,qi)

    在接下来的内容中,我们将描述个性化的 memory matrix Mu 如何编码用户行为,以及如何在 item-levelfeature-level 设计 read()write() 操作。

13.1.2 Item-level RUM

  1. 在本节中,我们首先通过简单的方式扩展以前的方法来实现我们的思想(如下图 (a))。与现有模型类似,我们将每个 item 视为一个单元unit,并建模先前购买的 item 对下一个 item 的影响。许多工作表明(《Factorizing personalized markov chains for next-basket recommendation》《Learning hierarchical representation model for nextbasket recommendation》),用户最近的行为可能对当前决策更重要。因此,对于每个用户 u ,我们让 memory matrix Mu 存储 u 最近购买的 itemembedding ,如下图 (a) 中的紫色虚线框所示。

  2. 假设用户 u 购买的 item 集合定义为:Iu+={v1u,v2u,,v|Iu+|u} ,其中按照购买顺序(时间戳的升序)来排列,viu 为用户 u 购买的第 iitem

    qviuRDitem viuembedding 。假设 memory matrixK 列(即 Kmemory slot),即 Mu={m1u,m2u,,mKu}RD×K ,其中 mkuRDMu 的第 k 个列向量 column vector 。我们设计 reading 操作和 writing 操作如下:

    • reading 操作:直观上看,之前的 item 可能对当前的 item 有不同的影响,影响越大的 itemfinal memory embedding 中应该越重视。形式上,在我们的模型中,当对 user-item pair (u,viu) 进行预测时,我们首先采用与 FPMC 类似的方式来计算 user memory Mu 中的 item 与当前 item viu 的影响:

      wi,k=qviumku,zi,k=exp(β×wi,k)j=1Kexp(β×wi,j),k=1,2,,K

      其中 β 为强度strength超参数。

      然后我们使用 zi,k 作为注意力权重来推导出用户 umemory embedding ,这为我们提供了一个能力:根据用户历史行为对当前 item 的影响来访问用户历史行为。即:

      pum=k=1Kzi,k×mku

      与之前的模型不同,我们不会在 reading 过程中强行合并所有 item embedding 。相反,我们现将这些 item embedding 单独存储在 Mu 中,然后对其中的某些 item 给予更多的关注。这为我们提供了一种更细粒度的方法来利用用户历史记录。

    • writing 操作:如前所述,用户最近的行为通常对当前的预测起着更重要的作用。因此,我们采用简单的 first-in-first-out: FIFO 机制来维护 user memory matrix Mu 中最近交互的 item

      具体而言,用户 umemory matrix Mu 总是存储最近的 Kitem 。假设当前 itemqviu,那么 memory matrix 为:Mu={qvi1u,qvi2u,,qviKu}RD×K。当写入 memory 时,最早的 item 将被替换,Mu 被更新为:{qviu,qvi1u,,qviK+1u} 。注意,当 memory 未满时,直接添加 item 而不必替换 memory 内的任何其它 item

    这种做法的思想类似于 DIN。由于 Mu 的更新是简单的规则,因此可以在样本生成阶段就把 Mu 拼接到样本中作为特征,这就是 DIN

    但是,与 DIN 相比,这里的 Mu 是固定size的,因此需要进行序列 padding 或截断,因此会一定程度上损害性能。

13.1.3 Feature-level RUM

  1. 受到经典潜在因子模型 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 来存储每个 featureembedding ,并且在进行预测时,item 将与这个 table 交互从而识别其相关的特征。

    • 对于每个用户,我们利用 user memory matrix Mu 来编码该用户在 GLFT 上特征的偏好。基于上述识别的特征,该用户会注意力 attentively 地合并 Mu 中的列,从而获得该用户的 memory embedding

      LFM 中的全局特征空间一样,这里的 global latent feature table 在所有用户之间共享,而 memory matrix 以个性化的方式进行 per-user level 的维护。

    • 最后,我们使用 item embedding 更新 user memory matrix Mu

  2. 形式上,令用户 uembeddingpuRD,令 item iembeddingqiRD 。假设我们的系统中有 K 个潜在特征,global latent feature tableF={f1,f2,,fK}RD×K ,其中 fkRD 为特征 kembedding 。对于用户 u ,我们将该用户的 memory matrix 定义为 Mu={m1u,m2u,,mKu}RD×K ,其中 mkuRD 为用户 u 对特征 k 的偏好的 embedding

    • reading 操作:为了使得读取过程可微,我们采用 soft-attention 机制来读取 user memory matrix 。具体而言,在对 user-item pair (u,i) 进行预测时,我们首先通过以下方式计算 item iglobal latent feature table 中每个特征的相关性:

      wi,k=qifk,zi,k=exp(β×wi,k)j=1Kexp(β×wi,j),k=1,2,,K

      其中 β 也是强度strength超参数。

      我们也使用 zi,k 以线性加权的方式合并用户 umemory matrix 中的 slot ,从而计算该用户的 memory embedding

      pum=k=1Kzi,k×mku

      这里的 reading 操作和 Item-level RUMreading 操作的区别在于注意力权重的生成:Item-level RUM 中,zi,k 是基于 qiMu 得到的;而 Feature-level RUM 中,zi,k 是基于 qiF 得到的。因此,Feature-level RUM 的参数更多、模型容量更高。

    • writing 操作:受神经图灵机neural turing machine: NTM 的启发,在写入 user memory matrix Mu 时,我们在添加新的信息之前先擦除 Mu

      • 擦除:我们首先从 qi 派生出一个 D 维的擦除向量 erase vector ei=σ(Eqi+be) 。其中:σ() 为逐元素的 sigmoid 函数,Ebe 为待学习的擦除参数erase parameter 。给定注意力权重和擦除向量,feature preference memory 更新为:

        mkumku(1zi,k×ei)

        其中: 为逐元素乘积,1 为全一的向量。

        因此:仅当该 location 的注意力权重和 erase element 均为 1 时,这个 memory location 才会被重置为零;当该 location 的注意力权重为零或者 erase element 为零,那么 memory vector 保持不变。

      • 添加:当擦除操作之后,我们使用一个 add vector aiRD 来更新 feature preference memory

        ai=tanh(Aqi+ba),mkumku+zi,k×ai

        其中: Aba 为待学习的 add parameter

      这种 erase-add 更新策略允许在学习过程中遗忘和加强 user feature preference embedding ,并且模型可以通过学习 erase parameteradd parameter 来自动地决定哪些信号需要减弱、哪些信号需要加强。

      这种更新方式类似于 RNN,按顺序地馈入 qi 并更新状态 Mu 。但是,RNN 之后一个状态而 feature-level RUMK 个状态。如果 feature-level RUM 每次更新的是不同的 slot ,那么一定程度上丢失序列信息。甚至feature-level RUM 不知道哪个 item 是最近购买的,而根据现有的研究表明,最近购买的 item 是相当重要的。

13.1.4 讨论和分析

  1. 为了提供对我们的方法的更多洞察,我们分析了 item-level RUMfeature-level RUM 之间的关系。然后通过将其与 matrix factorization: MFfactorized personalized Markov chain: FPMC 进行比较,我们进一步将我们的方法与以前的方法联系起来。

  2. Item-level RUMFeature-level RUM:一般而言,item-level RUMfeature-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-effectivenesstrade-off

    • item-level RUM 可以明确地告诉我们过去哪些 item 对于当前决策更重要,这为系统提供了一定的可解释能力。
    • 然而,feature-level RUMblack box 中通过更细粒度的建模可以获得更好的性能。

    我们将在后的内容讨论更多细节和实验结果。

  3. RUMMF 的关系:当 user memory network 设置为不可用时(即,user memory embedding 设置为全零的向量),RUM 将简化为传统的 MF 。然而,通过启用 user memory networkRUM 可以从历史行为中收集有价值的信息,这可以提高 Top-N 推荐任务的性能,如后面的实验所示。

  4. RUMFPMC 的关系:RUMFPMC 都利用用户的历史行为来预测当前行为。为了对每个用户建模 item-to-item 转移模式,FPMC 构建张量分解模型,并在 Bayesian personalized ranking: BPR 准则下进行优化。目标函数如下:

    LFPMC=(uUTtuiTtuiTtulogσ(x^u,t,ix^u,t,i))λ||Θ||F2

    其中:

    • Ttu 为用户 u 的第 tbasketΘ 为模型的参数集合。

    • x^u,t,i 为模型预测用户 u 在第 tbasket 中购买 item i 的可能性(非归一化的)为:

      x^u,t,i=puqi+1|Tt1u|lTt1uqlqi

    当应用于序列推荐时,FPMC 中的每个 basket 仅包含一个 item,因此有:

    LFPMC=(uUiIu+iIIu+logσ(x^u,t,ix^u,t,i))λ||Θ||F2x^u,t,i=puqi+qlqi

    其中:ql 为最近一次购买的 item (即时刻 t1 购买的 item ) 的 embedding

    为展示我们模型与 FPMC 的区别,我们考虑 item-level RUM 并且仅使用一个 memory slot (即,K=1 ),然后设置 merge() 中的权重超参数 α=1 。然后我们有:

    y^u,i=σ(puqi)=σ((pu+pum)qi)=σ((pu+m1u)qi)=σ((pu+ql)qi)=σ(puqi+qlqi)

    通过将 RUMuser intrinsic embedding pu 视为 FPMC 中的 user embedding pu ,则我们有 y^u,i=σ(x^u,t,i),则 RUM 的损失函数可以重写为:

    LRUM=(uUiIu+logσ(x^u,t,i)+uUiIIu+log(1σ(x^u,t,i)))λ||Θ||F2

    对比 LFPMCLRUM ,我们可以看到: FPMC 与一阶的 item-level RUM 共享相同的预测函数(即,x^u,t,i=puqi+qlqi )。但是,它们的优化准则略有不同。对于三元组 (u,i,i) ,其中 (u,i)observed 的交互、(u,i)unobserved 的交互:

    • FPMC 通过最大化 uii 上相似度的 margin 来学习模型。
    • RUM 分别尝试最大化 ui 上的相似度、最小化 ui 上的相似度来学习模型。

    实际上,我们也可以使用 Bayesian personalized ranking: BPR 来优化 RUM,此时,FPMC 相当于一个一阶的 item-level RUM 从而用于序列推荐。

  5. 基于以上分析,我们可以看出 RUM 是一个非常通用的推荐框架。一方面,RUM 是许多现有推荐模型的推广。另一方面,RUM 可以通过将 merge 函数、predict 函数、以及 reading/writing 策略修改为其它的形式,从而为我们提供机会来探索其它有前景的模型。

  6. 未来工作:

    • 通过引入用户评论、产品图像等辅助信息,我们可以将 feature-level RUM 中的 memory unit 与不同的语义对齐,因此我们可以构建一个更可解释的推荐系统。
    • 此外,我们的 RUM 模型是一个具有灵活泛化能力的框架,因此我们可以研究其它类型的 memory network 设计(而不仅限于这里的 item-level RUMfeature-level RUM ),从而使得我们的框架适应不同的应用场景。

13.2 实验

  1. 数据集:我们在 Amazon 数据集上进行了实验。该数据集包含 19965 月至 20147 月亚马逊的 user-product 购买行为。我们在四个产品类别上评估我们的模型,包括即时视频 Instant Video、乐器 Musical Instrument、汽车 Automotive、婴儿护理 Baby Care

    为了提供序列推荐,我们选择至少有 10 条购买记录的用户进行实验,最终数据集的统计数据如下表所示:

  2. 评估指标:对于每个模型,我们定义为用户 u 生成的推荐列表为 Ru={ru1,ru2,,ruN} ,其中 N 为推荐列表的长度,rui 为排名第 iitem 的预测分数(根据预测分数进行降序排列,分数越高排则名越靠前)。

    假设测试集中用户 u 的交互 item 集合为 Tu,用户集合为 U ,那么我们采用以下评估指标:

    • Precision (P), Recall (R), F1-score:我们采用 per-user 的均值而不是全局均值从而为了更好的可解释性:

      P@N=1|U|uPu@N=1|U|u|RuTu|NR@N=1|U|uRu@N=1|U|u|RuTu||Tu|F1@N=1|U|uF1u@N=1|U|u2×Pu@N×Ru@NPu@N+Ru@N
    • Hit-ratio(HR):命中率 HR 给出了可以收到至少一个正确推荐的用户占比:

      HR@N=1|U|uI(|RuTu|)

      其中:I() 为一个示性函数,当 x>0I(x)=1 否则 I(x)=0

    • normalized discounted cumulative gain(NDCG)NDCG 通过考虑 ground truth item 的排名来评估性能:

      NDCG@N=1ZDCG@N=1Zj=1N2I(|{ruj}Tu|)1log2(j+1)

      其中:Z 为归一化常数(它等于 DCG@N 所有可能取值的最大值,此时每个 grount-truth 都排在非 ground-truth 之前)。

      DCG@N 是位于推荐列表中的 ground-truth 收益的加权和,其中收益固定为 1,权重为 1log2(j+1)jground-truth 的排名。最大的 DCG@N 需要推荐列表满足两个条件:

      • 所有 ground-truth 都位于 DCG@N 中,即累加的项足够多。
      • 所有 ground-truth 的排名都最低,即 j 足够小。
  3. Baseline 方法:

    • MostPopular: MP:非个性化的、基于热门item 的推荐。其中 item 的热门程度根据它在数据集中出现的频次来得到。
    • BPRbayesian personalized ranking,一种流行的 top-N 推荐方法。我们采用矩阵分解作为 BPRprediction component
    • FPMCfactorized personalized Markov chains,它是基于马尔科夫链的、 state-of-the-art 的序列推荐模型之一。在我们的数据集中,每个 item 都被视为一个 basket
    • DREAMdynamic recurrent basket model ,它是 RNN-based 的、state-of-the-art 的序列推荐方法。
  4. 配置:

    • 在实现我们的方法时,模型参数首先根据均匀分布随机初始化,然后通过随机梯度下降 SGD 进行更新。SGD 的学习率是在 {1, 0.1, 0.01, 0.001, 0.0001} 的范围内通过网格搜索来确定的。
    • memory slot 数量 K 根据经验设置为 20
    • merge 函数中设置权重超参数 α=0.2 ,并在实验中研究了使用不同 α 值的效果。
    • 对于每个购买的 item (即,positive instance),我们从用户未交互的 item 中均匀采样一个 negative instance
    • embedding 维度 D{10, 20, 30, 40, 50} 范围内网格搜索来确定。
    • 正则化系数 λ{0.1, 0.01, 0.001, 0.0001} 范围内网格搜索来确定。
    • 在我们的实验中,每个用户的购买记录按照购买时间排序,每个用户的前 70%item 用于训练、剩余的 item 用于测试。
    • 我们为每个用户推荐 5item,即推荐列表长度 N=5
  5. 模型整体性能:我们首先研究默认设置(α=0.2 )下我们的 item-level RUMfeature-level RUM 的性能,如下表所示。可以看到:

    • 非个性化的 Most Popular 方法几乎在所有情况下都给出了最差的性能。由于它没有考虑用户的个性化信息,因此这一观察突出了个性化在推荐任务中的重要性。

    • 正如预期的那样,通过单独分析用户并直接优化 ranking-based 目标函数,在大多数情况下 BPR 的性能优于 Most Popular

    • FPMCDREAM 在大多数指标上都可以达到比 BPR 更好的性能,而这两种方法之间的差异不是很明显。考虑到 BPRFPMC 之间的主要区别在于后者以序列方式对用户历史记录进行建模,这一观察结果验证了序列推荐有助于提高推荐性能。

    • 有趣的是,DREAMinstant 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 RUMfeature-level RUM 的性能都优于最佳 baseline 。这些结果表明了我们提出的序列推荐方法的有效性。

      这实际上并不惊讶,因为我们模型中的 memory 机制和 reading/writing 设计为建模用户历史记录提供了更好的表达能力。

    • 通过在更细粒度的 level 上建模 item 关系,feature-level RUM 在大多数指标上都优于 item-level RUM。这很直观,因为两个 item 的功能可能不直接相关,但是它们可能具有一些共同的特征,这些特征可能会影响用户的决策,例如它们都属于同一个品牌。

  6. 权重超参数 α 的影响:我们很好奇 memory 是否有助于、以及如何帮助序列推荐。为此,我们分析权重超参数 α 的影响,它决定了 merge 函数中 memory embedding 相对于 intrinsic embedding 的重要性。

    具体而言,我们通过在 0 ~ 1 的范围内以 0.1 的步长调整 α 来研究我们的模型在 F1@5 上的性能。结果如下图所示。可以看到:

    • memory component 不可用(即 α=0),feature-level RUMitem-level RUM 都简化到相同的模型并共享相同的性能。在这种情况下,它们都在所有数据集中给出了不利的结果(但不一定是最差的)。
    • 加入了 memory network 之后,模型性能大幅提升,并且在 α=0.2 时效果最佳。
    • 然而,当 memory embedding 的权重继续上升时,模型性能下降。这一观察在四个数据集上是一致的。

    这些结果表明:考虑用户历史行为记录的序列影响 sequential influence 确实有助于提供更好的推荐,但是过分关注这个最近购买信号 recent purchase signal 可能会削弱用户的内在偏好 intrinsic preference 。这些结果进一步验证了学术界经常观察到的现象:短期用户偏好和长期用户偏好对于个性化推荐都很重要。

  7. Item-level RUM 中的 AttentionWeights 的直觉:为了说明 item-to-item 转移的直觉 intuition,我们在下图展示了一些示例用户(每个用户一个子图),这些用户是从 Baby Care数据集上带 5memory slotitem-level RUM(即,K=5 ) 的结果中采样到的。

    这里只有 6case,所以一些结论不具备说服力?最好给出一批 case 的统计结果。

    当用户购买第 iitem 时(对应于 x 轴,用蓝色小网格表示),我们在该用户的子图中绘制一个长度为 5 的列向量(如上面中间子图中,(15,14) 对应处的、高度为5 的细长条)。这个列向量对应于 y 轴的位置 j 的向量元素对应于该用户在所购买的第 jitem 上的注意力权重 zwi,k=qviumku,zi,k=exp(β×wi,k)jexp(β×wi,j) ),颜色越深则表明对第 jitem 的注意力越高。当用户继续购买 item 时,最近购买的 5item 被保留在 memory 中,因此列向量填充的位置从左下角到右上角。基于这幅图,我们得到以下有趣的观察:

    • 通常,靠近对角线的网格的颜色较深。这意味着历史最有影响力的 item 通常是距离当前行为附近的 item 。这进一步证实了 item-level RUM 背后的假设,即:最近的行为对当前的决策更为重要。

      然而,最有影响力的 item 的具体位置并不总是最近的,这可以解释为什么 FPMC 仅通过建模 pair-wise 相邻行为并未取得良好的性能。

    • 此外,我们发现了两种有趣的用户行为模式:

      • 某些行为序列是由最近行为连续触发的(用绿色实线框来表示),这符合 FPMC 的假设。我们称之为 one-to-one 的行为模式。

        一个真实的例子是用户购买了一些婴儿配方奶粉,然后购买了奶瓶,这导致该用户接下来购买了奶嘴,而这些奶嘴导致该用户进一步购买了奶嘴清洁器。

      • 某些行为序列中,多个行为主要受到相同的历史行为的影响(用棕色虚线框来表示),而这多个行为之间的关系并不那么重要。我们称之为 one-to-multiple 的行为模式。

        一个真实的例子是用户购买了婴儿床,然后该用户为婴儿床购买了防水床垫保护套、蚊帐,然后又购买了床铃来装饰婴儿床。在这种情况下,我们的带注意力机制的 RUM 模型可以根据大规模的用户购买记录自动学习先前 item 的重要性。这优于假设相邻影响adjacent influenceFPMC,也优于合并所有先前行为的 RNN

    基于这些发现的模式,item-level RUM 可以从序列行为的角度解释推荐系统,这与以前通常利用辅助信息(如用户文本评论)进行解释的方法不同。

十四、SHAN[2018]

  1. 不同于传统的推荐系统,在序列推荐场景存在新的挑战:

    • 首先,用户行为仅反映了他们的隐式反馈(如,是否购买),而不是显式反馈(如,评分)。这种类型的数据会带来更多的噪音,因为我们无法区分用户是不喜欢 unobserved item、还是仅仅因为没有意识到它们。因此,通过传统的潜在因子模型latent factor model 直接优化这样的 one-class 分数(如 10)是不合适的。
    • 其次,越来越多的数据来源于 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 方法。
  2. 相关工作:

    为了联合建模用户的个性信息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 embeddingitem-item 共现中抽取信息,从而提高矩阵分解性能。

    然而,这些方法在捕获 high-leveluser-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 modelcross-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 layerattentional pooling layer ,从而基于传统的分解机factorization machine: FM 技术自动学习二阶特征交互。

    • 《Sessionbased recommendations with recurrent neural networks》《Recurrent recommender networks》 采用循环神经网络 RNN 来挖掘轨迹数据 trajectory data 中的用户动态 user dynamicitem 偏好。然而,在许多实际场景中,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 (即,权重)。

14.1 模型

  1. U 为用户集合,Vitem 集合,|U||V| 分别为对应集合的大小。在这项工作中,我们聚焦于从隐式的、顺序的user-item 反馈数据(如,用户的连续 check-in 记录、连续的购买交易记录)中抽取信息。

    对于每个用户 uU ,该用户的序列交易记做 Su={S1u,S2u,,STu} ,其中 Ttime step 的总数,StuV 为用户 utime step t 的交易对应的 item 集合。

    • 对于给定的 time step titem 集合 Stu 可以反应用户 u 在时刻 t 的短期偏好,这是预测该用户即将购买的 next item 的重要因素。
    • 另一方面,在 time step t 之前购买的 item 集合,记做 Lt1u=S1uS2uSt1u 可以反映用户 u 的长期偏好(即通用品味)。

    在后面的内容中,我们将 Lt1u 命名为关于 time step t 的长期 item set ,将 Stu 命名为关于 time step t 的短期 item set

    形式上,给定用户 u 及其序列交易 Su ,我们的目标是根据从 Su 中学到的长期偏好和短期偏好来推荐用户即将购买的 next item

  2. 我们根据用户偏好的以下特点,提出了一种基于 hierarchical attention network 的新方法,如下图所示。这些特点为:

    • 用户偏好在不同的 time step 是动态dynamic的。

    • 不同的 item 对将要被购买的 next item 有不同的影响。

    • 对于不同的用户,相同的 item 可能对 next item prediction 产生不同的影响。

      例如,用户 A/B 的行为序列都是 {i1,i2,i3,i4} ,但是由于用户AB之间存在差异(例如年龄、性别、收入水平等等),导致相同的行为序列得到不同的注意力权重。

    我们方法的基本思想是:通过联合学习长期偏好和短期偏好从而为每个用户生成一个 hybrid representation 。更具体而言,我们首先将稀疏的 user inputitem input (即,one-hot representation )嵌入到低维稠密向量中。之后,我们通过结合长期偏好和短期偏好的双层结构来学习每个用户的 hybrid representation

    • 为了捕获 time step t 之前的长期偏好,我们学习了一个 long-term user representation,它是长期的 item set Lt1u 中的 item embedding 的加权和,权重由 user embedding 导出的、attention-based pooling layer 来生成。
    • 为了进一步结合短期偏好,final hybrid user representationlong-term user representation 和短期 item set中的 item embedding 相结合,其中权重根据另一个 attention-based pooling layer 学习而来。

    如上所述,我们的模型同时考虑了动态的长期用户偏好和动态的短期用户偏好。此外,通过使用不同的、学到的权重,长期用户偏好和短期用户偏好对将要购买的 next item 具有不同的影响。

    最后,值得指出的是,相同 item 在不同用户上的影响也是不同的,因为 attention layer 中权重的学习过程是由 user embedding 指导的,而 user embedding 是个性化的。

    接下来我们详细介绍我们模型的各个部分。

  3. Embedding Layer:与自然语言处理中的、离散的 word symbol 类似,原始的 user IDitem ID 的表达能力非常有限。因此,我们的模型首先采用 embedding layeruser IDitem ID (即,one-hot representation)嵌入到两个连续的低维空间中。

    形式上,令 URK×|U|user embedding 矩阵,令 VRK×|U|item embedding 矩阵,其中 K 为潜在 embedding 空间的维数。 uuRKU 的第 u 列,表示用户 uuser embedding 向量。viRKV 的第 i 列,表示 item iitem embedding 向量。

    从理论上讲,传统的矩阵分解相当于一个双层神经网络:第一层为 useritem 构建低维的 embedding ,第二层执行内积运算。然而,通过矩阵分解的 embedding 只能捕获 low-levelbi-linear、以及静态的 representation,这限制了模型的表达能力。不同的是,我们的模型基于这些 basic embedding 来学习high-level、非线性的、动态的 user representation,这些将在后面解释。

  4. Long-term Attention-based Pooling Layer:在序列推荐系统中,长期偏好和短期偏好分别对应于用户的通用品味和序列行为。

    • 由于用户的长期 item set 通常会随着时间而变化,因此为每个用户学习静态的长期偏好 rerepsentation 并不能完全表达长期偏好的 dynamic
    • 另一方面,从最新的长期 item set 中重构 long-term user representation 更为合理。
    • 此外,我们认为相同的 item 可能在不同用户上产生不同的影响。例如,假设用户 a 出于兴趣为自己购买了 item x ,而用户 b 购买 item x 作为礼物送给别人。在这种情况下,可以合理地推断,当预测用户 abnext item 时,item x 具有不同的权重或注意力。

    为了满足上述要求,我们提出使用已经成功应用于许多任务的注意力机制。注意力机制首先计算给定用户的长期 item set 中每个 item 的重要性,然后聚合这些 itemembedding 从而形成 long-term user preference representation 。形式上,注意力网络定义为:

    h1,j=ϕ(W1vj+b1)RKαj=exp(uh1,j)pLt1uexp(uh1,p)R

    其中:

    • W1RK×K,b1RK 为模型参数。
    • u 为用户 uuser embedding 向量,vj 为长期 item setitem jitem embedding
    • ϕ() 为激活函数,这里我们选择 ReLU 非线性激活函数。

    与传统的注意力模型对每个用户的每个 input 使用相同的 context 向量不同(即,global 的),我们将用户 uembedding u 作为 context 向量(因此不同用户的 context 向量不同,即 personalized 的)。

    注意,和 DIN/RUM 不同,这里的 attention 并不是将 target item 与历史 item 进行注意力计算,而是将用户静态偏好(以 u 来衡量)与历史 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 ut1long 为以注意力分数加权的 item embedding 的加权和,即:

    ut1long=jLt1uαj×vj
  5. Long- and Short-term Attention-based Pooling Layer:除了用户的通用品味之外,还需要考虑用户的序列行为(即,短期偏好)。短期偏好对于预测 next item 很重要,并且已有研究将长期偏好和短期偏好相结合从而进行序列推荐。然而,在这些早期工作中,短期偏好和长期偏好的交互仍然是线性的。并且, item 被分配以相同的权重,这无法反映 itemnext item prediction 的影响,因此限制了模型的性能。

    与建模用户长期偏好类似,我们也采用注意力网络,从而为 long-term representation 和短期 item set 中的itemembedding 分配权重,进而捕获用户 uhigh-level representation 。正式地,

    h2,j=ϕ(W2vj+b2)RKβj=exp(uh2,j)pStu{0}exp(uh2,p)R

    其中:

    • W2RK×K,b2RK 为模型参数。
    • u 为用户 uuser embedding 向量,vj 短期 item setitem jitem embedding 。注意,当 j=0v0=ut1long ,即 long-term user representation

    类似地,user embedding 被作为 context vector 从而实现个性化的注意力(即,相同 item 在不同用户上分配不同的权重)。在获得归一化的注意力分数之后,hybrid user representation 计算为:

    uthybrid=β0×ut1long+jStuβj×vj

    其中 β0 为长期用户偏好的注意力权重。

    总而言之,uthybrid 不仅考虑了长期偏好的动态属性和短期偏好的动态属性,而且还区分了每个 item 对预测 next item 的贡献。此外,两个层级的注意力网络可以捕获 useritem 之间的非线性交互。

    这里的注意力机制并不是基于向量内积的,而是基于 MLP 的,因此引入了非线性交互。

    注意,《Learning hierarchical representation model for nextbasket recommendation》 还可以通过使用最大池化聚合 final representation 来实现非线性的目的。但是,它同时丢失了很多信息。我们将通过实验证明我们的模型可以实现比它更好的性能。

    注意力加权和聚合的方式是介于 sum 池化和max 池化之间的版本:

    • 当注意力均匀分布时,注意力加权和聚合退化为 sum 池化。
    • 当注意力极度不均时,注意力加权和聚合退化为 max 池化。

    此外,还可以通过 CNN/RNN 来进行聚合,它们是与 sum 池化、max 池化完全不同的聚合方式。

  6. 模型推断Model Inference:当计算出 hybrid user representation uthybrid 之后,我们采用传统的潜在因子模型来计算用户在 item j 上的偏好分:

    ru,j,t=uthybridvj

    但是,用户交易记录是一种隐式数据。由于数据稀疏性问题和 unobserved data 的模糊性 ambiguity,我们很难直接优化偏好分 ru,j,t

    我们模型的目标是在给定用户在时刻 t 的长期 item set 和短期 item set 的情况下,提供一个 ranked list 。因此,我们更感兴趣的是 item 的排名而不是真实的偏好分。遵循 BPR 优化准则,我们为我们的模型提出一个 pair-wise ranking 目标函数。我们假设用户更喜欢 next purchased item 而不是 unobserved item ,并在 item jitem k 上定义一个排名次序 ranking order u,Lt1u,Stu

    ju,Lt1u,Stukru,j,t>ru,k,t

    其中 j 为被用户 utime step t 购买的 next itemkbootstrap sampling 生成的 unobserved item

    对于每个 observation (u,Lt1u,Stu,j) ,我们生成 pairwise preference order 的一个集合 D={(u,Lt1u,Stu,j,k)} 。然后我们通过最大化后验概率 maximizing a posterior: MAP 来训练我们的模型:

    argminΘ[(u,Lt1u,Stu,j,k)Dlnσ(ru,j,tru,k,t)]+λu,v||Θu,v||2+λa||Θa||2

    其中:

    • Θ={U,V,W1,W2,b1,b2} 为模型的待学习参数集合,Θu,v={U,V}user embeddingitem embedding 待学习参数集合,Θa={W1,W2} 为注意力网络的待学习权重集合。

    • σ() 为逻辑回归函数logistic functionλ={λu,v,λa} 为正则化系数。

      为什么使用不同的正则化系数?用一个正则化系数不行吗?猜测的原因是不同的参数的取值不同,这可以通过后面的消融实验来验证。如果使用同一个正则化系数,那么该系数的选择被取值较大的参数所主导(可以通过统计参数范数的均值来观察)。进一步地,是否需要针对每个参数设置一个正则化系数?

  7. SHAN 算法:

    • 输入:

      • 长期 item set Lt1u,短期 item set Stu
      • 学习率 η,正则化系数 λ,维度 K
    • 输出:模型参数集合 Θ

    • 算法步骤:

      • 从正态分布 N(0,0.01) 中采样从而初始化 Θu,v

      • 从均匀分布 U(3K,3K) 中采样从而初始化 Θa

        为什么采用不同的权重初始化策略?论文并未解释。

      • 重复以下过程直到算法收敛:

        混洗 observation 集合 {(u,Lt1u,Stu,j)} ,对每个 observation (u,Lt1u,Stu,j) 执行:

        • 随机从 VLt1u 中采样一个 unobserved item k
        • 计算 uthybrid
        • 计算 ru,j,tru,k,t
        • 使用梯度下降来更新参数集合 Θ
      • 返回参数集合 Θ

14.2 实验

  1. 我们进行实验回答以下几个问题:

    • 与其它 state-of-the-art 方法相比,我们的模型的性能如何?
    • 在我们模型中,长期偏好和短期偏好的影响是什么?
    • 超参数(如正则化参数、embedding 维度)如何影响模型性能?
  2. 数据集:

    • Tmall 数据集:包含中国最大的在线购物网站(即,Tmall.com)上的用户行为日志。
    • Gowalla 数据集:记录了用户在 location-based 社交网站 Gowallacheck-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

    预处理之后,这两个数据集的基本统计信息如下表所示:

  3. 评估指标:我们采用两个广泛使用的指标 Recall@NAUC

    • Recall@N 指标评估在所有测试 session 中,ground truth item 排在 top-Ncase 占所有 ground truth item 的比例。

    • AUC 指标评估 ground truth item 在所有 item 中的排名有多高。

      这里将 ranking list 中非 ground truth 的其它 item 视为负样本,将 ground truth item 视为正样本,因此 AUC 指标严重依赖于负样本的采样方式。

      事实上,Recall@N 指标也会依赖于负样本的采样方式。

  4. baseline 方法:

    • TOP:基于流行度的推荐,其中流行度通过训练集中item 的出现频次来统计。

    • BPRBPR 是一种用于隐式用户反馈数据的、 state-of-the-artpairwise learning to rank 框架。我们选择矩阵分解作为 internal predictor

    • FPMC:该方法通过矩阵分解建模用户偏好、通过一阶马尔科夫链建模序列信息,然后通过线性方式将它们组合起来进行 next basket recommendation

    • FOSSIL:该方法将 factored item similarity 和马尔科夫链相结合,从而建模用户的长期偏好和短期偏好。注意,我们将 ηuη 都设置为单个标量,因为每个 session 的长度是可变的。

    • HRM:该方法生成 user hierarchical representation 来捕获序列信息和通用品味。我们使用 max pooling 作为聚合操作,因为这样可以达到最佳效果。

    • SHAN:这是我们提出的模型,它使用两个注意力网络来挖掘长期偏好和短期偏好。

      我们还展示了简化版本的性能(叫做 SAN),它忽略了层次结构,并通过单个注意力网络从长期 item set 和短期 item set 中计算 item 的权重。

    为了公平地比较,所有 model-based 方法都基于 BPR 优化准则来优化一个 pair-wise ranking 目标函数。

  5. 对比结果:下图展示了所有方法在 TmallGowalla 数据集上的 Top-5 to Top-100 的召回率和 AUC 指标。从结果可以看到:

    • SHANTmall 数据集的所有指标下始终以较大的优势优于所有其它方法。

      • 具体而言,与第二好的方法(即 HRM)相比,SHANTmall 数据集上和 Gowalla 数据集上的召回率指标分别提高了 33.6%9.8% 。这表明:我们的模型通过注意力网络为 long-term representationshort-term representation 捕获了更 high-level 的、更复杂的、非线性的信息,而 HRM 可能会通过 hierarchical max pooling 操作丢失很多信息。
      • 此外,SHAN 的性能优于 SAN,可能是因为长期 item setitem 数量远远多于短期 item set 。因此,单个注意力网络很难为属于短期 item set 的较少、但是更重要的 item 分配适当的权重。
    • HRM 在大多数情况在这两项指标下的表现普遍优于 FPMC

      具体而言,HRMTmallGowalla 数据集上的 Recall@50 的相对性能(相对于 FPMC 方法)提升分别为 6.7%4.5% 。这证明了多个因子 factor之间的交互可以通过最大池化操作来学习。

      此外,尽管是简单的最大池化,该操作引入的非线性交互将提高模型性能。另外,SHAN 实现了比 HRM 更好的性能,这表明注意力网络在建模复杂交互方面比最大池化更强大。

    • 在大多数情况下,所有混合模型(即,FPMC, FOSSIL, HRM, SHAN)在两个数据集的不同指标下均优于 BPR 。以 AUC 为例,混合模型相对于 BPR 的性能提升持续保持在非常高的水平。这表明序列信息对于我们的任务非常重要,而 BPR 忽略了它。另外,SHAN 在这些混合模型中获得了最佳性能。

    • 令人惊讶的是,在 Tmall 数据集上,当 N50 继续增加时,TOP 方法在召回率方面超越了 BPR,甚至在 AUC 指标上超越了 FPMC

      这种现象可以解释为:

      • 用户在网上购物时可能倾向于购买热门 item 。因此,当 N 足够大时 TOP 方法可以达到更好的性能。
      • 相反,由于Gowalla 数据集中的用户 check-in 数据更加个性化,因此 TOP 方法的性能要比其它方法差很多。

      最后,我们的模型可以在不同的 N 上优于所有 baseline

  6. 不同组件的影响:为了评估每个组件对 final user hybrid representation 的贡献,我们进行实验来分析下表中每个组件。SHAN-L 表示仅建模用户的通用品味,SHAN-S 表示仅建模用户的短期偏好。

    • 与同样仅建模长期偏好的 BPR 相比,SHAN-L 实现了更好的性能。例如,BPRTmall 数据集和 Gowalla 数据集上的 Recall@20 指标分别为 0.0190.204。这表明通过动态方式 dynamic way 来建模通用品味,要比通过固定的 embedding 向量更好。

    • SHAN-S 在很大程度上优于 SHAN-L,这表明短期序列信息在 predicting next item task 上更为重要。

    • 令人惊讶的是,SHAN-S 在两个数据集上都优于 HRM。例如,HRMTmall 数据集和 Gowalla 数据集上的 AUC 指标分别为 0.7340.966。原因可能是 SHAN-S 中的 basic user embedding vector(它融合了 user basic preference)是通过短期 item set 中每个 item 的权重从而计算得到的。因此,SHAN-S 还考虑了用户的静态通用品味、以及序列信息从而生成 hybrid representation

      结果还表明:一层的注意力网络优于两层的最大池化操作。

    • SHAN-STmall 数据集上的 Recall@20 指标要好于 SHAN 。这表明在该数据集上,用户在上一个 session 中的点击行为对当前 session 中的 next clicked item 没有太大影响。

    • 最后,在大多数情况下,SHAN 的性能优于两个单组件的模型。这表明:将动态的用户通用品味添加到 SHAN-S 有助于预测 next item 。因为 SHAN-S 仅仅是结合了用户的 basic 的、fixed 的偏好以及序列行为。

  7. 超参数的影响:这里我们研究正则化系数和 embedding size 对模型的影响。由于篇幅所限,我们仅展示 Recall@20 指标下的结果。

    • 在我们的模型中,我们利用 user embeddingitem embedding 正则化系数 λu,v 、以及注意力网络正则化系数 λa 来避免过拟合问题。下表展示了不同正则化系数的取值对于 Recall@20 指标的影响。

      可以看到:当 λa>0 时,模型性能会大大提高。这也表明注意力网络对我们的任务很有帮助。

      可以看到,λaλu,v 的取值范围不同,因此间接说明不同类型参数的范数大小位于不同量级。

    • 我们进一步研究了维度大小 K 的影响。K 不仅与 user embeddingitem embeddingsize 有关,还与注意力网络中的 MLP 参数有关。为简单起见,user embeddingitem embeddingsize 是相同的。

      可以看到:大的 K 值可以更好地嵌入用户和 item ,并且将更有利于通过注意力网络构建 high-level 的因子交互 factor interaction 。这种现象类似于传统的潜在因子模型。在实验中,我们将 K 设为 100,从而平衡两个数据集的计算成本和推荐质量。