浅析Attention在推荐系统中的应用(2)阿里Deep Interest Network模型

欢迎关注本人公众号: petertalks

目录:

浅析Attention在推荐系统中的应用(1)Attention简介

浅析Attention在推荐系统中的应用(2)阿里Deep Interest Network模型

浅析Attention在推荐系统中的应用(3)AutoInt模型

浅析Attention在推荐系统中的应用(4)Transformer与阿里BST模型

 

阿里妈妈算法团队2018年时在KDD上发表了《Deep Interest Network for ClickThrough Rate Prediction》。该文一经发表便被业界赞不绝口,仔细阅读更是让人眼前一亮。这篇文章首先是创新性的将NLP领域的Attention技术应用到了推荐领域中(虽然据说当时原团队并不是从nlp中得到的启发),其次这是一篇工程性特别强的文章,文章中提到的很多优化方法如gauc、dice等更是在实践中摸索出来的。除此之外这篇文章更是反映除了算法团队对业务的深刻理解和对用户行为的深入观察。

 

背景与动机

阿里每天有着大量的用户,更是积累着海量的用户行为数据包括点击、下单、加入购物车等等。本文中的场景主要是利用阿里海量的用户数据为用户提供合适的广告,是个典型的广告场景其实也是个推荐场景。

文中提到了用户的兴趣有着两个特点:

  • Diverse 指的是用户的行为往往体现出多种兴趣,例如一个年轻的母亲她可能会对羊毛衫、包、童装、耳环、奶粉等感兴趣。

  • Locally activated 指的是用户是否会点击某个推荐的商品,往往取决于他之前的部分兴趣而不是全部兴趣。例如给一个用户推荐泳衣,他是否会买,往往取决于他之前是否购买过泳镜等游泳用品有关,而跟他是否买过某个牌子的耳机等行为没有关系。

按照之前的深度学习模型如Wide&Deep、DeepFm等的套路,应对此类行为特征,往往是将用户的行为序列离散后过一个embedding层,得到一个embedding vector,例如用户购买了(泳衣A,零食B, 耳机C),那么 购买序列embedding vector = [embedding(泳衣A), embedding(零食B), embedding(耳机C)],为了将该多值特征转变为定长,往往会使用一些简单的pooling方法例如average pooling、sum pooling等,结果是对于不同的推荐商品将历史行为的权重看成是相等的。然而实际来讲,我们明白他们的重要性应该是不一样的。如果我的推荐item是个泳镜,那么行为序列中泳衣A的权重就应该大些,如果待推荐的是零食A那么零食B的权重应该更大。于是DIN模型变孕育而生。

 

模型

 

特征层面

阿里广告系统跟工业界CTR预估常用做法一样,用了大量稀疏特征,例如大量的id类特征、categorial特征等,并且没有进行任何的特征交叉和组合。

 

 

网络结构

一般模型的结构如上图所示呈现出一个(feature->embedding->sum pooling->concat & flatten -> MLP)的结构。

再看看DIN模型

通过对比两张图我们可以发现DIN跟其他Base Model的主要不同是在我们对类别特征做完embedding之后,并没有直接直接做sum pooling的方式,而是先过了Activation Unit,也就是注意力模块。通过注意力模块,我们可以得到对于待推荐商品A,我们每个历史行为偏好所占的权重w, 通过加权求和,我们便可以做到针对不同的商品对历史行为有所偏重,也就是文章开头提到的Locally activated。

接下来的关键便是Activation Unit(AU)该如何设计。说到attention我们便应该想起上篇文章中所提到的attention经典公式。

很容易想到这边的Q便是待推荐的item的embedding或者embedding * W,而K便是用户行为序列的embedding或者embedding * W,V便是行为序列的embedding。这样我们便得到了attention值。

不过论文中针对推荐场景对上面的计算方法做了些细节性的改动。

包括几个方面:

  1. 将原来的点积替换成了Out Product(外积),这块可能更多是作者通过不同的实验和对比得到的选择。

  2. 去除掉了传统attention最后一层的softmax归一化,不再保证权重w的和一定为1。按照作者的看法,去除softmax之后的权重w的和从某些程度上反映出了用户兴趣的强烈程度,相比传统的attention能给保留更多的信息。

作者也曾经采用lstm之类的序列模型来刻画用户行为序列的时序,但没有取得提升,可能的原因是相比语法严格的NLP任务,埋藏在用户行为序列中的用户兴趣具有多发性、跳跃性和突然性会给序列引入噪声。

 

训练技巧

作者在文中出了模型本身之外更是提到了几个训练技巧。

 

Mini-batch Aware Regularization(MAR)

在阿里实际进行深度学习训练时,作者发现很容易发生过拟合,尤其在大规模稀疏的id特征上。在下图可以看出没有加正则化的din在第一个epoch后train loss就发生断崖式下降,而test loss却急剧上升,test auc也是急剧下降。

但是论文使用的数据具有很强的稀疏性,然而传统的正则化方法例如L2正则化,需要在所有参数上进行正则化计算,会带来很大的计算成本。

于是文中提出了自适应正则化,在每个mini-batch中,只对非0特征对应参数计算L2正则化,并且强度与特征出现频次有关,频次越高强度越低,反之越高。对于第m个batch,第j个特征的embedding权重wj的更新可用下面公式表示

B_{m}B_{m}表示第m次mini-batch的数据集,n_jn_j 表示特征 j 在整个训练集S中出现频次,{\alpha}_{mj} \in \{0,1\}{\alpha}_{mj} \in \{0,1\}表示B_{m}B_{m}中是否至少有一个样本的特征 j 取值为1,正则参数\lambda \lambda文中取0.01。

 

Data Adaptive Activation Function(Dice)

prelu是一种特别常见的激活函数,可用以下公式表示:

其中p(s)是控制f(s)在f(s)=s和f(s)=as,切换的函数。作者改进了p(s)函数,使得p(s)-s曲线变得更加光滑,并且能够适应每一层输入数据的分布变化。当E(s)=0且Var(s)=0时,便退化成为了prelu。

 

实验评估指标

 

Gauc

对于ctr预估场景,之前业界往往采用auc来衡量离线效果,这边作者提出了gauc的概念,也就是每个用户的平均auc,经过实验gauc与线上模型的表现更加的接近。

 

RelaImpr

作者提出了RelaImpr,来衡量模型的相对提升情况。对于随机的情况auc为0.5,所以可以得到RelaImpr的公式:

 

实验结果

作者总共用了Amazon Dataset、MovieLens以及阿里自己的实际数据进行评测,结果如下图所示。

 

 

最后,像阿里这样流量巨大的场景,要做好Din的serving也并不是什么容易的事情,作者在最后也提出了在serving这边的几点建议,包括batch合并、gpu内存优化和并行计算等。大家可以直接看下下面原文。

 

 

参考资料

https://arxiv.org/pdf/1706.06978.pdf

https://arxiv.org/abs/1706.03762

https://zhuanlan.zhihu.com/p/54085498

https://zhuanlan.zhihu.com/p/51623339

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值