一、Caser [2018]

《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》

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

    另一种类型的用户行为是序列模式(sequential pattern),其中 next item 或者 next action 更可能取决于用户最近互动的 item 或 action 。序列模式代表了用户的短期(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},Stu∈I , Stu 的下标 t 代表该 item 在用户行为序列 Su 中发生交互的次序 order 。注意,t 并不是代表发生交互的绝对时间戳(absolute timestamp)。

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

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

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

    • 一阶马尔科夫链使用最大似然估计(maximum likelihood estimation)来学习 item-to-item 的转移矩阵(transition matrix)。

    • Factorized personalized Markov chain: FPMC 及其变体通过将转移矩阵分解为两个潜在(latent)的、低秩(low-rank)的子矩阵来改进该方法。

    • Factorized Sequential Prediction with Item Similarity Models: Fossil 通过对先前的 item 的 latent representation 进行加权的 sum 聚合,从而将该方法推广到高阶马尔科夫链。

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

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

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

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

      p0=α1×p1+α2×p2,min(p1,p2)≤p0≤max(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 行为,因为它假设前面的L 个 step 对紧接的 next step 有影响。

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

    (St−Lu,⋯,St−2u,St−1u)→Stu

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

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

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

    • 大多数规则的阶次为 L=2 和 L=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-level 和 skip 行为比较重要,但是并不能说明 point-level 行为不重要,更不能说明 union-level 和 skip 行为比 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利用卷积神经网络,其创新之处在于:将前面 L 个 item 表示为一个embedding 矩阵 E∈RL×d,其中 d 为embedding的维度,并且矩阵的行保留了 item 之间的次序(order)。论文将这个 embedding 矩阵视为潜在空间中由 L 个 item 构成的 image ,并使用各种卷积 filter 来搜索序列模式从而作为该 image 的局部特征。然而,与图像识别不同的是,这个 image 并不是通过input 直接给出的,而是必须与所有 filter 同时学习。

    论文主要贡献:

    • Caser 使用水平卷积filter和垂直卷积filter 来捕获 point-level、union-level 、以及skip 行为的序列模式。

    • Caser 同时建模一般偏好以及序列模式,并在单个统一框架中概括了几种现有的 SOTA 方法。

    • 在现实生活的数据集上,Caser 优于 SOTA 的 top-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 (而不是因为 i2 和 i1 之间存在依赖关系)。我们将在实验部分验证这一点:当数据集中包含相当多的序列模式时,RNN-based 方法表现更好。

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

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

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

1.1 模型

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

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

1.1.1 Embedding Look-up

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

    E(u,t)=[e→St−Lu⊤⋮e→St−2u⊤e→St−1u⊤]∈RL×d

    E(u,t) 的第 l 行代表这 L 个 item 中的第 l 个 item 的 embedding 。

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

1.1.2 卷积层

  1. 参考在文本分类中使用 CNN 的思想,我们的方法将 embedding 矩阵 E∈RL×d 视为潜在空间中由前面 L 个 item 组成的 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 个维度的取值几乎为零),而 Airport 和 Hotel 的 embedding 在前面3 个维度取值较大、末尾 2 个维度取值几乎为零。

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

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

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

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

    ci(k)=ϕc(Ei:i+h−1⊙F(k))

    其中:⊙ 表示内积算子(inner product operator),ϕc(⋅) 为卷积层的激活函数,第 i 次交互覆盖了第 i 个 item 到第 i+h−1 个 item 的 embedding 。

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

    c→(k)=[c1(k),c2(k),⋯,cL−h+1(k)]∈RL

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

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

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

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

    这 K 个 filter 可以采用不同的高度,因此这些 filter 的 h 是很重要的超参数。

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

    c~j(k)=E:,j⊙F~(k)c→~(k)=[c~1(k),c2(k),⋯,cd(k)]∈Rd

    其中:⊙ 表示内积算子(inner product operator),E:,j∈RL 表示 E 的第 j 列。

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

    c~(k)=∑i=1LF~i(k)×e→i∈Rd

    其中 e→i∈Rd 为 E 的第 i 行,代表第 i 个 item 的 embedding 。因此,通过 vertical filter 我们可以学习聚合前面 L 个 item 的 embedding,类似于 Fossil 的加权 sum 来聚合前面 L 个 item 的 latent representation 。不同之处在于每个 filter F~(k) 扮演了不同的聚合器。因此,与 Fossil 类似,这些 vertical filter 通过对前面 item 的 latent 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 filter 和 horizontal filter 的用途都是聚合,但是二者稍有不同:

    • 每个 vertical filter 的尺寸固定为 L×1 (而不是 L×s,s>1 为宽度)。这是因为 E 的每一列对我们来说都是潜在(latent)的,单次与多个连续的列进行交互是没有意义的。

    • 不需要对垂直卷积的结果应用最大池化操作,因为我们希望对每个潜在维度(latent dimension)保留聚合结果。

1.1.3 全连接层

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

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

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

    z→∈Rd 也就是我们所说的 convolutional sequence embedding ,它对前面 L 个 item 的各种序列特征进行编码。

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

    y→(u,t)=Wo[z→||P→u]+b→o∈R|I|

    其中:Wo∈R|I|×2d 为输出层的权重矩阵,b→o∈R|I| 为输出层的 bias 向量。

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

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

    • 正如我们将在后文看到的,这使得我们的模型具有概括(generalize)其它模型的能力。

    • 我们可以用其它被概括模型的参数来预训练(pre-train)我们模型的参数。正如 《Neural collaborative filtering》 所述,这种预训练对模型性能至关重要。

1.1.4 模型训练和推断

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

    p(Stu∣St−1u,⋯,St−Lu)=σ(yStu(u,t))

    其中:σ(x)=1/(1+e−x) 为 sigmoid 函数。

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

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

    p(S∣Θ)=∏u∈U∏t∈Cuσ(yStu(u,t))∏j∈I∧j≠Stu(1−σ(yj(u,t)))

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

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

    L=∑u∈U∑t∈Cu∑i∈Dtu−[log⁡σ(yi(u,t))+∑j∈I∧j≠ilog⁡(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 CPU 和 32 GB RAM 的机器上,MovieLens 数据大约需要 1 小时、Gowalla 数据需要 2 小时、Foursquare 数据需要 2 小时、TMall 数据需要 1 小时。这些时间与 Fossil 的运行时间相当,并且可以通过使用 GPU 进一步减少。

  3. 在训练好模型之后,为了在 time step t 为用户 u 提供推荐,我们获取用户 u 的 latent embedding P→u 、以及该用户前面 L 个 item 的 embedding 作为网络的输入。我们向用户 u 推荐在输出层 y→ 中取值最大的 N 个 item 。向所有用户进行推荐的复杂度为 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 ,从而得到自适应的、soft 的 h 值。

    • 超参数 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 应用 CNN 或 RNN 。

1.1.5 和现有模型的联系

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

    yi(u,t)=w→o,i⋅[0→||P→u]+bo,i

    其中:yi(u,t) 为 y→(u,t) 的第 i 个元素,w→o,i 为 Wo 的第 i 行,bo,i 为 b→o 的第 i 个元素。

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

    yi(u,t)=w→o,i⋅[e→St−1u||P→u]

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

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

    yi(u,t)=w→o,i⋅[c→~||P→u]+bo,i

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

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

1.2 实验

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

    SI=#rules#users

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

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

    • MovieLens 是广泛使用的电影评分数据集。

    • Gowalla 和 Foursquare 包含通过 user-venue check-ins 得到的隐式反馈。

    • Tmall 是从 IJCAI 2015 竞赛中获得的用户购买数据,旨在预测重复的购买者(buyer)。

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

    前人的工作所使用的的 Amazon 数据集由于其 SI 太小(Office Products 的 SI 为 0.0026,Clothing, Shoes, Jewelry 和 Video Games 的SI 为 0.0019)而未被使用。换句话讲,该数据集的序列信号远远低于前面的四个数据集。

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

  2. 评估指标:

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

      Precision@N=|R⋂R^1:N|NRecall@N=|R⋂R^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^ 中第 N 个 item 位于 R 中 则 I(N)=1 否则 I(N)=0 。

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

      MAP 是所有用户的 AP 均值。

  3. baseline 方法:

    • POP:根据 item 的流行度popularity 进行推荐,而流行度取决于 item 的交互次数。

    • BPR:结合了矩阵分解模型的 Bayesian personalized ranking: BPR 是对隐式反馈数据进行非序列推荐的 SOTA 方法。

    • FMC 和 FPMC:FMC 将一阶马尔科夫转移矩阵分解为两个低维子矩阵,而 FPMC 是 FMC 和 LFM 的融合。它们都是 SOTA 的序列推荐方法。FPMC 在每一步都允许推荐一个 basket 的若干个 item。对于我们的序列推荐问题,每个 basket 都只有一个 item 。

    • Fossil :Fossil 对高阶马尔科夫链进行建模,并使用 Similarity Model 而不是 LFM 来建模一般用户偏好。

    • GRU4Rec:GRU4Rec 使用 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} 。

    • 对于 Caser:horizontal filter 的高度 h∈{1,⋯,L} ,target 数量 T∈{1,2,3} ,激活函数 ϕa,ϕc 来自于 {identity, sigmoid, tanh, relu} 。对于每个高度 h ,horizontal 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 方法中,序列推荐器(如 FPMC 和 Fossil )通常在所有数据集上都优于非序列推荐器(即 BPR),这表明考虑序列信息(sequential information)的重要性。

    • FPMC 和 Fossil 在所有数据集上的表现都优于 FMC,这表明个性化的有效性。

    • 在 MovieLens 上,GRU4Rec 的性能接近于 Caser,但在其它三个数据集上的性能要差得多。

    • 事实上,MovieLens 比其它三个数据集具有更多的序列信号,因此 RNN-based 的 GRU4Rec 可以在 MovieLens 上表现良好,但是在其它三个数据集上效果不佳。此外,GRU4Rec 的推荐是 session-based的,而不是个性化的,这在一定程度上扩大了泛化误差。

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

    • 维度 d 的影响:

      • 在更稠密的 MovieLens 数据集上,更大的 d 并不总能带来更好的模型性能。当 d 选择合适大小时,模型会达到最佳性能;当 d 较大时,模型会因为过拟合而变得更糟。

      • 但是对于其它三个更稀疏的数据集,每个模型都需要更大的 d 才能达到最佳效果。

      • 对于所有数据集,Caser 通过使用较小的 d 来击败最强的 baseline 方法。

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

      • 在更稠密的 MovieLens 数据集上,Caser 较好地利用了较大 L 提供的额外信息( L 越大效果越好)。而且 Caser-3 表现最好,这表明 skip 行为的好处。

      • 然而,对于稀疏的数据集,并非所有模型都始终受益于较大的 L 。这是合理的,因为对于稀疏的数据集,更高阶的马尔科夫链往往会引入额外的信息和更多的噪声。

      • 在大多数情况下,Caser-2 在这三个稀疏数据集上的表现略优于 Caser-1 和 Caser-3。

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

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

    结论:

    • Caser-p 表现最差,而 Caser-h、Caser-v、Caser-vh 显著提高了性能,这表明将 top-N 序列推荐视为传统的 top-N 推荐将丢失有用的信息(如序列信息),并且同时在 union-level 和 point-level 建模序列模式有助于改进预测。

    • 对于这两个数据集,通过联合使用 Caser 的所有组件(即 Caser-pvh)可以获得最佳性能。

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

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

    • vertical filter:下图显示了在 MovieLens 数据集上训练 L=9 的 Caser 之后,四个 vertical filter 的值(指的是卷积核的权重)。在微观上四个 filter 被训练为多样化(diverse)的,但是在宏观上它们遵循从过去位置(past position)到最近位置(recent position)的上升趋势。由于每个 vertical filter 都是作为对前面 action 的 embedding 进行加权的一种方式,这一趋势表明 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^3 是 ground truth (即用户序列中的 next movie)。注意,R^1 和 R^2 与 R^3 非常相似,都是动作片和科幻片,因此也推荐给用户。

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

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

        既然如此,为什么不屏蔽 S1 和 S2 呢?论文并未提出讨论。读者认为,一种比较好的方法是通过 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^3 的 union-level 序列特征。