- 《架构师》2019年6月
- InfoQ中文站
- 4352字
- 2020-06-26 06:07:23
阿里将Transformer用于淘宝电商推荐,效果优于DIN和谷歌WDL
基于深度学习的方法已经广泛用于工业推荐系统(RSs)。以前的工作通常采用嵌入(Embedding)和MLP范式:原始特征嵌入到低维向量中,然后将其输入 MLP 以获得最终的推荐结果。然而,这些工作中的大多数只是连接不同的特征,忽略了用户行为的连续性。近日,阿里巴巴搜索推荐事业部发布了一项新研究,首次使用强大的Transformer 模型捕获用户行为序列的序列信号,供电子商务场景的推荐系统使用。该模型已经部署在淘宝线上,实验结果表明,与两个基准线对比,在线点击率(CTR)均有显著提高。本文是 AI 前线第79 篇论文导读,我们将对这项研究工作进行详细解读。
论文作者系阿里巴巴Qiwei Chen、Huan Zhao、Wei Li、Pipei Huang、Wenwu Ou,由AI前线编译整理
介绍
推荐系统(RSs)已经在工业界流行了十来年,在过去五年里,基于深度学习的方法在工业界得到了广泛应用,例如,Google的wide & deep模型和Airbnb的《Real-time personalization using embeddings for search ranking》。在阿里电商平台,RSs已经成为GMV和收入的关键引擎,并在丰富的电子商务场景中部署各种基于深度学习的推荐方法。RSs在阿里巴巴分为两个阶段:匹配(match)和排名(rank)。在匹配阶段,根据用户和商品的交互,一些相似的商品被选择出来作为候选集,然后学习一个fine-tuned预测模型,来预测用户点击给定候选商品集的概率。
在本文中,我们关注的是阿里巴巴淘宝的排名(rank)阶段。在阿里电商平台有数百万候选商品,我们需要根据用户的历史行为,预测他/她点击给定候选商品的概率。在深度学习时代,嵌入和MLP已经成为工业RSs的标准范式:大量的原始特征嵌入到低维空间中作为向量,然后输入到全连接层,即多层感知机(MLP),以预测用户是否会点击某个商品。其代表工作是Google的wide&deep网络(WDL)和阿里巴巴的深度兴趣网络(DIN)。
在淘宝,我们基于WDL网络构建rank模型,其中各种特征都使用Embedding和MLP范式,比如,商品的类别和品牌特征、商品的统计特征、用户画像特征。尽管这一框架取得了成功,从本质上讲,它远不能令人满意,因为它在实践中忽略了一种非常重要的信号,即用户行为序列背后的序列信号,即用户按顺序点击商品。实际上,该顺序对于预测用户的未来点击非常重要。例如,用户在淘宝买了一部iPhone后,往往会点击手机外壳,或者在买了一条裤子后试图找到合适的鞋子。从这个意义上来说,在淘宝排名阶段部署一个预测模型时,不考虑这个因素是有问题的。在WDL中,它仅仅是连接所有特征,而没有捕获用户行为序列之间的顺序信息。DIN提出使用注意力机制来捕获候选项与用户先前点击商品之间的相似性,但未考虑用户行为序列背后的序列性质。
因此,在这项工作中,为了解决WDL和DIN面临的上述问题,我们尝试将淘宝上的用户行为序列的顺序信号整合到RS中。受自然语言处理(NLP)中机器翻译任务Transformer大获成功的启发,通过考虑嵌入阶段的顺序信息,我们运用了self-attention机制,在用户行为序列中,为每个商品学习一个更好的表征。然后,将它们输入MLP,以预测用户对候选商品的反馈。
Transformer的主要优点是,它能更好地捕获句子中单词之间的依赖性,通过self-attention机制,直观地说,用户行为序列中item之间的“依赖关系”可以通过Transformer抽取。因此,我们提出了在淘宝电商推荐中的用户行为序列Transformer(BST)。离线实验和在线A/B测试表明,BST与现有方法相比有明显优势。目前BST已经部署在淘宝推荐的rank阶段,每天为数亿消费者提供推荐服务。
本文第2节将详细阐述BST的体系结构,第3节介绍包括离线和在线测试的实验结果。相关工作在第4节中进行了回顾,最后是我们对这项工作的总结。
架构
在rank阶段,我们将推荐任务建模为点击率(CTR)预测问题,定义如下:给定用户的行为序列S(u) = {v1, v2, …, vn }被用户u点击,我们需要学习一个函数F来预测用户点击vt的概率,其中vt是其中的一个候选item。其他特征包括用户画像、上下文、item和交叉特征。
我们在WDL之上构建BST,总体架构如图1所示。从图1中,我们可以看到它遵循流行的Embedding&MLP范式,其中,先前的点击item和相关的特征首先嵌入到低维向量中,然后再输入到MLP。BST和WDL之间的关键区别在于我们添加了Transformer层,通过捕获底层的顺序信号来学习更好地表征用户点击的item。在下面的部分中,我们自下而上地介绍了BST的关键组件:Embedding层、Transformer层和MLP。
图1 BST的总体架构
BST将用户的行为序列作为输入,包括目标item和其他特征。它首先将这些输入特征嵌入为低维向量。为了更好地捕获行为序列中item之间的关系,Transformer层用于学习序列中每个item的更深层次的表示。然后通过连接其他特征的嵌入和Transformer层的输出,三层的MLP用于学习隐藏特征的交互作用,Sigmoid函数用于生成最终的输出。
注:“位置特征”被纳入了“序列特征”。
2.1 Embedding层
第一个组件是Embedding层,它将所有输入特征嵌入到固定大小的低维向量中。在我们的场景中,有各种各样的特征,比如,用户画像特征、item特征、上下文特征以及各种不同的组合特征。由于这项工作的重点是用Transformer建模行为序列,为了简单起见,我们将所有这些特征表示为“其他特征”,并在表1中给出一些示例。如前面图1所示,我们将左侧的“其他特征”连接起来,并将它们嵌入到低维向量中。对于这些特征,我们创建了一个嵌入矩阵Wo∈ R(|D |×do),其中do是维度大小。
此外,我们还获得了行为序列中每个项目的嵌入,包括目标item。如前面图1所示,我们使用两种类型的特征来表征一个item, “序列item特征”(红色部分)和“位置特征”(深蓝色)。其中,“序列item特征”包括item_id和category_id。
请注意,一个item往往有数百个特征,但是,在行为序列中选择全部来表征这个item太昂贵了。正如我们之前的工作《Billion-scale commodity embedding for e-commerce recommendation in alibaba》介绍,item_id和category_id对于性能来说已经足够好了。
在嵌入用户行为序列中,我们选择这两个作为稀疏特征来表征每个item。“位置特征”对应于下面的“位置嵌入”。然后,对于每个item,我们将序列特征与位置特征相结合,生成嵌入矩阵Wv ∈ R(|V |×dv),其中,dv为嵌入的维度大小,|V |为item的数量。我们使用ei ∈ R(dv)来表征给定行为序列中第i个item的嵌入。
位置嵌入:在《Attention is all you need》论文中,作者提出了一种位置嵌入来捕获句子中的顺序信息。同样,顺序也存在于用户的行为序列中。因此,我们添加“位置”作为bottom layer中每个item的输入特征,然后将其投射为低维向量。注意,item vi的位置值计算为pos(vi)=t(vt)-t(vi),其中,t(vt)表示推荐的时刻,t(vi)表示用户点击item vi时的时间戳。我们采用这种方法是因为在我们的场景中,它优于《Attention is all you need》论文中使用的sin和cos函数。
2.2 Transformer层
Transformer层通过捕获与行为序列中其他item的关系,为每个item学习更深入的表征。
Self-attention layer
scaled点积attention在论文《Attention is all you need》定义如下:
其中,Q表示查询,K表示键,V表示值。在我们的场景中,self-attention操作将item的嵌入作为输入,并通过线性投影将它们转换为三个矩阵,并将它们输入到attention层。跟论文《Attention is all you need》一样,我们使用multi-head attention :
其中,投影矩阵W(Q)、 W(K) 、W(V) ∈ R(d×d) , E是嵌入所有item的矩阵。h是head的数量。
Point-wise Feed-Forward Network
在论文《Attention is all you need》基础上,我们添加了point-wise Feed-Forward Network (FFN),以进一步增强模型的非线性能力,定义如下:
为了避免过拟合,并从层次上学习有意义的特征,我们在self-attention和FFN中都使用了dropout和LeakyReLU。
self-attention和FFN层的整体输出如下:
其中,W(1)、b(1)、 W(2)、 b(2)都是可学习的参数,和LayerNorm层是标准的归一化层。
堆叠self-attention块
在self-attention之后,它聚合了之前所有item的嵌入。为了进一步建模item序列基础上的复杂关系,我们将自构建块堆叠起来,第b个块的定义如下:
在实践中,我们在实验中观察到与b=2,3相比b=1获得了更好的性能(见下文表4)。为了效率,我们没有尝试更大的b,这部分工作将在接下来进一步研究。
2.3 MLP层和损失函数
通过连接其他特征的嵌入和应用于目标item的Transformer层的输出,我们使用三个完全连接的层来进一步学习稠密特征之间的交叉,这是在工业界的标准实践。
为了预测用户是否点击目标item vt,我们将其建模为一个二元分类问题,使用sigmoid函数作为输出单元。为了训练这个模型,我们使用了交叉熵(cross-entropy)损失函数:
其中,D代表所有样本,y ∈ {0, 1}为标签表示用户是否点击了某个item, p(x)是经过sigmoid单元之后的网络输出的概率值,表示样本x被点击的预测概率。
实验
3.1 设置
数据集
数据集是根据淘宝App的日志构建的。我们根据用户8天内的行为构建了一个离线数据集。我们使用前七天作为训练集,最后一天作为测试集。数据集的统计数据如表2所示。我们可以看到数据集非常大并且稀疏。
基准线
为了说明BST的有效性,我们将其与两个模型进行比较:WDL和DIN。此外,我们还通过将顺序信息整合到WDL中创建一个基准,称为WDL(+Seq),它平均聚合以前点击的item的嵌入。我们的框架是建立在WDL之上的,通过添加Transformer的顺序建模,而DIN被提出是由于用attention机制捕获目标item和先前点击的item之间的相识性。
评价指标
对于离线结果,我们使用AUC评分用于评估不同模型的性能。对于在线A/B测试,我们使用CTR和average RT评估所有的模型。RT是响应时间的缩写,表示给定查询生成推荐结果的耗时。我们使用平均RT作为度量标准来评估不同在线生产环境下的效率。
配置
我们的模型是用Python 2.7和TensorFlow 1.4实现的,并选择“Adagrad”作为优化器。此外,我们在表3中给出了模型参数的详细信息。
3.2 结果分析
结果如表4所示,从中我们可以看到BST相对基准线的优势。
具体来说,离线实验的AUC由0.7734(WDL)和0.7866(DIN)提高到0.7894(BST)。当比较WDL和WDL(+Seq)时,我们可以看到,以简单的平均方式整合顺序信息的有效性。这意味着在self-attention的帮助下,BST提供了一种强大的能力来捕获用户行为序列的顺序信号。请注意,从我们的实践经验来看,即使是线下AUC的微小收益也会导致在线CTR的巨大收益。在WDL中,Google的研究人员也报告了类似的现象。
此外,在效率方面,BST的平均RT接近WDL和DIN的平均RT,这保证了在现实推荐场景中大规模部署像Transformer这样的复杂模型的可行性。
最后,我们还展示了堆叠self-attention层的影响。从表4可以看出,b=1得到最佳的离线AUC。这可能是由于用户行为序列中的顺序依赖性不如机器翻译任务中句子复杂,因此,少量的块数量,就足以获得良好的性能。类似的观察报告见《Self-attentive sequential recommendation》论文。因此,我们选择b=1在生产环境中部署BST,只报告了表4中b=1的在线CTR的收益。
相关工作
自从WDL提出以来,业界研究同仁提出了一系列以深度学习为基础的方法,如Deepfm、Xdeepfm、Deep&Cross网络等。但是,所有这些之前的工作都集中在神经网络的特征组合和不同架构,忽略了实际推荐场景中用户行为序列的顺序性。2017年,阿里妈妈的精准定向检索及基础算法团队提出了深度兴趣网络DIN,通过注意力机制来处理用户的行为序列。
我们的模型和DIN的关键区别在于,我们提出使用Transformer来学习用户行为序列中每个item的更深层的表征,而DIN试图捕获之前点击的item和目标item之间的不同相似性。换句话说,我们的Transformer模型更适合捕获顺序信号。在《Self-attentive sequential recommendation》论文和《Sequential Recommendation with Bidirectional Encoder Representations from Transformer》论文中,提出Transformer来解决顺序推荐问题,同时在CTR预测方面,体系结构方面不同于我们的模型。
结论
在本文中,我们介绍了如何将Transformer应用到淘宝推荐中的技术细节。利用强大的序列关系捕获能力,通过大量的实验证明了该Transformer在用户行为序列建模中的优越性。此外,我们还介绍了在淘宝生产环境中部署该模型的细节,目前BST已经在淘宝线上为中国数亿用户提供推荐服务。