基于会话的推荐

注:会话 session 通常意味着短期的用户行为序列。

一、FPMC[2010]

  1. next basket recommendation 任务中,我们已知用户在各个时刻购买的 basketitem,目标是向用户推荐该用户下一次访问时可能想要购买的 item

    • 基于马尔科夫链 Markov Chain: MC 模型的推荐系统通过上一个动作来预测下一个动作,从而利用这种序列数据。MC估计了一个概率转移矩阵transition matrix,它给出了已知上一个动作的情况下,发生下一个动作的条件概率。预测时,模型对每个用户的最近一次行为应用概率转移矩阵从而进行推荐。

      然而,MC模型的概率转移矩阵对所有用户都是相同的,即非个性化的。

    • 另一方面,协同过滤方法(如矩阵分解 matrix factorization: MF)学习了个性化的、用户的一般兴趣general taste ,而忽略了序列信息。

    MCMF 各有优势:MC可以通过非个性化的概率转移矩阵来及时地捕获序列效果(即,概率转移矩阵是在所有用户的所有数据上学习的),而MF 可以通过所有数据来学习个性化的、每个用户的一般兴趣。

    在论文《Factorizing Personalized Markov Chains for Next-Basket Recommendation》 中,论文提出了一个基于个性化MC的模型,其中概率转移矩阵是 user-specific 的。具体而言,论文建模了一个概率转移立方体transition cube,这个立方体的每个切面都是 user-specific 概率转移矩阵。通过这种个性化,论文将MCMF 的优点结合在一起:序列数据由概率转移矩阵捕获;由于所有概率转移矩阵都是 user-specific 的,因此模型捕获了个性化的用户兴趣。

    除了引入个性化MC之外,这项工作的核心贡献是估计概率转移张量 transition tensor(即概率转移立方体)。由于数据的稀疏性,不可能通过在完全参数化complete parametrization 上使用标准计数方法(即,最大似然估计的估计Maximum Likelihood Estimator: MLE)来获得个性化概率转移矩阵的良好估计。相反,论文通过一个分解模型 factorization model 来建模概率转移张量。这允许在相似的用户、相似的 item、以及相似的转移之间传播信息。通过使用基于 pairwise interactionMF,模型能够处理高度稀疏性。论文表明,该模型包含了个性化的MF 模型、以及非个性化的MC模型。为了学习模型参数,论文将 Bayesian Personalized Ranking: BPR 框架扩展到 next basket recommendation

    最后,论文将所提出的方法应用到真实的电商数据集,实验结果表明所提出的方法优于MFMC模型。

    总而言之,论文的贡献如下:

    • 论文引入了依赖于个性化的概率转移矩阵的个性化MC,这允许我们同时捕获序列效应和长期用户兴趣。论文证明这是标准MCMF的推广。
    • 为了处理转移概率估计的稀疏性,论文引入了一个可以应用于个性化概率转移矩阵的分解模型。这种分解方法导致参数更少,并且由于泛化能力导致它比完全参数化的模型更好的质量。
    • 论文的实验表明,所提出的模型在序列数据上优于其它 state-of-the-art 方法。
  2. 相关工作:

    • 一些研究人员已经研究了马尔科夫链或推荐系统。我们没有使用启发式方法来改善最大似然估计,而是使用为优化 ranking (而不是优化 MLE)而学习的分解模型。总体而言,我们的工作与之前所有方法的主要区别在于使用个性化的概率转移矩阵,这结合了序列的好处(如时间感知、具有时不变用户兴趣的马尔科夫链)。此外,转移概率的分解和用于 ranking 的参数优化准则是新提出的。
    • 另一方面,大多数推荐系统未考虑序列模式,而是基于整个用户历史进行推荐。最近,来自隐式反馈的 item 推荐已经开始成为热点。item 推荐是相比评分预测更难的问题,因为只有正反馈而没有负反馈,因此无法直接应用标准的回归方法或分类方法。最近人们提出了一些基于矩阵分解的模型,这些模型分解了 user-item 相关性矩阵correlation matrix 。在这项工作中,我们将这些 MF 模型的优点与 MC 模型结合起来。

1.1 模型

  1. 生成推荐的最常见方法是丢弃任何序列信息并学习用户的一般兴趣。另一方面,序列方法(主要依赖于马尔科夫链)的推荐仅基于最近的用户事件来学习相邻购买行为的关联。这两种方法都各有优缺点。

  2. U={u1,u2,,uM} 为用户集合,I={i1,i2,,iN}item 集合,M 为用户数量,Nitem 数量。

    假设用户 u 在时刻 t 购买的 busketBtuI ,用户 u 的历史 busket 集合为 Bu={B1u,,Btu1u} 。令所有用户的所有历史 busketB={Bu1,Bu2,,BuM} 。给定 Bnext basket recommendation 任务是:在用户下次访问商店的时候向用户推荐 item 。注意,我们处理的不是绝对时间,而是关于用户的相对时间,如用户 u 的第一个 busket、第二个 busket 等等。

    因此该方法未考虑时间信息(绝对时间、相对时间间隔),仅考虑相对次序。

    next basket recommendation 推荐任务可以公式化为:为用户 u 的第 tbusket 中的所有 item 创建个性化的 ranking 函数 u,tI×I 。通过这个 ranking 函数,我们可以向用户推荐 top n item

  3. 首先,我们为顺序的集合 sequential set 引入 MC,并将其扩展到个性化 MC。然后,我们讨论概率转移立方体transition cube 的最大似然估计的弱点。然后,为解决这个问题 ,我们引入了分解的概率转移立方体 ,其中转移之间的信息被传播。最后,我们结合了所有的思想从而得到 FPMC 模型。

1.1.1 用于集合的个性化马尔科夫链

a. 用于集合 Set 的马尔科夫链
  1. 通常,阶次为 m 的一条马尔科夫链定义为:

    p(Xt=xtXt1=xt1,,Xtm=xtm)

    其中:Xt,,Xtm 为随机变量;xt,,xtm 为对应的随机变量的取值。

    在非集合的推荐应用application 中,随机变量是在 I 上定义的,即单个的 item iI 。但是我们这里的随机变量是定义在 basket 上的,因此其状态空间大小是 2N (即,对于一个 basket,它包含不同 item 的组合有 2|I| 种)。显然,在整个状态空间中定义一个长的马尔科夫链是不可行的。

    为了处理这个巨大的状态空间,我们做了两个简化:

    • 我们使用长度为 m=1 的链。

      对于 basket 场景, m=1 的非个性化马尔科夫链是:

      p(BtBt1)

      在非集合的推荐场景中,通常可以选择更长的马尔科夫链(如 m=3 ),因为 m=1 的历史仅包含一个 item 。在我们的 case 中,即使长度为 m=1 的马尔科夫链也是合理的,因为一个 basket 包含很多 item。例如,在我们评估的 application 中,平均每个 basket 大约有 10item

    • 我们简化了转移概率 transition probability

      长度为 m=1 的马尔科夫链由它们在状态空间上的随机转移矩阵 A 来描述。在我们的例子中,由于状态空间的大小为 2N,因此转移矩阵的维度为 2N×2N 。因此,我们并没有在 basket 上建模转移,而是在描述了 basket 状态的 N 个二元变量(每个二元变量表示对应的 item 是否包含在当前 basket 中)上建模转移:

      aj,i=p(iBtjBt1)

      aj,i 的物理意义为:已知 item j 在前一个 basket 的情况下,下一个 basket 中出现 item i 的条件概率。

      这种建模方式意味着:

      • 状态空间现在是 I,因此转移矩阵 A 的维度为 N×N 。通过因子分解,我们进一步可以将参数数量从 N2 降低到 2kN ,其中 kN 为潜在因子的维度。

      • 状态空间的元素是二元变量,因此 p(iBtjBt1)+p(iBtjBt1)=1.0 。注意,转移矩阵 A 不再是随机的,因为 iIaj,i1.0

        因为下一个 basket 可能包含很多 item,使得 iIaj,i>1.0

  2. 对于 item 推荐,我们感兴趣的是:在给定用户最近一个 basket 的情况下购买某个 item 的概率。这可以定义为从最近一个 basket 到该 item 的所有转移概率的均值:

    p(iBtBt1)=1|Bt1|jBt1p(iBtjBt1)

    这里假设最近一个 basket 中所有 item 对于 next item i 的作用是独立的、线性的、等权重的。也可以通过基于 attentionDNN 模型,从而得到交互的、非线性的、自适应权重的模型。

    basket 上完全的马尔科夫链可以表示为:

    p(BtBt1)iBtp(iBt1)

    注意,我们的目标是寻求 item ranking list,因此对完全的马尔科夫链 p(BtBt1) 不感兴趣,而是对单个 item 概率 p(iBt1) 感兴趣。

b. 转移概率的估计
  1. 给定所有用户的所有历史 busket B,转移概率 aj,i 的最大似然估计为:

    a^j,i=p^(iBtjBt1)=p^(iBtjBt1)p^(jBt1)=|{(Bt,Bt1)iBtjBt1}||{(Bt,Bt1)jBt1}|

    其中:

    • 分子为所有历史 busket B中, j 位于前一个basketi 位于后一个 basketbasket pair 数量。
    • 分母为所有历史 busket B中, j 位于前一个 basketbasket pair 数量。

    这里基于统计的方法来估计 p^(iBtjBt1),并未考虑到 Bt1 中其它 item 的存在对于概率的影响。即,认为 basket 中所有 item 对于 next item i 的作用是独立的。

c. 用于集合的个性化马尔科夫链
  1. 上述的马尔科夫链是非个性化的,即与用户无关。现在我们将其扩展到个性化马尔科夫链 p(BtuBt1u) 。同样地,我们通过 item 的转移概率来表示每个马尔科夫链,但是现在是 user-specific 的:

    au,j,i=p(iBtujBt1u)

    同样地,预测结果也是 user-specific 的:

    p(iBtuBt1u)=1|Bt1u|jBt1up(iBtujBt1u)

    同样地,这里假设最近一个 basket 中所有 item 对于 next item i 的作用是独立的、线性的、等权重的。

    au,j,i 的最大似然估计为:

    a^u,j,i=p^(iBtujBt1u)=p^(iBtujBt1u)p^(jBt1u)=|{(Btu,Bt1u)iBtujBt1u}||{(Btu,Bt1u)jBt1u}|

    这意味着对于每个用户 u 都有一个对应于该用户的转移矩阵 AuRN×N 。因此我们得到一个维度为 M×N2 的转移张量(即转移立方体)A

  2. 下图展示了个性化概率转移矩阵的一个例子。许多参数无法估计(图中以 ? 标记 ),因为没有对应的观察数据。此外,估计的转移概率仅基于少量观察数据,这意味着这些估计是不可靠的。乍一看,使用个性化马尔科夫链似乎是不合理的,接下来我们将讨论导致错误估计的原因是什么,并展示如何解决它。

d. 最大似然估计和完全参数化的局限性
  1. 非个性化马尔科夫链和个性化马尔科夫链的不可靠转移概率的问题在于:它们使用完全参数化full parametrization 的转移图transition graph(即转移矩阵、转移立方体)、以及参数估计的方式。

    • 完全参数化意味着我们分别有 N2M×N2 个独立参数来描述概率转移。

    • 此外,最大似然估计独立地估计每个转移概率参数 aj,i,即:任何共现 (j,i1) 都不会对另一个转移概率 aj,i2 有贡献,它仅对于 aj,i1 有贡献。对于个性化马尔科夫链而言甚至更糟,任何共现 (u1,j,i) 都不会对另一个转移概率 au2,j,i 有贡献。

    • 此外,最大似然估计的重要性质(如高斯分布、无偏估计、无偏估计的最小方差)仅存在于渐进理论中。当数据较少的情况下,最大似然估计会遭受欠拟合。由于我们的场景中数据非常稀疏,因此最大似然估计很容易失败。

      即模型的容量空间太大,数据量太少,导致模型欠拟合。

    为了得到更可靠的转移概率估计,我们分解了概率转移立方体。这种方式打破了参数的独立性、以及估计的独立性。这样,每个转移概率都受到相似用户、相似 item、以及相似转移的影响,这是因为信息通过该分解模型进行传播。

1.1.2 分解转移图

  1. 我们对概率转移立方体 ARM×N×N 进行因子分解,这意味着我们通过低秩近似 A^ 对观察到的转移张量 A 进行建模。这种方法相比较于完全参数化的优势在于:它可以处理数据稀疏性并泛化到未观察到的数据, 因为信息通过模型传播(即模型参数)来相互影响。

  2. 概率转移立方体的分解:用于估计概率转移立方体 A 的通用线性分解模型是 Tucker Decomposition: TD

    A^=C×UVU×JVJ×IVI

    其中:

    • CRkU×kJ×kIcore tensorkU,kJ,kI 为因子分解的维度。
    • VURM×kU 为用户的特征矩阵。
    • VJRN×kJ 为最近一次交易中的 item 的特征矩阵(outgoing 节点)。
    • VIRN×kI 为待预测的 item 的特征矩阵(ingoing 节点)。

    Tucker Decomposition 包含其它分解模型,如 Canonical Decomposition: CD (也称作并行因子分析 parallel factor analysis: PARAFAC)。CD 假设 core tensor 是对角矩阵,即:

    cfu,fi,fj={1,if fu=fi=fj0,else

    并且因子分解的维度相等,即 kU=kJ=kI

    由于观察到 A 是非常稀疏的,因此我们使用 CD 的一种特殊情况来建模 pairwise 交互:

    a^u,j,i=vuU,IviI,U+viI,JvjJ,I+vuU,JvjJ,U

    这里类似于 FFM 的思想,每个 field 都有两个 embedding 从而与不同的其它 field 进行交互。

    此外,这里的 core tensor 对角线为 1,意味着不同的 field 交互的重要性都是相同的。能否自动学习不同 field 交互的重要性?

    该模型直接建模张量的所有三种模式之间的 pairwise 交互,即usernext item 之间、 userlast item 之间、以及 last itemnext item 之间的交互。对于每种模式,我们有两个分解矩阵:

    • 对于usernext item 之间的交互:VU,IRM×kU,I 建模用户特征,VI,URN×kU,I 建模 next item 特征。
    • 对于 userlast item 之间的交互:VU,JRM×kU,J 建模用户特征,VJ,URN×kU,J 建模 last item特征。
    • 对于 last itemnext item 之间的交互:VI,JRN×kI,J 建模 next item特征,VJ,IRN×kI,J 建模 last item特征。

    该模型优于 TD 的一个优点是:预测和学习复杂度远远低于 TD。此外,即使 TDCD 包含了上述 pairwise 交互模型,但是它们无法识别到 pairwise 交互模型。

  3. 我们提出的分解概率转移立方体的模型也可以用于非个性化的概率转移矩阵 ARN×N ,即:

    a^j,i=viI,JvjJ,I
  4. 总结:将个性化的、集合的马尔科夫链与分解的概率转移立方体相结合,则得到分解的个性化马尔科夫链 factorized personalized Markov chain: FPMC

    p(iBtuBt1u)=1|Bt1u|jBt1up(iBtujBt1u)

    其中我们通过被分解的立方体 A^ 来建模 p(iBtujBt1u)

    p^(iBtuBt1u)=1|Bt1u|jBt1ua^u,j,i=1|Bt1u|jBt1u(vuU,IviI,U+viI,JvjJ,I+vuU,JvjJ,U)

    因为 usernext item 之间的交互 vuU,IviI,Uj 无关,因此上式等价于:

    p^(iBtuBt1u)=vuU,IviI,U+1|Bt1u|jBt1u(viI,JvjJ,I+vuU,JvjJ,U)

    可以看到 FPMC 的预测结果可以分为几个部分:

    • usernext item 之间的交互,建模next item 与用户长期偏好的关系,因为这部分与时间 t 无关。
    • last itemnext item 之间的交互,建模next item 与用户短期偏好的关系。
    • userlast item 之间的交互,这一部分可以建模了用户长期偏好和用户短期偏好的关系。随后的章节中,论文证明这个部分可以被移除。

    所有的这些部分都可以用更复杂的模型(如 DNN)、引入更多的辅助信息(如用户画像、item 画像)来刻画。

    在接下来的章节中,我们将 FPMC 模型应用于 item 推荐任务。我们将证明,在这种情况下模型可以进一步简化,此时 userlast item 之间的交互可以移除。

    与完全参数化的概率转移立方体相比,分解模型的泛化性能更好、且参数更少。

    • 完全参数化的模型需要 M×N2 个参数(个性化的概率转移立方体)或 N2 个参数(非个性化的概率转移矩阵)。
    • 分解模型只需要 2kI,J×N+kU,I×(M+N) 个参数(个性化的概率转移立方体) 或 2kI,J×N 个参数(非个性化的概率转移矩阵)。

    对于具有大量 itemapplication 而言,使用 O(N2) 个参数的完全参数化是不可行的。

1.1.3 Item 推荐

  1. 前面已经介绍了个性化马尔科夫链的分解模型,接下来我们将该模型应用于 item 推荐任务中。这意味着模型参数应该针对 ranking 进行优化。

    • 首先,我们从sequential set数据中导出 S-BPR,它是 item 推荐的通用优化准则。该优化准则不仅可用于我们的 FPMC 模型,还可用于其他模型,如 kNN 或标准 MF 模型。

    • 其次,我们将 S-BPR 应用于 FPMC,并展示了在使用 S-BPR 进行 item 推荐的情况下如何简化模型。

    • 最后,我们提出了一种基于 bootstrap 采样的随机梯度下降学习算法,用于使用 S-BPR 优化模型参数。

      这个 bootstrap 采样的随机梯度下降学习算法就是 mini-batch 随机梯度下降学习算法。

a. S-BPR 优化准则
  1. 如前所述,从 sequential basket 数据中推荐 item 的目标是推导出 itemranking 函数 u,t 。为了建模 ranking,我们假设有一个估计量 g^:U×T×IR (如个性化马尔科夫链的购买概率)从而用于定义 ranking

    i1u,ti2g^(u,t,i1)>Rg^(u,t,i2)

    其中 T 为时间的集合。

    由于 >R 是实数集合 R 上的全序total order,所以 u,t 也是全序。因此 g^(u,t,i) 能够为 item 集合 I 生成时刻 t 的个性化排序。

  2. 接下来我们导出类似于通用 BPR 方法 的 sequential BPR: S-BPR 优化准则。用户 u 在时刻 t 的最佳 raking u,tI×I 可以公式化为:

    p(Θ|u,t)p(u,tΘ)p(Θ)

    其中 Θ 为模型参数,在我们的场景中就是 Θ={VU,I,VI,U,VJ,I,VI,J,VU,J,VJ,U}

    假设 basket 和用户独立,这导致模型参数的最大后验 maximum a posterior: MAP估计:

    argmaxΘuUBtBup(u,tΘ)p(Θ)

    对所有 item pair (i1,i2)I×I 展开 u,t ,并且假设用户basket 内的 next item 之间是相互独立的(来自于 BPR 原始论文的假设),则 p(u,tΘ) 可以重写为:

    p(u,tΘ)=uUBtBui1Bti2Btp(i1u,ti2Θ)

    然后我们用模型定义 g^(u,t,i) 来表达 p(i1u,ti2Θ)

    p(i1u,ti2Θ)=p(g^(u,t,i1)>Rg^(u,t,i2)Θ)=p((g^(u,t,i1)g^(u,t,i2))>R0Θ)

    这里我们忽略参数 Θ,因为它是 g^() 模型参数。此外,我们定义 p(z>0)=σ(z)=1/(1+exp(z)) , 其中 σ()sigmoid 函数,则有:

    p(i1u,ti2Θ)=σ(g^(u,t,i1)g^(u,t,i2))

    进一步地,我们假设模型参数 Θ满足高斯先验,即:θN(0,1/λθ) ,则我们得到S-BPRMAP 估计:

    argmaxΘlnp(u,tΘ)p(Θ)=argmaxΘlnuUBtBui1Bti2Btσ(g^(u,t,i1)g^(u,t,i2))p(Θ)=argmaxΘuUBtBui1Bti2Btlnσ(g^(u,t,i1)g^(u,t,i2))λΘ||Θ||F2

    其中 λΘ 为对应于参数 Θ 的正则化系数。

    S-BPRBPR 的核心区别在于:

    • BPR(positive, negative) pair 中,negative 是用户 u 的所有历史item 之外选取,即全局负样本。
    • S-BPR(positive, negative) pair 中,negative 是用户 u 的当前 basket item (即 positive 所在的 basket )之外选取,即局部负样本。
b. 采用 FPMC 的 Item 推荐
  1. 首先,我们用 FPMC 模型来表示 g^() ,并应用 S-BPR

    g^(u,t,i)=p^(iBtuBt1u)=vuU,IviI,U+1|Bt1u|jBt1u(viI,JvjJ,I+vuU,JvjJ,U)
  2. 引理一(userlast item 之间分解的不变性):对于使用 S-BPRitem 排序和优化,FPMC 模型对于userlast item 之间的分解是不变的,即 g^()g^() 是不变的,其中:

    g^(u,t,i)=vuU,IviI,U+1|Bt1u|jBt1uviI,JvjJ,I

    证明过程见原文。主要思路:令 是由 g^() 产生的排序函数, 是由 g() 产生的排序函数。则根据:

    u,t,i1,i2:g^(u,t,i1)g^(u,t,i2)=g^(u,t,i1)g^(u,t,i2)

    则可以证明:

    • 两个模型 g^()g() 产生相同的排序结果。
    • 两个采用 S-BPR 的模型最优化得到相同的参数解 Θ ,这是因为二者的目标函数 argmaxΘlnp(u,tΘ)p(Θ) 是等价的。

    因此对于采用 FPMCitem 推荐,我们使用新的 g^() 公式。

  3. 然后,我们将展示简化的 FPMC 模型与标准的矩阵分解matrix factorization: MF 和分解马尔科夫链factorized Markov chain: FMC 的关联。

    • 用于 item 推荐的标准 MF 模型为:

      g^MF(u,t,i)=vuU,IviI,U

      其中 g^() 独立于序列行为,即独立于 t

    • 非个性化的分解马尔科夫链FMC 模型为:

      g^FMC(u,t,i)=1|Bt1|jBt1vI,JvjJ,I

    因此,FPMCMF 模型和 FMC 模型的线性组合:

    g^FMPC(u,t,i)=g^MF(u,t,i)+g^FMC(u,t,i)

    这意味着 FPMC 可以包含这两种模型:

    • 通过将 usernext item 之间分解的维度设为 0,即 kU,I=0,则可以获得单纯的 FMC
    • 通过将 last itemnext item 之间分解的维度设为 0,即 kI,J=0,则可以获得单纯的 MF 模型。
  4. 需要注意的是: item 推荐中,即使FPMC 的模型方程可以通过 MFFMC 模型的线性组合来表示,但是FPMC 不同于单个 MF 模型和单个 FMC 模型的线性组合。因为FPMC 模型的参数是联合学习的,而不是每个子模型(如 MF 模型和 FMC 模型)单独学习的。这在 FPMC 的通用情况下更为明显,其中 FPMC 的模型方程 无法由 MCFMC 的线性组合来表示,如:

    • FPMC 优化另一个准则(如最小平方误差)而不是 S-BPR 准则时,其中userlast item 之间的分解不能被丢弃,因为这个准则下的不变性(即引理一)不成立。此时 FPMC 的模型方程无法由 MCFMC 的线性组合来表示。
    • FPMC 中为张量 A 使用另一种分解模型(如 TDCD)而不是 pairwise 交互时,此时即使采用 S-BPR 优化准则,则 FPMC 的模型方程也无法由 MCFMC 的线性组合来表示。
c. 最优化
  1. FPMC 包含 MFFMC,而这两个模型也可以使用它们各自所提供的的算法针对 S-BPR 准则进行优化。

    尝试直接优化 S-BPR 非常耗时,因为 (u,t,i1,i2) 四元组的数量很大,即 O(|S|×|I|) ,其中 S={(u,t,i)uU,BtuBu,iBtu} 。因此,标准梯度下降和 basket-wise 随机梯度下降方法的收敛速度非常慢。相反,我们通过 bootstrapp 独立地随机抽取四元组,并对这些样本进行随机梯度下降。在每次迭代中,我们随机抽取一个四元组 (u,t,i1,i2) ,其中包括用户 u 在时刻 tbasket Btu 中的一个 item i1 和另一个不在basket 中的 item i2 。然后使用这个四元组对 S-BPR 执行梯度下降。算法的复杂度为 O(n×(kU,I+kI,J×b¯)) ,其中 n 为迭代数量,b¯ 为平均的 basket 大小。

    感觉这就是常规的 mini-batch 随机梯度下降。

1.2 实验

  1. baseline 方法:factorized Markov chain: FMCnon-factorized Markov chain: MC densematrix factorization: MF、最流行 most-popular: MP

    注意,这里包含很强的 baseline 方法 BPR-MF。由于 MFFMC 都是 FPMC 的特例,因此对于这三种方法我们都是用 FPMC 的学习算法。

  2. 数据集:我们使用在线药店的匿名购买数据集。我们使用的数据集是一个 10 core 子集,其中每个用户总共至少购买了 10item ,每个 item 至少被 10 个用户购买。我们还创建了它的一个子集,其中包含 10000 个最多购买的用户、以及 1000 个最多购买的 item ,从而评估稀疏性对方法的影响。

  3. 评估方式:我们将每个用户的最后一个 basket 作为测试集,并将剩余的 basket 作为训练集。我们从测试集中删除了过去购买少于 10 种不同 item 的用户。

    对于每个用户,我们从测试集中删除该用户已经购买过的所有 item ,这是因为我们希望向用户推荐其不知道的新品。这使得预测任务变得更加困难。否则,对于牙刷、清洁剂等药店中的非耐用品,仅重复推荐已购买商品将是一个简单的、但是非常成功的策略。然而,这不是推荐系统的任务,因为推荐系统应该帮助用户发现新事物。

    我们针对每个用户 u 的测试 basket 来测试不同模型的质量。评估指标:

    • Half-life-utility: HLU:测试 basket 中每个 next item 的归一化衰减因子之和。其中,归一化衰减因子为:

      2r1α1r=1|Btu|2r1α1

      rnext item 在所有 I 中预估结果的排名。这里我们选择 α=5

      我们报告所有测试 basketHLU 均值。

    • Precisiontop K 预估结果中,命中 next itemitem 数量除以 K 。这里我们选择 K=5

    • Recalltop K 预估结果中,命中 next itemitem 数量除以测试 basket 的大小。这里我们选择 K=5

      此外,我们还报告 F-measure 指标,它是 PrecisionRecall 的调和均值。

    • AUCArea under the ROC curve

  4. 实验结果如下图所示。对于分解方法,我们使用 kU,I=kI,J{8,16,32,64,128}

    • 正如预期的那样,所有其它方法都优于 most-popular 方法。
    • 其次,在合理的分解维度(如 32)下,所有其它分解方法都优于标准 MC 方法(即 MC dense)。
    • 总体而言,FPMC 优于所有其它方法。

    我们比较 FMCMC 。结果表明:学习分解的概率转移矩阵相比通常的计数方案counting scheme 产生更好的估计。分解方法有两个优点:它的参数规模更小,并且通过使用低秩近似来防止过拟合。

    我们比较FMCMF 。可以看到:在稠密场景下MF 似乎优于 FMC ,而在稀疏场景下FMC 似乎更胜一筹。原因可能是:

    • 在稠密场景中,每个用户的信息要多得多,因此使用所有全部用户购买信息的 MF 方法,要优于仅使用最后一次购买的 FMC 方法。
    • 反之,FMC 在稀疏数据集上具有优势。而结合了这两种方法优点的 FPMC 在两个数据集上都优于它们。

二、GRU4Rec[2015]

  1. 有些电商推荐系统、新闻网站、媒体网站不会跟踪用户 ID 。虽然 cookie 和浏览器指纹技术可以提供一些程度上的用户识别,但是这些技术通常不可靠并且容易引发隐私问题。即使可以跟踪用户 ID,但是用户在一些小型电商网站上可能只有一两个会话session,并且在某些领域(如分类网站classified site)中,用户的行为通常表现出session-based的特征。因此,同一个用户的每个会话应该独立地处理。

    在中国的互联网早期,存在大量的、可以匿名访问的网站或 APP,因此不会跟踪用户 ID 。随着移动互联网浪潮的兴起,中国互联网大多数网站或 APP 需要登录才能访问,典型的例子是淘宝,因此可以跟踪到用户 ID。即使能够跟踪到用户 ID,我们也无法保证操作手机的是同一个用户。

    目前大多数电商的session-based的推荐系统都使用相对简单的方法,如 item-to-item 相似性、item 共现、转移概率等等。虽然有效,但是这些方法仅考虑用户的最后一次行为,而忽略了用户的历史行为。

    此外,推荐系统中最常用的是因子模型 factor model 和邻域方法 neighborhood method

    • 因子模型将稀疏的 user-item 交互矩阵分解为一组 d 维潜在因子向量,然后根据 user 潜在因子向量和 item 潜在因子向量来完成矩阵补全问题(例如用潜在因子向量的内积)。由于无法跟踪用户 ID (导致无法获取用户历史交互的 item ),所以因子模型很难应用于session-based的推荐。
    • 邻域方法依赖于会话内的 item 共现,因此被广泛应用于 session-based 推荐中。

    RNN 在翻译、对话建模、图像标注image captioning 等领域取得了显著成功,但是很少有人将其用于推荐领域。在论文 《Session-Based Recommendations With Recurrent Neural Networks》 中,作者认为 RNN 可以应用于 session-based 推荐并取得了显著效果。作者处理了在建模这类稀疏序列数据进行时出现的问题,并通过引入适当的、新的 ranking loss function 来使得 RNN 模型适应推荐 setting

    session-based 推荐问题在建模方面与一些 NLP-related 问题相似,比如它们都处理序列数据。在 session-based 推荐中,我们可以将用户在会话中的第一个交互 item 作为 RNN 的初始输入,然后我们根据这个初始输入来 query 模型从而获得推荐。然后,用户的每次后续交互都会产生一个推荐,这个推荐取决于所有先前的、同一个会话内的交互。 item 集合可能是数万甚至数十万,另外交互行为可能非常频繁,因此训练时间和可扩展性非常重要。

    和大多数信息检索和推荐 setting 一样,论文主要关注于建模用户最感兴趣的 top item ,为此论文使用 ranking loss function 来训练 RNN

  2. 相关工作:

    • session-based 推荐:推荐系统领域的大部分工作都集中在当 user ID 可用并且可以获取用户画像时的模型上。这种情况下,矩阵分解模型、邻域模型在文献中占据主导地位。session-based 推荐中采用的主要方法之一是 item-to-item 推荐,此时 item-to-item 相似度矩阵是从可用的会话数据中预计算而来,也就是说,在同一个会话中共现的 item 被认为是相似的。这种方法虽然简单但是已被证明有效,并被广泛采用。但是,该方法仅考虑用户的最近一次行为,忽略了用户历史行为信息。

      session-based 推荐的另一个稍微不同的方法是马尔科夫决策过程 Markov Decision Processes: MDPMDP 是序列随机决策问题的模型,最简单的 MDP 本质上是一阶马尔科夫链,其中 next 推荐可以简单地根据 item 之间的转移概率来计算。 在 session-based 推荐中应用马尔科夫链的主要问题是:当试图包含所有可能的用户行为序列时,状态空间很快变得无法管理。

      通用分解框架 General Factorization Framework: GFM 的扩展版本能够使用会话数据来推荐。该方法通过事件eventsum 来建模会话,并对 item 使用两种潜在 representation :一种代表 item 本身、另一种代表 item 是会话的一部分。然后将会话中所有 item 的第二种 representation 取平均从而作为会话的 representation 。但是,该方法不考虑会话中的行为顺序。

    • 推荐系统中的深度学习:在推荐系统中最早应用深度学习的相关方法之一是 《Restricted boltzmann machines for collaborative filtering》,它使用 RBM 来对 user-item 交互进行建模并执行推荐。此外,深度模型也用于从音乐或图像等非结构化内容中提取特征,然后与更传统的协同过滤模型一起使用,如 《Deep content-based music recommendation》。最近,《Collaborative deep learning for recommender systems》 引入了一种更通用的方法,该方法使用深度网络从任何类型的 item 中抽取通用的内容特征,然后将这些特征集成到标准的协同过滤中从而提高推荐性能。这些方法在缺乏足够 user-item 交互的 setting 中特别有用 。

2.1 模型

2.1.1 模型

  1. 标准的 RNN

    ht=g(Wxt+Uht1)

    其中:xtt 时刻的输入,htt 时刻的隐状态 hidden stateWU 为待学习的权重矩阵,g() 为一个平滑有界的函数(如 sigmoid 函数)。

    Gated Recurrent Unit: GRU 是一个更精细的 RNN 模型,旨在处理梯度消失问题。GRU gates 本质上是学习何时更新单元的隐状态、以及更新多少:

    zt=σ(Wzxt+Uzht1)rt=σ(Wrxt+Urht1)h^t=tanh(Wxt+U(rtht1))ht=(1zt)ht1+zth^t

    其中: 为逐元素乘积,zt 为更新门 update gatert 为复位门 reset gateσ()sigmoid 激活函数, h^t 为候选激活值 candidate activation

  2. 我们在模型中使用 GRU-based RNN 来进行 session-based 推荐。网络的输入是每个时刻会话的实际状态actual state,输出是会话中下一个事件的 item

    • 会话的状态可以是最新的事件(即当前事件)。此时使用 OneHot 编码,即输入向量的长度为 N 并且仅最新事件对应的 item1 而其它位置为 0 ,其中 Nitem 集合大小。

    • 会话的状态也可以是截止到当前的所有事件(即累计事件)。此时对每个事件的 OneHot 编码进行加权和,权重根据事件发生时刻距离当前时间间隔进行衰减。为了稳定性,我们对输入向量进行归一化。

      我们希望这种累计事件的方式会有所帮助,因为它增强了记忆效应 memory effect。但是实验发现,这种方式并不会带来额外的准确率增益。这毫不奇怪,因为 GRULSTM 一样,同时具有长期记忆和短期记忆。

    我们尝试添加一个额外的 embedding layer,但是发现 OneHot 编码总是表现得更好。

    如果没有 embedding layer,则 Wz,Wr,W 分别充当不同的 embedding 矩阵; 如果添加额外的 embedding layer,则 Wz,Wr,W 表示在已有的 embedding 矩阵之上的投影矩阵。

    网络的核心是 GRU layer。可以使用多层 GRU layer,其中前一层的 hidden state 是下一层 的输入。最后一个 GRU layer 和输出层之间添加了额外的前馈层 Feedforward layer (但是实验发现增加这个额外的前馈层对于效果提升没有帮助)。输出是每个 item 在当前会话中成为 next 的可能性。input 层也可以选择连接到网络中更深的 GRU layer,因为我们发现这可以提高性能。

    完整的架构如下图所示,该架构描述了事件时间序列中单个事件的 representation

    图中包含了 embedding layerfeedforward layer,但是根据实验描述,这两个 layer 是无益的,需要移除。

2.1.2 调整

  1. 由于推荐系统不是 RNN 的主要应用领域,我们修改了基础网络从而更好地适应任务。我们还考虑了实际场景,以便我们的解决方案可以应用于现场环境。

  2. session-parallel mini-batch:用于 NLP 任务的 RNN 通常使用 in-sequence mini-batch 。例如,通常在句子的单词上使用滑动窗口,并将这些窗口片段彼此相邻从而形成 mini-batch。这不适合于我们的任务,因为:

    • 首先,会话之间长度的差异非常大(远远大于 NLP 中的句子)。一些会话仅包含一到两个事件,而另一些会话可能包含超过数百个事件。
    • 其次,我们的目标是捕获会话如何随时间的演变,因此将会话分解为片段是没有意义的。

    因此,我们使用 session-parallel mini-batch ,如下图所示。具体而言:

    • 首先,我们将所有会话进行排序。

      注意,这里是以会话为基本单元进行排序,而不是对会话内的事件进行排序。

    • 然后,我们使用前 X 个会话的第一个事件来构成第一个 mini-batch 的输入(所需的输出是这些会话的第二个事件)。第二个mini-batch 是由这些会话的第二个事件形成的,依次类推。

      如果任何一个会话结束了,则下一个可用的会话将填补该结束会话的位置。假设会话之间是相互独立的,因此我们在发生这种会话切换的时候重置对应的 hidden state

      这种训练方式可以支持任意长度的 session,而无需将 session 进行长度限制(比如截断为固定长度)。

  3. sampling on the output:当 item 集合规模太大时,在每个 step 计算每个 item 在当前会话中成为 next 的可能性是不现实的。因此我们需要负采样技术。

    我们根据 item 的流行程度进行负采样: item 越流行,那么用户就越可能知道它,那么用户未对该 item 交互则意味着用户更有可能不喜欢该流行 item

    我们没有为每个训练样本生成单独的负采样,而是使用来自 mini-batch 的其它训练样本的 item 作为负采样。这种方法的好处是我们可以减少计算时间、降低代码复杂性、并且也易于实现。同时,该方法也是一种基于流行程度的采样,因为一个 item 出现在 mini-batch 中的可能性与其流行程度成正比。

  4. ranking loss:推荐系统的核心是 itemrelevance-based ranking 。尽管该任务也可以解释为分类任务,但是 learning-to-rank 方法通常优于其它方法。ranking 可以是 point-wisepair-wise、或者 list-wise 的。

    • point-wise ranking 彼此独立地估计 itemscore 或者 ranking,并且损失函数的定义方式使得相关的 item 的排名应该靠前。
    • pair-wise ranking 比较一个 positive item 和一个 negative item 组成的 ranking pair 对,损失函数强制 positive item 的排名应该比 negative item 的排名更靠前。
    • list-wise ranking 使用所有 itemscoreranking,并将它们与完美排序进行比较。它通常在计算上代价太大,因此不经常使用。

    此外,如果仅有一个相关的 item(例如我们这里的例子),list-wise ranking 可以通过 pair-wise ranking 来解决。我们在我们的解决方案中包含了几个 point-wise ranking losspair-wise ranking loss。我们发现模型的 point-wise ranking loss 不太稳定,而 pair-wise ranking loss 表现良好,最终我们使用以下两个 pair-wise ranking loss

    • BPR:贝叶斯个性化排名Bayesian Personalized Ranking: BPR 是一种矩阵分解方法,它使用 pair-wise ranking loss。它比较一个 positive item 和一个负采样的 negative itemscore 。这里,我们将 positive itemscore 和几个负采样的 negative itemscore 进行比较,并将它们的均值作为损失。具体而言,pair-wise ranking loss 为:

      Ls(t)=1K×j=1Klog(σ(r^t,ir^t,j))

      其中:K 为负采样的数量,σ()sigmoid 函数,r^t,j 为会话 st 时刻在 item j 上的scoreipositive itemj 为负采样的 negative item

    • TOP1:这个 ranking loss 是我们为这项任务而设计的,它是 relevant item 的相对排名relative rank 的正则化近似。relevant item i 的相对排名定义为:

      1K×j=1KI{r^t,j>r^t,i}

      其中 I() 为示性函数。我们用 sigmoid 函数来代替示性函数,优化这个相对排名将会修改 parameter 从而使得 item iscore 会很高。

      然而,这个目标函数不稳定,因为某些 positive item 也会扮演负样本角色,因此 score 往往会变得越来越高。

      为避免这种情况,我们希望强制 negative itemscore 在零左右,这是negative itemscore 的自然预期。为此,我们在损失函数中添加了一个正则化项。重要的是,这一项与相对排名在同一取值区间并且作用与其相似。最终的损失函数为:

      Ls(t)=1K×j=1K[σ(s^t,js^t,i)+σ(r^t,j2)]

      .

2.2 实验

  1. 数据集:

    • RecSys Challenge 2015 数据集(RSC15):该数据集包含电商网站上的click-streams ,其中某些stream 以购买事件而结束。我们仅保留点击事件,并且过滤掉长度为 1 的会话。我们使用前 6 个月的数据进行训练,使用第二天的会话进行测试。每个会话要么是训练集要么是测试集,我们不会在会话中拆分数据。

      由于协同过滤方法的性质,我们从测试集中过滤掉训练期间 unseenitem,并且删除测试集中长度为 1 的会话。

    • VIDEO 数据集:包含某个视频服务平台收集的视频观看事件。预处理步骤如前所述,但是也过滤掉了很长的会话,因为这些会话可能是由机器人生成的。训练数据集包含最后一天除外的所有数据,测试数据集包含最后一天的数据。

  2. 评估方式:通过 one-by-one 提供会话的事件并检查下一个事件的 item 排名来完成评估。GRU 的隐状态在会话结束之后重置为零。 item 按照 score 降序排名。

    对于 RSC15数据集,我们对训练集中出现的 37483item 进行排名。对于 VIDEO 数据集,因为 item 集合太大因此我们将 next item 和最流行的 30000item 进行排名。这种评估的影响可以忽略不计,因为冷门的 item 通常 score 很低。此外,基于流行度的预过滤在实际推荐系统中很常见。

    • recall@20:在 top 20 排名的 item 中,召回的 next item 占所有 next item 的比例。

      召回不考虑 item 的实际排名,只要它位于 top N 的位置。这很好地建模了某些实际场景,其中绝对顺序无关紧要。此外,召回率通常还与重要的在线指标密切相关,如点击率 CTR

    • MRR@20Mean Reciprocal Rank: MRRnext item 的排名的倒数的均值。如果排名在 20 之后则排名的倒数置为零。

      MRR 考虑 item 的排名,这在推荐顺序很重要的场景下很重要(如排名靠后的 item 仅在滚动屏幕之后才可见)。

  3. baseline 方法:

    • POP:流行度的 predictor,它总是推荐训练集中的流行 item 。尽管简单,但是它通常是某些领域的强大 baseline

    • S-POP:推荐当前会话中最流行的 item(而不是全局最流行的 item )。该 baseline 在具有高重复性的领域中很强。

    • Item-KNN:基于 item 相似性来推荐和当前 item 最相似的 item 。相似度定义为

      sim(i,j)=(i,j)i×j

      此外,我们还使用正则化从而避免冷门 item 的偶然发生导致的高度相似性。

      baseline 是实际系统中最常见的 item-to-item 解决方案之一。尽管简单,它通常也是一个强大的 baseline

    • BPR-MF:它通过 SGD 优化 pair-wise ranking 目标函数,是最常用的矩阵分解方法之一。矩阵分解无法直接应用于 session-based 推荐,因为新会话没有预先计算的特征向量。然而,我们可以通过使用会话中出现的 item 的特征向量的均值作为 user 特征向量来克服这个问题。换句话讲,我们对 next item 的特征向量、迄今为止会话中 item 特征向量的相似性进行平均。

    这些 baseline 的效果如下表所示,其中 item-KNN 方法显著优于其它 baseline 方法。

  4. 参数配置:我们通过单独优化每个超参数来进行超参数调优,其中调优是在单独的验证集上进行的。然后我们在训练集和验证集上对网络进行重新训练,并最终在测试集上进行评估。下表给出了最佳的超参数。

    此外还有一些探索如下:

    • 权重矩阵从 [x,x] 中均匀随机初始化,其中 x 取决于矩阵的行数和列数。

    • 我们评估了 rmspropadagrad 优化器,发现 adagrad 效果更好。

    • 我们对 GRU 以外的其它 RNN 单元进行了简单的实验,发现常规的 RNN 单元和 LSTM 单元的效果都更差。

    • 我们尝试了几种损失函数。

      • point-wise ranking loss (如交叉熵和 MRR )优化通常是不稳定的,即使添加正则化也是如此。我们认为:这是由于这种方法试图为 positive item 获得高分,而负样本的 negative push 太小。
      • 另一方面,pair-wise ranking loss 表现良好。
    • 我们检查了几种架构,发现:

      • 单层 GRU 表现最好。我们假设这是由于会话的生命周期通常都很短,不需要表达不同分辨率的多个时间尺度。然而,确切原因尚不明确,需要进一步研究。
      • 使用 item embedding 得到的效果稍差,因此我们仅使用 OneHot 编码。
      • 此外,将会话的所有历史事件(而不是最新的事件)作为输入并不能带来额外的准确率增益。这毫不奇怪,因为 GRULSTM 一样,同时具有长期记忆和短期记忆。
      • GRU layer 之后添加额外的前馈层也没有帮助。
      • 然而,增加 GRU layer 的大小提高了性能。
      • 我们还发现使用 tanh 作为输出层的激活函数是有益的。
  5. 实验结果:下表给出了性能最佳的网络的结果(括号表示相对于 item-KNN 中的提升。)。具有 1000 个隐单元的 VIDEO 数据集的交叉熵在数值上不稳定,因此我们没有提供结果。结论:

    • 即使隐单元数量为 100GRU-based 的方法在两个数据集上都显著优于 item-KNN。增加隐单元数量进一步改善 pair-wise loss 的结果,但是降低了交叉熵损失(即 point-wise loss )的准确率。
    • 在隐单元数量为 100 时,尽管交叉熵损失给出了更好的结果,但是随着隐单元数量的增加,pair-wise loss 超过了该结果。
    • 尽管增加隐单元数量会增加训练时间,但是我们发现 GPU 上从隐单元 100 提升到 1000 的代价不太昂贵。
    • 交叉熵损失在数值上不稳定,因为网络独立地尝试增加 positive itemscore,而其它 itemnegative push 相对较小。因此,我们建议使用上述两个 pair-wise loss 中的任何一个。

三、HRM[2015]

  1. 购物篮分析 market basket analysis 可以帮助零售商更好地了解用户的购买行为,从而作出更好的决策。购物篮分析最重要的任务之一是 next basket recommendation:根据每个用户的序列交易数据来推荐用户下一次访问时可能想要购买的item 。其中,交易transaction 是在某个时刻购买的一组 item(如鞋子、包包)。该问题有两种建模范式:

    • 序列推荐器 sequential recommender:主要依赖于马尔科夫链。它根据最近的动作预测 next purchase 来探索序列交易数据。该模型的一个主要优点是它能够捕获序列行为从而用于良好的推荐。例如,对于最近购买手机的用户,它可能会推荐该用户购买手机配件,其中这些手机配件是其它用户购买手机后也来购买的。
    • 通用推荐器 general recommender:丢弃任何序列信息并学习用户感兴趣的 item 。这类方法中最成功的方法之一是基于模型的协同过滤 (如矩阵分解模型)。显然,通用推荐器擅长通过学习用户的整个购买历史来捕获用户的通用兴趣general taste

    next basket recommendation 的更好的解决方案是同时考虑序列行为和用户的通用兴趣。个性化的马尔科夫链personalized Markov chain: FPMC 朝着这个方向迈出了一步,它能够同时建模序列行为(通过前一个交易中的 item 与后一个交易中的 item 之间的交互)、以及用户的通用兴趣(通过用户与 next basket 中的 item 之间的交互),因此比单独的序列推荐器或者单独的通用推荐器表现更好。然而,FPMC 的一个主要问题在于它的所有组件都是线性组合的,表明它在多个因子之间做出了强独立性假设(即,每个组件都是独立地影响用户的 next purchase )。不幸的是,根据论文《Learning Hierarchical Representation Model for Next Basket Recommendation》的分析,作者表明独立性假设不足以提供良好的推荐。

    为解决上述问题,论文《Learning Hierarchical Representation Model for Next Basket Recommendation》next basket recommendation 引入了一种新颖的 hierarchical representation model: HRM 。具体而言,HRM 将每个用户和每个 item 表达为连续空间中的一个向量,并使用 two-layer 结构来构建用户、以及上一次交易的 item 的hybrid representation`:

    • 第一层通过聚合上一次交易的 item 向量,从而形成 transaction representation
    • 第二层通过聚合用户向量和 transaction representation 从而构建 hybrid representation

    然后,论文使用得到的 hybrid representation 来预测 next basket 中的 item 。注意,transaction representation 对序列行为进行建模,而 user representation 捕获了用户的通用兴趣。

    HRM 允许我们在不同的层灵活地使用不同类型的聚合函数。具体而言,通过采用非线性运算(而不是线性运算),我们可以建模不同因子之间更复杂的交互,而不是独立性假设。例如,通过使用最大池化操作,我们可以比较来自不同因子的特征,并且仅选择那些最重要的特征来形成更高 levelrepresentation 从而用于未来的预测。

    论文还表明,通过选择适当的聚合函数,HRM 包含了几种现有的方法,包括马尔科夫链模型、矩阵分解模型、FPMC 模型的变体。为了学习模型参数,论文使用负采样程序作为优化方法。论文对三个真实世界的交易数据集进行了实验,结果证明了HRMstate-of-the-art baseline 方法相比的有效性。

    主要贡献:

    • next basket recommendation 引入了一个通用模型,该模型可以捕获序列行为和用户的通用兴趣,并灵活地结合多个因子之间的不同交互。
    • hierarchical model 中引入了两种类型的聚合函数,即均值池化和最大池化,并研究了这些函数的不同组合的效果。
    • 理论上表明HRM 模型在选择适当聚合函数的情况下,包含了几种现有的推荐方法。
    • 实验表明,HRM 模型在 next basket recommendation 的不同评估指标下始终优于 state-of-the-art baseline
  2. 相关工作:next basket recommendation 是基于隐式反馈的推荐系统的典型应用,其中用户没有显式的偏好(如评分),而只有正向的观察 positive observation(如购买或点击)。

    • 序列推荐器:主要基于马尔科夫链模型,通过在给定最近一个动作的情况下预测用户的下一步动作来利用序列数据。我们的工作与之前方法的主要区别在于:除了序列行为之外,我们还包含了用户的通用兴趣。以外,以前的序列推荐器很少解决因子中 item 之间的交互。

    • 通用推荐器:根据用户的整个购买历史进行推荐 ,而不考虑序列行为。通用推荐器的关键思想是协同过滤 collaborative filtering: CF ,它进一步可以分为基于内存的 CF(通过某些相似性度量找到 k 近邻的用户或 item 来进行推荐)、以及基于模型的 CF(通过分解 user-item 相关性矩阵来进行推荐)。通用推荐器擅长捕获用户的通用兴趣,但是如果没有建模序列行为,那么很难将其用于用户最近的购买行为。

    • 混合模型hybrid model :结合了序列行为建模和用户通用兴趣建模。

      一个 state-of-the-art 模型是 FPMC,它构建了一个概率转移立方体 transition cube,其中立方体的每一项给出了用户 u 在最近购买了 item i 的条件下接着购买了 item j 的概率。通过分解这个立方体,该方法通过用户、 last itemnext item 之间的三个 pairwise 交互来解释这个概率。以这种方式,FPMC 通过 last itemnext item 之间的交互来建模序列行为,通过用户与 next item 之间的交互来建模用户的通用兴趣。实验表明,这种混合模型可以比单独的序列推荐器、或者单独的通用推荐器实现更好的性能。

3.1 模型

  1. 动机:next basket recommendation 的一个简单的解决方案是:线性组合序列因子sequential factor(来自序列行为模型)和通用因子 general factor(来自用户通用兴趣模型)。然而,这种线性组合假设多个因子之间是独立的。真实世界的结果表明,不同因子之间的独立性假设可能不足以提供良好的推荐。我们需要一个能够更复杂地集成多个因子之间交互的模型。这成为我们工作的主要动机。

  2. U={u1,,uM} 为所有用户集合,I={i1,,iN} 为所有 item 集合,M 为所有用户数量,N 为所有 item 数量。

    对于每个用户 u,其交易的购买历史为 Tu=(T1u,,Ttu1u) ,其中 TtuIt 时刻该用户的购买 item 集合,tu1 为该用户最近一次购买的时间。所有用户的购买历史记做 T={Tu1,,TuM} 。给定 Tnext basket recommendation 任务是推荐用户 u 在下一个时刻(即时刻 tu )访问时可能会购买的 item

    next basket recommendation 任务可以公式化为对用户 u 在第 tu 时刻的交易构建个性化的ranking u,tI×I ,基于这个 ranking 我们可以向每个用户推荐 top n items

  3. 为解决上述推荐问题,我们提出了 HRM 模型。HRM 的思想是学习一个可以同时包含序列行为和用户通用兴趣的推荐模型,同时建模这些因子之间的复杂交互。

    具体而言,HRM 将每个用户和每个 item 表达为连续空间中的一个向量,并采用两层结构来构建用户和最近一次交易的 itemhybrid representation

    • 第一层通过聚合最近一次交易的 item 向量从而形成 transaction representation
    • 第二层通过聚合用户向量和 transaction representation 来构建 hybrid representation

    然后使用得到的 hybrid representation 来预测 next basket 中的 itemHRM 的整体结构如下图所示。正如我们所见,HRM 通过对连续购买进行建模从而捕获序列行为,通过在序列推荐中集成个性化的 user representation 从而建模了用户的通用兴趣。

    该模型有两个不足:

    • 首先,模型无法捕获用户的所有历史,只能“看到 “最近” 一次发生的交易,所以无法捕获用户的长期兴趣。
    • 其次,模型没有捕获用户兴趣的动态演变。

  4. 更正式而言,令 VURM×d 为用户 representation 矩阵,第 uvuURd 为用户 urepresentation 向量,d 为因子维度。令 VIRN×ditem representation 矩阵,第 iviIRditem irepresentation 向量。

    给定用户 u 的两个连续的交易 Tt1uTtuHRM 通过一个 softmax 函数定义用户 u 在给定最近一个交易 Tt1u 的条件下购买 next item i 的概率:

    p(iTtuu,Tt1u)=exp(viIvu,t1H)j=1Nexp(vjIvu,t1H)

    其中 vu,t1H 为用户 u 在时刻 t1hybrid representation ,它被定义为:

    vu,t1H=f2(vuU,f1({vlIlTt1u}))

    其中 f1()f2() 分别表示第一层和第二层的聚合函数。

  5. HRM 的一个优点是我们可以引入各种聚合函数来从 lower level 形成 higher levelrepresentation。通过这种方式,我们可以对不同层的多个因子之间的不同交互进行建模,即在第一层对构成了 transaction representationitem 之间的交互进行建模,在第二层对 user represetnationtransaction representation 之间的交互进行建模。

    在这项工作中,我们研究了均值池化 average pooling 和最大池化 max pooling 这两种典型的聚合函数。显然,均值池化是一种线性运算,它假设输入的 representation 之间相互独立。相反,最大池化是一种非线性操作,它对输入的 representation 之间的交互进行建模,只有那些最重要的特征才会被保留下来。

    注意,还可以定义其它类型的聚合函数,如 top-k 均值池化或者 Hadamard product。我们可能会在将来的工作中研究这些聚合函数。此外,还可以考虑在深度神经网络中引入非线性层,然而我们求助于简单的模型,因为这样的计算复杂度较低从而可以用于非常大的数据集。

    由于 HRM 中有两个聚合,因此我们根据不同的操作组合得到四个版本的 HRM,即:HRMAvgAvg,HRMMaxAvg,HRMAvgMax,HRMMaxMax,其中第一个下标表示第一层的聚合函数、第二个下标表示第二层的下标操作。正如我们所看到的,这四个 HRM 版本实际上假设多个因子之间的交互程度不同。

    • 通过仅使用均值池化,HRMAvgAvg 假设所有因子之间都是独立的。此外,我们稍后表明 HRMAvgAvg 可以视为 FPMC 的某种变体。
    • HRMMaxAvg,HRMAvgMax 都引入了部分交互,要么在最近一个交易的 item 之间、要么在 user represetnationtransaction representation 之间。
    • HRMMaxMax 同时在两层中使用非线性操作,从而假设所有因子之间完全交互。
  6. HRM 的损失函数是负的对数似然:

    LHRM=uUTtuTuiTtulogp(iTtuu,Tt1u)+λ||Θ||F2

    其中:λ 为正则化系数,Θ 为模型参数(即 Θ={VU,VI})。

    然而直接优化上述目标函数是不现实的,因为计算完整的 softmax 的代价与 item 数量 N 成正比,而这个数量通常非常大。因此我们使用负采样技术:

    LNEG=uUTtuTuiTtu(logσ(viIvu,t1H)+k×EjPI[logσ(vjIvu,t1H)])+λ||Θ||F2

    其中:σ(x)sigmoid 函数,k 为负样本数量,j 为被采样的负样本,PI 为负采样的噪音分布 noise distribution

    正如我们所看到的的,带负采样的 HRM 的目标旨在最大化观察到的 item i 的概率、同时最小化未观察到的 item j 的概率。

    我们使用随机梯度下降算法来最小化 LNEG 。此外,在学习非线性模型时,我们还采用了 Dropout 技术来避免过拟合。在我们的工作中,我们为每个单元设置了一个固定的 dropout rate (即,0.5)。

  7. 一旦学到 user representationitem representation,则HRMnext basket recommendation 过程如下:

    • 给定用户 u 及其最近一次交易 Ttu1u ,对于每个候选 item iI ,计算未归一化的概率 viIvu,t1H
    • 然后根据 item 的未归一化概率对 item 进行排序,并选择 top n 个结果来推荐给用户。

    注意,由于排序只需要考虑相对大小,因此没有必要计算完整的 softmax 值。

3.2 和之前模型的关系

  1. HRM 和马尔科夫链的关系:HRM 可以简化为某种类型的马尔科夫链模型。

    我们选择特殊的聚合函数:

    • 对于第一层聚合,我们随机选择一个 item 向量作为 transaction representation
    • 对于第二层聚合,我们选择 transaction representation 作为 hybrid representation

    我们将这种模型称作 HRMCopyItem,即:

    LCopyItem=uUTtuTuiTtu(logσ(viIvsI)+k×EjPI[logσ(vjIvsI)])+λ||Θ||F2

    其中 vsI 表示从最近一次交易中随机选择的 itemrepresentation

    类似于 《distributed representations of sentences and documents》 中的推导,我们得到上式的最优解:

    viIvsI=PMI(viI,vsI)logk

    这意味着 HRMCopyItem 实际上是一个 factorized Markov chain model: FMC ,它通过分解 item (这些 item 来自于两个连续的交易)之间的转移矩阵 transition matrix,这个转移矩阵与shifted PMI 矩阵相关联。当 k=1 时,转移矩阵就变为 PMI 矩阵。

    事实上,如果我们采用噪声对比估计进行优化,则最优解为:

    viIvsI=logp(viIvsI)logk

    这意味着 HRMCopyItem 分解的转移矩阵是 shifted 的对数条件概率矩阵。

  2. HRM 和矩阵分解模型:HRM 可以简化为矩阵分解模型。

    HRM vs Matrix Factorization Model

    我们选择特殊的聚合函数:对于第二层聚合,我们选择 user representation 作为 hybrid representation (此时第一层完全被移除掉)。我们将这种模型称作 HRMCopyUser,即:

    LCopyUser=uUTtuTuiTtu(logσ(viIvuU)+k×EjPI[logσ(vjIvuU)])+λ||Θ||F2

    其最优解为:

    viIvuU=PMI(viI,vuU)logk

    通过这种方式, HRMCopyUser 简化为矩阵分解模型,该模型分解了一个 shifted PMI 矩阵。

    这个 shifted PMI 矩阵和 HRMCopyItemshifted PMI 矩阵在公式上不相同。

  3. HRMFPMC 的关系:HRM 可以简化为 FPMC 模型的某种变体。

    基于 S-BPR 优化准则和最大后验估计的 FPMC ,其损失函数为:

    LFPMC=uUTtuTuiTtujTtulogσ(g^(u,t,i)g^(u,t,j))+λ||Θ||F2

    其中 g^() 为预测模型prediction model

    g^(u,t,i)=p^(iTtuu,Tt1u)=viIvuU+1|Tt1u|lTt1uviIvlI

    对于 HRM 模型,如果我们选择负样本数量 k=1 ,并且在每一层使用均值池化,我们称这个变体为 HRMAvgAvgNeg1 ,则它的损失函数为:

    LAvgAvgNeg1=uUTtuTuiTtu(logσ(viIvu,t1H)+EjPI[logσ(vjIvu,t1H)])+λ||Θ||F2=uUTtuTuiTtujTtu(logσ(viIvu,t1H)+logσ(vjIvu,t1H))+λ||Θ||F2

    考虑到每一层都是均值池化,则有:

    vu,t1H=12(vuU+1|Tt1u|lTt1uvlI)

    因此有:

    LAvgAvgNeg1=uUTtuTuiTtujTtu(logσ(g^(u,t,i))+logσ(g^(u,t,j)))+λ||Θ||F2

    可以看到:HRMAvgAvgNeg1FPMC 共享相同的预测模型(即,g^(u,t,i) ),但是二者采用不同的pairwise 优化准则optimization criteria

    • FPMC 使用 pairwise ranking 损失函数,即 logσ(g^(u,t,i)g^(u,t,j)) ,这使得观察到的 item iranking 高于未观察到的 item j
    • HRMAvgAvgNeg1 也使用 pairwise ranking 损失函数,即 logσ(g^(u,t,i))+logσ(g^(u,t,j)) ,这使得最大化观察到的 item iranking、最小化未观察到的 item jranking

    实际上,我们也可以采用 S-BPR 准则来定义 HRMAvgAvg 的目标函数,从而得到与 FPMC 相同的模型。

  4. 基于上述分析,我们可以看到 HRM 实际上是一个非常通用的模型。通过引入不同的聚合函数,我们可以包含已有方法。此外,我们还可以探索其它预测函数以及优化准则,从而展现 HRM 的灵活性和潜力。

3.3 实验

  1. 数据集:我们使用三个真实交易数据集来评估不同的推荐方法。

    • Ta-Feng 数据集:RecSys 会议发布的公开数据集,涵盖了从食品、办公用品到家具产品。
    • BeiRen 数据集:来自中国的大型零售企业 BeiGuoRenBai,记录了 20131 月到 20139 月期间的超市购买记录。
    • T-Mall 数据集:淘宝发布的一个公共的在线电商数据集,以品牌(而不是商品)的方式记录了在线交易。

    我们首先对数据集进行预处理。对于 Ta-FengBeiRen 数据集,我们删除了用户量少于 10 个的商品、以及商品量少于 10 个的用户。对于较小的 T-Mall 数据集,我们删除了用户量少于 3 个的商品、以及商品量少于 3 个的用户。处理后的数据集如下表所示。

    最后,我们将所有数据集拆分为训练集和测试集,其中测试集仅包含每个用户的最后一笔交易,而剩余所有交易都放入训练集中。

  2. baseline 方法:

    • TOP:将训练集中最流行的 item 作为每个用户的推荐。

    • MC:马尔科夫链模型(即序列推荐器),它根据用户的最后一笔交易来预测 next purchase 。预测模型为:

      p(iTtuuTtu1u)=1|Ttu1u|jTtu1up(iTtuujTtu1u)

      其中转移概率 p(ij) 是从训练集中估计而来。

    • Nonnegative Matrix Factorization: NMF:是一种 state-of-the-art 的协同过滤方法。它是基于 user-item 矩阵的非负矩阵分解,该矩阵是通过丢弃序列信息从交易数据集构造而来。

    • FPMCnext basket recommendationstate-of-the-art 混合模型,预测时同时考虑了序列行为和用户的通用兴趣。

    对于 NMF, FPMC, HRM 方法,我们在 Ta-Feng 数据集和 BeiRen 数据集上设置维度 d{50,100,150,200},在 T-Mall 数据集上设置 d{10,15,20,25}

  3. 评估指标:我们在测试集中对每个用户 u 的最后一次交易 Ttuu 进行评估。对每种推荐方法,我们为每个用户 u 生成一个包含 KitemK=5)的item 列表 R(u) ,其中 Ri(u) 表示第 i 个位置推荐的 item。我们使用以下指标来评估推荐列表与实际购买的 item

    • F1-Score:它是 precisionrecall 的调和平均值,是广泛应用的指标。
    • Hit-Ratio:如果实际购买的 item 至少有一项也出现在推荐列表中,则称之为命中。命中的推荐列表占所有推荐列表的比例称之为命中率。命中率关注推荐系统的召回率,即所有用户中有多少比率的人获得至少一个正确的推荐。
    • NDCG@kNormalized Discounted Cumulative Gain: NDCG 是一种基于排名的指标,它考虑了列表推荐中的 item 顺序。
  4. 不同 HRM 变体的比较:

    • 在聚合中仅使用均值池化操作的 HRMAvgAvg 在四种变体中效果最差。这表明通过假设所有因子之间的独立性,我们可能无法学到好的推荐模型。
    • 仅使用一次最大池化操作的 HRMAvgMaxHRMMaxAvg 相比 HRMAvgAvg 的效果更好。但是,这两个模型之间并没有哪个模型表现出一致性地优于对方,这表明不同层的交互都能够以各自的方式来帮助推荐。
    • 在聚合中全部使用最大池化操作的 HRMMaxMax 超越了其它三个变体,这表明在 next basket recommendation 中对多个因子之间的交互进行建模的优势。

  5. 不同方法之间的比较:我们选择 HRMMaxMax 这个 HRM 版本与 baseline 方法进行比较。

    • 总体而言,TOP 方法效果最差。然而我们发现 Top 方法在 T-Mall 数据集上优于 MC。这可能是由于 T-Mall 数据集中的商品实际上是品牌。因此流行品牌在训练集和测试集上的分布非常接近,这符合 Top 方法的假设并导致更好的性能。
    • NMF 方法在大多数情况下优于 MC 方法。一个主要原因是 MC 方法中估计的转移矩阵相当稀疏,直接应用它进行推荐可能导致效果不佳。提高 MC 方法性能的一种方法是分解转移矩阵从而缓解稀疏性问题。
    • 通过结合序列行为和用户的通用兴趣,FPMC 可以获得比 MCNMF 更好的结果。
    • 通过进一步引入多个因子之间的交互,HRMMaxMax 在三个数据集上的所有指标方面都始终优于所有 baseline 方法。

    为进一步研究不同方法的性能,我们根据用户的活跃度将用户分为三组(即,不活跃、中等活跃、活跃)并对不同用户组进行比较。以 Ta-Feng 数据集为例,如果用户购买历史少于 5 次则为不活跃、超过 20 次则为活跃、否则为中等活跃。这样,不活跃、中等活跃、活跃用户的占比分别为 40.8%, 54.5%, 4.7% 。由于篇幅所限我们仅报告 d=50Ta-Feng 数据集的结果,其它数据集的结果也是类似的。

    • Top 方法仍然是所有用户组中表现最差的。
    • MC 在非活跃用户和中等活跃用户上的效果都优于 NMF,而在活跃用户上比 NMF 更差。这表明,NMF 很难通过很少的交易来学习良好的 user representation 从而进行推荐。
    • 通过将序列行为和用户的通用兴趣来线性组合,FPMC 在非活跃用户和活跃用户上的性能优于 MC、在非活跃用户和中等活跃用户上的性能优于 NMF 。但是,我们可以看到不同用户组的改进并不是很一致。
    • HRMMaxMax 在所有分组上在所有指标都达到最佳性能。这表明,对多个因子之间交互进行建模可以帮助不同类型的用户生成更好的推荐。

  6. 负采样的影响:这里我们研究负采样数量 k 对于 HRMMaxMax 推荐效果的影响。这里我们选择 Ta-Feng 数据集和 BeiRen 数据集上 d=50T-Mall 数据集上 d=10

    • 随着 k 的增加,测试集F1-Score 也随之提升,并且三个数据集的趋势非常一致。
    • 随着 k 的增加,获得的性能增益在降低。这表明如果我们继续采样更多负样本,则性能略微提升但是计算复杂度大幅增加。因此在我们的 baseline 比较实验中,我们在 Ta-Feng, BeiRen, T-Mall 数据集中,分别将 k 设置为 25, 60, 6

四、DREAM[2016]

  1. 通常而言,next basket recommendation 有两种不同的方法:

    • 协同过滤collaborative filtering: CF模型:它捕获用户的通用兴趣general interest ,但是难以考虑历史交易的序列特征。矩阵分解matrix factorization: MF模型是一个成功的 CF 模型,它对整个历史交易数据构建的 user-item 矩阵进行因子分解,并用潜在向量来表达用户的通用兴趣。
    • 基于马尔科夫链的序列推荐模型:它从历史交易中提取序列特征,然后根据这些序列行为预测 next purchase

    因此,next basket recommendation 的一种更合适的方法是在混合模型hybrid model 中同时捕获上述序列行为和用户通用兴趣。

    • 因子分解个性化马尔科夫链Factorizing Personalized Markov Chain: FPMC 可以对每两个相邻 basket 之间的序列行为进行建模,并且用户的通用兴趣由 basket 中的 item 来塑造 shaped 。但是,FPMC 只是对多个因子进行线性运算,并不能描述多个因子之间的交互。
    • Hierarchical Representation Model: HRM 似乎部分地解决了如何通过非线性最大池化操作来聚合多个交互因子的问题。然而,所有基于马尔科夫链的方法(包括上述 FPMCHRM)都具有相同的缺陷,即这些推荐器只能对每两个相邻 basket 之间的局部序列行为进行建模,而这这两个相邻 basket 有时可能不相关。例如,用户 u 可能在 t1 时刻购买了一个 ultrabook、在 t2 时刻购买了一些食物、在 t3 时刻购买了ultrabook 的配件,此时每两个相邻 basket 之间不存在任何相关性。因此,我们需要对全局序列行为进行建模,从而充分利用 sequential basket 之间的所有相关性,如 t1 时刻和 t3 时刻的 basket 。出于这个原因,论文 《A Dynamic Recurrent Model for Next Basket Recommendation》计划在用户的所有 sequential basket 中对全局序列特征进行建模。

    如前所述,HRM 提取的局部序列特征不足以对不同 basket 之间的关系进行建模,而深度 RNN 架构的循环操作可以从用户的所有 basket 中捕获全局序列特征。因此,论文 《A Dynamic Recurrent Model for Next Basket Recommendation》提出了一个动态循环模型 DREAM 用于 next basket recommendationDREAM 模型的输入由一系列 basketitem 组成,这些 item 构成了特定用户的、顺序的交易。随着时间的推移,池化操作和矩阵运算为每个用户提供 dynamic representation。此外,循环结构可以从整体历史交易数据中获得每个用户的一些全局序列特征。论文在两个真实世界数据集上的实验结果表明,和 FPMCHRMstate-of-the-art 模型相比,DREAM 模型在 next basket recommendation 方面取得了很大的进步。

    这项工作的主要贡献:

    • 论文调研了每个用户的 dynamic representation,以及 item 购买历史的全局序列行为。
    • 论文在两个真实世界数据集上进行实验从而验证了 DREAM 模型的有效性。

    据作者所知,DREAM 是首个尝试结合 dynamic representation 和全局序列行为从而提高 next basket recommendation 性能的方法。

4.1 模型

  1. NR|I|×ditemrepresentation 矩阵,其第 iniRditem iIrepresentation 向量,drepresentation 维度。所有 item 的集合为 I ,集合大小为 |I|

    对于用户 u ,历史交易 Bubasket 集合 {Bt1u,Bt2u,} ,其中该集合按照时间顺序排列,BtiuI 为用户 u 在时刻 ti 购买的 basket of items

    对于具有历史交易数据的 next basket recommendation,我们将问题公式化为:预测每个用户在给定时刻 tiitemranking list

  2. DREAM 的整体框架如下图所示。

    • 模型的输入是 basket 的序列。对于用户 u 的一个 basket Btiu ,我们得到 basketitem 的潜在 representation Btiu={nti,juRdj=1,2,,|Btiu|} ,其中 nti,jubasket Btiu 中第 jitem 的潜在 representation|Btiu|basket Btiu 中的 item 数量。现在,我们可以通过聚合这些 item representation 来生成basket Btiubasket representation btiu 。在这项工作中,我们采用了两种聚合操作:最大池化、均值池化:

      btiu=max-pooling({nti,juRdj=1,2,,|Btiu|})btiu=avg-pooling({nti,juRdj=1,2,,|Btiu|})

      basket representation btiu 可以作为 RNN 的输入层。

    • 隐层的 vector representation htiu 是用户 u 在时刻 tidynamic representationRNN 矩阵 R 有助于在每两个相邻隐状态 hti1uhtiu 之间传播序列信号。Xbasket representation 和用户兴趣之间的转移矩阵。最后,隐层的 vector representation 可以计算为:

      htiu=f(Xbtiu+Rhti1u)

      其中: btiu 为用户 u 在时刻 tibasket representationhti1u 为用户 u 在前一时刻 ti1dynamic representationf() 为激活函数(这里我们选择 sigmoid 函数)。

    • 最后,模型在时刻 ti 输出用户对所有 item 的得分 otiu

      otiu=Nhtiu

      它是每个 item representationuser dynamic representation 的内积。oti,vu 表示用户 u 在时刻 tiitem v 之间的交易得分,较高的得分意味着更可能购买相应的 item

  3. 目标函数:我们选择 Bayesian Personalized Ranking: BPR 作为目标函数。我们的基本假设是:用户在特定时间更喜欢 basket 中的 item ,而不是负样本(即 basket 之外的 item )。负样本可以是basket 之外的任何其它 item 。因此我们最大化以下概率:

    p(u,t,vv)=σ(ou,t,vou,t,v)

    其中:v 为用户 ut 时刻的正样本,v 为用户 ut 时刻的负样本,σ()sigmoid 函数。

    考虑所有的对数似然以及正则化项,则我们的目标函数为:

    J=[logσ(ou,t,vou,t,v)]+λ2||Θ||2

    其中:λ 为正则化系数,Θ={N,R,X} 为待学习的参数矩阵。

    我们使用随机梯度下降来更新求解上述最优化问题。

    DREAM 仅仅建模序列信息,并未建模用户的全局兴趣。可以看到这里并没有 user embedding 矩阵。

  4. 注意,DREAM 模型迭代式地学习用户的 representation。即,我们可以迭代式地根据新的交易来更新已有的用户 representation (由于 RNN 的性质),这种更新的代价相比分解完整的 user-item 矩阵而言要小得多。

4.2 实验

  1. 数据集:

    • Ta-Feng 数据集:RecSys 会议发布的公开数据集,涵盖了从食品、办公用品到家具产品。
    • T-mall 数据集:淘宝发布的一个公共的在线电商数据集,以品牌(而不是商品)的方式记录了在线交易。

    我们对上述数据集进行预处理,每个用户至少购买 kitem 才会被保留。对于 Ta-Feng 数据集我们设置 k=10,对于 T-Mall 数据集我们设置 k=3

  2. baseline 方法:

    • TOP:将训练集中最流行的 item 作为每个用户的推荐。

    • MC:马尔科夫链模型(即序列推荐器),它根据用户的最后一笔交易来预测 next purchase 。预测模型为:

      p(iTtuuTtu1u)=1|Ttu1u|jTtu1up(iTtuujTtu1u)

      其中转移概率 p(ij) 是从训练集中估计而来。

    • Nonnegative Matrix Factorization: NMF:是一种 state-of-the-art 的协同过滤方法。它是基于 user-item 矩阵的非负矩阵分解,该矩阵是通过丢弃序列信息从交易数据集构造而来。

    • FPMCnext basket recommendationstate-of-the-art 混合模型,预测时同时考虑了序列行为和用户的通用兴趣。

    • HRM:是一种 state-of-the-arthierarchical repre- sentation 模型,可以捕获通用的用户兴趣以及序列效应。此外,通过各种非线性操作,HRM 可以比先前的模型更准确地捕获所有这些因子。

  3. 评估指标:我们为每个用户 u 生成 K 个(K=5itemranking list。我们使用 F1-scoreNormalized Discounted Cumulative Gain: NDCG 指标。

    我们使用每个用户的最后一笔交易作为测试数据集,其它所有交易作为训练数据集。item representation 是随机初始化的。

    此外我们给出不同 representation 维度 d 的结果。对于 Ta-Feng 数据集,d{50,100,150};对于 T-Mall 数据集,d{10,15,20}

  4. 首先我们将 DREAM 模型与 baseline 方法比较,如下图所示。整体而言,next basket recommendation 的性能排名如下:DREAM, HRM, FPMC, NMF, MC, TOP

    • 由于 TOP 仅推荐流行 item,并且没有利用每个 basket 的特征,因此该方法效果最差。
    • 尽管 NMFMC 仅利用了一种特征(或者是序列行为、或者是用户的通用兴趣),我们观察到 NMFMC 效果更好,尤其是在稀疏的 T-Mall 数据集上。可能是因为 MC 无法揭露用户之间的协同信息。在 T-Mall 的稀疏的 user-item 矩阵上,协同信息相比较于稀疏的序列行为,对于生成用户的准确兴趣更重要。
    • 在这两个数据集上,HRM 模型都优于 FPMC 模型。虽然 FPMCHRM 都利用了序列行为,但是 HRM 的多个因子之间的非线性运算为其带来了更好的性能。而 FPMCbasketitem 交互的线性独立假设使其不适用于复杂的商业场景。
    • DREAM 在两个数据集上的所有指标方面都优于所有 baseline 。这表明,具有循环架构的 user dynamic representation 在捕获用户的序列特征和动态兴趣方面是有效的。此外,池化操作、激活函数等丰富的非线性操作有助于更好地表达 basket

  5. 然后我们比较最大池化和均值池化对 DREAM 模型的性能影响。可以看到,最大池化的效果要优于均值池化。

    显然,均值池化是一种线性操作,这表明 basket 中的每个 item 都以独立的方式影响 basket representation 。然而在现实世界的场景中,我们购买的许多 item 都是交互的,即,一个 item 会影响我们是否购买另一个 item,而购买 item 的整体可以 shape 我们的兴趣。 因此,更好的解决方案是通过非线性运算来学习 basketitem 的复杂交互关系。最大池化是一种非线性操作,能够比线性操作更好地学习复杂的交互。

五、Improved GRU4Rec[2016]

  1. 传统的个性化推荐方法通常需要用户画像,至关重要的是,这些方法要求在推荐时识别用户。然而这可能是不可行的,例如:网站的新用户没有任何画像信息,或者用户没有登录,或者用户删除了他们的 tracking 信息。这导致了基于用户历史的推荐方法的冷启动问题。

    另一种替代方法依赖于历史数据,并提供 session-based 推荐。在这个 setting 中,推荐系统仅根据用户在当前 session 中的行为进行推荐。这避免了上述冷启动问题,但我们必须确保系统保持准确率和及时响应(即,预测不会耗费太长时间)。最近,《Session-based recommendations with recurrent neural networks》 提出了 RNN 用于 session-based 推荐。作者展示了 RNN 相对于传统模型在 session-based 推荐上的显著改进。

    在论文 《Improved Recurrent Neural Networks for Session-based Recommendations》 中,论文进一步研究了 RNNsession-based 推荐中的应用。具体而言,作者检查和采纳了文献中的各种技术来完成这项任务,包括:

    • 通过序列预处理 sequence preprocessingembedding dropout 来增强数据,从而提升训练并减少过拟合。
    • 通过模型预训练,从而考虑数据分布的时间偏移 temporal shift
    • 使用 privileged information 的蒸馏,从而从小数据集中学习。

    此外,论文提出了一种新颖的替代模型,该模型通过直接预测 item embedding 来减少预测的时间成本和空间成本。这使得 RNN 更容易在 real-time setting 中部署 。

    论文在 RecSys Challenge 2015 数据集上进行了评估,并证明了作者所提出方法的有效性。

  2. 相关工作:

    • 矩阵分解和基于邻域的方法在文献中被广泛应用于推荐系统。

      • 矩阵分解方法基于稀疏的 user-item 交互矩阵,其中推荐问题被公式化为矩阵补全任务matrix completion task 。在分解矩阵之后,每个用户都由一个潜在因子向量来表示,每个 item 也都由一个潜在因子向量来表示。然后可以通过对应的 user latent vectoritem latent vector 内积来补全 user-item 矩阵的缺失值。

        由于这需要我们同时识别用户向量和 item 向量,因此矩阵分解方法无法直接适用于用户未知的 session-based 推荐。解决这个冷启动问题的一种方法是使用成对偏好回归 pairwise preference regression

      • 基于邻域的方法利用 target item 和用户购买历史 item 之间的相似性。通过比较 session similarity,基于邻域的方法可以应用于 session-based 推荐。

    • 深度学习最近在图像识别、语音识别、自然语言处理等领域取得了非常成功的应用。在《Session-based recommendations with recurrent neural networks》 中,作者提出 RNN 来用于 session-based 推荐。作者将 RNN(带有自定义的 ranking loss)与现有的 session-based 预测方法进行比较,发现 RNN-based 方法的性能相比 baseline 要提升 20% ~ 30%。我们的工作与之密切相关,我们研究该 RNN 模型的扩展。

      《Sequential click prediction for sponsored search with recurrent neural networks》 中,作者还使用 RNN 进行点击序列预测。他们考虑了历史用户行为,也考虑了每个用户和每个 item 的、手工设计的特征。在这项工作中,我们完全依赖于自动学习的 feature representation

    • 也有许多工作提出了方法来提高 DNN 的预测性能。流行的方法包括:数据增强、dropoutbatch normalization、残差连接。我们寻求应用其中一些方法来提升我们模型的训练。

    • 人们提出 learning using privileged information: LUPI 框架来利用一些额外的 feature representation,这些 feature representation 仅在训练期间可用但是在测试期间不可用。当训练数据量有限时,人们发现使用此类信息是有益的。

      在广义蒸馏方法中,student 模型从 teacher 模型提供的 soft label 中学习。如果我们在 privileged dataset 上训练 teacher 模型,那么这种方法可以应用于 LUPI 。在这项工作中,我们提出使用 LUPI 框架来用于点击序列的预测,其中我们使用每个点击序列的未来部分作为 privileged information

5.1 模型

  1. session-based 推荐的 RNNsession-based 推荐问题可以公式化为基于序列的预测问题:令所有 item 集合的大小为 m ,令 [x1,x2,,xn1,xn] 为一个 click session,其中 xiR 为被点击 item 的索引并且 1xim 。我们寻求一个模型 M,使得对于 click session 中的任何前导点击序列 x=[x1,x2,,xr1,xr],1r<n ,我们得到输出 y=M(x),其中 y=(y1,,ym)Rmyiitem i 是第 r+1 个被点击 item 的概率。

    我们将 y 视为每个 item 成为 sessionnext click的排序分。由于我们通常需要为用户选择一个以上的推荐,因此这里推荐 top-k item (根据 y 进行排名)。令 xr+1 为前导点击序列 xnext click,则我们用一个 one-hot 编码 er+1Rm来表示它,然后计算它与 y 的交叉熵 L(y,er+1) 。也可以使用 pairwise ranking loss

    我们遵循下图所示 RNN 模型的通用结构。对于recurrent layer ,我们使用 Gated Recurrent Unit: GRU ,因为 《Session-based recommendations with recurrent neural networks》 中发现它优于 LSTM 单元。但是,我们没有使用 stateful RNN 训练过程,在 stateful RNN 训练过程中模型以 session-parallelsequence-to-sequence 的方式进行训练。相反,我们的网络处理每个序列 [x1,x2,,xr],并且训练用于预测该序列的 next click xr+1

    我们还使用可训练的 embedding 来表示所有input。我们的网络可以通过 Back-Propagation-Through-Time: BPTT 算法在固定数量的 time step 上,使用交叉熵损失来执行标准的 mini-batch 随机梯度下降从而进行训练。如下图所示为一条序列的训练示意图,梯度沿着灰色箭头的反向传播,蓝色为input 序列,橙色为 target output

     

  2. 数据增强data augmentation:数据增强技术已被广泛应用于图像领域,这里我们提出两种方法来增强点击序列:

    • 第一个方法是 《Artificial neural networks applied to taxi destination prediction》 中提出的序列预处理方法的应用。原始input session 的所有前导prefix都被视为新的训练序列。给定一个训练 session [x1,x2,,xn],我们生成序列和对应的 label 来用于训练:

      ([x1],x2),([x1,x2],x3),,([x1,x2,,xn1],xn)
    • 第二个方法是 dropout ,它是应用于 input sequence 的正则化形式。对点击序列应用 dropout 相当于随机删除部分click 的预处理步骤。直观而言,这使得我们的模型对 noisy click 不太敏感,例如用户可能不小心点击了不感兴趣的 item。因此,dropout 使模型不太可能过拟合特定的noisy 序列。dropout 也可以被视为一种数据增强形式,它生成更短的、被裁剪的序列来用于模型训练。

      这里是 dropout 输入序列中原始的 item id,而不是 dropout 对应的 item embedding 。在本论文里二者是相同的,但是需要实验来验证?

    我们将这两种方法应用于我们的所有模型。下图展示了一个示例:图中是一个包含了四个点击的session,虚线轮廓表示训练期间被dropout 的点击,灰色表示训练序列,橙色表示 output label,蓝色表示 privileged information (它们不用于标准的训练过程)。

    注意,相同序列在不同的训练epoch 会丢弃不同的点击item

  3. 适应时序变化 adapting to temporal changes:许多机器学习模型的一个关键假设是:输入是独立且同分布的。这在 item recommendation setting 中并非严格如此,因为新的商品只会出现在该商品发布之后的 session 中,并且用户行为/偏好也可能随着时间而改变。此外,推荐系统的目标是对新序列进行预测,即那些来自用户最近行为的序列。因此,在整个数据集上学习推荐模型可能会导致性能下降,因为模型最终会关注一些与最近序列无关的过时属性。

    解决这个问题的一种方法是定义一个时间阈值,并在构建模型时丢弃早于该阈值的点击序列。但是,这种方法减少了可供模型学习的训练数据量。

    我们提出了一个简单的解决方案:通过预训练获得两全其美的效果。我们首先在整个数据集上训练一个模型,然后使用训练好的模型来初始化一个新模型。这个新模型仅使用近期数据(整个数据集的子集)进行训练,例如从一年点击数据中使用最近一个月的数据来训练。这使得模型能够使用大量数据进行良好的初始化,并聚焦于近期的点击序列。通过这种方式,这类似于在图像领域中使用的 fine-tuning 过程。

    使用长期数据训练意味着学习用户的长期兴趣,使用短期数据训练意味着学习用户的短期兴趣。这里的方法通过初始化使得用户长期兴趣作为先验知识:当短期数据丰富时,学到的用户短期兴趣占主导;当短期数据匮乏时,初始的用户长期兴趣占主导。

  4. 使用 privileged information:用户在某个item 之后点击的 item 序列也可能包含有关该 item 的信息,如下图所示的蓝色 item 。这些信息不能用于执行预测,因为我们在进行推荐时无法查看到未来的序列。然而,我们可以利用这些未来的序列用作 privileged information,以便为我们模型的正则化和训练来提供 soft label 。为此,我们使用广义蒸馏框架。

    形式上,给定一个序列 [x1,x2,,xr] 和来自sessionlabel xr+1 ,我们将 privileged information 定义为:x=[xn,xn1,,xr+2] ,其中 n 为原始 session 的长度。privileged sequence 仅仅是发生在第 r+1item 之后的、逆序的未来序列。我们现在可以在 privileged sequence x 上训练一个 teacher模型,它也具有相同的 label xr+1

    接下来我们通过最小化以下形式的损失函数来调优我们的 student 模型 M(x)

    (1λ)×L(M(x),er+1)+λ×L(M(x),M(x))

    其中:λ[0,1] 为超参数用于平衡两个 label 之间的重要性。

    注意:这里的 teacher 序列为未来序列的逆序,它提供 soft label

    这使得 M 既可以从真实label 中学习,也可以从 teacher M 预测的 label(即 soft label )中进行学习。当可用的训练数据很小的时候,这种学习过程很有用。

    论文并未说明 teacher 模型 M 的结构。它的输入是未来序列的逆序,理论上应该和 M 有所不同。

  5. 用于快速预测的 output embedding:我们输出层需要输出所有 item 的排序分,这不仅消耗内存,也使得预测很慢。在 NLP 中也研究了类似的问题,典型的方法包括 使用 hierarchical softmax layer、以及采样最高频的 item

    hierarchical softmax 并不适用于我们的场景,因为我们需要进行 top-k 预测,而不仅仅是 top-1 预测。相反,我们将 item embedding 视为将 itemone-hot 编码空间到低维空间的投影。基于这个观点,我们建议训练模型直接预测 next clickembedding 。使用真实输出的 embedding 和预测的 embedding 之间的余弦损失来调优模型。该方法的灵感来自于 word2vec,其中相似的单词具有更接近的embedding (以余弦距离来衡量)。同样地,我们预期用户在给定序列之后可能点击的 item 应该在 item embedding 空间中接近。

    使用这种类型的输出将 final layer 中的参数数量从 H×m (输入为 H 维、输出为 m 维的全连接层)降低到 H×d (输入为 H 维、输出为 d 维的全连接层),其中 H 为最后一个隐藏的维度,dembedding 的维度。

    这种方法的一个缺点是:它需要为每个 item 提供高质量的 embedding。获得这种 embedding 的一种方法是从上述模型中抽取和重用经过训练的 item embedding

    这种方式的 label 是一个 embedding 向量,而不再是一个类别。

    还有一种解决方案:利用负采样技术,从而将 softmax layer 转换为一个双塔架构。

5.2 实验

  1. 数据集:RecSys Challenge 2015 数据集,其中最后一天的 session 为测试集(包含 15234session),其它天的 session 作为训练集(包含 7966257session )。预测的候选 item 数量为 37483 。在预处理session 之后,我们有 23670981 个训练序列。

    为了更好地评估我们的模型(如 privileged information 和预训练),我们按时间对训练序列进行排序,然后报告我们在训练序列的最近部分上({1256,164,116,14,11})训练的模型的结果。

  2. 评估方式:每个sessionitem-by-item 地输入到模型,计算模型在sessionnext click 的排名。评估指标是 Recall@20Mean Reciprocal Rank (MRR)@20

    对于 M1 ~ M3,我们直接从 softmax 输出中选取 top 20 个最可能的 item。对于 M4,我们计算模型输出与 item embedding 的余弦距离,然后选取 top 20 个最接近的 item

    最后,我们还报告了每个模型的模型大小和 batch 预测时间。如果模型要部署在真实的推荐系统中,那么这些都是重要的考虑因素。

  3. 配置:

    • 所有模型对 item 使用 50 维的 embeddingembeddingdropout rate25%
    • 我们使用 Adam 优化器,batch size = 512
    • 我们将 item 序列的长度截断为 19 ,因为 99% 的原始训练session 的长度小于等于 19。为简单起见,短于 19item 的序列用零填充,RNN 将忽略这些零。
    • 我们使用 10% 的训练数据作为每个模型的验证集来早停,从而设置每个模型的 epoch 数量。
    • 我们在所有模型中都使用单层 recurrent layer,因为我们发现更多的层并未提高性能。每个模型的 GRU 设置为 100 个隐单元或 1000 个隐单元。

    模型是在 GeForce GTX Titan Black GPU 上,在 kerastheano 中定义和训练的。每个模型的详细信息(以及它们的 label)如下:

    • M1:具有 softmax 输出、序列预处理、embedding dropoutRNN 模型。recurrent layer 全连接到输出层。

    • M2:与 M1 相同,但是针对数据集的最近时间段的部分重新训练了模型。

      预训练是在整个数据集上进行的,重新训练是在最近部分上进行的(下图的 x 轴)。

    • M3:在每个数据中可用的 privileged information(未来序列)上训练的 M1 模型。这用于为参数 T=1softmax 的温度超参数) 和 λ=0.2 的另一个 M1 模型提供 soft label。我们并没有广泛调优这两个超参数。

    • M4:模型的输出直接预测 item embedding。我们在 recurrent layer 和输出层之间添加了一个全连接的隐层,因为我们发现这提高了模型的稳定性。我们为这些模型使用了embedding,这些 embedding 是由 M1 在整个训练数据集上训练得到的。

  4. 下图总结了每个模型在评估指标上的性能。

    • M1M2 比报告的 baseline RNN 模型产生了显著的性能提升。

      • M1 的结果中,我们看到使用整个数据集进行训练的结果,要比使用使用数据集最近部分重新训练的结果稍差。这表明我们的推荐模型确实需要考虑随时间变化的用户行为。

      • 下表还报告了我们表现最好的模型,我们还列出了 《Session-based recommendations with recurrent neural networks》 中报告的 baseline 结果,包括他们最好的、基于 RNN 的模型(即 TOP1BPR)以及两种传统算法(即 S-POPItem-KNN)。令人惊讶的是,从 GRU 100GRU 1000,我们模型的性能(M1 ~ M3 )并未显著提升。

      • 我们发现 privileged information 模型(M3)的训练时间非常长。我们省略了 GRU size 1000 的结果,因为它无法在合理的时间内进行训练。我们认为训练时间急剧增加的主要原因是:需要计算 soft label、以及为每个 mini-batch 计算针对这些 soft label 的相应交叉熵损失。当可能的 soft label 数量很大时,这种扩展性很差,就像这里的情况一样。尽管如此,在最小的数据集上(即仅使用最近 1/8 的训练数据),M3 相比 M1 产生了适度的性能提升。这与 《Unifying distillation and privileged information》privileged information 的使用是一致的,并且表明它在可用数据很少的环境中可能很有用。

      • 最后,与我们的其它模型相比,M4 在预测准确性方面表现不佳(尽管它仍然比 baseline 有所提高)。如果可以使用质量更好的 embedding 作为目标,我们或许能够进一步提升 M4 的准确性。例如我们没有使用item 的任何辅助信息,如类别、品牌。

        另一方面,batch prediction 时间和模型大小如下表所示。对于 M4 模型,仅使用基于分类的模型(M1 ~ M3)的大约 60% 的预测时间就可以在 M4 中进行预测。M4 的参数也少得多,因此需要的内存更少。总之,这些都是使 RNN 能够部署在真实推荐系统中的步骤。

六、NARM[2017]

  1. 《Session-based recommendations with recurrent neural networks》 使用 GRU 来进行 session-based 推荐。该模型将用户点击的第一个 item 作为 RNN 的初始输入,并据此生成推荐。然后用户可能会点击其中的一个推荐,然后将其输入 RNN,并根据之前的全部点击生成后续推荐。《Improved recurrent neural networks for sessionbased recommendations》 通过利用两种关键技术,即数据增强、以及一种考虑输入数据分布变化的方法。尽管上述所有 RNN-based 方法都显示出对传统推荐方法的有效改进,但是它们仅考虑了用户在当前session 中的序列行为sequential behavior ,而没有强调用户在当前session 中的主要意图main purpose。当用户不小心点击了错误的 item、或者用户由于好奇而被一些不相关的 item 所吸引时,仅依赖于用户的序列行为是危险的。因此,论文《Neural Attentive Session-based Recommendation》 认为在 session-based 推荐中应该考虑用户在当前 session 中的序列行为和主要意图。

    假设用户想在网上购买一件衬衫。如下图所示,在浏览过程中,该用户倾向于点击一些款式相似的衬衫进行比较,同时该用户可能会偶然或出于好奇而点击一条西裤。之后,该用户一直在寻找合适的衬衫。

    • 在这种情况下,如果我们仅考虑用户的序列行为,那么可能会向该用户推荐另一件衬衫、西裤、甚至一双鞋,因为许多用户在点击一些衬衫或西裤之后点击了鞋子,如下图 (a) 所示。
    • 假设推荐器是一位经验丰富的人工购物向导,那么该向导可以推测该用户此时很可能购买一件短袖衬衫,因为用户的大部分点击item 都与短袖衬衫相关。因此,该向导会更加关注用户点击过的短袖衬衫,并向该用户推荐其它类似的衬衫,如下图 (b) 所示。

    理想情况下,一个优秀的推荐器除了考虑用户的整个序列行为之外,还应该考虑用户的主要意图,这反映在当前session 中一些相对重要的 item 上。注意,一个 session 中的序列行为和主要意图是互补的,因为我们并不能总是从 session 中推测出用户的主要意图,例如当session 太短、或者当用户仅仅是漫无目的地点击 item 时。

    为了解决上述问题,论文《Neural Attentive Session-based Recommendation》 提出了一种新颖的神经网络框架,即神经注意力推荐机Neural Attentive Recommendation Machine: NARM 。具体而言,论文探索了一种具有注意力机制的混合编码器,从而对用户的序列行为进行建模并捕获用户在当前session 的主要意图,稍后将它们组合为统一的 session representation。通过这种 item-level 的注意力机制,NARM 学会了以不同的方式关注越来越重要的 item。然后,论文使用基于统一的 session representationbi-linear matching scheme 来计算每个候选 item 的推荐分。NARM 通过联合学习 item representationsession representation、以及它们之间的 matching 来训练。

    论文主要贡献:

    • 提出了一种新颖的 NARM 模型,该模型同时考虑用户在当前 session 中的序列行为和主要意图,并使用 bi-linear matching scheme 来计算推荐分。
    • 应用注意力机制提取用户在当前 session 中的主要意图。
    • 对两个 benchmark 数据集进行了广泛的实验,结果表明:NARM 在这两个数据集上的召回率和 MRR 均优于 state-of-the-artbaseline 。此外,NARMlong session 上取得了更好的性能,这证明了 NARM 在同时建模用户序列行为和主要意图方面的优势。
  2. 相关工作:session-based 推荐是基于隐式反馈的推荐系统的典型application,其中没有显式的偏好(如,评分),而只有 positive 观察(如,点击)可用。我们跟踪用户在一段时间内的 positive 观察从而获得序列形式的数据。

    • 传统方法:通常有两种典型的建模范式,即通用推荐器general recommender、序列推荐器sequential recommender

      • 通用推荐器:通用推荐器主要是基于 item-to-item 的推荐方法。在这个 setting 中,item-to-item 的相似性矩阵是根据可用的 session 数据预先计算的。在 session 中经常一起点击(即共现)的 item 之间被认为是相似的。尽管这些方法已被证明是有效的并且被广泛采用,但是它们仅考虑了 session 的最近一次点击,而忽略了整个点击序列的信息。
      • 序列推荐器:序列推荐器基于马尔科夫链,它通过在给定最近一个动作的情况下预测用户的 next action 从而利用序列数据。在基于 session 的推荐任务中应用马尔科夫链的一个主要问题是:当试图在所有 item 上包含所有可能的、潜在的用户行为序列时,状态空间很快变得难以管理。
    • 基于深度学习的方法:神经网络推荐器neural network recommender 主要关注经典的协同过滤 user-itemsetting

      • 《Restricted boltzmann machines for collaborative filtering》 首先提出使用 Restricted BoltzmannMachines: RBM 进行协同过滤。
      • 《Learning hierarchical representation model for nextbasket recommendation》 介绍了基于 encoder-decoder 机制的、 next basket recommendationhierarchical representation 模型。
      • 最近,《Session-based recommendations with recurrent neural networks》RNN 应用于 session-based 推荐,并实现了对传统方法的显著提升。
      • 《Improved recurrent neural networks for session-based recommendations》 进一步研究了 RNNsession-based 推荐中的应用,他们提出了两种技术来提高模型的性能,即数据增强、以及一种考虑输入数据分布变化的方法。
      • 《Sequential click prediction for sponsored search with recurrent neural networks》 也使用 RNN 来用于点击序列预测,他们考虑了历史的用户行为、以及每个用户和 item 上的人工特征。

      尽管越来越多关于 session-based 推荐的工作关注于 RNN-based 方法,但是与他们不同,我们提出了一种新颖的神经注意力推荐模型,该模型结合了用户在当前 session 中的序列行为和主要意图。据我们所知,目前还没有研究考虑到这一点(即,结合了当前 session 中用户的序列行为和主要意图)。并且,我们首次将注意力机制应用于 session-based 推荐。

6.1 模型

  1. session-based 推荐:session-based 推荐任务是在给定用户的序列点击数据时,预测该用户下一步想点击什么。

    具体而言,令 [x1,x2,,xn] 为一个 click session ,其中 xi 为被点击 item 的编号。我们构建了一个模型 M,使得对于 session 中任何给定的前导点击序列 x=[x1,x2,,xt],我们得到输出 y=M(x) ,其中: 1tny=[y1,y2,,ym] 可以视为ranking listm 为所有 item 集合的大小,yi 表示第 iitemnext item 的概率(即,推荐分)。由于推荐器通常需要为用户提供多个推荐,因此我们为用户推荐ranking list y 中的 top-kitem1km

  2. 在本文中,我们提出了一种改进的 neural encoder-decoder 架构来解决 session-based 推荐问题,该架构被称作 Neural Attentive Recommendation Machine: NARMNARM 的基本思想是:构建当前 sessionhidden representation,然后基于该 representation 生成预测。如下图所示:

    • 编码器将输入的点击序列 x=[x1,x2,,xt] 转换为一组带注意力 αt 的、高维的 hidden representation h=[h1,h2,,ht] ,其中 αt 表示在时刻 t 各点击 item 的注意力信号。

      αt 的作用是确定在时刻 t 应该强调或忽略 hidden representation 的哪一部分。应该注意的是,αt 可以随时间固定,也可以在预测过程中动态变化。在动态的 setting 中,αt 可以是 hidden representationinput item embedding 的函数。我们在模型中采用动态的setting

    • 然后这组高维的 hidden representation 被馈入 session feature generator 从而构建当前 session 在时刻 trepresentation,记做 ct

    • 时刻 tsession representation ct 被馈入解码器。具体而言,ct 由矩阵 U 进行变换,经过激活函数(如 softmax 激活函数)之后生成 ranking list y=[y1,y2,,ym]

    我们工作的基本思想是:学习一个同时考虑用户在当前 session 中的序列行为和主要意图的推荐模型。接下来:

    • 我们首先描述 NARM 中的全局编码器,它用于建模用户的序列行为。
    • 然后我们介绍了局部编码器,它用于捕获用户在当前session 中的主要意图。
    • 最后我们展示了 NARM,它结合了全局编码器和局部编码器,并使用 bilinear matching scheme 来计算每个候选 item 的推荐分。

  3. 全局编码器Global Encoder:在全局编码器中,输入是整个先前previous的点击,输出是用户在当前session 中的序列行为的 feature。输入和输出都是高维的 representation 向量。

    下图 (a) 展示了 NARM 中全局编码器的示意图。我们使用 GRU 单元的 RNN 而不是标准的 RNN,因为《Session-based recommendations with recurrent neural networks》 证明了 GRU 单元在 session-based 推荐任务中可以胜过 LSTM 单元。GRU 的公式为:

    ht=(1zt)ht1+zth^tzt=σ(Wzxt+Uzht1)h^t=tanh[Wxt+U(rtht1)]rt=σ(Wrxt+Urht1)

    其中:

    • xtxtone-hot 向量作为 inputht 为时刻 thidden stateh^t 为时刻 t 候选的 hidden state
    • zt 为更新门 update gatert 为复位门 reset gate 为逐元素乘法。
    • Wz,Uz,W,U,Wr,Ur 为待学习的参数矩阵。

    作为一个简单的 session feature generator,我们使用 final hidden state ht 作为用户序列行为的 representation

    ctg=ht

    然而,这种全局编码器存在缺陷,例如,对整个序列行为的向量化的 summarization 通常很难捕获到当前用户的更精确的意图。

    简单地讲,序列行为中存在噪音,而 RNN 架构无法自动化地屏蔽噪音。

  4. 局部编码器Local Encoder:局部编码器的架构类似于全局编码器,如下图 (b) 所示。在局部编码器中,我们也采用 GRU 单元的 RNN。为了捕获用户在当前 session 的主要意图,我们引入了一个 item-level 注意力机制,它允许解码器动态选择和线性组合输入序列的不同部分:

    ctl=j=1tαt,jhj

    其中加权因子 αt=(αt,1,,αt,t) 决定了在时刻 t 进行预测时应该强调或忽略输入序列的哪一部分 。而 αt 又是 hidden state 的函数:

    αt,j=q(ht,hj)

    注意,在时刻 t 预测 t+1 时刻(而不是 t 时刻)的next click

    基本上,加权因子 αt,j 对时刻 jinput 和时刻 tinput 之间的 alignment 进行建模,因此可以将其视为特定的 matching model 。在局部编码器中,函数 q() 具体地计算 final hidden state ht 与之前的 hidden state hj 之间的相似度:

    q(ht,hj)=vσ(A1ht+A2hj)

    其中:σ() 为一个激活函数(如 sigmoid 激活函数),待学习的参数矩阵 A1A2 分别将 hthj 投影到共同的潜在空间中,待学习的参数向量 vattention 向量。

    这种局部编码器能够自适应地关注更重要的 item 从而捕获用户在当前 session 中主要意图。

  5. NARM 模型:对于 session-based 推荐任务,全局编码器 summarize 了整个序列行为,而局部编码器自适应地选择当前 session 中的重要 item 来捕获用户的主要意图。我们推测,在当前session 中,序列行为 representation htg 可以为捕获用户的主要意图提供有用的信息。因此,我们使用序列行为representation htgprevious hidden state hjl 来计算每个被点击 item 的注意力权重。然后在每个时刻,将序列行为的 feature 和用户意图 feature 拼接起来作为 extended representation

    如下图所示,我们可以看到 summarization htg 被融合到 ct 中,从而为 NARM 提供序列行为 represetnation。需要注意的是:NARM 中的 session feature generator 在全局编码器和局部编码器中调用不同的编码机制。具体而言:全局编码器的 final hidden state htg 所起的作用与局部编码器的 final hidden state htl 不同,前者负责对整个序列行为进行编码,后者用于计算与 previous hidden state 的注意力权重。

    通过这种混合编码方案,用户在当前session 中的序列行为和主要意图都可以建模为一个统一的 representation ct ,它是 ctgctl 的拼接:

    ct=[ctgctl]=[htgj=1tαt,jhtl]

    其中 || 表示向量拼接。

    注意,这里注意力权重 αt,j=q(htg,hjl),使用的是全局编码器的 final hidden state htg,而不是局部编码器的 final hidden state htl 。为什么这么做?论文没有讲原因。

    下图给出 NARM 中采用的解码机制的示意图。通常,标准的 RNN 使用全连接层进行解码,但是使用全连接层意味着该层待学习的参数个数是 dH×m ,其中 dHsession represention ct的维度,m 为预测的候选 item 的数量。因此我们必须预留很大的空间来存储这些参数。尽管有一些方法可以减少参数,例如 hierarchical softmax layer、随机负采样 negative sampling,但是它们并不是我们模型的最佳选择。

    我们提出一种替代的 bi-linear 解码方案,它不仅减少了参数的数量,而且提高了 NARM 的性能。具体而言,我们使用一个 bi-linear 相似度函数来计算当前 sessionrepresentation 和每个候选 itemembedding 的相似度得分 Si

    Si=embiBct

    其中:BRdI×dH 为一个参数矩阵,dIitem embedding 的 维度,embi 为第 iitemembedding

    然后将每个 item 的相似度得分输入到一个 softmax layer,从而获得该 item 接下来会出现的概率。通过使用这种 bi-linear decoder,我们将参数数量从 dH×m 降低到 dI×dH ,其中 dI 通常远小于 m 。此外,实验结果表明,使用这种 bi-linear decoder 可以提高 NARM 的性能。

    该方法在训练时仍然需要计算 softmax,因此计算复杂度并未降低。但是,该方法降低了参数规模,并且在推断时只需要根据 Bct 来检索最近邻的 item 即可。

  6. 为了学习模型的参数,我们没有使用 《Session-based recommendations with recurrent neural networks》 中提出的训练过程,其中模型以 session-parallelsequence-to-sequence 的方式进行训练。相反,为了适应局部编码器中的注意力机制,NARM 分别处理每个序列 [x1,x2,,xt] 。我们的模型采用交叉熵损失,并使用标准的 mini-batch 随机梯度下降进行训练:

    L(p,q)=i=1mpilog(qi)

    其中:q=[q1,,qm] 是预测的概率分布,p=[p1,,pm] 是真实的分布。

    最后,我们采用固定数量的时间步的 Back-Propagation Through Time: BPTT 方法来训练 NARM

  7. 未来工作:

    • 考虑 item 的属性,如价格、类目。
    • 考虑nearest neighbor session,以及考虑不同 neighbor session 的重要性。
    • 用注意力机制探索当前 session 中,不同属性的重要性。

6.2 实验

  1. 数据集:

    • YOOCHOOSE 数据集:RecSys Challenge 2015 发布的公开数据集,它包含电商网站上的 click-stream 。过滤掉长度为 1session、出现频次低于 5 次的 item 之后,数据集剩下 7981580session37483item
    • DIGINETICA 数据集:来自 CIKM Cup 2016 。我们仅使用发布的交易数据,过滤掉长度为 1session、出现频次低于 5 次的 item 之后,数据集剩下 204771session43097item

    我们首先对两个数据集进行了一些预处理:

    • 对于 YOOCHOOSE 数据集,我们使用下一天的 session 进行测试,并从测试集中过滤掉未出现在训练集中的 clicked item
    • 对于 DIGINETICA 数据集,我们使用下一周的 session 进行测试,并从测试集中过滤掉未出现在训练集中的 clicked item

    由于我们没有以 session-parallel 的方式训练 NARM,所以序列拆分预处理是必要的。在YOOCHOOSEDIGINETICA 这两个数据集上,对于输入session [x1,x2,,xn],我们生成了序列和相应的 label {([x1],x2),([x1,x2],x3),,([x1,x2,,xn1],xn)}用于训练。

    如果以 session-parallel 方式训练,那么就不需要拆分预处理。

    考虑到以下原因:

    • YOOCHOOSE 相当大。
    • 《Improved recurrent neural networks for sessionbased recommendations》 验证了推荐模型需要考虑随时间变化的用户行为。
    • 《Improved recurrent neural networks for sessionbased recommendations》 的实验结果表明,对整个数据集进行训练产生的结果相比对数据集的近期部分进行训练产生的结果稍差。

    因此,我们按时间对 YOOCHOOSE 的训练序列进行了排序,并报告了我们的模型在最近 1/641/4 部分的训练序列上的效果。注意,测试集中的一些 item 不会出现在训练集中,因为我们仅在近期的部分数据上训练了模型。三个数据集(即 YOOCHOOSE 1/64YOOCHOOSE 1/4DIGINETICA)的统计数据如下表所示。

  2. baseline 方法:我们对比了五种传统方法(POP, S-POP, Item-KNN, BPR-MF, FPMC)以及两种 RNN-based 模型(GRU-Rec, Improved GRU-Rec)。

    • POP:流行度的 predictor,它总是推荐训练集中的流行 item 。尽管简单,但是它通常是某些领域的强大 baseline

    • S-POP:推荐当前session 中最流行的 item(而不是全局最流行的 item )。该 baseline 在具有高重复度的领域中很强。

    • Item-KNN:基于 item 相似性来推荐和当前 item 最相似的 item 。相似度定义为

      sim(i,j)=(i,j)i×j

      此外,我们还使用正则化从而避免冷门 item 的偶然发生导致的高度相似性。

      baseline 是实际系统中最常见的 item-to-item 解决方案之一。尽管简单,它通常也是一个强大的 baseline

    • BPR-MF:它通过 SGD 优化 pair-wise ranking 目标函数,是最常用的矩阵分解方法之一。矩阵分解无法直接应用于 session-based 推荐,因为新session没有预先计算的特征向量。然而,我们可以通过使用session中出现的 item 的特征向量的均值作为 user 特征向量来克服这个问题。换句话讲,我们对 next item 的特征向量与迄今为止sessionitem 特征向量的相似性进行平均。

    • FPMC:它是 next-basket recommendationstate-of-the-art 的混合模型。为了使其适用于 session-based 推荐,我们在计算推荐分时不考虑 user latent representation

    • GRU-Rec《Session-based recommendations with recurrent neural networks》 提出的模型,它利用 session-parallelmini-batch 训练过程,并且还采用 ranking-based 损失函数来学习模型。

    • Improved GRU-Rec《Improved recurrent neural networks for sessionbased recommendations》 提出的模型,它采用两种技术(包括数据增强、以及一种考虑输入数据分布变化的方法)来提高 GRU-Rec 的性能。

  3. 评估指标:

    • Recall@20:目标 item 位于推荐列表(top 20 推荐的 item)的数量占所有目标 item 数量的比例。Recall@N 不考虑 item 的实际排名(只需要目标 item 位于 top N 推荐分的推荐列表中),并且通常与点击率 CTR 等其它指标有很好的相关性。
    • MRR@20Mean Reciprocal Rank: MRR 是目标 item 排名倒数reciprocal rank 的均值,如果排名大于 20 则倒数排名为零。MRR 会考虑目标 item 的排名,这在需要考虑推荐顺序的场景很有用。
  4. 实验配置:

    • NARMitem embedding50 维,使用 Adam 优化器,初始学习率为 0.001mini-batchbatch size = 512

    • NARM 使用两个 dropout layer

      • 第一个 dropout layer 位于 item embedding layerGRU layer 之间,dropout rate = 25%
      • 第二个 dropout layer 位于 GRU layerbi-linear similarity layer 之间,dropout rate = 50%
    • NARM 使用 time step 截断为 19BPTT,训练 epoch30,训练集的 10% 数据作为验证集。

    • NARM 使用单层 GRUGRU 隐层维度为 100

    • 模型是在 GeForce GTX TitanX GPU 上的 Theano 中定义和训练的。

  5. 不同解码器的比较:我们在 NARM 上比较了全连接解码器和 bi-linear 解码器,如下表所示。这里我们仅给出隐层维度为 100 的结果,因为其它维度的结论相同。结论:

    • Recall@20 指标上,使用bi-linear 解码器的性能有所提高,三个数据集的提升分别约为 0.65%, 0.24%, 4.74%(绝对值) 。
    • MRR@20 指标上,bi-linear 解码器在 YOOCHOOSE 1/64YOOCHOOSE 1/4 数据集上稍差,但是在 DIGINETICA 数据集上仍然显著优于全连接解码器。

    对于 session-based 推荐任务,由于我们的 setting 是一次性推荐 top 20item,因此我们认为 recall 指标要比 MRR 指标更重要。在接下来的实验中,NARM 采用 bi-linear 解码器。

  6. baseline 的比较:所有方法的结果如下表所示。NARMbest baseline (即 Improved GRU-Rec)之间的更具体的比较如下图所示。结论:

    • 对于 YOOCHOOSE 1/4 数据集,由于我们使用 session 中出现的 item factor 的均值来代替 user factor,因此 BPR-MF 不起作用。此外,由于我们在 FPMC 中将每个 session 视为一个用户,因此我们没有足够的内存来初始化它。这些问题表明传统的 user-based 方法不再适用于 session-based 推荐。

    • 总体而言,三种 RNN-based 方法始终优于传统的 baseline,这表明 RNN-based 模型擅长处理 session 中的序列信息。

    • 通过同时考虑用户的序列行为和主要意图,NARM 在三个数据集上的 Recall@20 指标上优于所有 baseline,并且在 MRR@20 指标上可以优于大多数 baseline

      DIGINETICA 数据集为例,与 best baseline(即 Improved GRU-Rec) 相比,NARMRecall@20MRR@20 指标上的相对提升分别约为 7.98%9.70%

    • 可以看到,NARMbest baseline 相比,YOOCHOOSE 1/64YOOCHOOSE 1/4 数据集上的 Recall@20 指标提升不如 DIGINETICA 数据集的显著。此外,YOOCHOOSE 1/64YOOCHOOSE 1/4 数据集上这两个方法的 MRR@20 指标非常接近。

      我们认为其中一个重要原因是:我们将 YOOCHOOSE 数据集拆分为 1/641/4 时,为了与 Improved GRU-Rec 中的一致,我们没有从测试集中过滤掉不在新训练集(即,拆分后的训练集)中的 clicked item (因为这些 clicked item 可能位于未拆分的训练集中)。相比之下,在 DIGINETICA 数据集中,我们从测试集中过滤掉了这些不在训练集中的 clicked item ,因此 NARMRecall@20MRR@20 指标上都显著优于 baseline

  7. 使用不同特征的影响:我们考察仅使用序列行为特征的 NARMNARMglobal)、仅使用用户意图特征的 NARMNARMlocal)、以及同时使用这两种特征的 NARMNARMhybrid) ,结果如下表所示。结论:

    • NARMglobalNARMlocal 仅使用单一特征,在三个数据集上均表现不佳。此外,它们在两个指标上的表现非常接近。这表明,仅考虑当前 session 的序列行为、或用户意图,可能无法学到好的推荐模型。
    • NARMhybrid 在三个数据集的不同隐层维度上的不同指标下均优于 NARMglobalNARMlocal 。这表明,在 session-based 推荐中同时考虑当前用户的序列行为和主要意图的优势。

    NARMglobalGRU-Rec 主要区别在于前者使用双线性解码器,以及前者采用交叉熵损失而后者采用 pairwise ranking loss,因此其效果应该和 GRU-Rec 相差无几。但是结果发现 NARMglobal 的效果要比 GRU-Rec 高很多。论文并未解释其原因。

  8. 不同 session 长度的影响:NARM 模型基于这样的假设:当用户在线浏览时,用户的点击行为频繁地围绕用户在当前 session 中的主要意图。然而,当用户仅仅是点击少数几个 item 时,我们很难捕获到用户的主要意图。因此,我们的 NARM 模型应该只是擅长对长的 session 进行建模。

    为了验证这一点,我们在 DIGINETICA 数据集上对不同长度的测试 session 进行了比较,结果如下表所示。结论:

    • NARM 通常在 session 长度为 4 ~ 17 之间时表现更好。这表明 NARM 在长的session 中确实更准确地捕获了用户的主要意图。
    • session 过长时,NARM 的性能提升有所下降。我们认为原因是,当 session 过长时用户很可能漫无目的地点击某些 item,导致 NARM 中的局部编码器无法捕获用户在当前 session 中的主要意图。

  9. 可视化注意力权重:为了直观地说明注意力机制的作用,我们在下图中展示了一个例子。session 实例是从 DIGINETICA 数据集中随机选择的。颜色的深浅对应于 αt,j=q(ht,hj)中给出的 item 的重要性大小。结论:

    • 总体而言,很明显并不是所有的 item 都与 next click 相关,而且当前 session 中几乎所有的重要 item 都是连续的。这意味着用户在 session 中的意图确实是局部性的,这也是 NARM 能够优于常规RNN-based 模型的原因之一。
    • 最重要的 item 通常在 session 结束附近的位置。这符合人们的浏览行为:用户很可能会点击该用户刚刚点击item 相关的其它 item 。回想一下,常规 RNN-based 模型能够对这一事实进行建模,因此它们可以在 session-based 推荐中取得相当好的性能。
    • 在某些情况下,最重要的 item 出现在 session 的开始或中间(例如在 session 7974session 4260)。在这种情况下,我们相信 NARM 可以比常规 RNN-based 模型表现更好,因为注意力机制可以学到去更多地关注于更重要的 item,而不管这个 item 位于 session 中的什么位置。

七、HRNN[2017]

  1. session 是在给定时间范围 time frame内发生的一组交互。同一个用户的不同 session 可以发生在同一天,也可以发生在数天内、数周内、甚至数月内。一个 session 通常有一个目的goal,例如找到一家好餐馆、或者听到某种风格的音乐。

    在这些领域提供推荐带来了独有的挑战 unique challenge,直到最近,这些挑战主要通过在最近一次交互、或者最近一个 session 上应用传统的推荐算法来解决。在 session-based 推荐中,仅基于当前的user session来提供推荐,因为假定用户是匿名的。但是在许多此类系统中,用户可能已经登录、或者存在某种形式的user id(如 cookie)。在这些情况下,可以合理地假设:同一个用户的历史 session 行为可能会为 next session 中的推荐提供有价值的信息。

    session-based 算法中,结合历史的user session信息的一种简单方法是:简单地拼接历史的user session和当前的user session。虽然这似乎是一种合理的方法,但论文 《Personalizing Session-based Recommendations with Hierarchical Recurrent Neural Networks》将在实验部分看到这不会产生最佳效果。

    在论文《Personalizing Session-based Recommendations with Hierarchical Recurrent Neural Networks》中,作者描述了一种基于 RNN 的新算法,该算法可以同时处理如下两种 case

    • session-aware 推荐:当存在 user id 时,将信息从前一个user session传播到下一个user session 从而提高推荐准确率。
    • session-based 推荐:当没有历史的user session时(例如没有 user id)。

    该算法基于 Hierarchical RNN ,其中当一个 user session 结束时, lower-level RNNhidden state 作为输入而传递给 higher-level RNN。而这个 higher-level RNN 旨在为用户下一个 user sessionlower-level RNNhidden state 提供良好初始化。

    论文在来自行业内的两个数据集上评估了 Hierarchical RNN,结果表明论文的方法优于普通的 session-based RNN、以及 item-based 协同过滤。

  2. 相关工作:

    • session-based 推荐:当没有用户画像时(因此也没有 user id,从而无法获取该用户的所有历史行为),那么经典的 CF 方法(如矩阵分解)在 session-based setting 中失效。这个问题的一个自然解决方案是 item-to-item 推荐方法。在这个 setting 中,从可用的 session 数据中预先计算出一个 item-to-item 相似度矩阵,并且在 session 中经常一起被点击的 item 被认为是相似的。然后使用这些相似性来执行推荐。这种方法虽然简单,但是已被证明是有效的,并且被广泛采用。但是,这些方法仅考虑用户的最近一次点击,而忽略了用户之前的点击信息。

    • 递归神经网络模型:RNN 是处理序列数据的首选深度模型。LSTM 网络已被证明是工作良好的 RNN 模型,其略微简化的版本是 GRU。我们在这项工作中使用 GRU

      • 《Session-based recommendations with recurrent neural networks》 中,RNN 被首次用于对 session 数据进行建模。RNNsessionitem IDone-hot representation 上使用 ranking loss 进行训练。然后,RNN 用于在新的 session 中每次点击之后提供推荐。该方法仅关注当前 session ,而我们的目标不仅考虑当前 session 也考虑跨 session 的用户行为建模。
      • 《Parallel recurrent neural network architectures for feature-rich session-based recommendations》 中,RNN 还被用于联合建模 item 的内容以及点击序列。通过包含诸如缩略图或文本描述等 item 特征,该论文提出的所谓的 parallel- NN 提供了优于普通 RNN 的推荐质量。
      • 《Improved recurrent neural networks for session-based recommendations》 中,作者提出了数据增强技术来提高 session-based 推荐的 RNN 性能。因为单个 session 被分为几个 sub-session 进行训练,因此该方法具有增加训练时间的副作用。
      • RNN 也被用于标准的 user-item 协同过滤 setting,其目的是对 user factoritem factor 的演变进行建模。结果虽然不那么突出,该方法几乎没有优于标准的矩阵分解方法。
      • 《A hierarchical recurrent encoder-decoder for generative context-aware query suggestion》 中,Hierarchical Recurrent Neural Networkseq-to-seq 模型被用于生成上下文感知的 query suggestion

7.1 模型

7.1.1 Session-based RNN

  1. 我们的模型基于 《Session-based recommendations with recurrent neural networks》 中提出的session-based RNN 模型,其中 RNN 基于单层 GRU layer 来建模用户在 session 内的交互。RNNsession 中的当前 item ID 作为输入,并为每个 item 输出一个得分表示成为sessionnext item 的可能性。

    形式上,对于第 msession Sm={im,1,,im,Nm}Nm 为第 msessionitem 数量,im,t 为第 msession 中的第 titemRNN 将计算如下所示的 session-level representation

    sm,t=GRUses(im,t,sm,t1),t=1,,Nm1

    其中: GRUsessession-level GRUsm,tGRUstep thidden state 并且 sm,0=0null vector),im,tstep t item ID im,tone-hot 向量。

    RNN 的输出是 item 集合中每个 item 的得分 r^m,tR|I| ,指示每个 item 成为 sessionnext item (即第 t+1 个交互)的可能性,其中 I 为全体 item 集合。

    r^m,t=g(sm,t),t=1,2,,Nm1

    其中 g() 为一个非线性函数(如 softmaxtanh),具体取决于损失函数。

    在训练期间,将得分 r^m,tnext item ID im,t+1 (简写为 i)的 onehot 向量进行比较来计算损失函数。网络可以使用多种 ranking loss function 进行训练,如交叉熵、BPRTOP1 。在这项工作中,TOP1损失总是优于其它 ranking loss,因此我们在本文的剩余部分仅考虑该损失函数。TOP1 损失是 relevant item (即 next item )的相对排名的正则化近似。relevant item 的相对排名定义为:

    1NSj=1NSI(r^j>r^i)

    其中:

    • r^irelevant item 的得分。
    • r^j 为随机采样的 irrelevant item 的得分,NS 为随机采样的数量。
    • I() 为示性函数并且以 sigmoid 来近似。

    为了迫使negative item (即 irrelevant item)的分数趋于零,在损失函数中添加了一个正则化项。最终的损失函数为:

    L=1NSj=1NSσ(r^jr^i)+σ(r^j2)
  2. RNN 通过 session-parallelmini-batch 来进行有效地训练。在每个训练 stepGRUses 的输入是一个 batchcurrent item ID of sessions (以 one-hot 向量来表示)。session-parallel 机制在 mini-batch 中保留指向每个 session 的当前 item 的指针,并会在 session 结束时重置 RNNhidden state

    为了进一步降低计算复杂度,损失函数是在 current item ID 和负采样的 item ID 上计算而来。具体而言,在计算损失函数时,将每个 sessioncurrent item ID 作为postive item 、将 mini-batch 中其它 session 的所有 item ID 作为negative item 。这使得无需执行显式的negative item 采样,并执行了基于流行度popularity-based 的采样。然而,由于 user id 在纯的 session-based 场景中是未知的,因此negative item 很有可能被同一个用户在其它 session 中交互的postive item 所“污染”。

    这种方式称作 in-batch 负采样。另外,既可以将其它 sessioncurrent item ID 作为negative item (实现更简单),也可以将其它 session 的所有 item ID 作为negative item (效果更好)。

7.1.2 个性化的 Session-based Hierarchical RNN

  1. 我们的 HRNN 模型在 RNN 之上通过以下方式构建:

    • 添加一个额外的 GRU layer 来建模跨 user session 的信息。
    • 使用强大的 user-parallel mini-batch 机制进行高效地训练。
  2. 架构:除了 session-level GRU 之外,我们的 HRNN 模型还添加了一个 user-level GRUGRUusr )来建模跨 session 的用户活动。下图展示了 HRNN 的结构示意图。

    • 在每个 time step ,由 GRUses 生成推荐,就像在 RNN 中的一样。
    • 但是,当 session 结束时,user-level representation 通过 GRUusr被更新。
    • 当一个新的 session 开始时, GRUusrhidden state (即 user-level representation)用于初始化 GRUses ,并且也可以传播到 GRUses 的输入。

    形式上,对于每个用户 u 及其 session 集合 Cu={S1u,,SMuu}user-level GRUsession-level representation s1u,,sMuu 作为输入来更新 user-level representation cmu。其中: Mu 为用户 usession 数量,sm=sm,Nm1uuser session SmuGRUseslast hidden state

    接下来为了便于表述,我们移除了 user 上标 uuser-level representation cm 的更新为:

    cm=GRUusr(sm,cm1),m=1,,Mu

    其中 c0=0null vector)。

    session-level GRUlast hidden state 作为user-level GRU 的输入。通过这种方式,user-level GRU 可以跨 session 跟踪用户的演变,从而无缝地建模动态的用户兴趣。注意,user-level representation 在整个 session 期间保持固定,并且仅在 session 结束时更新。

    然后使用 user-level rerepsentation 来初始化 session-level GRUhidden state 。给定 cm,接下来的 sessionsession-level GRU 的初始 hidden state sm+1,0 设置为:

    sm+1,0=tanh(Winitcm+binit)

    其中: Winitinitialization 权重矩阵,binitinitialization 偏置向量。通过这种方式,用户在先前 session 中表达的偏好相关的信息在 session-level 被传递。session-level representation 更新为:

    sm+1,t=GRUses(im+1,t,sm+1,t1[,cm]),t=1,,Nm+11

    其中方括号表示 cm 可以选择性地传播到 session-level GRU 的输入。

    如果仅仅是为了跨 session 来传递用户的偏好,那么可以简单地将上一个 sessionlast hidden state 传递给下一个 session。那么 user-level GRU 的价值在哪里?论文的解释是:user-level GRU 建模了 user-session 如何随着时间的演变,即 “计算并演变了用户画像” 。

    此外论文还在实验部分评估了这种做法的效果(即 RNN Concat 这个 baseline),实验发现 RNN ConcatHRNN 在小型数据集上的效果相差无几,但是在大型数据集上 HRNN 效果显著优于 RNN Concat 。所以 HRNN 需要更大规模的数据才能体现其优势,因为 HRNN 的模型容量更大。

  3. 模型使用反向传播进行端到端训练。

    • 如果 user-level rerepsentation cm 仅作为 GRUses 的初始化,则 GRUusr 的权重仅在 session 之间更新,即 session 结束时以及接下来的 session 开始时。
    • 如果 user-level rerepsentation cm 既作为 GRUses 的初始化、又作为 GRUses 的输入,则即使 cm 保持固定(即,在 session 内保持不变), GRUusr 的权重也会在 session 内更新。
    • 我们也尝试将 user-level representation 传播到 final prediction layer,即 r^m,t=g(sm,t,cm) ,但我们总是发现相对于简单的 RNN 而言,新模型的性能严重下降。因此,我们在本次讨论中放弃了这种 setting

    注意,GRUusr 不仅将前一个 user sessionhidden state 传递给下一个 user session,而且还学习(在训练期间) user session 如何随时间的演变。我们将在实验部分看到,这对于提高性能至关重要。实际上,GRUusr 计算并演变了用户画像(用户画像基于之前的 user session),因此实际上个性化了 GRUses 。在原始 RNN 中,具有相同点击 item 序列的 user session,模型将为这些用户提供相同的推荐。在 HRNN 中,情况不再如此,推荐结果也会受到用户历史 session 的影响。

    总之,我们考虑了以下两种不同的 HRNN setting,具体取决于公式 sm+1,t 中是否考虑了 user representation cm

    • HRNN Init:其中 cm 仅用于初始化 next sessionrepresentation

    • HRNN All:其中 cm 既用于初始化 next sessionrepresentation ,也用作 next session 的输入。

      HRNN All 相比于HRNN Init的模型复杂度稍高。

    正如我们将在实验部分看到的,根据推荐场景,这两种setting 可能会导致截然不同的结果。

  4. 学习:为了提高训练效率,我们调整了《Parallel recurrent neural network architectures for feature-rich session-based recommendations》 中描述的 session-parallel mini-batch 机制,从而考虑训练期间的 user id,如下图所示。

    我们首先根据用户对 session 进行分组,然后按照时间戳对每个分组内的 session 事件进行排序。然后我们对用户进行随机排序。在第一次迭代中,前面 B 个用户的第一个 session 的第一个 item 构成了 HRNN 的输入,对应 session 的第二个 item 构成了 HRNN 的输出。然后我们将 HRNN 的输出作为下一次迭代的输入,依此类推。

    mini-batch 中的 session 结束时,更新 GRUusrhidden state 、并为下一个 session 来初始化 GRUseshidden state。当一个用户被完全处理之后,GRUusrGRUseshidden state 都被重置, mini-batch 中下一个用户将被放到这个被处理完的用户的位置进行处理。

    使用 user-parallel mini-batch,我们可以有效地训练 HRNN 从而满足不同 session 数量、以及 session 内不同长度的用户。

    此外,这种机制允许以独立于用户的方式对负样本进行采样,从而减少负样本被实际正样本“污染” 的机会。采样过程仍然是基于流行度popularity 的,因为一个 item 出现在 mini-batch 中的可能性与其流行度成正比。众所周知,这两个特点都有利于基于隐式用户反馈的 pairwise learning

    因为负样本是从其它用户那里采样到的,因此可以减少污染机会。

  5. 未来工作:

    • 使用注意力模型、item 特征、用户特征,从而进一步改善 user representation 并进一步提升 session-based 推荐方法。
    • 在其它领域研究 session-based 个性化模型,例如音乐推荐领域、电商领域、在线广告领域。

7.2 实验

  1. 数据集:

    • XING 数据集:XING Recsys Challenge 2016 数据集,包含 80 天内 77 万用户的job posting 交互信息。用户交互带有时间戳和交互类型(点击、添加书签、回复、删除)。
    • VIDEO 数据集:来自类似于 Youtube 的视频点播网站的专属数据集,包含 13k 用户在 2 个月内观看的视频。观看时长小于指定阈值的事件被丢弃。

    我们使用 30 分钟空闲阈值来手动地将交互数据拆分为 session 。对于 XING 数据集,我们丢弃了 “删除” 类型的交互。我们还丢弃了 session 中相同类型的重复交互从而减少噪音(例如在 session 中重复点击同一个 job posting )。

    然后我们对两个数据集进行如下预处理:

    • 我们删除了 XING 数据集中出现频次低于 20item,删除了 VIDEO 数据集中出现频次低于 10item,因为低频 item 不是建模的最佳选择。
    • 我们删除了交互次数少于 3 次的 session 从而过滤太短且信息量不足的 session
    • 我们删除了 session 总数低于 5 个的用户,从而使得用户具有足够多的 cross-session 信息,以便对用户进行正确的建模。

    我们使用每个用户的最后一个 session 构建测试集,剩余的 session 构成训练集。我们还过滤了测试集中不属于训练集的 item。这种划分允许针对具有不同历史session 数量的用户进行评估,从而衡量模型对不同活跃程度的用户的推荐质量。我们使用相同的程序进一步划分验证集从而调优算法的超参数。

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

  2. baseline 方法:

    • Personal Pop: PPOP:推荐用户交互次数最多(而不是全局交互次数最多的 item )。

    • Item-KNN:根据 sessionitem 的共现来计算 item-to-item 的余弦相似度。

    • RNN:采用《Session-based recommendations with recurrent neural networks》 中提出的模型,该模型使用 TOP1 损失函数以及 session-parallel mini-batch (来自同一个用户的 session 彼此独立地馈入 RNN)。

    • RNN Concat:与 RNN 相同,但是来自同一个用户的所有 session 被拼接为单个 session

      这相当于 GRUusr 退化为一个恒等映射。

  3. 配置:

    • 我们使用 AdaGrad 来优化 TOP1 损失函数的神经网络模型,训练 10epoch。在所有模型中,增加 epoch 数量并未显著改善损失。

    • 我们对 RNNHRNNhidden state 使用了 dropout 正则化。我们还将 dropout 应用于 HRNNGRUses 初始化 sm+1,0

    • 我们在 hierarchy 的两个 level 中都采用了单层 GRU ,因为使用多层 GRU layer 并没有提高性能。

    • 为了评估网络容量如何影响推荐质量,我们考虑了每个 GRU layer 具有 100 个隐单元的小型网络、以及具有 500 个隐单元的大型网络。

    • 我们使用随机搜索random search 在验证集上调优了每个模型(包括 baseline 模型)的超参数。为了帮助我们实验的可复现性,我们在下表中报告了我们在 XING 数据集上的、在实验中使用的超参数。HRNN 中的 user-level GRUsession-level GRU、以及初始化都使用了 dropout,因此下表中给出的dropout 概率按照这个顺序提供。对于所有的数据集,Item-KMM 的最佳邻域大小都是 300

    • 神经网络模型在 12GB GPU 内存的 Nvidia K80 GPU 上进行训练。训练时间从 XING 上的小型 RNN 模型的 5 分钟,到 VIDEO 上的大型 HRNN All30 分钟不等。所有实验的评估时间不超过 2 分钟。

      我们要强调的是,RNNHRNN 之间的训练时间没有显著差异,其中 HRNN All 是计算成本最高的模型,因为其架构的复杂性更高。

  4. 评估方式:我们评估序列的 next-item prediction task,即给定 user session 的事件,我们评估算法预测后续事件的效果。所有 RNN-based 模型都一个接一个地在 session 中输入事件,我们检查 next item 的预测排名。

    此外,HRNN 模型和 RNN Concat 使用测试 session 之前的所有历史session ,这会降低评估速度,但是有必要在评估开始之前正确地设置个性化模型的 internal representation(如 HRNNuser-level representation )。

    注意,评估指标仍然仅针对测试集中的事件进行计算,因此评估仍然是公平的。此外,我们在每个测试 session 中丢弃了由 RNN Concat baseline 计算的第一个预测,因为它是唯一的、能够推荐 user session 中首个事件的方法。

    其它方法都只能最早预测 user session 中第二个事件。

    由于推荐系统一次只能推荐几个 item,因此 relevant item 应该在推荐列表中排名靠前。因此我们选择 Recall@5Precision@5Mean Reciprocal Rank (MRR@5) 等指标来评估推荐质量。

    • Recall@5:相当于命中率指标,它衡量所有测试 case 中, relevant itemtop-5case 的占比。对于推荐顺序无关紧要的场景,这是一个良好的指标,并且该指标与 CTR 等重要 KPI 密切相关。
    • Precision@5:衡量所有推荐列表的 top-5 位置中正确推荐的比例。
    • MRR@5relevant item 的排名的倒数 reciprocal rank ,如果排名大于 5 则排名的倒数被手动置为零。MRR 会考虑 item 的排名,这在推荐顺序要紧的情况下很重要。
  5. 实验结果:下表给出了 XINGVIDEO 数据集的结果。我们使用不同的随机数种子对每个神经网络模型进行了 10 次训练,并报告了平均结果。我们使用 Wilcoxon signed-rank test 来评估 HRNN 模型与 baseline 方法之间差异的显著性。

    XING 数据集的结果:

    • 简单的 PPOP baseline 就是一种非常有竞争力的方法,能够大大超越更复杂的 Item-KNN baseline 。正如前人工作对数据集的研究已经表明,用户在 sessoin 内和跨 session 之间的活动具有高度的重复性。这使得在这种情况下生成 non-trivial 的个性化推荐非常具有挑战性。

    • session-based RNN 较差的性能进一步突出了这一点,无论网络容量如何,它总是比 PPOP 差得多。

    • 尽管如此,session-based 个性化推荐可以克服其局限性,并在小型网络和大型网络的 RecallPrecision 指标上实现卓越的性能。HRNNRecallPrecision 指标上显著优于 RNN Concat,并且在大型网络上提供显著更好的 MRR

      此外,HRNNRecallPrecision 指标上显著优于强大的 PPOP baseline 大约 11%,同时获得了可比的 MRR

    • 两个 HRNN 变体之间并没有显著的差异,除了在 MRR 指标上 HRNN AllHRNN Init 略有优势。RecallPrecision 指标上的差异并没有统计显著性。

      RNN ConcatHRNN All, HRNN Init 相差无几,但是在文章末尾的大型数据集上,HRNN 效果要好得多。这是符合预期的,因为 HRNN 的模型复杂度更高,所以需要更大量的数据才能体现其能力。

    VIDEO 数据集的结果:该数据集上显示出与 XING 数据集截然不同的结果。

    • Item-KNN baseline 显著优于 PPOP,而 session-based RNN 可以大大优于这两个 baseline。这与过去一些工作在类似数据集上的实验结果一致。

    • RNN Concat 相比较于 session-based RNN 具有可比的 RecallPrecision 。有趣的是,RNN Concat 大型网络的 MRR 指标明显更好。这表明直接拼接 session 不会增强 RNN 推荐器的检索能力,但是会增强其正确排序 item 的能力。

    • HRNN Init 的性能显著优于所有 baseline 。换句话讲,在相同的情况下,由 HRNN 建模的更复杂的 cross-session dynamic 在整体推荐质量方面提供了显著的优势。我们将在后面研究这些结果的可能原因。

      值得注意的是,HRNN All 在这种情况下表现不佳。我们将推荐质量的严重下降归因于该 setting 中使用的 context-enforcing policy。一种可能的解释是:多媒体内容(在我们的例子中是视频)的消费是一个 session-based 场景,比 XING 中代表的求职场景强得多。用户可能会遵循通用群体趋势 general community trend 并且具有长期兴趣(该长期兴趣由 user-level GRU 来捕获)。但是,session 中的用户活动可能与该用户最近的 session 完全断开,甚至与用户的一般兴趣 general interest 无关(如,对极限运动视频有强烈兴趣的用户可能偶尔也会观看卡通电影预告片)。HRNN Initsession-level GRU 根据session 中用户兴趣的实际演变来自由地利用这些用户兴趣动态。其更大的灵活性带来了卓越的推荐质量。

      即该场景中的兴趣更多的是 session 内的,而求职场景中的兴趣更多的是跨 session 的。对于 session 内的兴趣建模,用 HRNN Init 效果更好;对于跨 session 的兴趣建模,用 HRNN All 效果更好。

  6. 用户历史长度分析:我们预计用户历史长度会对推荐质量产生影响,因此我们按照用户历史中的 session 数量对 evaluation 进行细分。为此,我们将用户历史分为两组:具有 <= 6sessionshort 用户历史、具有 > 6sessionlong 用户历史。下表中报告了这些数据集中不同分组占比的统计数据。

    由于我们的目标是衡量 HRNN 中使用的复杂的 cross-session dynamic 对于传统 RNN 的影响,因此我们将这些分析限制在大型配置中 RNN-based 推荐器上。对于每种算法,我们计算测试集中不同分组中 test session 的平均 Recall@5MRR@5 。由于 Precision@5 的分析结论与 Recall@5 相似,因此由于篇幅有限我们在此省略。为了增强实验结果的鲁棒性,我们使用不同的随机数种子运行 10 次评估,并报告每个算法的 median value (而不是均值)。

    XING 数据集的结果如下所示。可以看到:

    • 随着用户历史长度的增加,我们注意到所有方法(包括 session-based RNN)的 Recall 略微增加、MRR 略微下降。
    • 不同方法的 short 用户历史和 long 用户历史的效果之间并没有显著变化。
    • HRNN All 是性能最好的模型,与 session-based RNN 相比,其 Recall@5 提高了 12%MRR@5 提高了 14~16%
    • 根据我们之前的发现,HRNN Init 的性能与 RNN ConcatHRNN All 相当。

    VIDEO 数据集的结果如下所示。可以看到:

    • 所有方法(包括 session-based RNN )的 Recall 都随着用户历史长度的增加而提升。MRR 仅在 RNN ConcatHRNN Init 方法上随着用户历史长度的增加而提升。这凸显了需要有效的个性化策略从而在 session-level 获得卓越的推荐质量。
    • 此外,HRNN Init 相对于 session-based RNNRecall@5/MRR@5 指标上分别提升 5%/12% (short)7%/19% (long) ,这进一步凸显了我们个性化策略的推荐质量。
    • 与我们之前的发现一致,HRNN All 在这种情况下表现不佳。

    综上所述,正如预期的那样,用户历史的长度对推荐质量有很大的影响。在像 XING 这样松散的 session-bounded 领域,其中用户活动高度重复并且跨 session 的多样性较少,那么将 user representation 强制提供给 session-level 输入,将得到比 initialization-only 方法更好的性能。然而,在更强的 session-based 场景中,跨 session 的用户活动具有更高程度的变化性,并且可能很大程度上偏离了用户的历史兴趣和偏好,那么更简单有效的 HRNN Init 变体将具有更好的推荐质量。

  7. session 分析:这里我们按 session 中事件数量进行细分,从而衡量个性化在 user session 中的影响。我们仅分析长度 >= 5sessionXING 数据集中仅为 6736sessionVIDEO 数据集中仅为 8254session)。我们根据 session 中的位置(开始Beginning、中间Middle、结束End)计算每个指标的均值。开始指的是 session 的前 2 个事件,中间指的是 session 的第 3 和第 4 个事件,结束指的是 session5 个及其之后的任何事件。

    与之前的分析一样,我们关注 large 配置中 RNN-based 模型,并报告使用不同随机数种子在 10 次运行中均值的medianRecall@5MRR@5 的结果如下图所示。

    XING 数据集上:

    • 所有方法的性能随着 sessionprevious item 的数量增加而增加,这表明 session-leveluser context 被所有 RNN-based 方法所正确利用。
    • 但是,个性化的 session-based 模型和 pure session-based 模型之间存在很大差距。两个 HRNN 都具有相似的 Recall@5,并且与 RNN Concat 相当。有趣的是,HRNN AllMRR@5 相对于 RNNRNN Concat 的增益随着处理的 item 数量增加而增加,这意味着在这种情况下,随着 user session 的继续,历史用户信息变得更加有用。
    • HRNN InitMRR 一直都比 RNN Concat 更好,在 BeginingEnd 具有更高的增益。

    VIDEO 数据集上:

    • session 开始和结束之间,RecallMRR 都如预期的增加。HRNN Initsession 开始时比 RNNRNN Concat 有很大的提升。这符合直觉,即过去的用户活动也可以有效地用于更准确地预测用户在接下来 session 中的首个行为。

    • 在最初的几个事件之后,个性化的 session-based 模型相对于 pure session-based 模型的 Recall 增益在减少,而 MRR 的增益保持稳定。换句话讲,在经历一些事件之后,session-level dynamic 开始压制 longer-term user interest dynamic ,从而降低了个性化策略的有效性。

      然而,个性化仍然在整个 session 中提供了卓越的排序质量,正如 HRNN InitRNN Concat 都比 RNN 有更高的 MRR 所证明的那样。更重要的是,在 session 开始时更好的推荐,要比 session 后期更好的推荐更具有影响力,因为前者更有可能增加留住用户的机会。

    • 最后,HRNN All 总是更差的方法,这进一步巩固了 HRNN Init 变体的优越性。

  8. 大型数据集上的实验:我们在更大版本的 VIDEO 数据集(由先前的论文所使用)上验证了 HRNN。该数据集由 81 万用户在 2 个月期间对 38 万个视频的交互组成,总共包括 3300 万个事件、850 万个 session。然后我们应用了与 VIDEO 数据集相同的预处理步骤。我们将这个数据集命名为 VIDEOXXL

    由于我们的计算资源有限,因此我们只能在这个大型数据集上测试 small 网络(对于 RNNHRNN 采用 100 维的隐层)。我们使用在小型 VIDEO 数据集上学到的相同超参数运行一次所有的 RNNHRNN。虽然这不是最优的,但是这种方法在更一般的 setting 下提供了我们解决方案的初步近似。出于同样的原因,我们没有像对小型数据集所做的那样对实验结果进行详尽的分析。为了加快评估速度,我们计算了相关 item5 万个最热门 item 相比的排名,如 《Parallel recurrent neural network architectures for feature-rich session-based recommendations》 中所做的那样。

    结果在下表中所述,这证实了我们之前在小型 VIDEO 数据集上的发现:

    • RNN Concat 无效,其性能类似于 session-based RNN

    • 另一方面,HRNN 的性能优于 session-based RNN。具体而言,HRNN Init 相比 session-based RNN,其 Recall@5 高了 28%MRR@5 高了 41% 。这些结果进一步证实了本文提出的 HRNN 模型的有效性。

      在更大的数据集上,HRNN 体现了其优势。