「Deep Interest Network for Click-Through Rate Prediction」- 论文摘要

前言#

目前深度学习已经运用在点击率预测上了,在这些方法中,首先将大规模稀疏输入特征映射到低维嵌入向量中,然后按照分组方式变换为定长向量,最后连接在一起馈入多层感知器(MLP)以学习非线性关系 特征。 通过这种方式,无论候选广告是什么,用户特征都被压缩成一个固定长度的表示向量。但是 使用定长的向量会带来瓶颈,这将会使 Embedding&MLP 方法从历史信息中捕获用户的多样化的兴趣带来困难

本文提出了 DIN 模型,可以
(1) 使用兴趣分布代表用户多样化的兴趣(不同用户对不同商品有兴趣)
(2) 与 attention 机制一样,根据 ad 局部激活用户兴趣相关的兴趣(用户有很多兴趣,最后导致购买的是小部分兴趣,仅仅取决于历史行为数据中的一小部分,而不是全部。attention 机制就是保留并激活这部分兴趣)。

在输入层增加了激活单元

Introduction#

随着深度学习在 CV、NLP 等领域取得突破性进展,一些研究也开始尝试将 DNN 应用于 CTR 预测。
一般做法:

在输入上面加一层embedding层,把最原始高维度、稀疏的数据转换为低维度的实值表示上(dense vector)。
增加多个全连接层,学习特征之间的非线性关系。Sparse Features -> Embedding Vector -> MLPs -> Output

用户的历史行为数据由于存在一个用户有多个兴趣,仅仅通过 embedding 转成成定长的特征向量是有局限性的,即 diverse 问题。

DEEP INTEREST NETWORK#

本文提出 DIN 模型,同时对 Diversity 和 Local Activation 进行建模。

  • Diversity:针对用户广泛的兴趣,DIN 用 an interest distribution 去表示。
  • Local Activation:历史行为中部分数据主导是否会点击候选广告。DIN 借鉴机器翻译中的 Attention 机制,设计了一种 attention-like network structure, 针对当前候选 Ad,去局部的激活 (Local Activate) 相关的历史兴趣信息。和当前候选 Ad 相关性越高的历史行为,会获得更高的 attention score,从而会主导这一次预测。能够很好的捕获用户兴趣的多样性特征。

CTR 中输入普遍存在的特点:

  • 高纬度
  • 高度稀疏
  • 多值离散特征 (涉及到用户行为数据,例如访问多个不同的商品 id 等)

用户购买过的 good_id 有多个,购买过的 shop_id 也有多个,而这也直接导致了每个用户的历史行为 id 长度是不同的。针对多值离散特征,为了得到一个固定长度的 Embedding Vector 表示,原来的做法是在 Embedding Layer 后面增加一个 Pooling Layer。Pooling 可以用 sum 或 average。最终得到一个固定长度的 Embedding Vector,是用户兴趣的一个抽象表示,常被称作 User Representation。缺点是会损失一些信息。DIN 使用 Attention 机制来解决这个问题。在 DIN 场景中,针对不同的候选广告需要自适应地调整 User Representation。也就是说:在 Embedding Layer -> Pooling Layer 得到用户兴趣表示的时候,赋予不同的历史行为不同的权重,实现局部激活

Feature Representation#

把特征分为四大类:

从图中可以看出主要的特征包括:用户特征、用户行为特征、广告特征、上下文特征。其中用户行为特征为多值离散特征,这就会导致每个用户的样本长度都是不同的,同时也需要对多样化的兴趣建模。解决方法:Embedding -> pooling + attention

Base Model(Embedding&MLP)#

结构图:

  • Embedding layer:输入的是高维度的二值向量 (one-hot),通过 Embedding layer 后转化成低维 dense vector。

  • Pooling layer and Concat layer:对于一个用户,之前购买过的 good_ids 组成了一个 user behavior sequence ids。针对不同的用户,这个序列的长度是不同的 (不同用户购买的物品数量不同),所以在 Embedding Layer 后加入 Pooling Layer,使用的是 sum operation,把这些 goods 或 shops 的 embedding vector 相加,得到一个固定长度的向量作为 MLPs 的输入。

  • MLP:全连接层

  • Loss:

L=1N(x,y)S(ylogp(x)+(1y)log(1p(x)))L = - \frac{1}{N} \sum_{(x,y) \in S}(y logp(x)+(1-y)log(1-p(x)))

DIN#

结构图:

由于经过 Pooling 层后会损失一定的信息,则提出了 DIN 模型,实际上是在 Embedding 层和 Pooling 层之间加入 activation 单元,这个思想来自 attention 机制,实际上也可以说在 Base Model 上加入了 attention 机制,而这个与传统的 attention 机制不同的是权重 Wi 的大小是针对用户兴趣的。举个例子:假设用户的历史行为中包含 90% 的衣服和 10% 的电子产品,现在 给两个候选广告 T-shirt 和 iPhone,那么对应于 T-shirt 激活单元的权重应该远大于对应于 iPhone 的激活单元。

本文尝试用 LSTM 以序列的方式建模用户历史行为数据。但是并没有提升。与 NLP 任务中受语法约束的文本不同,用户历史行为的序列可能包含多个同时存在的兴趣。 快速跳跃和突然结束这些兴趣会导致用户行为的序列数据看起来是噪声。

模型的目标:基于用户历史行为,充分挖掘用户兴趣和候选广告之间的关系。用户是否点击某个广告往往是基于他之前的部分兴趣,这是应用 Attention 机制的基础。Attention 机制简单的理解就是对于不同的特征有不同的权重,这样某些特征就会主导这一次的预测,就好像模型对某些特征 pay attention。但是,DIN 中并不能直接用 attention 机制。因为对于不同的候选广告,用户兴趣表示 (embedding vector) 应该是不同的

在 MLP 中使用 PReLu:

f(s)={sif<0αsif:s0=p(s)s+(1p(s))αsf(s) = \left\{\begin{matrix} s & if < 0 \\ \alpha s & if: s \leqslant 0 \end{matrix}\right. = p(s) \cdot s +(1-p(s)) \cdot \alpha s

无论是 ReLU 还是 PReLU 突变点都在 0,论文里认为,对于所有输入不应该都选择 0 点为突变点而是应该依赖于数据的。于是提出了一种 data dependent 的方法:Dice 激活函数:

f(s)=p(s)+(1p(s))αs,p(s)=11+esE[s]Var[s]+ϵf(s) = p(s) \cdot + (1-p(s)) \cdot \alpha s, p(s) = \frac{1}{1+e^{-\frac{s-E[s]}{\sqrt{Var[s]+\epsilon }}}}

pi 的计算分两步:

1、 首先,对 x 进行均值归一化处理,这使得整流点是在数据的均值处,实现了 data dependent 的想法;
2、 其次,经过一个 sigmoid 函数的计算,得到了一个 0 到 1 的概率值。巧合的是最近 google 提出的 Swish 函数形式为 x sigmoid (x) 在多个实验上证明了比 ReLU 函数 xMax (x,0) 表现更优。

另外,期望和方差使用每次训练的 mini batch data 直接计算,并类似于 Momentum 使用了指数加权平均:

E[yi]t+1=E[yi]+αE[yi]t+1{E[y_{i}]{t+1}}’ = {E[yi]}’ + \alpha E[y{i}]_{t+1}

Var[yi]t+1=Var[yi]+αVar[yi]t+1{Var[y_{i}]{t+1}}’ = {Var[yi]}’ + \alpha Var[y{i}]_{t+1}

α\alpha 是一个超参数,推荐值为 0.99。

总结#

  • 用户有多个兴趣爱好,访问了多个 good_id,shop_id。为了降低维度并使得商品店铺间的算术运算有意义,我们先对其进行 Embedding 嵌入。那么我们如何对用户多种多样的兴趣建模呢?使用 Pooling 对 Embedding Vector 求和或者求平均。同时这也解决了不同用户输入长度不同的问题,得到了一个固定长度的向量。这个向量就是用户表示,是用户兴趣的代表。
  • 但是,直接求 sum 或 average 损失了很多信息。所以稍加改进,针对不同的 behavior id 赋予不同的权重,这个权重是由当前 behavior id 和候选广告共同决定的。这就是 Attention 机制,实现了 Local Activation。
  • DIN 使用 activation unit 来捕获 local activation 的特征,使用 weighted sum pooling 来捕获 diversity 结构。
  • 在模型学习优化上,DIN 提出了 Dice 激活函数、自适应正则 ,显著的提升了模型性能与收敛速度。
本作品采用《CC 协议》,转载必须注明作者和本文链接
文章!!首发于我的博客 Stray_Camel (^U^) ノ~YO