论文链接:Deep Interest Network for Click-Through Rate Prediction
论文详情:2018年阿里系的推荐系统DIN
论文收录在KDD2018的会议上
出发点和贡献
- 现有的基于深度学习的模型使用定长的feature size来描述用户特征,不同的广告可能需要不同的用户信息(interest),因此设计了一种随广告不同而呈现不同特征的用户特征机制。
- 通俗点来讲,本文认为原有的sparse特征是用户行为数据,用户行为数据中包含了多种用户兴趣数据,不同的用户兴趣可能对应不同的广告内容,原本单一的把用户行为数据映射到统一定长的用户特征无法反映多样的用户兴趣,应该针对不同的广告从用户行为数据中抽取/建模不同的用户兴趣。
- 举个例子,一位用户会不会点击眼霜广告取决于他过往的化妆品消费记录,而与他上周买的自行车记录无关。(感觉就是一个在原本特征上加attention的过程)
- 其他贡献有
- mini-batch aware regularization:传统的L2正则化需要在每个batch计算巨大的参数量,设计了一种针对每个batch计算L2的正则化方式
- data adaptive activation function:借鉴PRelu,设计了一种激活层
其他背景知识
- 在cost-per-click(CPC)的广告系统中,广告的排序标准是eCPM(effective cost per mile),即广告点击率(CTR)和竞标价格的乘积。
模型架构
- 特征:
- 用户属性、物品属性、contex属性,如性别、国家、当前时间等,使用one-hot特征
- 购买记录和浏览记录,使用multi-hot特征,比如购买过鞋子和帽子,则该两种物品对应的位置都是1
- base model
- embedding layer:将k-hot的特征转化为k个定长的向量
- pooling layer and concat layer:由于每个用户的行为特征数目不同(浏览过的商品数不同),因此对行为特征做pooling,再把所有特征concat起来
- mlp:全连接层
- loss:negative log-likelihood function(logloss)
- DIN 网络(proposed):
- 用local activation unit将candidate ad的特征与当前行为数据做运算得到权重值,最后对所有行为数据进行加权的求和池化
- 具体的unit网络结构可以看图中的右上角,先做一个点乘,再进行concat,最后使用全连接层计算一个权重值
- 注意所有权重的和不一定是1,直接把这个限制给丢弃了,不太清楚这里为什么这么做(本来应该加一个softmax层?)
- 这里尝试过使用LSTM来建模序列化的行为数据,但是收效甚微,因为用户行为数据虽然有一定的时序性,但是受到的干扰和噪声数据太大,可能需要重新对序列网络进行数据
- mini batch aware regularization:
- 主要是针对embedding层,只对k-hot序列不为0的部分对应的embedding参数进行正则化计算
- data adaptive activation function:
- PRELU:
- DICE: 修改了控制函数p(s),因为原有的控制函数太hard了,对于来自不同分布(不同attn)的输入表现不佳。DICE使用类似于正则分布的控制函数。
实验
- 数据集:
- Amazon dataset:公开数据集,作为benchmark(包括训练数据),只在subset Electro上做实验
- alibaba dataset:私有数据集,包括训练数据
- movielens dataset:公开数据集,包括训练数据
- 对比方案:
- LR
- basemodel
- wide&deep
- pnn
- deepfm
- 性能指标:
- weighted AUC:使用点击进行加权
- relaImpr:和basemodel做对比 $RelaImpr = (\frac{AUC(measured\; model)-0.5}{AUC(base\; model)-0.5}-1)*100% $
- 实验结果
代码实现
稍后上线
一些总结和想法
- 主要的卖点在于加了一个与输入样本相关联的attention机制
- 两个工程性的实现,第一个提高了计算的效率,第二个提高了泛化的能力
- 胜在可解释性强,可以做一定的可视化