返回介绍

数学基础

统计学习

深度学习

工具

Scala

五、Improved GRU4Rec [2016]

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

  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$ m $ ,令[x1,x2,,xn1,xn]$ [x_1,x_2,\cdots,x_{n-1},x_n] $ 为一个 click session,其中xiR$ x_i\in \mathbb R $ 为被点击 item 的索引并且1xim$ 1\le x_i\le m $ 。我们寻求一个模型M$ \mathcal M $ ,使得对于 click session 中的任何前导点击序列x=[x1,x2,,xr1,xr],1r<n$ \mathbf x =[x_1,x_2,\cdots,x_{r-1},x_r], 1\le r\lt n $ ,我们得到输出y=M(x)$ \mathbf {\vec y} = \mathcal M(\mathbf x) $ ,其中y=(y1,,ym)Rm$ \mathbf{\vec y}=(y_1,\cdots,y_m)^\top\in \mathbb R^m $ ,yi$ y_i $ 为 itemi$ i $ 是第r+1$ r+1 $ 个被点击 item 的概率。

    我们将y$ \mathbf {\vec y} $ 视为每个 item 成为 sessionnext click的排序分。由于我们通常需要为用户选择一个以上的推荐,因此这里推荐 top-k item (根据y$ \mathbf {\vec y} $ 进行排名)。令xr+1$ x_{r+1} $ 为前导点击序列x$ \mathbf x $ 的 next click,则我们用一个 one-hot 编码er+1Rm$ \mathbf{\vec e}_{r+1}\in \mathbb R^m $ 来表示它,然后计算它与y$ \mathbf {\vec y} $ 的交叉熵L(y,er+1)$ \mathcal L\left(\mathbf{\vec y},\mathbf{\vec e}_{r+1}\right) $ 。也可以使用 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]$ [x_1,x_2,\cdots,x_r] $ ,并且训练用于预测该序列的 next clickxr+1$ x_{r+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]$ [x_1,x_2,\cdots,x_n] $ ,我们生成序列和对应的 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]$ [x_1,x_2,\cdots,x_r] $ 和来自sessionlabelxr+1$ x_{r+1} $ ,我们将 privileged information 定义为:x=[xn,xn1,,xr+2]$ \mathbf x^*=[x_n,x_{n-1},\cdots,x_{r+2}] $ ,其中n$ n $ 为原始 session 的长度。privileged sequence 仅仅是发生在第r+1$ r+1 $ 个 item 之后的、逆序的未来序列。我们现在可以在 privileged sequencex$ \mathbf x^* $ 上训练一个 teacher模型,它也具有相同的 labelxr+1$ x_{r+1} $ 。

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

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

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

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

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

    论文并未说明 teacher 模型M$ \mathcal M^* $ 的结构。它的输入是未来序列的逆序,理论上应该和M$ \mathcal 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\times m $ (输入为H$ H $ 维、输出为m$ m $ 维的全连接层)降低到H×d$ H\times d $ (输入为H$ H $ 维、输出为d$ d $ 维的全连接层),其中H$ H $ 为最后一个隐藏的维度,d$ d $ 为 embedding 的维度。

    这种方法的一个缺点是:它需要为每个 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}$ \left\{\frac{1}{256}, \frac{1}{64}, \frac{1}{16}, \frac{1}{4}, \frac{1}{1}\right\} $ )训练的模型的结果。

  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=1$ T=1 $ (softmax 的温度超参数) 和λ=0.2$ \lambda = 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 能够部署在真实推荐系统中的步骤。

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

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

发布评论

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