介绍

facebook在2019在《Deep Learning Recommendation Model for Personalization and Recommendation Systems》。

摘要

facebook开发了一种SOTA的深度学习推荐模型(DLRM)并提供了Pytroch和Caffe2的实现。另外,还设计了一种专门的并行化scheme利用在embedding tables上的模型并行机制来缓和内存限制,利用数据并行机制来从fully-connected layers中扩展(scale-out)计算。我们比较了DLRM与已存在推荐模型.

1.介绍

在大型互联网公司中的许多任务上,部署了个性化和推荐系统,包括:CTR预估和rankings。尽管这些方法具有很长的历史,这些方法最近才拥抱神经网络。对于个性化和推荐,朝着深度学习模型架构设计方向贡献了两个主要视角。

第一个视角来自于推荐系统。这些系统最初部署了content filtering,其中:一些专家会将proucts分类成categories,而用户选择它们喜欢的categories,并基于它们的偏好进行match[22]。该field接着演化成使用collaborative filtering,基于用户过往行为(比如:用户对商品的评分)进行推荐。最近邻方法[21]通过将users和products进行分组(grouping)在一起来提供推荐,latent factor方法通过MF技术以及特定隐式factors将users和products进行特征化,并成功部署。

第二个视角来自预测分析(predictive analytics),它依赖于statistical模型基于给定数据来对events进行分类(classify)或预测(predict)。预测模型从简单模型(比如:linear或logistic regression)转移到深度网络上来建模。为了处理类别型数据,这些模型采用了embeddings,它会将one-hot和multi-hot vectors转化成在一个抽象空间中的dense表示。该抽象空间可以被解释成由推荐系统发现的latent factors空间。

在本paper中,我们引入了一个个性模型,它可以通过上述两个视角的联合来传达。模型使用embeddings来处理稀疏特征(sparse features)(它可以表示categorical data),使用一个multilayer perceptron(MLP)来处理dense features,接着使用[24]中的统计技术将这些features显式地交叉。最终,它会使用另一个MLP来post-processing交叉来寻找event probability。我们将该模型称为:DLRM(深度学习推荐模型)。见图1。该模型的PyTorch和Caffe2实现已公开。

2.模型设计与架构

在本节中,我们会描述DLRM的设计。我们会从网络的高级别组件开始,并解释how和why它们以一种特别的方式组合在一起,对未来模型设计有启发,接着描述组成模型的low-level operators和primitives,用于未来的硬件和系统设计。

2.1 DLRM组件

通过回顾以往模型,DLRM的high-level组件可以很容易理解。我们会避免完整回顾,把精力集中在早期模型的4个技术上,它可以在DLRM中的高级组件中被解释。

2.1.1 Embeddings

为了处理类型化数据,embeddings可以将每个category映射到一个在抽象空间中的dense表示上。特别的,每个embedding lookup可以被解释成使用一个one-hot vector 来获得embedding table 相应的row vector:

…(1)

在更复杂的情况下,一个embedding也可以表示成多个items的加权组合,它具有一个关于weights的multi-hot vector ,其中,对于,元素,否则为0 ,其中是相应的items。注意,t embedding lookups的一个mini-batch可以写成:

…(2)

其中,sparse matrix为:

DLRMs会使用embedding tables来将categorical features映射成dense representations。然而,在这些embeddings被设计后,如何利用它们来生成更精准的预测呢?我们先来回顾下latent factor。

2.1.2 Matrix Factorization

推荐问题的常用形式,我们给定一个集合S:用户会对一些商品进行评分。我们通过一个vector 来表示第i个商品,通过一个vector 来表示第j个user,以使寻找所有的ratings,其中n和m各表示products和users的总数。更严格的,当第i个商品已经被第j个user评分时,集合S包含了(i,j) tuples。

MF方法通过最小化下面的等式来求解该问题:

…(3)

其中,是第j个user对第i个product的rating,。接着,假设:,我们希望将full matrix的ratings 近似为矩阵乘法 。注意,W和V可以被解释成两个embedding tables,其中每一行表示在latent factor space中的一个user/product。这些embedding vectors的dot product会生成后续rating的一个有意义的预测,这对于FM和DLRM的设计来说是一个key observation。

2.1.3 Factorization Machine

在经典问题中,我们希望定义一个预测函数:,从一个输入数据点到一个target label 上的预测。作为示例,我们可以通过定义 预测CTR,其中:+1表示点击,-1表示未点击。

FM使用categorical data,通过定义以下形式的模型,来将二阶交叉并入到一个线性模型中:

…(4)

其中,的参数,upper会严格选择该矩阵的上三角部分【24】。

FM与SVM和polynomial kernels有明显区别,因为它们将二阶交叉矩阵分解成latent factors(或embedding vectors)(和MF很像),它能更有效地处理稀疏数据。通过只捕获不同embedding vectors paiers间的交叉,这可以极大减小二阶交叉的复杂度,生成线性计算复杂度。

2.1.4 MLP(Multilayer Perceptrons)

同时,在机器学习上的最近许多成功都归因于deep learning。DL最基础的模型是:MLP。预测函数由一串交替的FC layers和activation function 组成:

…(5)

其中:weight matrix为:,对于的bias为:

该方法被用于捕获更复杂的交叉。例如,给定足够参数,MLP会具有够深和够宽,可以拟合任意想预测的数据。这些方法的变种被广告用于CV和NLP中。例如:NCF被用于MLPerf benchmark的一部分,它使用MLP,而非dot product来计算MF中embeddings间的交叉。

2.2 DLRM架构

我们已经描述了在RS中不同的模型。我们将这些想法进行组合来构建SOTA的个性化模型。

假设用户和商品通过许多连续型特征(continuous features)和类别型特征(categorical features)进行描述。为了处理categorical features,每个categorical feature可以通过一个相同维度的embedding vector表示,即MF中latent factors。为了处理continous features,会通过一个MLP来进行转换,它会生成和embedding vectors相同长度的dense representation。

我们将根据FMs提供的处理sparse data的方式,将它们传给MLPs,显式地(explicitly)计算不同特征间的二阶交叉(second-order interaction)。这可以通过使用所有embedding vectors的pairs和dense features间的dot product来做到。这些dot products可以使用另一个MLP(top 或 output MLP)将original-processed dense features和post-processed一起concatenated,接着被feed到一个sigmoid function来提供一个概率。

我们将产生的模型称为:DLRM。如图1所示,并在表1中展示了PyTroch和Caffe2的DLRM所用到的一些operators。

表1

2.3 与之前的模型比较

许多deep learning-based的推荐模型,使用相似的底层思想来生成高阶项来处理sparse features。Wide&Deep, Deep&Cross, DeepFM, xDeepFM网络,例如,设计专有网络来有系统的构建高阶交叉。这些网络接着将来自这些专有模型和MLP的结果进行求和(sum),将它传给一个linear layer及sigmoid activation来生成一个最终概率。DLRM以一种结构化的方式与embeddings交互,通过只考虑由final MLP中embeddings pairs间的dot-product生成的cross-terms,模拟了FM对模型进行极大地降维。对于在其它网络的二阶交叉外的更高阶交叉,使用额外的计算/内存开销并不值。

DLRM和其它网络之间的一个关键不同点是:这些网络是如何对待embedded feature vectors和它们的cross-terms的。DLRM(以及XDeepFM)会将每个feature vector看成单个unit来表示单个category,其它像DCN(Deep&Cross)网络会将feature vector中的每个element看成是一个新的unit,这会生成不同的cross-terms。因此,Deep&Cross网络不仅会生成不同feature vectors的elemtns间的cross-terms(这和DLRM通过dot product方式一样),也会生成在相同feature vector的elemtnts间的cross-terms,从而生成更高的维度。

3.并行化(Parallelism)

模型个性化和推荐系统,需要大且复杂的模型来估计大量数据上的价值。DLRMs特别包含了许多数目的参数,多阶的幅度要超过其它常见的deep learning模型(比如:CNN),transformer、RNN、GAN。这会导致训练时间上常达许周或更久。因此,对这些模型进行高效并行化,以便解决在实际规模中的问题。

如前面章节所示,DLRMs会以成对(coupled)的方式,同时处理categorical features(使用embeddings)以及continuous features(使用bottom MLP)。Embeddings会占据参数的大部分,一些tables每个都需要超过多个GBs的内存,使得DLRM对内存容量和带宽很敏感。embeddings的size使得它禁止使用数据并行化(data parallelism),因为它需要在每个设备上复制很大的embeddings。在许多cases中,这种内存限制需要模型分布跨多个设备,以便能满足内存容量需求。

在另一方面,MLP参数在内存上是更小的,但需要大量计算。因此,data-parallelism对MLPs更好,因为它可以让不同devices上的samples并发处理,只需要在当累积更新(accumulating updates)时需要通信。我们的并行化DLRM会使用一个embeddings的模型并行化(model parallelism)以及MLPs的数据并行化(data parallelism)的组合,来减缓由embeddings生成的内存瓶颈,而MLPs上的forward和backward propagations并行化。通过将model和data parallelism进行组合,是DLRM的唯一需求,因为它的架构和大模型size所导致;这样的组合并行化在Caffe2或PyTroch中并不支持(以及其它流行的DL框架),因此,我们设计了一种定制实现。我们计划在将来提供它的详细效果研究。

在我们的setup中,top MLP和interaction operator需要访问部分来自bottom MLP的mini-batch以及和所有embeddings。由于模型并行化已经被用于跨devices分布embeddings,这需要一个个性化的all-to-all通信。在embedding lookup的尾部,对于在mini-batch中的所有samples(必须根据mini-batch维度进行分割、以及与相应devieces进行通信)、对于在这些devices上的embedding tables,每个device都具有一个vector,如图2所示。Pytorch或Caffe2都不会提供model parallelism的原生支持;因此,我们通过显式将embedding operators(PyTorch的nn.EmbeddingBag, Caffe2的SparseLengthSum)映射到不同devices上来实现它。个性化的all-to-allcwpwy使用butterfly shuffle operator来实现,它可以将生成的embedding vectors进行切片(slices),并将它们转移到目标设备(target devices)上。在当前版本,这些transfers是显式的copies,但我们希望后续使用提供的通信原语(比如:all-gather以及send-recv)进一步optimize。

我们注意到,对于数据并行化MLPs,在backward pass中的参数更新会使用一个allreduce进行累积(accumulated),并以一种同步方式将它用在每个device的参数复制上,确保在每个device上的参数更新在每轮迭代上是一致的。在Pytorch中,data parallelism可以通过nn.DistributedDataParallel和nn.DataParallel模块来开启,将在每个device上的model复制,使用必要的依赖插入allreduce。在Caffe2中,我们会在梯度更新前手工插入allreduce。

4.数据

为了measure模型的acuracy,并测试它的整体效果,并将单独operators特征化,我们需要为我们的实现创建或获得一个dataset。我们模型的当前实现支持三种类型的datasets:random、synthetic、public datasets。

前两个dataset对于从系统角度实验我们的模型很有用。特别的,它允许我们通过生成即时数据,并移除数据存储依赖,来测试不同的硬件属性及瓶颈。后一个dataset允许我们执行真实数据的实验,并measure模型的accuracy。

4.1 Random

回顾DLRM,它接收continuous和categorical features作为inputs。前者可以通过生成一个随机数目的vector,通过使用一个uniform/normal(Gaussian)分布(numpy.random rand/randm缺省参数)。接着通过生成一个matrix来获得mini-batch inputs,其中每行对应在mini-batch中的一个element。

为了生成categorical features,我们需要决定在一个给定multi-hot vector中具有多少非零元素。benchmark允许该数字可以是fixed或在一个[1,k]的范围内random。接着,我们生成整型indices的相应数字,范围在[1,m]中,其中,m是在embedding W中的rows数目(2)。最后,为了创建一个mini-batch的lookups,我们将以上indices进行concatenate,并将每个单独的lookup使用lengths和offsets进行描述。

4.2 Synthetic

对应于categorical features,有许多理由支持定制索引的生成。例如,如果我们的应用使用一个特定dataset,但我们不希望出于私人目的共享它,那么我们可以选择通过distributions来表示categorical features。这可以潜在作为一种隐私保护技术的可选方法(用于联邦学习(federated learning))。同时,如果我们希望练习系统组件(比如:学习内存行为)。。。

4.3 Public

参考

介绍

alibaba在《Personalized Re-ranking for Recommendation》介绍了一种reranking模型。

摘要

ranking是推荐系统的核心问题,通常,一个ranking函数会从labeled dataset中学到,并会为每个单独item产生一个ranking score。然而,它可能是次优的(sub-optimal),因为scoring function被应用在每个独立item上,没有显式考虑item间的相互影响,以及用户偏好/意图间的不同。因此,这里提出了一种个性化的re-ranking模型。通过直接使用一个已经存在的ranking feature vectors,提出的re-ranking模型可以很轻易地部署成在任意ranking算法之后跟着的一个follow-up模块。它会通过采用一个transformer结构来对在推荐列表中的所有items信息进行有效编码,来直接优化整个推荐列表。特别的,transformer使用一种self-attention机制,它直接建模在整个list中任意items pair间的关系。我们证实,通过引入pre-trained embedding来为不同用户学习个性化编码函数。在offline和online的实验结果上均有较大提升。

1.介绍

通常,在推荐系统中的ranking不会考虑在list列表中其它items(特别是挨着的items)的影响。尽管pairwise和listwise l2r方法尝试解决该问题,但它们只关注充分利用labels(比如:click-through data)来优化loss function,并没有显式建模在feature space中items间的相互影响。

一些工作[1,34,37]尝试显式建模items间的相互影响,重新定义由之前ranking算法给出的intial list,这被称为“re-ranking”。构建该scoring function的主要思路是:将intra-item patterns编码成feature space。state-of-the-arts的方法有:RNN-based(比如:GlobalRerank[37]和DLCM[1])。它们会将初始列表(intial list)按顺序feed给RNN-based结构,并在每个timestep上输出编码后的vector。然而,RNN-based方法对建模在list中items间的交叉的能力有限。之前编码的item的feature信息会沿着编码距离退化(degrade)。同时,由于并行化,transformer的编码过程比RNN-based方法更高效。

除了items间的交叉外,交叉的个性化编码函数可以被考虑用于re-ranking。对推荐系统进行re-ranking是user-specific的,决取于用户的偏好。对于一个对价格敏感的用户,在re-ranking模型中,对“price”特征间进行交叉更重要。常见的global encoding function可能不是最优的,因为它会忽略每个用户在特征分布间的不同。例如,当用户关注价格对比时,具有不同价格的相似items趋向于在list中更聚集。当用户没有明显的购买意图时,推荐列表中的items趋向于更分散。因此,我们在transformer结构中引入一种个性化模块来表示关于item interactions用户偏好和意图。在我们的个性化re-ranking模型中,可以同时捕获:在推荐列表中的items、以及用户间的交叉。

2.相关工作

我们的工作主要是,重新定义由base ranker给出的initial ranking list。在这些base rankers间,l2r是一种广泛使用的方法。l2r方法可以根据loss function分为三类:point-wise、pairwise、listwise。所有这些方法可以学习一个global scoring function,对于一个特定feature的权重会被全局学到。然而,这些features的weights应可以意识到:不仅items间的交叉、以及user和items间的交叉。

【1-3,37】的工作主要是re-ranking方法。它们使用整个intial list作为input,并以不同方式建模在items间的复杂依赖。[1]使用unidirectional GRU来将整个list的信息编码到每个item的表示。[37]使用LSTM、[3]使用pointer network,不仅编码整个list信息,也会由decoder生成ranked list。对于这些使用GRU or LSTM的方法来编码items间的依赖,encoder的能力通过encoding distance进行限制。在我们的paper中,我们使用transfomer-like encoder,它基于self-attention机制以O(1) distance来建模任意两个items间的交叉。另外,对于那些使用decoder来顺序生成ordered list的方法,它们不适合online ranking系统,因为需要有严格的延迟。由于sequential decoder使用在time t-1上选中的item作为input来在time t上选择item,它不能并列行,需要n倍的inferences,其中n是output list的长度。[2]提出了一种groupwise scoring function,它可以对scoring进行并列化,但它的计算开销很高,因为它会枚举在list中所有可能的item组合。

3.re-ranking模型

在本节中,我们首先给出了一些关于l2r以及re-ranking的先验知识。接着对问题公式化来求解。概念如表1所示。

表1:

l2r方法在ranking中被广泛使用,为推荐和信息检索生成一个ordered list。l2r方法会基于items的feature vector学习一个global scoring function。有了该global function,l2r方法会通过在candidate set中的每个item。该global function通常通过对以下loss L最小化得到:

…(1)

其中:

  • R是对于推荐所有用户请求的集合。
  • 是对于请求的items的candidate set
  • 表示的是item i的feature space
  • 是在item i上的label (例如:click or not)
  • 是由ranking model给出的对于参数的预测点击概率
  • l是通过计算得到的loss

然而,对于学习一个好的scoring function来说,是不足够的。我们发现推荐系统的ranking应考虑以下额外信息:

  • (a)item-pairs间的相互影响 [8,35]
  • (b)users和items间的交叉(interactions)

在item-pairs间的相互影响,可以通过使用已经存在的LTR模型为请求r从inital list 直接学到。[1][37][2][3]提出了方法来更好利用item-pairs间的相互信息。然而,很少研究去关注users和items间的interactions。item-pairs的相互影响,对于不同用户来说是不同的。在本paper中,我们引入了一种个性化矩阵(personlized matrix) PV来学习user-specific encoding function,它可以建模item-pairs间的个性化相互影响。模型的loss function可以被公式化成等式(2)。

…(2)

其中:

  • 是由之前ranking model给出的inital list
  • 是我们的re-ranking model的参数
  • X是在list中所有items的feature matrix

4.个性化re-ranking模型

在本节中,我们首先给出了关于PRM(Personalized Re-ranking Model)的总览。接着详细介绍每一部分。

4.1 模型架构

PRM的结构如图1所示。模型包含三个部分:

  • input layer
  • encoding layer
  • output layer

它会将由之前的ranking模型生成的关于items的intial list作为input,并输出一个re-ranked list。详细结构分挨个介绍。

图片名称

4.2 Input Layer

input layer的目的是,为在initial list中的所有items准备representations,并将它feed给encoding layer。首先,我们具有一个固定长度的intial sequential list ,它由之前的ranking方法给出。与之前ranking方法相同,我们具有一个raw feature matrix ,在X中的每一行表示每个的item对应的raw feature vector

Personalized Vector(PV)

对两个items的feature vectors进行encoding,可以建模它们之间的相互影响,但这些影响进行扩展将会影响那些未知用户。因而需要学习user-specific encoding function。尽管整个intial list的representation可以部分影响用户的偏好,但对于一个强大的personlized encoding function来说它是不够的。如图1(b)所示,我们将raw feature matrix PV \in R^{n \times d_{pv}}E’ \in R^{n \times (d_{feature} + d_{pv})}$$,如等式(3)。PV通过一个pre-trained model生成,它会在下一节中介绍。PV的performance增益可以由evaluation部分被介绍。

…(3)

position embedding(PE)

为了利用在intial list中的顺序信息,我们将一个position embedding 注入到input embedding中。接着,该embedding矩阵可以用等式(4)计算。本paper中会使用一个可学习的PE,它的效果要比[28]中固定的position embedding要略微好些。

…(4)

最后,我们使用一个简单的feed-forward网络来将feature matrix 转成,其中:d是encoding layer中每个input vector中潜在维度(latent dimensionality)。E可以通过等式(5)公式化:

…(5)

其中,是投影矩阵,是d维向量。

4.3 Encoding Layer

如图1(a)所示,encoding layer的目标是,将item-pairs间的相互影响、以及其它额外信息进行集成,这些额外信息包含:用户偏好、intial list S的ranking顺序。为了达到该目标,我们采用Transfomer-like encoder,因于Transformer已经在许多NLP任务中被证明是有效的,特别是在机器翻译中。Transformer中的self-attention机制特别适合我们的re-ranking任务,因为它可以直接建模任意两个items间的相互影响,忽略掉两者间的距离。没有了距离衰减(distance decay),Transfomer可以捕获更多在intial list中离得较远的items间的交叉。如图1(b)所示,我们的encoding模块包含了个关于Transformer encoder的块(blocks)。每个块(block)(如图1(a)所示)包含了一个attention layer和一个Feed-Forward Network(FFN) layer。

Attention Layer

attention函数如等式(6)所示:

…(6)

其中矩阵Q, K, V各自表示queries、keys和values。d是matrix K的维度,为了避免内积的大值。softmax被用于将内积值转化成为value vector V添加权重。在我们的paper中,我们使用self-attention,其中:Q, K和V从相同的矩阵进行投影。

为了建模更复杂的相互影响,我们使用multi-head attention,如等式(7)所示:

…(7)

其中,是投影矩阵。h是headers的数目。h的不同值间的影响会在下一节被研究。

FFN(Feed-forward Network)

该position-wise FFN的函数主要是为了使用在input vectors不同维度间的非线性(non-linearity)和交叉(interacitons)来增强模型。

对Encoding Layer进行Stacking

这里,我们使用attention模块,后面跟着position-wise FFN作为一块(block)Transformer encoder。通过对多个blocks进行stacking,我们可以得到更复杂和高阶的相互信息(mutual information)。

4.4 Output Layer

output layer的函数主要为每个item 生成一个score。(如图1(b)所示Score(i))我们在softmax layer之后使用一个linear layer。softmax layer的output是每个item的点击概率,被标记为:。我们使用作为来在one-step中对items进行re-rank。Score(i)的公式为:

…(8)

其中:

  • 是Transformer encoder的个blocks的output
  • 是可学习的投影矩阵
  • 是bias term
  • n是在intial list中的items数目

在训练过程中,我们使用click-through data作为label并最小化等式(9)的loss function:

…(9)

4.5 个性化模块

在本节中,我们会引入该方法来计算个性化矩阵PV,它表示user和items间的interactions。使用PRM来学习PV的最简单办法是,通过re-ranking loss以end-to-end的方式进行学习。在re-ranking任务中学到的task-specific representation缺少用户的一般偏好。因此,我们可以利用一个pre-trained NN来产生用户个性化embeddings PV,它接着被用做PRM模型的额外features。pre-trained NN可以从平台的所有click-through logs上学到。图1(c)展示了pre-trained模型的结构。sigmoid layer会输出:在给定所有行为历史和用户的side information时,关于item i、user u的点击概率。用户的side information包括:gender、age和purchasing level等。模型的loss通过一个point-wise cross-entropy函数来计算,如等式(10)所示:

…(10)

其中:

  • D是user u在平台上展示的items set。
  • 是pre-trained model的参数矩阵
  • 是item i的label

受[13]的启发,我们在sigmoid layer之前采用hidden vector作为personlized vector (如图1c所示),feed到我们的PRM模型中。

图1c展示了pre-trained模型的可能架构,其它模型如:FM, FFM, DeepFM, DCN, FNN和PNN也可以做为生成PV的替代方法。

5.实验

参考

介绍

youtube在2019公布了它的MMoE多目标排序系统《Recommending What Video to Watch Next: A Multitask Ranking System》。

摘要

在本paper中,我们介绍了一个大规模多目标排序系统,用于在工业界视频分享平台上推荐下一个要观看的视频。该系统会面临许多挑战,包括:存在多个竞争性的排序目标(ranking objectives),以及在user feedback中的隐式选择偏差(implicit selection biases)。为了解决这些挑战,我们探索了多种软参数共享技术(soft-parameter sharing techniques),比如:Multi-gate Mixture-of-Experts,以便对多个排序目标进行有效最优化(optimize)。另外,我们会采用一个Wide&Deep框架来减缓选择偏差(selection biases)。我们演示了我们提出的技术可以在youtube推荐质量上产生有效提升。

介绍

在本paper中,我们描述了一个关于视频推荐的大规模排序系统。也就是说,给定用户当前观看的一个视频,推荐该用户可能会观看和享受的下一个视频。通常推荐系统会遵循一个two-stage设计:candidate generation、ranking。该paper主要关注ranking。在该stage,推荐器会具有数百个候选,接着会应用一个复杂的模型来对它们进行排序,并将最可能观看的items推荐给用户。

设计一个真实世界的大规模视频推荐系统充满挑战:

  • 通常有许多不同的、有时甚至有冲突的待优化目标。例如,我们想推荐用户点击率高、愿与朋友共享的、包括观看高的视频
  • 在该系统中通常有隐式偏差(implicit bias)。例如,一个用户通常点击和观看一个视频,仅仅只因为它的排序高,而不是因为用户最喜欢它。因此,从当前系统的数据生成来进行模型训练会是有偏的,这会造成(feedback loop effect)效应[33]。如何有效和高效地学习减少这样的biases是个开放问题。

为了解决这样的挑战,我们为ranking system提出了一个有效的多任务神经网络架构,如图1所示。它会扩展Wide&Deep模型,通过采用Multi-gate Mixture-of-Experts(MMoE) [30]来进行多任务学习。另外,它会引入一个浅层塔结构(shallow tower)来建模和移除选择偏差。我们会应用该结构到视频推荐中:给定当前用户观看的视频,推荐下一个要观看的视频。我们在实验和真实环境中均有较大提升。

图1 我们提出的ranking系统的模型架构。它会消费user logs作为训练数据,构建Multi-gate Mixture-of-Experts layers来预测两类user behaviors,比如:engagement和satisfaction。它会使用一个side-tower来纠正ranking selection bias。在顶部,会组合多个预测到一个最终的ranking score

特别的,我们首先将我们的多任务目标分组成两类:

  • 1) 参与度目标(engagement objectives),比如:用户点击(user clicks),推荐视频的参与度
  • 2) 满意度目标(satisfaction objectives),比如:用户喜欢一个视频的程度,在推荐上留下一个评分

为了学习和估计多种类型的用户行为,我们使用MMoE来自动化学习那些跨潜在冲突的多目标共享的参数。Mixture-of-Experts[21]架构会将input layer模块化成experts,每个expert会关注input的不同部分。这可以提升从复杂特征空间(由多个模块生成)中学到的表示。接着,通过使用多个gating network,每个objective可以选择experts来相互共享或不共享。

为了建模和减小来自有偏训练数据的选择偏差(selection bias,比如:position bias),我们提出了添加一个shallow tower到主模型中,如图1左侧所示。shallow tower会将input与selection bias(比如:由当前系统决定的ranking order)相关联,接着输出一个scalar作为一个bias项来服务给主模型的最终预测。该模型架构会将训练数据中的label分解成两部分:从主模型中学到的无偏用户工具(unbiased user utility),从shallow tower学到的估计倾向评分(estimated propensity score)。我们提出的模型结构可以被看成是Wide&Deep模型的一个扩展,shallow tower表示Wide部分。通过直接学习shallow tower和main model,我们可以具有优点:学习selection bias,无需对随机实验resort来获取propensity score。

为了评估我们提出的ranking系统,我们设计了offline和live实验来验证以下的效果:

  • 1) 多任务学习
  • 2) 移除一个常见的selection bias (position bias)

对比state-of-art的baseline方法,我们展示了我们提出的框架的改进。我们在Youtube上进行实验。

主要贡献有:

  • 介绍了一种end-to-end的排序系统来进行视频推荐
  • 将ranking问题公式化成一个金目标学习问题,并扩展了Multi-gate Mixture-of-Experts架构来提升在所有objectives上的效果
  • 我们提出应用一个Wide&Deep模型架构来建模和缓和position bias
  • 我们会在一个真实世界的大规模视频推荐系统上评估我们的方法,以及相应的提升

2.相关工作

3.问题描述

本节,我们首先描述了推荐下一次要观看的视频的问题,我们引入了一个two-stage setup。

除了上述提到的使用隐式反馈来构建ranking systems挑战外,对于真实的大规模视频推荐问题,我们需要考虑以下因素:

  • 多模态特征空间(Multimodal feature space)。在一个context-aware个性化推荐系统中,我们需要使用从多模态(例如:视频内容、预览图、音频、标题、描述、用户demographics)来学习候选视频的user utility。从多模态特征空间中为推荐学习表示,对比其它机器学习应用来说是独一无二的挑战。它分为两个难点:1) 桥接从low-level的内容特征中的语义gap,以进行内容过滤(content filtering) 2) 为协同过滤学习items的稀疏表示
  • 可扩展性(Scalability)。可扩展性相当重要,因为我们正构建一个数十亿用户和视频的推荐系统。模型必须在训练期间有效训练,在serving期间高效运行。尽管ranking system在每个query会对数百个candidates进行打分,真实世界场景的scoring需要实时完成,因为一些query和context信息不仅仅需要学习数十亿items和users的表示,而且需要在serving时高效运行。

回顾下我们的推荐系统的目标是:在给定当前观看的视频和上下文(context)时,提供一个关于视频的ranked list。为了处理多模态特征空间,对于每个视频,我们会抽取以下特征(比如:视频的meta-data和视频内容信号)来作为它的表示。对于context,我们会使用以下特征(比如:人口统计学user demographics、设备device、时间time、地点location)。

为了处理可扩展性,如[10]描述相似,我们的推荐系统具有两个stages:候选生成、ranking。。。

3.1 候选生成

我们的视频推荐系统会使用多种候选生成算法,每种算法会捕获query video和candidate video间的某一种相似性。例如,一个算法会通过将query video的topics相匹配来生成candidates;另一个算法则会基于该视频和query video一起被观察的频次来检索candiate videos。我们构建了与[10]相似的一个序列模型通过用户历史来生成个性化候选视频。我们也会使用[25]中提到的技术来生成context-aware high recall relevant candiadtes。最后,所有的candidates都会放到一个set中,给ranking system进行打分。

3.2 Ranking

我们的ranking系统会从数百个candidates中生成一个ranked list。不同于candidate generation,它会尝试过滤掉大多数items并只保留相关items,ranking system的目标是提供一个ranked list以便具有最高utility的items可以展示在top前面。因此,我们使用大多数高级机器学习技术常用的NN结构,以便能足够的建模表现力来学习特征关联和utility关系。

4.模型结构

4.1 系统总览

我们的ranking system会从两类用户反馈数据中学习:1) engagement行为(比如:点击和观看) 2)satisfaction行为(比如:likes和dismissals)。给定每个candidate,ranking system会使用该candidate、query和context的的特征作为输入,学习预测多个user behaviors。

对于问题公式,我们采用l2r的框架。我们会将ranking问题建模成:一个具有多个objectives的分类问题和回归问题的组合。给定一个query、candidate和context,ranking模型会预测用户采用actions(比如:点击、观看、likes和dismissals)的概率。

为每个candidate做出预测的方法是point-wise的方法。作为对比,pair-wise或list-wise方法可以在两个或多个candidates的顺序上做出预测。pair-wise或list-wise方法可以被用于潜在提升推荐的多样性(diversity)。然而,我们基于serving的考虑主要使用point-wise ranking。在serving时,point-wise ranking很简单,可以高效地扩展到大量candidates上。作为比较,对于给定的candidates集合,pair-wise或list-wise方法需要对pairs或lists打分多次,以便找到最优的ranked list,限制了它们的可扩展性。

4.2 ranking objectives

我们使用user behaviors作为训练labels。由于用户可以对推荐items具有不同类型的behaviors,我们将我们的ranking system设计成支持多个objectives。每个objective的目标是预测一种类型的与user utility相关的user behavior。为了描述,以下我们将objectives分离成两个类别:engagement objectives和satisfaction objectives。

Engagement objectives会捕获user behaviors(比如:clicks和watches)。我们将这些行为的预测公式化为两种类型的任务:对于像点击这样行为的二元分类任务,以及对于像时长(time spent)相关的行为的回归任务。相似的,对于satisfaction objectives,我们将:与用户满意度相关的行为预测表示成二元分类任务或者回归任务。例如,像点击/like这样的行为可以公式化成一个二元分类任务,而像rating这样的行为被公式化成regression任务。对于二元分类任务,我们会计算cross entropy loss。而对于regression任务,我们会计算squared loss。

一旦多个ranking objectives和它们的问题类型被定下来,我们可以为这些预测任务训练一个multitask ranking模型。对于每个candidate,我们将它们作为多个预测的输入,并使用一个形如加权乘法的组合函数(combination function)来输出一个组合分(combined score)。该权值通过人工调参,以便在user engagements和user satisfactions上达到最佳效果。

4.3 使用MMoE建模任务关系和冲突

多目标的ranking systems常使用一个共享的bottom模型架构。然而,当任务间的关联很低时,这样的hard-parameter sharing技术有时会伤害到多目标学习。为了缓和多目标间的冲突,我们采用并扩展了一个最近发布的模型架构:MMoE(Multi-gate Mixture-of-Experts)【30】。

MMoE是一个soft-parameter sharing模型结构,它的设计是为了建模任务的冲突(conflicts)与关系(relation)。通过在跨多个任务上共享experts,它采用Mixture-of-Experts(MoE)结构到多任务学习中,而对于每个task也具有一个gating network进行训练。MMoE layer的设计是为了捕获任务的不同之处,对比起shared-bottom模型它无需大量模型参数。关键思路是,使用MoE layer来替代共享的ReLU layer,并为每个task添加一个独立的gating network。

对于我们的ranking system,我们提出在一个共享的hidden layer的top上添加experts,如图2b所示。这是因为MoE layer可以帮助学习来自input的模态信息(modularized information)。当在input layer的top上、或lower hidden layers上直接使用它时,它可以更好地建模多模态特征空间。然而,直接在input layer上应用MoE layer将极大增加模型training和serving的开销。这是因为,通常input layer的维度要比hidden layers的要更高。

图2 使用MMoE来替换shared-bottom layers

我们关于expert networks的实现,等同于使用ReLU activations的multilayer perceptrons。给定task k, prediction ,以及最后的hidden layer ,对于task k的具有n个experts output的MMoE layer为:,可以用以下的等式表示:

…(1)

其中:是一个lower-level shared hidden embedding,是task k的gating network,是第i个entry,是第i个expert。gating networks是使用一个softmax layer的关于input的简单线性转换。

…(2)

其中,是线性变换的自由参数。与[32]中提到的sparse gating network对比,experts的数目会大些,每个训练样本只利用top experts,我们会使用一个相当小数目的experts。这样的设置是为了鼓励在多个gating networks间共享experts,并高效进行训练。

4.4 建模和移除Position和Selection Baises

隐式反馈被广泛用于训练l2r模型。大量隐式反馈从user logs中抽取,从而训练复杂的DNN模型。然而,隐式反馈是有偏的,因为它由已经存在的ranking system所生成。Position Bias以及其它类型的selection biases,在许多不同的ranking问题中被研究和验证[2,23,41]。

在我们的ranking系统中,query是当前被观看过的视频,candidates是相关视频,用户倾向于点击和观看更接近toplist展示的视频,不管它们实际的user utility——根据观看过的视频的相关度以及用户偏好。我们的目标是移除从ranking模型中移除这样的position bias。在我们的训练数据中、或者在模型训练期间,建模和减小selection biases可以产生模型质量增益,打破由selection biases产生的feedback loop。

我们提出的模型结构与Wide&Deep模型结构相似。我们将模型预测分解为两个components:来自main tower的一个user-utility component,以及来自shallow tower的一个bias component。特别的,我们使用对selection bias有贡献的features来训练了一个shallow tower,比如:position bias的position feature,接着将它添加到main model的最终logit中,如图3所示。在训练中,所有曝光(impressions)的positions都会被使用,有10%的feature drop-out rate来阻止模型过度依赖于position feature。在serving时,position feature被认为是缺失的(missing)。为什么我们将position feature和device feature相交叉(cross)的原因是,不同的position biases可以在不同类型的devices上观察到。

图3 添加一个shallow side tower来学习selection bias(比如:position bias)

5.实验结果

本节我们描述了我们的ranking system实验,它会在youtube上推荐next watch的视频。使用由YouTube提供的隐式反馈,我们可以训练我们的ranking models,并进行offline和live实验。

Youtube的规模和复杂度是一个完美的测试。它有19亿月活用户。每天会有数千亿的user logs关于推荐结果与用户活动的交互。Youtube的一个核心产品是,提供推荐功能:为给定一个观看过的视频推荐接下来要看的,如图4所示。

图4 在youtube上推荐watch next

5.2.3 Gating Network分布

为了进一步理解MMoE是如何帮助multi-objective optimization的,我们为在每个expert上的每个task在softmax gating network中绘制了累积概率。

5.3 建模和减小Position Bias

使用用户隐式反馈作为训练数据的一个主要挑战是,很难建模在隐式反馈和true user utility间的gap。使用多种类型的隐式信号和多种ranking objectives,在serving时在item推荐中我们具有更多把手(knobs)来tune以捕获从模型预测到user utility的转换。然而,我们仍需要建模和减小在隐式反馈中普遍存在的biases。例如:在用户和当前推荐系统交互中引起的selection biases。

这里,我们使用提出的轻量级模型架构,来评估如何来建模和减小一种类型的selection biases(例如:position bias)。我们的解决方案避免了在随机实验或复杂计算上花费太多开销。

5.3.1 用户隐反馈分析

为了验证在我们训练数据中存在的position bias,我们对不同位置做了CTR分析。图6表明,在相对位置1-9的CTR分布。所图所示,我们看到,随着位置越来越低,CTR也会降得越来越低。在更高位置上的CTR越高,这是因为推荐更相关items和position bias的组合效果。我们提出的方法会采用一个shallow tower,我们展示了该方法可以分离user utility和position bias的学习。

图6 位置1-9的CTR

5.3.2 Baseline方法

为了评估我们提出的模型架构,我们使用以下的baseline方法进行对比。

  • 直接使用position feature做为一个input feature:这种简单方法已经在工业界推荐系统中广泛使用来消除position bias,大多数用于线性l2r rank模型中。
  • 对抗学习(Adversarial learning):受域适应(domain adaptation)和机器学习公平性(machine learning fairness)中Adversarial learning的广泛使用的启发,我们使用一个相似的技术来引入一个辅助任务(auxiliary task),它可以预测在训练数据中的position。随后,在BP阶段,我们不让梯度传递到主模型(main model)中,以确保主模型的预测不依赖于position feature。

5.3.3 真实流量实验结果

表2展示了真实流量实验结果。我们可以看到提出的方法通过建模和消除position biases可以极大提升参与度指标。

5.3.4 学到的position biases

图7展示了每个position学到的position biases。从图中可知,越低的position,学到的bias越小。学到的biases会使用有偏的隐式反馈(biased implicit feedback)来估计倾向评分(propensity scores)。使用足够训练数据通过模型训练运行,可以使我们有效学到减小position biases。

图7 每个position上学到的position bias

5.4 讨论

参考

criteo也开放了它们的dpp方法:《Tensorized Determinantal Point Processes for Recommendation》, 我们来看下:

摘要

DPP在机器学习中的关注度越来越高,因为它可以在组合集合上提供一种优雅的参数化模型。特别的,在DPP中的所需的参数数目只与ground truth(例如:item catalog)的size成平方关系,而items的数目增长是指数式的。最近一些研究表明,DPPs对于商品推荐和(basket completion)任务 来说是很高效的模型,因为他们可以同时在一个集合中解释diversity和quality。我们提出了一种增强的DPP模型:tensorized DPP,它特别适合于basket completion任务。我们利用来自张量分解(tensor factorization)的思想,以便将模型进行定制用在next-item basket completion任务上,其中next item会在该模型的一个额外维度中被捕获。我们在多个真实数据集上评估了该模型,并找出:tensorized DPP在许多settings中,比许多SOTA模型提供了更好的predictive quality。

1.介绍

在averge shooping basket中items数的增加,对于在线零售商来说是一个主要关注点。该问题存在许多处理策略。而本工作主要关注于:算法会生成一个items集合,它们能适合补全用户的当前shopping basket。

Basket analysis和completion是机器学习中非常老的任务。许多年来,关联规则挖掘(association rule mining)是SOTA的。尽管该算法具有不同变种,主要的准则是涉及到:通过统计在过往observations中的共现,来计算购买一个额外商品的条件概率。由于计算开销和健壮性,现代方法更喜欢i2i CF,或者使用LR基于二分类购买得分来预测一个用户是否会构买一个item。

标准CF方法必须被扩展到能正确捕获商品间的diversity。在basket completion中,需要插入一定形式的diversity,因为推荐过于相似的items给用户并不好。实践者经常通过添加constraints到items推荐集合中来缓和该问题。例如,当使用类目信息时,在裤子被添加到basket时可以强制推荐相匹配的鞋子,而如果按天然的共同出售(co-sale) patterns会导致其它裤子的推荐。在这种情况中,diversity推荐的出现不会通过学习算法直接驱动,但可以通过side information和专家知识。Ref【28】提出了一种有效的Bayesian方法来学习类目的权重,当类目已知时。

然而,不依赖额外信息直接学习合适的diversity更令人关注。不使用side information,直接从数据中的diversity的naive learning,会得到一个高的计算开销,因为可能集合的数目会随类目中items数目而指数增长。该issue是no-trivial的,即使当我们只想往已存在集合中添加一个item时,而当我们想添加超过一个item来达到最终推荐set的diversity时会更难。

【9, 10】使用基于DPPs的模型来解决该组合问题。DPPs是一个来自量子物理学的优雅的关于排斥(repulsion)的概率模型,在机器学习上被广泛使用[17]。它允许抽样一个diverse的点集,相似度(similarity)和流行度(popularity)会使用一个称为“kernel”半正定矩阵进行编码。关于marginalization和conditioning DPPs有很多高效算法提供。从实用角度,学习DPP kernel是个挑战,因为相关的likelihood是non-convex的,从items的observed sets中学到它是NP-hard的。

对于basket completion问题,天然地会考虑:那些转化成售买的baskets的sets。在该setting中,DPP通过一个size为的kernel matrix进行参数化,其中p是catalog(item目录表)的size。因而,参数的数目会随着p的二次方进行增长,计算复杂度、预测、抽样会随着p的三次方增长。由于学习一个full-rank的DPP是很难的,[10]提出了通过对kernel限制到low rank来对DPP正则化(regularization)。该regularization会在不伤害预测效果下提升generalization,并可以提供更diversity的推荐。在许多settings中,预测质量也会被提升,使得DPP对于建模baskets问题是一个理想的工具。再者,对比起full-rank DPP,low-rank假设也提供了更好的runtime效果

另外,由于DPP的定义,正如在Model部分所描述的,low-rank假设对于kernel来说,意味着任意可能的baskets会比那些概率为0的选中rank要具有更好的items。该方法对于大的baskets来说不可能,一些其它DPP kernel的正则化可能更合适。另外,由于DPP kernel的对称性,可以建模有序(ordered corrections)。然而,这些被添加到shooping basket中的items的order会在basket completion任务中扮演重要角色。

主要贡献:

  • 在kernel上修改了constraints来支持大的baskets;也就是说,对于大于kernel rank的sets来说,我们会阻止返回概率0
  • 我们通过在DPP kernel的行列式上添加一个logistic function,来修改在所有baskets上的概率。我们将训练过程适配成处理这种非线性,并在许多real-world basket数据集上评估了我们的模型
  • 通过使用tensor factorization,我们提出了一种新方式来对在目录中的集合间的kernel进行正则化。该方法也会导致增强预测质量
  • 我们展示了这种新模型,称之为”tensorfized DPP”,允许我们可以捕获ordered basket completion。也就是说,我们可以利用该信息,忽略掉items被添加到basket的顺序,来提升预测质量

另外,我们展示了这些思想的组合来提升预测质量,tensorized DPP建模的效果要好于SOTA模型一大截。

2.相关工作

3.模型

DPPs最初用来建模具有排斥效应(replusive effect)的粒子间的分布。最近,在利用这种排斥行为上的兴趣,已经导致DPP在机器学习界受到大量关注。数学上,离散DPPs是在离散点集上的分布,在我们的case中,点就是items,模型会为观察到的给定items集合分配一个概率。假设I表示一个items集合,L是与DPP相关的kernel matrix(它的entries会在items间对polularity和similarity进行编码)。观察到的set I的概率与主子矩阵(principal submatrix)L的行列式成正比:。因而,如果p表示在item catalog中的items数目,DPP是在上的概率measure(),而它只包含了的参数。kernel L会对items间的polularities和similarities进行编码,而对角条目表示item i的流行度,off-diagonal entry 表示item i和item j间的相似度。行列式从几何角度可以被看成是体积(volume),因此更diverse的sets趋向于具有更大的行列式。例如,选择items i和j的概率可以通过以下计算:

…(1)

等式(1)中我们可以看到:如果i和j更相似,他们被抽样在一起的可能性越低。entries 因此会决定kernel的排斥行为。例如,如果使用图片描述符来决定相似度,那么DPP会选择那些有区别的图片。另一方面,如果entries 使用之前观察到的sets学到,比如:电商购物篮[10],那么,“similarity” 会低些。由于共同购买的items可能具有某些diversity,DPPs对于建模包含购买items的baskets是一种天然选择。在搜索引擎场景、或者文档归纳应用中,kernel可以使用特征描述述 (例如:文本中的tf-idf)、以及一个关于每个item i的相关得分,比如:(它会喜欢相关items (值大),阻止相似items组成的lists)。

3.1 Logistic DPP

我们的目标是,寻找一个最可能一起购买的items集合。我们将该问题看成是一个分类问题,目标是预测:一个items的特定集合会生成一个转化(conversion),即:所有items都将被一起购买,这可以表示成。我们将class label Y建模成一个Bernoulli随机变量,它具有参数,其中是items集合,是如下定义的函数:

…(2)

我们使用一个DPP来建模函数

我们假设:存在一个隐空间,在该空间内diverse items很可能会被一起购买。与[10]相似,我们假设:在kernel matrix 上存在一个low-rank constraint,我们进行如下分解:

…(3)

其中,是一个隐矩阵,其中每个row vector i会编会item i的r个latent factors。D是一个对角阵(diagonal matrix),,表示每个item的intrinsic quality或popularity。在D上的平方指数确保了,我们总是具有一个合理的半正定kernel。我们接着定义:

注意,没有对角项,r的选择会限制observable set的cardinality,由于暗示着当。使用该term会确保,任意set的后续概率都是正的,但对于基数(cardinality)高于r的sets,它的cross-effects会更低。我们也看到,具有相似latent vectors的items,对比起具有不同latent vectors的items,被抽到的可能性会更小,由于相似vectors会生成一个具有更小体积(volume)的超平行体(parallelotope)。为了对概率归一化,并鼓励vectors间的分离,我们会在上使用一个logistic function:

…(5)

通常,logistic function的形式是:。然而,在我们的case中,行列式总是正的,因为L是半正定的,这会导致总是大于0.5 。通过构建,我们的公式允许我们获得一个介于0和1之间的概率。最终,是一个scaling参数,可以通过cross-validation被选中,这确保了指数不会爆炸,因于对角参数会近似为1.

Learning。为了学习matrix V,我们确保了历史数据 ,其中,是items集合,是label set,如果该set购买则为1, 否则为0。该训练数据允许我们通过最大化数据的log似然来学习矩阵V和D。为了这样做,我们首先对所有y写出点击概率:

…(6)

的log似然接着被写成:

根据[10],是一个item正则权重,它与item流行度成反比。矩阵V和D可以使用SGA来最大化log似然进行学习。GA的一个step需要计算一个对称矩阵(,其中I是gradient step的相应item set)的行列式,它可以使用 optimized CW-like algorithm算法来达到,复杂度为:,其中,f对应于在I中的items数目。用于学习所使用的最优化算法如算法1所示。

图片名称

算法1

3.3 Tensorized DPP

我们现在提出了对之前模型的一个修改版本,它更适合basket completion任务。为了这样做,对于basket completion场景,我们加强logistic DPP,其中我们对概率建模:用户将基于已经出现在shooping basket中的items来购买一个指定额外的item。我们使用一个tensor来表示它,目标是预测用户是否会基于basket来购买一个给定的candidate target item。该tensor的每个slice对应于一个candidate target item。在该setting中,对于在catalog p中的item (减去basket中已经存在的items),会存在越来越多的问题待解决。为每个待推荐的item学习一个kernel,每个item会与其它所有items相独立,在实际上是不可能的,会存在稀疏性问题。每个item只在baskets中的一小部分出现,因而每个kernel只会接受一小部分数据来学习。然而,所有items间并不完全相互独立。为了解决稀疏性问题,受RESCAL分解的启发,我们使用一个low-rank tensor。我们使用一个cubic tensor ,其中K的每个slice (标为:)是candidate item (low-rank) kernel。通过假设:tensor K是low-rank的,我们可以实现在每个item间学到参数的共享,以如下等式所示:

…(7)

其中,是item latent factors,它对所有candidates items是共用的,是一个candidate item指定的matrix,会建模每个candidate item间的latent components的交叉。为了对candidate items与已经在basket中的items间的自由度进行balance,我们进一步假设:是一个对角矩阵。因此,的对角向量会建模每个candidate item的latent factors,item的latent factors可以被看成是在每个latent factor上的产品的相关度。正如在matrix D的case,在上的平方指数(squared exponent)可以确保我们总是有一个合理的kernel。

图片名称

图1

图1展示了factorization的一个图示。candidate item 的概率与已经在basket中的items set I是相关的:

…(8)

因此,的log似然为:

其中,每个observation m与一个candidate item有关,是与一个observation相关的basket items的set。由于之前的描述,矩阵V, D,以及通过使用SGA最大化log似然学到。正如logistic DPP模型,gradient ascent的一个step需要计算对称矩阵 的逆和行列式,会产生的复杂度(I中items数目为f)。算法2描述了该算法。关于最优化算法的细节详见附录。

图片名称

算法2

泛化到高阶交叉。在basket completion应用中,尝试同时推荐多个items挺有意思的。这可以使用一个贪婪方法来完成。也就是说,我们首先使用一个初始产品(initial product)来补充basket,并将augmented basket看成是一个新的basket,接着补充它。一种更直接的方法是,更适合捕获items间的高阶交叉,这可以泛化等式(7)。我们提出了一种高阶版本的模型,将来会对该模型进行效果评估。假设:d是要推荐的items数目,。我们接着可以将kernel 定义为:

…(9)

其中,每个是一个对角矩阵。

3.3 预测

如前所述,从一个DPP中抽样可能是一个很难的问题,提出了许多解法[6,12]。尽管,在所有可能sets间抽样最好的set是个NP-hard问题,我们的目标是,寻找最好的item来补全basket。在这样的应用中,可以有效使用greedy方法,特别是我们的模型具有low-rank结构。另外,[10]提出了一种有效的方法来进行basket completion,涉及到对DPP进行conditioning,这在我们的logistic DPP模型有使用。

4.实验

5.实验结果

参考

介绍

从历史行为中建模用户的动态偏好,对于推荐系统来说是个挑战。之前的方法采用序列神经网络以从左到右的方式将用户历史交互编码成隐表示,来生成推荐。尽管它们是有效的,这种从左到右的单向模型是次优的,我们对此仍有争论,因为有以下的限制:

  • a) 单向结构限制了在用户行为序列中的隐表示的能力(power)
  • b) 通常这样的一个严格排序的序列,并不总是实际可行的

为了解决这样的限制,我们提出了一个序列推荐模型,称为:BERT4Rec,它采用deep bidirectional self-attention机制来建模用户行为序列。为了避免信息泄漏,以及对双向模型的有效训练,我们采用了Cloze objective到序列推荐中,通过联合条件(从左到右的context)预测在序列中随机的masked items。这种方式下,通过允许在用户历史行为中的每个item以及融合从左到右的信息,我们学习了一个bidirectional表示模型来做出推荐。我们在4个benchmark数据集上进行了大量实验,表明我们的模型要胜过state-of-art的序列模型。

1.介绍

用户兴趣的准确表征是一个推荐系统的核心。在许多真实应用中,用户当前兴趣是天然动态和演化的,受他们历史行为的影响。例如,一个用户可能在购买一个任天堂(Nintendo) Switch后,购买配件(比如:Joy-Con controller);但是在正常情况下他不会单买配件。

为了建模这样的序列动态性,提出了许多方法[15,22,40]基于用户历史交互来做出序列化推荐(sequential recommendations)。他们的目标是:在给定一个用户的过往历史交互后,预测他可能会交互的后继item(s)。最近,大量工作采用序列化神经网络(比如:RNN)来建模[14,15,56,58]。这些工作的基本模式是:将用户历史行为编码成一个vector(例如:用户偏好的表示),并使用一个从左到右的序列模型基于隐表示来做出推荐

图1 序列推荐模型架构的不同。BERT4Rec可以通过Cloze task来学习一个双向模型,而SASRec和RNN-based模型是从左到右的单向模型,只能顺序预测next item

尽管这些方法很流行并且是有效的,我们仍有争论:这种从左到右的单向模型不足够学到关于用户行为序列的最优表示。主要限制(如图1c和1d所示),这样的单向模型限制了历史行为序列中的items的隐表示的能力,其中每个item只能从之前的items的信息中进行编码(encode)。另一个限制是,之前提出的单向模型最初引入是为了使用原始顺序的序列数据,比如:文本(text)和时序数据。他们通常假设在数据上有一个严格有序的序列,但对于真实应用中的用户行为来说并不总是正确的。实际上,由于存在许多不可观察的外部因素,在一个用户历史交互行为中的items选择,可能不会遵循一个严格的顺序假设。在这种情况下,在用户行为序列建模中在两个方向上包含上下文(context)很重要。

为了解决上述限制,我们使用一个双向模型来学习用户历史行为序列的表示。特别的,受BERT的成功启发,我们提出使用深度双向self-attention模型到序列推荐中,如图1b所示。对于表征能力(representation power),在文本序列建模的深度双向模型的良好结果,表明对于序列表示学习的两个方向包含context很有意义。对于更严格的顺序假设,比起在建模用户行为序列上使用单向模型,我们的模型更适合,因为在双向模型中所有items都可以利用两侧的context。

然而,对于序列化推荐(sequential recommendation)来说训练双向模型并不简单和直接。常见的序列推荐模型通常以从左到右方式训练,并在输入序列中为每个位置预测下一个item。如图1所示,在一个深度双向模型中同时在左向到右向上联合上context,可能会造成信息泄露,例如:允许每个item间接地“看到target item”。这会使得预测future项变得不重要,该网络可能不能学到任何有用的东西

为了解决该问题,我们引入了Cloze task[6,50]来取代在单向模型(例如:序列化预测next item)中的目标函数。特别的,我们在输入序列中随机将一些items进行遮掩(mask)(例如:使用一个特别token[mask]进行替代),接着基于围绕他们的context来预测这些masked items的ids。这种方式下,我们可以避免信息泄露,并通过允许在输入序列中的每个item的表示融合(fuse)左和右的context,学到一个双向表示模型。除了训练一个双向模型外,Cloze objective的另一个优点是,它可以生成更多样本(samples)在多个epochs上训练一个更强大的模型。然而,Cloze task的缺点是,对于最终任务(例如:sequential recommendation)不一致。为了解决该问题,在测试期间,我们会在输入序列的末尾添加特殊token “[mask]”来表示我们需要预测的item,接着基于它的最终hidden vector来作出推荐。实验表明,我们的模型要更好。

主要贡献有:

  • 提出了使用双向self-attention网络,通过Cloze task来建模用户行为序列。据我们所知,这是首个在推荐系统中引入双向序列建模和Cloze objective的研究
  • 比较了该模型与state-of-the-art方法
  • 分析了在提出模型中的关键构成

2.相关工作

回顾下相关工作。

2.1 通用推荐

推荐系统的早期工作通常会使用CF,并基于它们的历史交互来建模用户偏好。在众多CF方法中,MF是最流行的方法,它会将users和items投影到一个共享的向量空间中,并通过两个向量间的内积来估计一个用户对该item的偏好。item-based的最邻近方法有[20,25,31,43]。他们会通过使用一个预计算好的i2i相似矩阵,结合它们历史交互上的items间的相似度,来估计一个用户在一个item上的偏好。

最近,深度学习已经重构了推荐系统。早期的工作是两层的RBM CF。

基于深度学习的另一条线是,通过集成辅助信息(比如:文本[23,53]、图片[21,55]、音频特征[51])到CF模型中来学习item的表示来提升推荐效果。另一条线是,替代常用的MF。例如,NCF会通过MLP替代内积来估计用户偏好,而AutoRec和CDAE则使用auto-encoder框架来预测用户评分。

2.2 序列化推荐

不幸的是,上述方法中没有一个是用于序列化推荐(sequential recommendation)的,因为他们会忽略用户行为中的顺序。

在序列化推荐中的早期工作,通常会使用MC(markovchains)来捕获用户历史交互。例如,Shani[45]将推荐生成公式化为一个序列优化问题,并采用MDP(Markov Decision Process)来求解它。之后,Rendle结合MC和MF通过FPMC来建模序列化行为和兴趣。除了一阶MC外,更高阶的MC也可以适用于更多之前的items。

最近,RNN和它的变种,Gated Recurrent Unit(GRU)[4]和LSTM(LSTM)在建模用户行为序列上变得越来越流行。这些方法的基本思想是,使用多种recurrent架构和loss function,将用户之前的记录编码成一个vector(例如:用户偏好的表示,可用于预测),包含:GRU4Rec、DREAM、user-based GRU、attention-based GRU(NARM))、improved GRU4Rec(BPR-max/Top1-max),以及一个有提升的抽样策略[14]。

与RNN不同,许多深度模型也被引入进序列化推荐中。例如,Tang[49]提出了一个卷积序列网络(Caser)来学习序列模式,它同时使用水平和垂直卷积filters。Chen[3]和Huang[19]采用Memory Network来提升序列化推荐。STAMP使用一个带attention的MLP来捕获用户的通用兴趣和当前兴趣。

2.3 Attention机制

Attention机制在建模序列化数据(例如:机器翻译、文本分类)中展示了令人满意的潜能。最近,一些工作尝试采用attention机制来提升推荐效果和可解释性[28,33]。例如,Li[28]将attention机制引入到GRU中来捕获用户序列行为以及在session-based推荐中的主要目的。

上述提到的工作基本上将attention机制看成是对于原始模型的一种额外的组件。作为对比,Transformer[52]和BERT[6]在multi-head self-attention上单独构建,并在文本序列建模中达到了state-of-the-art的效果。最近,对于在建模序列化数据中使用纯attention-based网络有上升的趋势。对于序列化推荐来说,Kang[22]引入了一个二层的Transformer decoder(例如:Transformer语言模型)称为SASRec来捕获用户的序列化行为,并在公开数据集上达到了state-of-the-art的效果。SASRec与我们的工作紧密相关。然而,它仍是一个单向模型,并使用了一个非正式的(casual) attention mask。而我们使用Cloze task以及一个双向模型来编码用户的行为序列。

3.BERT4Rec

我们首先引下研究问题、基本概念。

3.1 问题声明

在序列化推荐中,假设:

  • :表示一个用户集合
  • 表示一个items集合
  • :表示对于用户按时间顺序的交互序列,其中是用户u在timestep t上交互的item,是用户u交互序列的长度。

给定交互历史,序列化推荐的目标是预测:用户u在timestep 的交互的item。它可以公式化为,为用户u在timestep 上建模所有可能items的概率:

3.2 模型结构

这里,我们引入了一个新的序列化推荐模型,称为BERT4Rec,它采用Transformer中的双向编码表示到一个新任务(sequential Recommendation)中。它在流行的self-attention layer上构建,称为“Transformer layer”。

如图1b所示,BERT4Rec通过L个双向Transformer layers进行stack组成。每个layer上,它会通过使用Transformer layer并行地跨之前层的所有positions交换信息,来迭代式地修正每个position的表示。通过如图1d的方式,以step-by-step的RNN-based的方式来前向传播相关信息进行学习,self-attention机制会赋予BERT4Rec直接捕获任意距离间的依赖。该机制会产生一个全局的receptive field,而CNN-based方法(比如:Caser)通常有一个受限的receptive field。另外,对比RNN-based方法,self-attention更容易并行化。

对比图1b, 1c, 1d,大多数显著的不同之处是,SASRec和RNN-based方法都是从左到右的单向结构,而BERT4Rec使用双向self-attention来建模用户的行为序列。这种方式下,我们提出的模型可以获取关于用户行为序列的更强大表示,来提升推荐效果。

3.3 Transformer Layer

如图1b所示,给定一个长度为t的输入序列,我们在每一层l的每个position i上同时使用transformer layer来迭代式地计算隐表示。这里,我们将进行stack在一起来形成一个矩阵(matrix) ,因为我们会在实际上同时计算所有positions的attention function。如图1a所示,Transformer layer Trm包含了两个sub-layers:一个Multi-head self-attention sub-layer以及一个position-wise feed-forward network。

Multi-Head self-Attention. Attention机制在许多任务中变为序列建模的一部分,它可以捕获在representation pairs间的依赖,无需关注序列中的距离。之前的工作表明,在不同positions上的不同表征子空间上的信息进于jointly attend是有用的[6,29,52]。因而,我们可以采用multi-head self-attention来替代执行单一的attention函数。特别的,multi-head attention会首先使用不同的、可学习的线性投影,将线性投影到h个子空间(subspaces)上,接着以并行的方式使用h个attention functions来生成output表示,它们可以进行拼接,然后进行再次投影

…(1)

其中,每个head的投影矩阵是可学习的参数。

这里,出于简洁性,我们忽略掉layer上标l。实际上,这些投影参数并不是跨网络共享的。这里,Attention函数是scaled dot-product attention:

…(2)

这里,query Q, key K 和value V使用等式(1)中不同学到的投影矩阵从相同的矩阵进行投影。 temperature 被引入用来生成一个softer attention分布,以避免极小的梯度。

Position-wise feed-forward网络

如上所述,self-attention sub-layer主要基于线性投影。为了使该模型具有非线性以及不同维度间的交叉,我们在self-attention sub-layer的outputs上使用一个Position-wise Feed-forward network,每个position独立且相同。它包含了两个仿射变换(affine transformations),两者间具有一个GELU activation(Gaussian Error Linear Unit):

…(3)

其中:

  • 是标准gaussian分布的累积分布函数,
  • 是可学习参数,并且跨所有positions共享

出于便利我们忽略layer上标l。事实上,这些参数在layer与layer间是不同的。在本工作中,根据OpenAI GPT和BERT,我们使用一个更平滑的GELU activation而非标准的ReLU activation。

Stacking Transformer layer

如上所述,我们可以使用self-attention机制,来很轻易地捕获跨整个行为序列的item-item交叉。然而,通过将self-attention layers进行stacking来学习更复杂的item transition patterns是有利的。然而,该网络会随着更深而变得更难训练。因此,我们两个sublayers的每一个周围都采用一个residual连接,如图1a所示,并使用layer normalization。另外,在它们被normalized后,我们会在每个sub-layer的output上采用dropout[47]。也就是说,每个sub-layer的output是:,其中:是通过sublayer自身实现的函数,LN是由[1]定义的layer normalization function。我们会使用LN来在相同layer上的所有hidden units上归一化inputs,以便加速网络训练。

总之,BERT4Rec以如下形式重新定义了每个layer的hidden表示:

3.4 Embedding Layer

所上所述,由于不使用任何recurrence或convolution模块,Transformer layer Trm不会意识到输入序列的顺序。为了利用输入的顺序信息,我们在Transformer layer stacks的底部,将position embeddings引入到input item embeddings中。对于一个给定的item ,它的输入表示通过对相应的item embedding和positinal embedding进行求和来构成:

其中,对于item 是第d维的embedding,是position index=i上的d维positional embedding。在本模型中,我们使用可学习的positional embeddings来替代确定的sinusoid embedding以提升更高的效果。positional embedding matrix 允许我们的模型来标识要处理哪一部分的input。然而,它也在最大句长N上做了限制。因而,我们需要将输入序列截断取最近的N个items (如果t>N)。

3.5 Output layer

在L layers后,会跨之前层上的所有positions来层次化交换信息,对于input序列的所有items,我们会获得最终的output 。假设我们将item 在timestep t上进行mask,我们接着基于图1b的来预测masked items 。特别的,我们会应用一个两层的feed-forward网络,并使用GELU activation来生成一个在target items上的output分布:

…(7)

其中:

  • 是可学习的投影矩阵
  • 是bias项
  • 是对于item set V的embedding矩阵

我们在input layer和output layer上使用共享的item embedding matrix来减缓overfitting并减小模型size。

3.6 模型学习

训练

常见的单向序列推荐模型通常通过为输入序列中的每个position预测next item的方式来进行训练(如图1c和1d)。特别的,input序列的target是一个shfited版本 。然而,如图1b所示,在双向模型中的left context和right context进行联合,可能会造成:每个item的最终output表示会包含target item的信息。这会使得预测将来项变得更平凡,网络不会学到任何有用的东西。对于该问题一种简单的解法是,从长度为t的原始行为序列中创建t-1个样本(带有next items的子序列,形如:),接着使用双向模型将每个历史子序列进行encode,以预测target item。然而,该方法非常耗时、耗资源,因为我们必须为在序列中的每个position创建一个新样本并进行单独预测。

为了高效地训练我们的模型,我们使用了一个新的objective: [50](在[6]中被称为“Masked Language Model”)来序列推荐中。它是一种测试(test),由将某些词移除后的语言的一部分组成,其中参与者(participant)会被要求填充缺失的词(missing words)。在我们的case中,对于每个training step,我们对输入序列中的所有items的一部分进行随机遮掩(randomly mask)(通过使用特殊token “[mask]”进行替代),接着只是基于它的left context和right context来预测masked items的原始ids。例如:

Input: —->

labels:

对应于”[mask]”的最终的hidden vectors,会被feed给一个在item set上的output softmax,这与常规的序列推荐相同。事实上,我们会为每个masked input 定义loss来作为关于该masked targets的负log似然:

…(8)

其中,是用户行为历史的masked版本,是在它上的random masked items,是masked item 的true item,概率如等式(7)定义。

Cloze task的一个额外优点是,它可以生成更多样性来训练模型。假设一个长度为n的序列,如图1c和图1d所示的常规序列预测可以为训练生成n个唯一的样本,而BERT4Rec在多个epochs上可以获得的样本(如果我们随机mask k个items)。它允许我们训练一个更强大的单向表示模型。

Test

如上所述,我们会在训练和最终序列推荐任务间不匹配(mismatch),因为Cloze objective是为了预测当前maskted items,而序列推荐的目标是预测the future。为了解决该问题,我们会在用户行为序列的结尾添加特殊token “[mask]”,接着,基于该token的最终hidden表示预测next item。为了更好匹配(match)序列推荐任务(例如:预测last item),我们也可以在训练期间生成只在输入序列中mask最后一个item的抽样。它与序列推荐的fine-tuning相似,可以进一步提升推荐效果。

3.7 讨论

这里,我们会讨论我们的模型与之前的工作的关系。

SASRec

很明显,SARRec是从左到右的单向版本的Bert4Rec,它使用单个head attention以及causal attention mask。不同的结构导至不同的训练方法。SASRec会为序列中的每个position预测next item,而Bert4Rec会使用Cloze objective预测序列中的masked items。

CBOW & SG

另一个非常相似的工作是CBOW(Continuous Bag-of-Words)和(SG)Skip-Gram。CBOW会使用在context(包含左和右)中的所有word vectors的平均来预测一个target word。它可以看成是一个简版的BERT4Rec:如果我们在BERT4Rec中使用一个self-attention layer,并在items上具有均匀的attention weights,不共享的item embeddings,移除positional embedding,并将中心项mask住。与CBOW相似,SG也可以看成是BERT4Rec的简版(mask所有items,除了它自身)。从该角度看,Cloze可以看成是CBOW和SG的objective的一个通用格式。另外,CBOW使用一个简单的aggregator来建模word序列,因为它的目标是学习好的word representations,而非sentence representations。作为对比,我们会寻找一个更强大的行为序列表示模型(deep self-attention network)来作出推荐。

BERT

尽管我们的BERT4Rec受NLP中BERT,它与BERT仍有许多不同之处:

  • a) 大多数主要区别是,BERT4Rec是一个用于序列推荐的end-to-end模型,而BERT是一个用于句子表示的pre-training模型。BERT会利用大规模task-independent语料来为许多文本序列任务pre-train句子表示模型,因为这些任务会共享关于该语言的相同背景知识。然而,在推荐任务中不受该假设约束。这样,我们可以为不同的序列化推荐datasets训练BERT4Rec end-to-end。
  • b) 不同于BERT,我们会移除next sentence loss和segment embeddings,因为BERT4Rec会建模一个用户的历史行为,只有在序列推荐中有一个序列

4.实验

评估了三个数据集:

  • Amazon Beauty:Amazon.com收集的产品review数据集。
  • Steam:从在线视频游戏发生商Steam中收集得到,
  • MovieLens:MovieLens电影数据集

4.5 hidden维度d的影响

4.6 Mask比较的影响

4.7 最大序列长度N的影响

4.8 消融(Ablation)研究

参考