DIN

文章目录

背景

Deep Interest Network(DIIN)是2018年阿里巴巴提出来的模型,应用场景是阿里巴巴的电商广告推荐业务。DIN来自论文《Deep Interest Network for Click-Through Rate Prediction》,针对互联网电子商务领域,数据特点:Diversity、Local Activation。DIN给出了解决方案:

  1. 使用用户兴趣分布来表示用户多种多样的兴趣爱好
  2. 使用Attention机制来实现Local Activation
  3. 针对模型训练,提出了Dice激活函数,自适应正则,显著提升了模型性能与收敛速度

名词解释:
Diversity:用户在访问电商网站时会对多种商品都感兴趣。也就是用户的兴趣非常的广泛。
Local Activation:用户是否会点击推荐给他的商品,仅仅取决于历史行为数据中的一小部分,而不是全部。

特征

论文将所涉及到的特征分为四个部分:用户特征、用户行为特征、广告特征、上下文特征,具体如下:
DIN
其中并没有组合特征,DIN使用深度神经网络来捕获特征之间的交互。
另外,用户行为特征中会出现multi-hot,原因就是一个用户会购买多个good_id,也会访问多个shop_id,另一个表现就是这样导致了每个用户的样本长度都是不同的。常见做法:Embedding -> Pooling + Attention

Base

在介绍 DIN 之前,我们先来看一个基准模型。这个基准模型就是目前比较常见的多层神经网络,即:先对特征进行 embedding 操作,得到一系列 embedding 向量之后,将不同 group 的特征 concate 起来之后得到一个固定长度的向量,然后将此向量喂给后续的全连接网络,最后输出 pCTR 值,具体网络结构如下:
DIN
红蓝粉三色节点分别表示商品 ID (Goods ID), 店铺 ID (Shop ID), 类目 ID (Cate ID) 三种稀疏特征, 其他的输入特征, 使用白色节点表示 (比如左边的用户特征, 比如用户 ID; 还有右边的上下文特征, 比如广告位之类的特征)。注意 Goods 1 ~ Goods N 用来描述用户的历史行为,候选广告 Candidate Ad 本身也是商品,也具有 Goods / Shop / Cate ID 三种特征。自底向上观察BaseModel模型,可以看到包含3个部分,分别是Embedding层、池化层和聚合层以及MLP层。

Embedding层

对于one-hot和multi-hot编码的特征,经过embedding转换之后,输出的特征向量不一样。
one-hot编码embedding表示是一个单个向量
multi-hot编码embedding表示就是一个向量列表

池化和聚合层

由于不同的用户拥有不同数量的行为数据,而用户行为数据是通过multi-hot进行编码的,这意味着不同用户的历史行为数据产生的Embedding列表长度不同。而MLP层只能处理固定长度的向量,因此通常的做法是将这些向量列表通过池化层来得到固定长度的向量,如上图中蓝色阴影部分所示,具体表达如下:
DIN
一般有求和池化和平均池化两种操作,都是通过逐元素的方式来对列表中的向量进行求和或者取平均操作。

MLP层

学习这些特征向量之间的高阶非线性关系。

损失函数

基于深度学习的CTR模型广泛使用的损失函数是 负对数似然函数(the negative log-likelihood function)Loglos,使用标签作为目标项来监督整体的预测。
DIN

DIN

Base缺点:在对用户历史行为数据进行处理时,Base Model通过pooling操作将它们编码成一个固定长为K维的向量。而K维度向量最多只能表达K个独立的兴趣,而用户的兴趣可能不止K。用大的K效果会更好,但这样会增加学习的参数和在有限的数据中有过拟合的风险。
相比于Base Model,DIN的创新之处在于它引入了一个局部激活单元(local activation unit),即保持了Base Model的整体架构不变,又解决了Base Model针对不同广告,对用户历史行为数据都同等对待的问题。DIN 模型整体的网络结构如下图所示
DIN

local activation unit

激活单元所对应的网络结构如下图所示:
DIN
激活单元的输入包括三个部分:

  1. 原始的用户历史行为 embedding 向量。
  2. 原始的广告 embedding 向量。
  3. 上述两个 embedding 向量经过外积运算后得到的向量。关于最后一个输入向量的作用,论文给出的解释是有利于模拟用户各个历史行为与广告之间的关系。

其他改进

自适应正则化(Mini-batch Aware Regularization)

  1. 针对 feature id 出现的频率,来自适应的调整他们正则化的强度;
  2. 对于出现频率高的,给与较小的正则化强度;
  3. 对于出现频率低的,给予较大的正则化强度。

参数更新计算公式如下:
DIN
其中:
DIN

Dice激活函数

PRelu问题:认为分割点都是 0。但实际上,分割点应该由数据决定。因此,论文中提出了 Dice 激活函数,Dice 激活函数的全称是 Data Dependent Activation Function,其形式如下:
DIN
函数曲线:
DIN

评估指标 GAUC

计算公式:
DIN
GAUC 的计算,不仅将每个用户的 AUC 分开计算,同时根据用户的展示数或者点击数来对每个用户的 AUC 进行加权处理。进一步消除了用户偏差对模型的影响

实现

参考:https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0/blob/master/DIN/model.py

参考

  • https://github.com/datawhalechina/team-learning-rs/blob/master/DeepRecommendationModel/DIN.md
  • https://zhuanlan.zhihu.com/p/39439947
  • https://www.infoq.cn/article/e7bcshce5pmacqnadxte
  • https://www.jianshu.com/p/a2d7ff32684e
上一篇:HugeCTR源码阅读


下一篇:李宏毅2020机器学习——情感句子分类(python 0基础开始)(hw4)