Session-based Recommendations with Recurrent Neural Networks

Abstract

我们将RNN使用在了一个新的领域——推荐系统。现实的推荐系统经常面对短对话数据(例如体育服装店)而不是充足的用户使用记录(例如Netflix)。在这种情况下,经常被称赞的矩阵分解的方法不在准确。这个问题在实践中经常使用基于物品的推荐来解决。例如,推荐相似物品。我们认为通过对整个会话进行建模可以给出更加准确的建议。因此,我们提出了一种基于会话的RNN推荐方法。我们的方法同样被认为在实际问题方面是奏效的。同时,我们对传统的RNN进行了部分改动,例如使用一个评级的loss function使得它对部分具体问题更加可行。在两个数据集上的实验结果表明,我们的方法比起过去使用的方法更为可行。

Introduction

我们考虑使用用户进入一个网站后点击的第一个物品作为RNN的起始输入,而后每一次点击将会根据之前的点击输出一个推荐。通常推荐系统的物品集合数量成千上万甚至数十万。除了巨大的物品集,另一个挑战是点击流的数据集十分巨大。因此训练时间和可扩展性十分重要。与大多数信息检索和推荐设置一样,我们有兴趣将建模能力集中在用户可能感兴趣的顶级项目上,为此我们使用排名损失函数来训练RNN。

Recommendations with RNNs

RNN神经网络被设计来为变长序列建模。RNN与卷积前向深度学习模型的主要区别是单元中内部隐状态组成网络。
标准RNN用如下更新方程更新它的隐藏层h:
在这里插入图片描述
GRU是一种旨在解决梯度消失问题的更加缜密的RNN模型。GRU门基本上了解何时以及多少更新单元的隐藏状态。GRU的激活函数是一种在前一个激活与后一个激活函数ht^之间的线性插值:
在这里插入图片描述

Customizing the GRU Model

我们在模型中使用GRU来进行基于会话的推荐。网络的输入是会话的实际状态,而输出是会话中下次可能点击的物品。状态可以是会话中实际事件的物品或者到目前为止发生的事件中的物品。在前一种情况中使用独热编码。即输入向量的长度等于物品的数量,只有对应的被点击的物品对应坐标为1.后一种设置使用加权和,如果一个事件早先发生过,则它们将被乘以权重。出于稳定的目的,输入向量之后进行归一化。我们希望这会有所帮助,因为它会加强记忆效应:加强非常局部的排序约束,而RNN的较长内存则无法很好地捕获这些约束。 我们还尝试添加额外的嵌入层,但是1-of-N编码总是表现得更好。
网络的核心是GRU层,并且额外的前向传播层可以被加到最后一层与输出层之间。输出是所预测的对物品的偏好,即在该会话中下一次可能发生的事件。在多层GRU网络中,前一层隐状态是下一层的输入。输入也可以作为可选项连接到GRU层,我们发现这也确实提升了系统的表现。见图1的整体结构,它描述了一个时间序列中的一个事件。
在这里插入图片描述

SESSION-PARALLEL MINI-BATCHES

RNN在自然语言处理任务中经常使用序列化mini-batches。例如经常使用滑动窗口在处理句子中的词语时,然后将这些词语片段一个接一个拼接在一起,组成mini-batch。这在我们的任务中并不适用,因为:
1.会话的长度的变化比起句子长度的变化更加剧烈:一些会话仅由两个事件组成,而其它一些事件可以由数百个事件组成;
2.我们的目标是获得一个会话如何在时间上演变,所以将它们打散成碎片没有任何意义。
所以我们使用session-parallel mini-batches。
首先我们为会话创造一个顺序,然后我们使用前X个会话的第一个事件组成输入的第一个mini-batch(所期望输出的是我们活动会话的第二个事件)。第二个mini-batch是由第二个事件s组成,以此类推。如果有任何一个事件结束,则由下一个可以使用的会话代替它的位置。会话被假定相互独立,所以当这个转换出现时,我们重置合适的隐藏状态。更多细节见下图:

在这里插入图片描述

SAMPLING ON THE OUTPUT

在物品很多时,推荐系统才能真正发挥作用。即使是中型网上商店,物品的种类也是数以千计的,但是在更大的网站,拥有数十万的物品,设置数以百万计的物品也是不奇怪的。在每一步中为每一个物品计算得分的规模将是物品数量与事件数量的乘积。因此我们必须对输出进行采样,并且只计算一小部分物品的得分。这也意味着,将仅有一小部分权重被更新。此外对于期望输出,我们需要计算一些负样本的得分,修改权重以此来使得期望输出得分很高。
任意缺失事件的自然解释是用户不知道项目的存在,因此没有交互。然而一个可能性很低的解释是用户知道这件物品,但是因为讨厌它们,所以不进行交互。一个物品越受欢迎,用户就越可能了解该物品,因此这时,一个缺失事件(用户不看它)更可能是用户不喜欢。因此我们应当按物品受欢迎程度的百分比进行采样。我们使用其它mini-batch中的样品作为负样本,而不是为每个训练样本单独生成负样本。这样做的好处是我们可以通过跳过采样进一步减少计算时间。此外,也有实现方面的好处,通过使用更快的矩阵运算,可以使得代码更加简洁。同时,这种方法也是一种基于流行的采样,因为一个物品出现在其它训练样本中的可能性,也是它流行程度的百分比(个人理解:word2v中负采样需要在输出向量中采样,而本文中认为从同一mini-batch的其它样本中采样可以直接代表流行程度,更简化了计算)。

EXPERIMENTS

Ⅰ.baseline
1.POP:总是推荐训练集中最为流行的物品,尽管它很简单,但它在确定的领域仍然是一个很好的baseline。
2.S-POP
3.Item-KNN
4.BPR-MF
Ⅱ.PARAMETER & STRUCTURE OPTIMIZATION

引用:
推荐系统的核心是以相关性为基础的物品评分。虽然这个任务也可以被解释为一个分类任务,学习打分的方法往往做的比其它方法更为出色。排行可以是逐个的、成对的或者列表的。逐个打分估计分数或者排行时认为每次都相互独立,所以loss被定义为一种相关物品的排行较低。成对排名比较正面和负面项目的分数或排名,并且损失强制执行正项目的排名应低于负面项目的排名。列表排名使用所有项目的分数和排名,并将它们与完美排序进行比较。由于它包括排序,它通常在计算上更昂贵,因此不经常使用。 此外,如果只有一个相关项目 - 在我们的例子中 - 列表排名可以通过成对排名来解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值