这是阿里的一篇提出深度兴趣网络这一结构的文章。
如之前所说,在推荐系统中,用户行为序列含有很强的信息,包含了用户可能对什么类型的商品的兴趣趋向。在之前的YouTube的论文中,采用了将序列信息的embedding vector进行均值处理的方式,实际上这也是大部分网络结构对此的处理方式。人们尝试使用NLP中的序列信息分析方法,比如LSTM进行序列分析,然而效果并不理想,说明用户的行为序列信息与语言的词汇序列有所不同。
在这篇文章中,考虑到一个用户可能对多个不相关领域的商品均有过行为,而简单的将所有领域的商品一概均值则会抹除这部分信息,因此提出了“attention”这一机制。顾名思义,用户对不同的商品行为有着不同的注意力,比如给自己买了一本书,比如给家人买了一件衣服,因此对于不同商品采用了不同的处理方式。网络结构如图所示。
左图为其他典型网络的处理方式,将multi-hot features进行pooling操作。而在DIN中,引入了一个activation weight环节,将用户行为序列中的商品的embedding vector与预测的广告商品的embedding vector进行权值计算,然后用该权值对序列中的商品进行加权pooling处理。其计算公式为
v
U
(
A
)
=
f
(
v
A
,
e
1
,
e
2
,
.
.
,
e
H
)
=
∑
j
=
1
H
a
(
e
j
,
v
A
)
e
j
=
∑
j
=
1
H
w
j
e
j
v_U(A)=f(v_A,e_1,e_2,..,e_H)=\sum_{j=1}^Ha(e_j,v_A)e_j=\sum_{j=1}^Hw_je_j
vU(A)=f(vA,e1,e2,..,eH)=j=1∑Ha(ej,vA)ej=j=1∑Hwjej
这里权值是通过数据训练得到,具体实现有待于进一步探究一下。
模型方面就是这样,提出了attention这一机制。其他工程细节方面,首先文章提出了Dice这一激活函数,如下图所示
其中左面为PReLU激活函数,具体为
右面为本文提出的Dice函数,具体为
Dice函数引入了输入数据的统计信息。第二,在计算正则项时,比如L2正则项,需要计算所有参数的范数,而本文提出的mini-batch aware regularization则是每次在一个mini batch中,仅使用对应特征不为0的参数进行正则项的计算并且更新参数。在CTR估计中,输入数据高维稀疏,且符合长尾分布,许多feature ID仅出现几次,十分容易过拟合。因此在本文中,提出了根据feature ID的频率更新参数,对于高频feature ID,其正则化程度相对较低。具体实现为
第三,本文采用了GAUC代替了AUC,具体如下
即在计算AUC时,不是将所有用户的正负样本在一起计算,而是对于每个用户单独计算自身的AUC,并根据其自身的行为数量(如点击)进行加权处理。
阿里的这篇文章第一遍读来仍有大量地方不是很懂,这里暂且记一下笔记,待详细学习后再做补充。
对于AUC部分,又看了一些资料,做一下补充。
对于LR分类器,输出结果为该样本为正例的概率值p(0<p<1),因此需要设定一阈值,大于该阈值的样本判定为正例,小于该阈值的样本判定为负例。比如为了增加precision,就需要增大阈值,减少判定为正例的数量;而为了增加recall,则需要减小阈值,避免将正例误判为负例。而为了判定一个分类器输出的概率值是否准确,则需要直接判断正例与负例的输出概率高低比较,此时则需要通过AUC(Area Under Curve)来获取。AUC为ROC与横轴围成的面积,横轴为False Positive Rate,即判定为正例的负例占所有负例数量的比例,纵轴为True Positive Rate,即判定为正例的正例占所有正例数量的比例。通常选择另一种计算方式进行计算,即任意拿一个正例与负例进行对比,正例的输出概率值高于负例的输出概率值的概率等于AUC,比如共有
M
M
M个正例,
N
N
N个负例,则共有
M
×
N
M \times N
M×N个正负例对,其中正例概率值大于负例概率值的概率即AUC。
而在推荐排序中,由于具有很强的个性化特点,每个用户的表现各不相同,可能存在点击特别高的用户,因此直接拿AUC衡量并不准确,所以GAUC对每个用户分别计算AUC,然后根据每个人的点击量进行加权求和作为整个模型的AUC。