推荐系统论文阅读(三)-阿里巴巴个性化重排序算法

论文原文


论文题目:《Personalized Re-ranking for Recommendation》

论文链接:https://arxiv.org/pdf/1904.06813.pdf

一 、背景

大型推荐系统的推荐分为好几个阶段:


Fig 1 推荐系统的四个阶段

ps:图来源张俊林老师知乎文章《推荐系统技术演进趋势:从召回到排序再到重排》

在传统的推荐系统中,推荐可以分为召回+排序两个阶段,召回阶段从海量商品库中筛选出用户感兴趣的商品,召回任务的特点是快速,能快速选出用户感兴趣的大量商品,这个阶段用的特征不用很多很全面,模型通常比较简单。在排序阶段,由于要精确给用户推荐商品了,这个时候就会用比较复杂的模型,把更多的特征融入到模型中,通过精准的排序方法把对应的商品推荐给用户。

如果在召回阶段召回了大量的商品,但是排序阶段不再细分的情况下,排序模型可能跟不上召回阶段,所以这个时候可以加上粗排,后面在进行精排,粗排阶段可以引入多一点的用户特征和商品特征了,而在精排环节,就可以引入你所能想到的所有特征,模型也可以更加复杂。

排序结果出来后是可以直接推给用户的,但是有时候为了更多的业务需求,需要对这些物品进行重排序,比如去已读、去重、打散、多样性保证、固定类型物品插入等等。

本文的主要工作就是推荐系统的最后一个阶段:重排序

为什么进行重排序而不是直接把精排的结果直接推荐给用户呢,文中提到,排序阶段从标记的数据集中学习排序功能以优化全局性能,从而为每个单独的项目生成一个得分。但是,它可能不是最佳选择,因为评分功能分别应用于每个项目,并且没有明确考虑项目之间的相互影响以及用户偏好或意图的差异。所以,在重排序阶段引入了Transformer结构来对每一个item pair关系进行建模,从而直接优化整个推荐列表,进一步提高性能。

二、问题和符号定义

2.1 符号定义


Table 1 符号定义

2.2 Learning to Rank

LTR(learning to rank) 方法通过一个全局的函数给每一个item打分,然后根据分数进行排序来产生初始化的推荐列表,全局的损失函数如下:

公式中的每个参数跟Table 1中的定义一样,l 是计算y_{i} 和P(y_{i} | .)的交叉熵损失,其实就是Ctr预估中的损失。

但是通过这种方式去优化模型的参数会产生问题,光靠item的特征x不足以学习到一个很理想的排序函数。阿里的研究人员发现,推荐系统的排名应考虑以下额外信息:

(a)项目对之间的相互影响

(b)  用户与项目之间的互动关系

物品对之间的相互影响可以直接从现有LTR模型为请求r给出的初始列表S_{r} = [i_{1} i_{2} ,...,i_{n} ]中学习。但是,很少有模型考虑用户和项目之间的交互。 物品对的相互影响程度因用户而异。 本文引入了个性化矩阵PV来学习用户特定的编码功能,该功能可以对物品对之间的个性化相互影响进行建模。

新的loss定义如下:


比上面的loss多了PV,其他的是一样的,Sr是初始化列表,参数变成来re-rank模型的参数。

三、模型结构



3.1 模型的输入

S = [i_{1} , i_{2}...i_{n}  ] 为上一个排序阶段的结果,共有n个item

X 是item的原始特征向量,维度为n ✖️ d-feature

Personalized Vector (PV ):预训练模型中得到的个性化矩阵向量,维度是n ✖️d-pv

把X和PV拼接后形成一个原始特征+个性化特征的矩阵E^‘:


PE: 位置特征向量,维度为n ✖️(d-pv+d-feature)

将PE和E^‘相加后形成矩阵E^":


有了E^"后,将它送到一个全连接层后想成一个最终的矩阵E,维度是n✖️d:


3.2  Encoding Layer

就是Transformer的结构

Attention:

Multi head attention:

Feed-Forward Network和Stacking the Encoding Layer:在《Attention is all you need》中有,就不展开了。

3.3 Output Layer


Nx个位置的结果都计算一个值,然后对这Nx个值进行softmax操作得出分数,这里W^F 和B^F 应该是每个位置共享的参数,用来学习每个item的得分。


上式是模型的损失函数,yi是每个item的标签,个人觉得在这个模型中,所有的item的标签都为1

3.4 Personalized Module


个性化部分,用来产生PV向量,在整个模型训练的一开始就要先进行预训练。H_{u} 是用户u交互过的所有物品,除此之外,用户的性别,年龄等信息也会作为特征输入。当然这个模型还可以用fm,ffm.deepfm等来替代,把最后一层的vector拿出来当PV就可以来。该模型的损失函数如下:


三、实验结果



可以看到模型整体的效果相对于其他LTR模型还是有提升的,而且在线上也表现出来优势。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容