1 前言
此论文不仅提出了DIN模型,还提出了两个针对真实场景下大规模数据集的模型训练问题的训练技术。
这个模型的使用场景是非常注重用户的历史行为特征的,它的创新点就是使用注意力机制来对用户的兴趣进行动态模拟,而模拟过程的前提就是要有足够多的历史行为数据。
之前的深度学习模型在这个场景下有一个瓶颈,作者在这里将其统称为Embedding+MLP模型,这也就是基线模型,这样的模型对这种推荐任务有一个固定的处理套路。
就是将大量稀疏特征先经过embedding层转为低维稠密的,然后进行拼接,喂到多层神经网络里面去。这些模型在这种个性化广告点击率预测任务中存在的问题就是无法表达用户广泛的兴趣。
因为这些模型在得到各个特征的embedding之后就蛮力拼接,然后各种交叉。这时候根本就没有考虑之前用户历史行为商品具体是什么,究竟用户历史行为中哪个会对当前的点击带来积极作用。
小结:DIN模型主要依赖用户的历史行为,并引入注意力来对兴趣进行模拟,因此传统的criteo,avazu数据集其实就已经不满足DIN要求了,因为这些数据列里面没有用户历史行为信息。另外作者将embedding+MLP称为瓶颈模型,但其本身也还是这个架构。
用户是否点击在很大程度上是依赖他的历史行为的。
例子:目标为键盘。若用户历史点击物品为化妆品,包包,衣服,那他大概率不会对键盘感兴趣。但若用户历史点击物品为电脑,手机,平板,则大概率会感兴趣。
这里也指出若是之前的那些深度学习模型,是无法很好的表达用户广泛多样的兴趣,若想要表达的准确些,就要加大隐向量的维度,但计算量也会变大,若用到了真实的计算场景,电商广告推荐的数据规模是极大的。
但依据上面的例子,并不是所有的用户行为特征都会对某商品的广告点击率起到作用,所以没必要考虑所有的用户历史行为。
这样模型改进的动机就出来了,在业务的角度,我们应该自适应的去捕捉用户的兴趣变化,这样才能较为准确的实施广告推荐;而从模型的角度,我们应该考虑到历史行为与当前商品广告的一个关联性。
为了更好的从用户的历史行为中学习到与当前商业广告的关联性,学习到用户的兴趣变化,作者将注意力机制引入模型,设计了一个“local activation unit”结构,利用候选商品和历史行为商品之间的相关性计算出权重,这个就代表着对当前商品广告的预测,用户历史行为的各个商品的重要性大小,而加入了注意力权重的深度学习网络就是这次的主角DIN。
小结:作者利用用户的历史行为来抽取出兴趣,并且捕捉用户的兴趣变化,以此来做出推荐。但一个用户不可能只有一种兴趣,兴趣是多样的,但对单一的目标候选物品来说,杂七杂八的兴趣会影响精度,所以用注意力来提升模型的精度。
这里一直强调用户的历史行为,这是DIN模型很重要的一列特征,即user behavior features,后面使用了新数据集,其与criteo和avazu数据的最大不同就在于此。
2 DIN模型
在具体分析模型之前,先介绍两个小内容,一个是DIN模型的数据集和特征表示,一个是深度学习模型的基线模型。
2.1 特征表示
工业界的ctr预测数据集一般都是multi- group categorial form的形式,就是类别特征最为常见:

这里的亮点就是框出来的那个特征,包含了丰富的用户兴趣信息。
对于特征的编码,作者举了个例子
【weekday=friday,
gender=female,
vis_id={bag,book},
ad_id=book】
这种情况我们一般直接采用one-hot来进行编码,转成系数的二值特征的形式,但我们注意,第三个特征是一个多值的特征,事实上这种情况是非常常见的,这个时候需要我们使用multi-hot编码,有哪个商品,其对应位置为1其他为0。

这就是要喂入模型的数据格式,需要注意的是上面的特征里面没有任何的交互组合,交互部分交给后面的神经网络。
2.2 基线模型
就是上面提到的Embedding&MLP模型,DIN其实也是基于这个模型设计的,在基础上加了一个新结构(注意力网络)来学习当前候选广告和用户历史行为特征的相关性,从而动态捕捉用户兴趣。
基准模型的结构比较简单,分为三大模块:embedding layer,&concat layer和MLP。

这里大概简述一下各个模块:
2.2.1 embedding layer:
将高维稀疏的输入转化为低维稠密向量,每个离散特征下都会对应一个embedding词典,维度是D*K,D是隐向量维度,K是当前离散特征的唯一取值个数nunique()
这里剖析一下embedding的计算细节:
weekday特征为周五,化为one-hot编码就是【0,0,0,0,1,0,0】,这里假设隐向量维度是D,则这个特征对应的embedding词典是一个D*7的矩阵,计算就是embedding矩阵*【0,0,0,0,1,0,0】T。
其实就是抽取出embedding矩阵中onehot向量为1的那一个embedding向量。
而multi-hot编码的那个会得到embedding向量的列表。
2.2.2 pooling layer and concat layer
pooling层的作用是将用户历史行为embedding变成定长的向量,因为每个用户历史购买的商品数是不一样的,这样上面得到的embedding列表的长度就不一致了,而后面加入全连接层的话要求定长的特征输入:

concat layer层的作用就是拼接,就是将所有的特征embedding向量,加上连续特征,从特征维度的角度拼接整合,作为MLP的输入。
2.2.3 MLP
普通的全连接层,用来学习特征间的各种交互。
2.2.4 loss
由于点击率预估是二分类问题,所以这里的损失函数是负的log对数似然。

上面就是基线模型的全貌,可以看出用户的历史行为特征和当前的候选广告特征在拼起来给神经网络之前是没有任何交互的,虽然拼起来之后给神经网络,有了交互,但这里的交互已经损失了很多信息了,因为它经过了池化,另外池化后综合起来也没有办法看出历史行为中哪个商品与当前商品相关。
改进的思路:
(1) 增加embedding的维度,这样商品的表达能力也就提升了,但计算量也大,不可取。
(2) 在当前广告和用户的历史行为数据中加入注意力机制。
DIN通过考虑候选广告的历史行为相关性,自适应计算用户兴趣表示向量,这个表示向量因广告不同而不同。
3 DIN模型架构
首先其采用的还是基线模型的结构,只是加上了一个注意力机制,根据用户历史行为特征和当前广告相关性给用户历史行为特征embedding进行加权。

框出来的就是改进的地方,这里多了一个local activation unit,输入是历史行为特征和当前候选特征,输出是两者的相关性,这个相关性就是每个历史商品的权重,这里面是一个前馈神经网络。相关性权重与历史行为embedding相乘求和就得到了用户的兴趣表示。
4 两个训练技术
这个也是本篇文章的创新之处,两个都是基于工业实战提取出来的,所以在真实大数据上有应用的价值。
4.1 mini-batch aware regularization
这是一种正则化方式,防止模型的过拟合,是基于L2来做的改进,在真实场景中L2正则会对所有参数都起作用,但实际上,每个mini- batch的样本特征都是非常稀疏的,加入全部参数只会让计算量加大,仅仅约束当前mini- batch下的非0特征就够了。
4.2 数据自适应激活函数
这里提出了一个随数据分布而动态调整的自适应激活函数,是泛化的PRelu。

PRelu采用一个值为0的硬矫正点,当每个层的输入遵循不同的分布时,会不适合。所以作者设计了一个新的自适应激活函数Dice。
5 论文的其他细节
主要还是作者的实验,数据集上,作者采用了三个数据集,一个阿里的真实数据集,两个公开数据集(亚马逊和movielens)
第二个细节就是模型的评估上,用relalmpr来衡量模型的改进程度。
