阿里的CTR预测(一):Deep Interest Network

今天我想介绍阿里的同一推荐团队一脉相承的两篇文章,Deep Interest Network for Click-Through Rate Prediction和,Deep Interest Evolution Network for Click-Through Rate Prediction。这是第一部分,主要介绍前一篇文章。

Deep Interest Network(DIN)

Deep Interest Network提出于2017年。它的思路非常值得借鉴。在电子商务系统或者说所有的推荐系统中,CTR预测都是一个值得注意的问题。而在今年了,深度学习方法被广泛地应用于CTR预测中。 这篇文章认为,大部分目前使用的深度学习模型都可以认为是Embedding&MLP结构,即大规模的、稀疏的输入数据首先被压缩成低维的embedding,变成固定长度的输入向量,被输入到全连接网络中去。这些模型大大减少了特征工程的工作量,因此广为流行。

但这些方法仍然有缺点,最大的缺点就是固定维数的向量不能充分地表达用户兴趣的diversity。我们当然可以扩大向量的维数,但这会导致模型overfitting的可能性大大增加。在推荐系统中,兴趣一般由过去的行为来表示。从另一个角度上说,我们也不一定非要用维数很高的向量。用户的兴趣也许很广,但是在预测某些项目的时候我们并不需要知道用户全部的interest。比如说,预测一个用户是不是要买一双鞋子时,我们关心她在买衣服鞋子时的兴趣,而不关心她在买厨房用品时的兴趣。文章把这类兴趣称为locally activated,这个文章都是试图利用attention机制在diversity和locally activated之间寻找较优的平衡。

在淘宝系统中,广告即是商品,也就是一般推荐系统中的item。推荐系统的逻辑如下:把一般的retriever阶段称为Matching,系统逻辑由matching和ranking组成。淘宝使用collaborative filtering来完成matching过程,选择一些candidate,再用CTR prediction方法进行排序。

输入排序算法的feature大部分情况下是multi-group categorical form,它们被one-hot或者multi-hot形式表示出来,一个典型的输入如下:

而整个输入空间则如图所示:

Base Model

淘宝本来使用的是一个Embedding&MLP模型,我们在这里称这个model为Base Model。这个model由如下几部分构成:

Embedding Layer

Embedding Layer负责将一些上面提到的高维的binary vector转变为稠密的低维向量。例如我们可以把约10^7维的goods id向量转化为几十维的embedding向量。Embedding layer使用字典查找的方法,并遵循如下规则:

  • 如果t_i是one-hot vector,就把它转化为简单的embedding,e_i = w_i^j
  • 如果t_i是multi-hot vector,就把它转化为embedding list,\{e_{i_1}, e_{i_2}, ..., e_{i_k}\} = \{w_{i_1}^j, w_{i_2}^j, ..., w_{i_k}^j\}

Pooling layer and Concat layer

但就像之前说的,不同的用户有不同的行为,我们需要把不同数量的embedding向量组合成固定维数的输入向量输入到MLP中去,所以我们需要一个池化层来结合它们。sum-pooling和average pooling都很常用。经过pooling的不同种类的向量会在concat layer组合起来。

MLP

MLPlayer负责预测,Loss function是Log Loss。整个Model的结构如图所示。

Deep Interest Network

池化层虽然能达到目的,但却会损失很大一部分信息。DIN的关键就是利用attention机制学习locally activated information,从而尽可能减少信息损失。DIN引入了一个激活结构,并使用了如下系统结构:

可以看到,最关键的区别就在激活结构上。DIN借鉴了机器翻译领域中常用的attention机制,但和原始的attention结构并不相同。这个attention结构会导致原本的sum pooling变成一个weighted sum pooling,从而学习到locally activated information。简单地说,通过把ad的embedding和behavior的embedding相乘并输入一个FNN网络,我们得到了一个 activation weight,利用这个weight,我们将behaviour的embedding结合起来。
文章作者尝试了使用LSTM方法来学习behavior的序列化信息,但结果没什么提升,所以最终的结构就像我们上面所看到的这样。

Training Techniques

文章还提出了一些训练技巧。

Mini-batch Aware Regularization

我们使用正则化方法来防止过拟合。但是L2正则化意味着在每一个mini-batch的训练中国,都需要计算全部参数的更新,这会导致沉重的计算负担,在大规模数据集中尤其不可接受。所以文章提出了Mini-batch Aware Regularization方法,这个方法能利用数据集的稀疏性减少计算量。这不是我们的重点,具体细节可以去看原文。

Data Adaptive Activation Function

PReLu是一种常用的激活函数。它的表达式如下:

它固定在x = 0时出现转折,但当每一层的输入数据的分布不同时,并不是很合适。阿里提出了一种新的激活函数Dice,是PReLu的一种扩展。

Metrics

我们一般使用AUC进行结果评估,阿里使用了weighted AUC,还提出了另一种名叫RelaImpr的指标。

在A/B Test的结果如下:

猜你喜欢

转载自juejin.im/post/5bbddd58e51d453eb93d9fba