Press "Enter" to skip to content

推荐系统遇上深度学习(一一五)-[阿里]上下文感知的生成式重排网络

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

今天分享一篇阿里在重排序方面的工作。重排序目前也受到越来越多的关注,目前大多数的重排序方法使用的新的排序分对精排阶段得到的候选列表进行重排,忽略了物品之间的相互影响关系等上下文信息。而本文提出了一种新的生成式重排网络,一起来看一下。

 

1、背景

 

一个完整的推荐系统大都分为召回、精排和重排几个阶段。由于精排阶段大都使用point-wise方法,在预估ctr/cvr等指标时无法考虑上下文曝光的影响,因此需要重排阶段对精排结果进行进一步排序。

 

重排序目前也受到越来越多的关注,当前大多重排策略使用不同于精排阶段的排序公式对结果进行排序,主要分为两类方法。第一类是global point-wise方法,这类方法忽略了物品之间的相互影响;另一类是local list-wise方法,这类方法将精排结果作为输入,输出每个物品新的排序分,如下图中,精排结果为i 1 ,i 2 ,i 3 ,i 4 ,通过list-wise的模型给每个物品输出新的排序分,最终的重排结果为i 1 ,i 4 ,i 3 ,i 2 。这类方法大都使用贪婪的方式对结果进行重排,排序结果并非是最优的,例如对于i 3 来说,0.2的预估值是将其排在i 1 和i 2 之后,i 4 之前得到的,一旦重排结果变为i 1 ,i 4 ,i 3 ,i 2 ,其预估值会发生变化,因此是次优的。

 

 

重排阶段有效利用上下文信息能够大大改善重排效果。比如将一个便宜的物品放在一个较贵的物品之后,相较于直接推荐便宜的物品,更能够激发用户的购买欲望。那幺应如何有效利用这些上下文信息呢?论文借鉴Actor-Critic的思路,提出了一种生成式重排网络(Generative Rerank Network,简称GRN),一起来看一下。

 

2、GRN介绍

 

GRN主要借鉴Actor-critic的思路,主要包含了两部分的网络:Evaluator和 Generator。Evaluator采用 Bi-LSTM 和自注意力机制分别捕获列表的序列信息和物品之间的相互影响,在考虑上下文影响的情况下更好地预测最终排序列表中每个物品的交互概率。Generator则通过pointer-network、GRU和注意力机制来生成最终的重排列表,并通过Evaluator的反馈进行更新。接下来对这两部分进行详细介绍。

 

2.1 符号定义

 

 

上图中,V代表实际最终展示给用户的重排结果,而O代表生成器生成的重排结果,二者有所区别。

 

2.2 Evaluator介绍

 

Evaluator的结构如下图所示:

 

 

可以看到,Evaluator的输入是V,也就是最终展示给用户的重排列表,同时使用双向lstm来捕获用户在浏览过程中的意图变化以及使用self-attention来捕捉物品之间的相互影响关系。对列表中的第t个物品来说,两部分的输出分别记作 h t 和 a t ,随后与物品特征 x v t 和用户特征 x u 进行拼接,通过MLP输出每个物品的预估值:

 

 

而Evaluator使用二分类交叉熵损失进行训练:

 

 

2.3 Generator介绍

 

Generator的结构如下图所示:

 

 

对Generator,主要分为三层Evolving Layer、Activating Layer和Selector Layer。

 

Evolving Layer

 

Evolving Layer使用GRU来提取已选择结果的顺序信息,对于每一个选择的物品,都对应一个隐状态的输出 h 。

 

Activating Layer

 

已选择的物品对于未选择物品有着不同的影响,比如用户在浏览了许多衣服之后,也许会希望浏览一些其他品类的物品。因此,Generator使用Activating Layer来计算每个未选择物品与已选择物品的相关性权重,并进行加权:

 

 

Selector Layer

 

最后,Selector Layer用来计算每一步该选择的物品,对于每一个未选择的物品,通过MLP来计算对应的未归一化权重,并通过softmax对权重进行归一化,并选择剩余物品中权重最大的作为改步的输出。特别地,MLP层的输入包含了三部分,分别是用户和物品的特征,以及Activating Layer输出的加权向量:

 

 

 

 

那幺,generator通过循环执行直到生成的列表长度达到预设的长度为止。最终生成的列表计作O。

 

最后的问题是,如何对generator进行训练?这里借鉴的是policy-gradient的训练方法。奖励定义分为两部分,分别是Self reward和Differential reward。Self reward通过Evaluator计算得到:

 

 

Differential reward的含义是重排列表中某个物品带来的用户交互概率的差异,其结果也通过Evaluator计算得到:

 

 

那幺将上述两部分奖励结合,生成的重排列表O中第t个物品的奖励为:

 

 

最终的损失函数为:

 

 

2.4 训练过程

 

再来看一下GRN的训练过程。GRN采用的是两阶段交替训练的策略,首先训练Evaluator,随后固定Evaluator,训练Generator,如此循环。具体过程如下图所示:

 

 

3、实验结果及分析

 

最后看一下GRN的实验结果,首先是离线结果:

 

 

 

再来看一下线上的表现,GRN部署在淘宝的猜你喜欢模块,并通过边缘计算实现端上实时重排,减少了整体的耗时约30ms。同时,考虑到总时间成本较长,进一步实现了提前触发和延迟完成机制。特别地,在当前页面的最后一个位置之前几个位置请求 GRN。此外,GRN 在每次请求时都会返回比预期更多的结果,以弥补下一次请求的空缺。最终,线上指标也得到了不错的提升。

 

 

好了,论文就介绍到这里啦~~

 

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注