[ 论文阅读 ] [ 2018 KDD ] [ 42 ] Deep Interest Network for Click-Through Rate Prediction


这个博客的目的是串一下阿里的一篇利用神经网络进行点击率预估的文章。作者提出了DIN (Deep Interest Network) 网络, 对点击的提升较大。

特征工程

工业界的数据一般长成categorial的形式,例如,我们有下面的数据:

[weekday=Friday, gender=Female, visited_cate_ids={Bag,Book}, ad_cate_id=Book]

 这个数据表示用户的性别、历史点击行为,以及一则目标广告的类别。

我们可以将这一条数据表示成数值向量的形式:

这个向量的每一个维度都是要么取0要么取1的。

阿里广告系统中用到的特征

包括

  • 用户画像的特征,如性别、年龄
  • 用户的行为特征,主要是历史浏览的特征
  • 广告的特征
  • 以及Context Features

基线模型

就是作者在上线自己提出的模型之前,阿里线上全量的点击率预估模型。

这个基线模型的结构长成下面的样子:

这个网络的输入是高维的binary vectors, 紧接着就是embedding layer, 将输入转换成一个个低维稠密的向量。这是提高模型的泛化能力所必须的,因为原始的输入太稀疏了。接下来就是Pooling layer和Concat layer. 注意,如下图所示,不同的用户历史上浏览过的商品数量是不一样的,行为的种类也是不一样的。因此导致embedding层中embedding的个数也是不一样的,由于接下来要走一个全连接的MLP,而对于全连接MLP的输入一定是一个固定长度的向量,因此必须要将不同个数的embedding转换成一个固定长度的向量。这就需要Pooling。

两个比较常用的pooling layer是sum pooling和average pooling. 对应于对所有的输入embeding进行element-wise的求和或者平均。

Deep Interest Network的网络结构

既然作者提出了DIN网络,那么肯定是原来的网络存在缺陷。那么原来的网络存在什么样的缺陷呢?从上面我们知道,基线模型为了得到一个固定长度的向量对所有的embedding向量进行了pooling操作,不管候选的广告是什么,这个pooling操作得到的向量对一个固定的用户来讲都是相同的。因为我们要估计用户点击候选广告的概率,那么如果pooling操作得到的向量都相同,显然有点不太合理。因此DIN网络做的一点处理是什么呢?见下图:

也就是,相比于基线模型,DIN引入了一个local activation unit. 这个local activation unit的作用是得到一些权重,是的原来的pooling是直接对embedding求和变成了对embedding进行加权求和:

当然权重是与候选广告A有关的。Local activation unit和NMT任务重的attention方法是类似的。不同的地方在于作者这里并没有要求 \( \sum_i w_i = 1 \)。作者说,也尝试过LSTM对用户的历史数据进行建模,但是并没有什么卵用。为什么没有用呢?NLP任务中文本都是基于语法生成的,用户的历史行为可能同时包含多种兴趣,不同的兴趣点之间可能产生rapid jumping以及sudden ending over these interests,所以导致用户行为序列的数据比较noisy。

训练技巧

mini-batch aware正则

过拟合是训练工业级神经网络的一个挑战。例如,visited_goods_ids、goods_id的维度可能有6亿的规模,如果没有正则的话,在训练过程,预测精度会在第一个epoch之后迅速衰减。用传统的L1或L2正则又不太现实,因为参数太多。Only parameters of non-zero sparse features appearing in each mini-batch needs to be updated in the scenario of SGD based optimization methods without regularization.

因此,在文章中,作者引入一种mini-batch aware的正则,只计算出现在每个mini-batch中非零的sparse features对应的参数的L2-norm就可以了。这样就大大减小了计算量。

其中

  • \( \bm{w}_j \) 是第 \( j \) 个embedding vector.
  • \( I( \bm{x}_j \neq 0 ) \) 表示是否 \( \bm{x}\) 有feature id \( j \),
  • \( n_j \) 表示feature id \( j \) 在所有的样本中出现的次数。
  • \( \mathcal{S} \) 表示所有的样本。 

 上面的表达式写成mini-batch的形式为:

 

Data Adaptive激活函数

PReLU激活函数可以表示为:

 

作者在此基础上提出了Dice激活函数,可以随数据进行调整的激活函数。

实验

实验指标

不用整体的AUC,而是每个用户算一个AUC,然后加权平均起来。有文章已经说明这是一个更加合理的评价指标。

 

如何比较不同模型得到的AUC指标呢? 也就是相对于基线模型,不同的模型的AUC提升或是降低了多少?

在MovieLens和Amazon数据集上的表现

图中AUC的指标一目了然,不需要过多的解释。

不同的正则方法的表现

 由于Amazon和MovieLens数据集的特征维度并不是很高,因此神经网络模型过拟合的问题并不是很严重,但是阿里巴巴的数据集contains higher dimensional sparse features. 此时,过拟合就是一个非常大的挑战。作者比较了很多常见的正则方法,例如:

我们看一下Train Loss, Test Loss, Test AUC的变化,来体会一个对于超高维sparse输入如果不加正则的话会有什么后果。

在阿里巴巴数据集上不同正则化方法的AUC指标

不同模型的比较

在线的AB test的实验效果

 CTR提升10%

RPM提升3.8%

DIN的可视化

由于神经网络比较难以解释,一般都会将中间结果进行可视化展示,在这里,作者展示了两个方面:

  1. 对adaptive activation weight进行了可视化展示,看一下是不是相似的商品之间的weight比较高。
  2. 对goods的embedding进行了可视化展示,当然已经降到二维空间进行的展示。同时用不同的颜色表示了不同商品的ctr预测值。颜色越红CTR越高,颜色越蓝,CTR越低。

 

神经网络的工作意会即可,不要太较真。都是启发式的方法。

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM