返回介绍

数学基础

统计学习

深度学习

工具

Scala

九、Caser [2018]

发布于 2023-07-17 23:38:24 字数 163353 浏览 0 评论 0 收藏 0

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

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

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

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

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

  3. 先前工作的局限性:基于马尔科夫链的模型是一种早期的 top-N 序列推荐方法,其中L$ L $ 阶马尔科夫链根据先前的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 通过对先前的 itemlatent representation 进行加权的 sum 聚合,从而将该方法推广到高阶马尔科夫链。

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

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

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

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

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

      一种缓解方案是调整加权的权重范围,如选择α1=1.0,α2=1.0$ \alpha_1=1.0,\alpha_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$ L $ 阶马尔科夫链没有显式地建模这种 skip 行为,因为它假设前面的L$ L $ 个 step 对紧接的 next step 有影响。

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

    (StLu,,St2u,St1u)Stu

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

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

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

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

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

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

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

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

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

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

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

    论文主要贡献:

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

    • 传统的推荐方法,如协同过滤、矩阵分解、以及 top-N 推荐,都不适合捕获序列模式,因为它们没有建模 action 的顺序。

      序列模式挖掘的早期工作基于统计共现来找到显式的序列关联规则 sequential association rule 。这种方法依赖于模式的显式表示explicit representation,因此可能会错过未观察到的状态unobserved state 下的模式。此外,这种方法还存在:过大的搜索空间、阈值设置的敏感性(置信度阈值)、大量的规则(大多数规则是冗余的)等等问题。

      observed state 下的模式指的是训练数据中已经观察到的序列模式,unobserved state 下的模式指的是所有可能的序列模式。

    • 受限玻尔兹曼机Restricted Bolzmann Machine: RBM 是首个成功应用于推荐问题的 2 层神经网络。自编码器autoencoder框架及其变体降噪自编码器denoising autoencoder 也产生了良好的推荐性能。卷积神经网络已用于从用户的评论中提取用户的偏好。这些工作都不是用于序列推荐的。

    • 循环神经网络 RNN 已被用于 session-based 推荐。虽然 RNN 在序列建模方面已展示出卓越的能力,但是其顺序地连接的网络结构在序列推荐setting 下可能无法正常工作。因为在序列推荐的问题中,并非所有相邻的 action 都有依赖关系,例如,用户在购买 itemi1$ i_1 $ 之后购买了 item1i2$ i_2 $ 仅仅是因为用户喜欢i2$ i_2 $ (而不是因为i2$ i_2 $ 和i1$ i_1 $ 之间存在依赖关系)。我们将在实验部分验证这一点:当数据集中包含相当多的序列模式时,RNN-based 方法表现更好。

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

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

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

9.1 模型

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

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

9.1.1 Embedding Look-up

  1. Caser 通过将前面L$ L $ 个 itemembedding 馈入神经网络中来捕获潜在空间中的序列特征。itemi$ i $ 的 embeddingeiRd$ \mathbf{\vec e}_i\in \mathbb R^d $ 是类似于 latent factor 的概念,这里d$ d $ 为 embedding 维度。embedding look-up 操作检索前面L$ L $ 个 item 对应的 item embedding,并将它们拼接在一起,从而为用户u$ u $ 生成在 time stept$ t $ 的embedding matrixE(u,t)RL×d$ \mathbf E^{(u,t)}\in \mathbb R^{L\times d} $ :

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

    E(u,t)$ \mathbf E^{(u,t)} $ 的第l$ l $ 行代表这L$ L $ 个 item 中的第l$ l $ 个 itemembedding

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

9.1.2 卷积层

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

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

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

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

    与图像识别不同,这里的 imageE$ \mathbf E $ 并不是直接提供,因为所有 itemi$ i $ 的 embedding 向量ei$ \mathbf{\vec e}_i $ 必须与所有 filter 一起同时学习。

  2. 水平卷积层Horizontal Convolutional Layer:该层有K$ K $ 个 horizontal filterF(k)Rh×d,1kn$ \mathbf F^{(k)}\in \mathbb R^{h\times d},1\le k\le n $ ,h{1,,L}$ h\in \{1,\cdots,L\} $ 为filter 的高度。例如,如果L=4$ L=4 $ ,首先可以选择K=8$ K=8 $ 个 filter,然后可以选择h{1,2,3,4}$ h\in \{1,2,3,4\} $ 。

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

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

    其中:$ \odot $ 表示内积算子inner product operatorϕc()$ \phi_c(\cdot) $ 为卷积层的激活函数,第i$ i $ 次交互覆盖了第i$ i $ 个 item 到第i+h1$ i+h-1 $ 个 itemembedding

    卷积值是F(k)$ \mathbf F^{(k)} $ 与E$ \mathbf E $ 的子矩阵Ei:i+h1$ \mathbf E_{i:i+h-1} $ (这个子矩阵是由E$ \mathbf E $ 的第i$ i $ 行到第ih+1$ i-h+1 $ 行构成)的内积。F(k)$ \mathbf F^{(k)} $ 的最终卷积结果是向量:

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

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

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

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

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

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

  3. 垂直卷积层Vertical Convolutional Layer:我们用 tilde 符号$ \sim $ 来表示垂直卷积层。假设垂直卷积层有K~$ \tilde K $ 个 filterF~(k)RL×1,1kK~$ \tilde{\mathbf F}^{(k)}\in \mathbb R^{L\times 1}, 1\le k\le \tilde K $ 。每个 filterF~(k)$ \tilde{\mathbf F}^{(k)} $ 通过在E$ \mathbf E $ 上从左到右滑动d$ d $ 次从而与E$ \mathbf E $ 的列交互,最终产生垂直卷积结果c~(k)$ \tilde{\mathbf{\vec c}}^{(k)} $ :

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

    其中:$ \odot $ 表示内积算子inner product operatorE:,jRL$ \mathbf E_{:,j}\in \mathbb R^L $ 表示E$ \mathbf E $ 的第j$ j $ 列。

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

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

    其中eiRd$ \mathbf{\vec e}_i\in \mathbb R^d $ 为E$ \mathbf E $ 的第i$ i $ 行,代表第i$ i $ 个 itemembedding 。因此,通过 vertical filter 我们可以学习聚合前面L$ L $ 个 itemembedding,类似于 Fossil 的加权 sum 来聚合前面L$ L $ 个 itemlatent representation 。不同之处在于每个 filterF~(k)$ \tilde{\mathbf F}^{(k)} $ 扮演了不同的聚合器。因此,与 Fossil 类似,这些 vertical filter 通过对前面 itemlatent representation 的加权和来捕获 point-level 序列模式。然而 Fossile 对每个用户使用a single weighted sum ,我们的方法使用K~$ \tilde K $ 个全局 vertical filter 为所有用户生成K~$ \tilde K $ 个加权和o~R(dK~)$ \tilde{\mathbf{\vec o}}\in \mathbb R^{(d\tilde K)} $ :

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

    其中||$ \cdot||\cdot $ 表示向量拼接(因此o~$ \tilde{\mathbf{\vec o}} $ 向量的长度为dK~$ d\tilde K $ )。

    注:

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

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

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

9.1.3 全连接层

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

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

    其中:||$ \cdot||\cdot $ 表示向量拼接,WRd×(K+dK~)$ \mathbf W\in \mathbb R^{d\times (K+ d\tilde K)} $ 为待学习的投影矩阵(将被拼接的向量投影到一个d$ d $ 维的潜在空间),bRd$ \mathbf{\vec b}\in \mathbb R^d $ 为对应的 bias 向量,ϕa()$ \phi_a(\cdot) $ 为全连接层的激活函数。

    zRd$ \mathbf{\vec z}\in \mathbb R^d $ 也就是我们所说的 convolutional sequence embedding ,它对前面L$ L $ 个 item 的各种序列特征进行编码。

  2. 为了捕获用户的一般偏好,我们还 look-upuser embeddingPu$ \mathbf{\vec P}_u $ ,并将它与z$ \mathbf{\vec z} $ 拼接在一起,然后将它们投影到具有|I|$ |\mathcal I| $ 维输出的 output layer,即:

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

    其中:WoR|I|×2d$ \mathbf W_o\in \mathbb R^{|\mathcal I|\times 2d} $ 为输出层的权重矩阵,boR|I|$ \mathbf{\vec b}_o\in \mathbb R^{|\mathcal I|} $ 为输出层的 bias 向量。

    输出层的值y(u,t)$ \mathbf{\vec y}^{(u,t)} $ 中第i$ i $ 个元素yi(u,t)$ y_i^{(u,t)} $ 代表了用户u$ u $ 在 time stept$ t $ 与 itemi$ i $ 交互的可能性。

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

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

9.1.4 模型训练和推断

  1. 为了训练模型,我们将输出层的值y(u,t)$ \mathbf{\vec y}^{(u,t)} $ 变换为概率:

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

    其中:σ(x)=1/(1+ex)$ \sigma(x) = 1/(1+e^{-x}) $ 为 sigmoid 函数。

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

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

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

    其中Θ={P,E,F,F~,W,b,Wo,bo}$ \Theta = \left\{\mathbf P,\mathbf E,\mathbf F,\tilde{\mathbf F},\mathbf W ,\mathbf{\vec b} ,\mathbf W_o,\mathbf{\vec b}_o\right\} $ 为模型参数。

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

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

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

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

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

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

  3. 在训练好模型之后,为了在 time stept$ t $ 为用户u$ u $ 提供推荐,我们获取用户u$ u $ 的 latent embeddingPu$ \mathbf{\vec P}_u $ 、以及该用户前面L$ L $ 个 itemembedding 作为网络的输入。我们向用户u$ u $ 推荐在输出层y$ \mathbf{\vec y} $ 中取值最大的N$ N $ 个 item 。向所有用户进行推荐的复杂度为O(|U|×|I|×d)$ O(|\mathcal U|\times |\mathcal I|\times d) $ ,其中忽略了卷积运算的复杂度。

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

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

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

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

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

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

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

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

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

9.1.5 和现有模型的联系

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

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

    其中:yi(u,t)$ y_i^{(u,t)} $ 为y(u,t)$ \mathbf{\vec y}^{(u,t)} $ 的第i$ i $ 个元素,wo,i$ \mathbf{\vec w}_{o,i} $ 为Wo$ \mathbf W_o $ 的第i$ i $ 行,bo,i$ b_{o,i} $ 为bo$ \mathbf{\vec b}_o $ 的第i$ i $ 个元素。

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

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

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

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

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

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

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

9.2 实验

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

    SI=#rules#users

    分子是(StLu,,St2u,St1u)Stu$ \left(S_{t-L}^u,\cdots,S_{t-2}^u,S_{t-1}^u\right)\rightarrow S_t^u $ 形式的规则总数,该规则是基于L$ L $ 阶马尔科夫链(L$ L $ 从15)找到的,并对支持度(最小支持度为 5 )和置信度(最低置信度为 50%)进行过滤。分母是用户总数。我们使用 SI 来估计数据集中序列信号sequential signal 的强度。

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

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

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

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

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

  2. 评估指标:

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

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

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

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

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

      其中:如果R^$ \hat {\mathcal R} $ 中第N$ N $ 个 item 位于R$ \mathcal R $ 中 则I(N)=1$ \mathbb I(N) = 1 $ 否则I(N)=0$ \mathbb I(N) = 0 $ 。

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

      MAP 是所有用户的 AP 均值。

  3. baseline 方法:

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

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

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

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

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

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

    • 维度d$ d $ 的影响:

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

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

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

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

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

    结论:

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

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

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

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

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

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

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

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

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

      • 当同时屏蔽S3,S4,S5$ S_3,S_4,S_5 $ 之后,R^3$ \hat R_3 $ 的排名下降得最多。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文