【推荐算法】PRM重排模型:Personalized Re-ranking for Recommendation
排序是推荐系统的关键一环。一个排序算法给出的排序列表的质量对用户的满意度和推荐系统的收入都有很大影响。现阶段已有大量的排序算法被提出来优化排序表现。推荐系统中的典型排序只考虑了user-item特征,而忽视了列表中其他items的影响,尤其是那些被并行排列的items。尽管基于pairwise和listwise的LTR方法试图通过把item-pair和item-list作为输入来解决此问题,但是他
ABSTRACT
作为推荐系统的关键环节,排序的任务是给用户提供一个有序的item列表。传统上,一个排序函数通过最优化全局表现从标注过的数据集中得到学习,它能够为每个独立的item输出一个排序分。然而,应用到每个item上的打分函数是独立的,同时也没有明确考虑item之间的相互影响及用户的偏好和意图,这可能带来一个次优解。
因此,我们提出了一个推荐系统的个性化的重排模型(personalized re-ranking model)。这个重排模型可以直接使用已有的排序特征向量,进而作为任何排序算法的后续模块进行简单的部署。这个模型通过使用一个transformer结构来高效地编码推荐列表中所有item的信息,进而直接优化整个推荐列表。特别地,这个transformer应用了一个self-attention机制,这样能够直接建模推荐列表中的任何item-pair的全局关系。我们也证明,如果引入一个预训练的embedding来学习不同用户的个性化编码函数,那么整体的表现能够得到进一步的提升。实验结果表明,提出的重排模型在离线基准和真实的在线电子商务系统中均获得了重要提升。
1. INTRODUCTION
排序是推荐系统的关键一环。一个排序算法给出的排序列表的质量对用户的满意度和推荐系统的收入都有很大影响。现阶段已有大量的排序算法被提出来优化排序表现。推荐系统中的典型排序只考虑了user-item特征,而忽视了列表中其他items的影响,尤其是那些被并行排列的items。尽管基于pairwise和listwise的LTR方法试图通过把item-pair和item-list作为输入来解决此问题,但是他们只关注优化损失函数来让label数据得到更好的利用,并没有对特征空间中的item之间的相互影响进行确切建模。
一些研究趋向于对item间的相互影响进行显示建模,以此改进先前阶段的排序算法生成的初始列表,这就是re-ranking阶段。其主要思想通过将intra-item模式编码到特征空间,并以此构造评分函数。现阶段编码特征向量最新的方法是基于RNN的,例如GlobalRerank和DLCM。它们把初始列表有序地输入给基于RNN的网络结构,同时在每个时间步输出编码向量。然而,基于RNN的方法对建模列表中item间的相互作用能力有限。先前被编码的item的特征信息会随着编码距离而衰减。受机器翻译领域Transformer结构启发,我们提出使用Transformer来建模item间的相互影响。Transformer结构使用self-attention机制(注意力机制),self-attention可以做到任意两个item能够直接互相影响而不会在编码距离上退化。与此同时,由于并行机制,Transformer的编码过程会比基于RNN的方法更有效。
除了item间的相互作用,推荐系统的重排也应该考虑交互的个性化编码函数。推荐系统中的重排通常是用户特定的,取决于用户的表现和意图。对一个对价格敏感的用户来说,“价格”特征之间的交互在重排序模型中应该更为重要。典型的全局编码函数可能不是最优的,因为它忽视了每个用户的特征分布之间的差异。例如,当用户关注价格比较时,具有不同价格的相似item在列表中往往更集中。当用户没有明显的购买意向时,推荐列表中的item往往更加多样化。因此,我们在Transformer结构中引入了一个个性化模块,来表示用户的偏好和对item交互的意图。在我们的个性化重排模型中,列表中的item和用户之间的交互可以同时被捕获。
本文的主要贡献如下:
- Problem:我们提出了一个推荐系统中的个性化的重排luation序问题,据我们所知,这是在大规模在线系统中的重排序任务中首次显式地引入个性化信息。实验结果证明了在列表表征中引入用户表征进行重排序的有效性。
- Model:我们使用具有个性化embedding装备的Transformer来计算初始输入排序列表的表征,并输出重排序分。与基于RNN的方法相比,self-attention机制使我们能够更有效、更高效地建模任意两个item之间用户特定的相互影响。
- Data:我们发布了本文使用的一个大规模数据集(电子商务重排序数据集)。这个数据集来自一个真实的电子商务推荐系统。数据集中的记录包含一个排序使用的推荐列表,记录用户-点击标签和特征。
- Evaluation:我们进行了离在线实验来证明我们提出的方法要明显优于最先进的方法。在线 A/B实验表明,我们的方法取得了更高的点击率和更高的实际系统收益。
2. RELATED WORK
我们的工作诣在改进base排序算法生成的初始排序列表。在这些基本排序算法中,LTR是一个被广泛使用的方法。根据损失函数的区别,LTR方法可以被分为三类:pointwise,pairwise,listwise。所有的这些方法学习一个全局打分函数,在这个函数中特定特征的权重也是全局学习的。然而,特征的权重应该有能力识别item之间间的交互和用户与item之间的交互。
与我们工作最接近的重排方法,它们使用整个初始列表作为输入,同时建模不同方式下item间的复杂依赖。如[1]使用单向GRU把整个列表的信息编码到每个item的表征。[37]使用LSTM、[3]使用pointer网络不仅能够编码整个列表信息,也能够通过一个解码器生成重排后的列表。对于这些要么使用GRU要么使用LSTM来编码item的依赖的方法,编码能力受限于编码距离。在本文中,我们使用类transformer的编码器,基于注意力机制在O(1)的距离下对任意两个item间的交互进行建模。除此之外,对于那些使用解码器来顺序生成有序列表的方法,它们不适用于要求严格约束标准的在线排序系统。当顺序解码器使用在t-1时间选出的item作为输入来选择t时刻的item时,它不能并行处理,并需要n次推理,这里的n的输出列表的长度。[2]提出了一个能够并行对item进行打分的groupwise的评分函数,但是由于这个函数需要枚举列表中每个可能的item组合,它的计算代价很高。
3. RE-RANKING MODEL FORMULATION
在本章节,我们先给出推荐系统中LTR和重排方法的初步知识。然后我们阐述本文诣在解决的问题。本文使用的符号如下:

LTR在真实世界的系统中被广泛用于排序,目的是为信息检索和推荐系统生成有序的列表。LTR方法根据items的特征向量,学习一个全局的评分函数。有了这个评分函数,LTR方法通过对候选集中每个item进行打分来输出一个有序的列表。这个全局的评分函数通常通过最小化下面的损失函数学到:

-
R is the set of all users’ requests for recommendation.(推荐系统中所有用户的请求集)
-
Ir is the candidate set of items for request r ∈R. (请求r的item候选集)
-
xi represents the feature space of item i.(item i的特征空间)
-
yi is the label on item i, i.e., click or not. (item i的点击label)
-
P(yi |xi;θ) is the predicted click probability of item i given by the ranking model with parameters θ. (参数为θ的排序模型对item i预估的点击概率)
-
ℓ is the loss computed with yi and P(yi |xi ; θ). (真实label与预估概率计算出来的loss)
然而,对于学到一个好的打分函数而言,xi并不够。我们发现,推荐系统中的排序应该考虑下面的一些额外信息:(a)item-pairs间的相互影响;(b)用户和items之间的交互。item-pairs之间的相互影响能够直接从初始列表Sr中学得,其中Sr是已有的LTR模型为请求r生成的结果列表。已有工作提出了一些方法来充分利用item-pairs之间交互信息。然而,几乎没有研究考虑用户和items之间的交互。item-pairs交互的影响程度在用户间是千变万化的。在本文中,我们引入一个个性化矩阵PV来学习用户指定的编码函数,使得这个函数有能力建模item-pairs间的个性化相互影响。该模型的损失函数如下:

其中,Sr是先前排序模型给出的初始列表,是我们的重排模型的参数,X是列表中所有item的特征矩阵。
4. PERSONALIZED RE-RANKING MODEL
该章节,我们首先对我们提出的个性化重排模型PRM进行概述,然后我们详细介绍我们模型的每个组成部分。
4.1 Model Architecture
PRM模型的网络结构如下图所示:

PRM模型由三部分组成:input layer、encoding layer、output layer。它将前序排序方法生成的item的初始列表作为输入,并输出一个重排后的列表。
4.2 Input Layer
输入层的目标是准备初始列表中所有item的全面表征,并将其feed到编码层。首先,我们有一个固定长度的初始序列列表S= [i1, i2, ..., in ],S由前面的排序方法给出。与前面的排序方法一样,我们有一个原始特征矩阵。X的每一行表示每个item
的原始特征向量Xi。
Personalized Vector (PV). 编码两个item的特征向量能够建模item间的相互影响,但是从某种层度来说,这些相互影响对用户的影响是未知的。因此需要学习一个用户特定的编码函数。尽管整个初始列表的表征能够部分地反应用户偏好,这对于一个强有力的个性化编码函数而言仍是不够的。如下图所示:

我们concat原始特征向量和一个个性化矩阵
,这样可以得到一个中间结果的embedding矩阵
。PV矩阵由一个预训练模型生成,该模型可以是FM、FFM、DeepFM、DCN、FNN、PNN等通用模型,这个模型在下面的章节5会有介绍。PV的表现收益在评估部分将会介绍。

Position Embedding (PE). 为了利用初始列表中的序列信息,我们为输入embedding注入一个位置embedding,。这样编码层的embedding矩阵可以通过下面的公式计算得到。

在本文中,我们使用了一个可学习的PE矩阵,我们发现它略优于其他文献中使用固定位置的embedding。
最后,我们使用一个简单的前馈网络将特征矩阵E′′∈Rn×d(feature)+d(pv)转化为E∈Rn×d,其中d是编码层每个输入向量的潜在维数。E可表示为如下方程式。

其中,∈
是投影矩阵,
是d维向量。
输入层小结:输入层的目标是对初始列表中的所有item进行一个全面的embedding表征,得到embedding向量之后,将其feed给编码层。Input Layer的输入是一个原始特征矩阵X,其中的每一行为每个item i的一个原始特征向量xi(d_feature维)。同时,为了引入user-item之间的交互信息,使用了一个预训练模型输出的个性化矩阵PV(d_pv维)。将原始特征矩阵X和个性化矩阵PV进行concat得到一个中间embedding矩阵E′(d_feature维+d_pv维)。再引入一个可学习的PositionEmbedding矩阵PE(d_feature维+d_pv维),其目的是利用初始列表中的序列信息。这样输入给编码层的embedding矩阵为E′′ = [x_i concat pv_i] + pe_i。再将E′′过一个前向神经网络将其转化为d维矩阵E。这样最终的E为Input Layer的输出。
- 原始特征矩阵X,每一行为每个item i的一个原始特征向量xi,d_feature维。特征矩阵X可以通过原始特征(user、item、交叉等维度的稠密统计特征)经过一层全连接的输出进行表示。
- 个性化矩阵PV,为了引入user-item交互信息,使用一个额外的预训练模型输出的个性化矩阵,d_pv维。(训练PV矩阵的直接方法是使用重排的loss将PV融入到PRM模型中做端到端的训练,本文采用的方式是使用一个额外的预训练的神经网络,个人理解这个PV矩阵应该不是必须。)
- PositionEmbedding矩阵PE,为了利用初始列表中的序列信息,引入的一个可学习的PE矩阵,d_feature维+d_pv维。
4.3 Encoding Layer

编码层的目标是集成item对和其他额外信息的相互影响,包括用户偏好和初始列表S的排序顺序。为了完成这个目标,我们采用了类Transformer的编码器,因为Transformer已经在很多NLP任务中被证明是有效的。特别是在机器翻译中,相比于基于RNN的方法,它具有强大的编码和解码能力。Transformer中的注意力机制特别适合我们的重排任务,由于它直接建模任意两个item间的相互影响而忽略了它们之间的距离。如果没有距离衰减,Transformer可以捕获初始列表中彼此相距较远的item之间的更多交互。如下图所示:

我们的编码模块由Transformer编码器中的Nx个模块组成。其中的每个模块包含一个attention层和一个 Feed-Forward Network (FFN) 层。
Attention Layer. 本文使用的attention函数定义如下:

其中,矩阵Q、K、V分别表示查询queries、键keys和值values。d是矩阵K的维度,以避免内积的较大值。softmax用于将内积的值转换为值向量V的加权。在本文中,我们使用self-attention,其中 Q、K、V是从同一个矩阵投影得到。
为了建模更复杂的交互影响,我们使用了多头注意力机制:

其中WQ、WK、WV∈Rd×d。WO∈Rhd×d_model是投影矩阵。h是多头中头的数目。在下一节的简明研究中将研究不同h值的影响。
Feed-Forward Network. 这种position-wise的前馈网络(FFN)的主要功能是增强具有非线性和输入向量不同维数之间相互作用的模型。
Stacking the Encoding Layer. 在这里,我们使用attention模块后面接position-wise的FFN 作为一个Transformer编码器的模块。通过叠加多个块,可以得到更复杂、更高阶的互信息。
编码层小结:编码层的目标是集成item对和其他额外信息的相互影响,即将Input Layer输出的Embedding信息进行高阶信息交叉。PRM中的编码模块由Transformer编码器中的Nx个模块组成,其中的每个模块包含一个attention层和一个Feed-Forward-Network层。PRM使用的attention层如下,其中Q、K、V是从同一个矩阵投影得到。为了建模更复杂的交互影响,PRM使用了多头注意力机制,因此单层Encoding Layer的结构包括一个multi head self attention和一个前向FFN网络。

4.4 Output Layer
输出层的功能主要是为每个item(i = i1, . . . , in)生成一个score,在图1b中标记为score(i)。我们使用一个线性层,后跟一个softmax层。softmax层的输出是每个item的点击概率,这里将其标记为P(yi|X,PV;θˆ)。我们用P(yi|X,PV;θˆ)作为score(i)为items进行重排序。score(i)的公式为:

其中,是Transformer编码器的Nx个模块的输出,
是可学习的投影矩阵,
是偏置项,n是初始列表中的item数量。
在训练阶段,我们使用点击数据(click-through data)作为label,并最小化下面的损失函数。

输出层小结:输出层的目标是为每个item进行评分。该层的网络结构为一个线性层Linear Layer后接一个softmax层,softmax层的输出就是每个item的点击概率,这个预估结果也就是每个item的重排分。
4.5 Personalized Module
本小节将介绍个性化矩阵PV的计算方法,PV是表征用户和items交互的矩阵。直接的方法是通过重排序的loss,使用PRM模型以端到端的方式去学习PV矩阵。然而,如章节3解释的那样,重排是为了改进先前排序方法的输出。重排任务学习到的特定任务表征缺乏用户的普遍偏好。因此,这里使用了一个预训练的神经网络来生成用户的个性化embeddings(PV),并将PV作为PRM模型的额外特征。预训练的神经网络是从平台的全部点击日志中学习出来的。
预训练模型的结构如下:

sigmoid层输出user u在用户的所有行为历史Hu及用户的side information下对于item i的点击概率P(yi|Hu,u;θ′)。用户的side information包括gender、age、purchasing level等特征。该模型的loss可以通过一个point-wise的交叉熵函数(cross entropy function)计算得到。

其中,D是平台展示给用户u的items集合,θ′是预训练模型的参数矩阵,yi是对item i点击与否的label。受其他研究启发,我们使用了sigmoid层之前的隐向量作为个性化向量pvi,来输入给我们的 PRM模型。
上图c展示了一个可能的预训练模型的网络结构,如FM、FFM、DeepFM、DCN、FNN、PNN等其他通用的模型也可以用来当作生成PV矩阵的替代模型。
5 EXPERIMENTAL RESUTLS
5.1 Experimental Settings

参考文献
【知乎】RecSys 2019 - Personalized Re-ranking for Recommendation[PRM,阿里] - 重排序算法
更多推荐
所有评论(0)