Deep Interest Network for Click-Through Rate Prediction
解决的问题
以往的CTR预估模型遵从一个常规套路:大规模的稀疏的输入特征首先被映射为低维度的embedding向量,然后通过某种方式转换成一组固定长度的向量,拼接在一起,然后喂给全连接层来学习特征间的非线性关系。与普通的逻辑回归模型相比,这种方法能够省去大量的特征工程。然而用户兴趣具有多样性,用一个低维度向量来表示用户可能会变成表达用户兴趣的瓶颈。另一方面,在预测某一特定广告的CTR时,没有必要把用户的全部兴趣压缩在一个向量中,因为用户兴趣中只有一部分能够影响到他对这条广告的行为。
基于以上的分析,我们提出了Deep Interest Network (DIN),它在计算用户兴趣表示的时候考虑进了用户历史行为与候选广告的关联。通过引入一个局部的**单元,DIN能够通过一个与候选广告相关的,对历史行为进行的带权重的池化来注意到与当前候选广告相关的用户兴趣。
此外我们还设计了minibatch正则和PReLU来解决大规模参数无法计算L2正则的问题。
DIN
首先我们来定义问题:
- 将第 i i i组特征编码成向量写作 t i ∈ R K i t_i \in R^{K_i} ti∈RKi,其中 K i K_i Ki表示特征组 i i i的向量维度,也就是说组 i i i包含 K i K_i Ki个独一无二的id。
- t i [ j ] t_i[j] ti[j]表示 t i t_i ti的第 j j j维,并且 t i [ j ] ∈ { 0 , 1 } t_i[j] \in \{0,1\} ti[j]∈{0,1}
有了以上式子,一个样本就可以表示为
x
=
[
t
1
T
,
t
2
T
,
.
.
.
,
t
M
T
]
x = [t_1^T, t_2^T, ..., t_M^T]
x=[t1T,t2T,...,tMT],其中
M
M
M是特征组数。
∑
i
=
1
M
K
i
=
K
\sum^M_{i=1}K_i = K
∑i=1MKi=K,
K
K
K是整个特征空间的维度。于是一个有4组特征的样本就可以表示为:
我们系统中用到的全部特征如上表所示,注意到我们并没有使用组合特征。
base model
业界常见的模型结构如上图所示,这个模型分为以下几个部分:
- embedding层
embedding层用来将高维的二值特征转换成低维的稠密表示。对于 t i t_i ti,令 W i = [ w 1 i , . . . , w j i , . . . , w K i i ] ∈ R D ∗ K i W^i = [w_1^i, ..., w_j^i, ..., w_{K_i}^i] \in R^{D * K_i} Wi=[w1i,...,wji,...,wKii]∈RD∗Ki来表示第 i i i个映射字典,其中 w j i ∈ R D w_j^i \in R^D wji∈RD表示一个 D D D维的向量。如果 t i t_i ti是一个one-hot向量, t i t_i ti的表示就是 e i = w j i e_i = w_j^i ei=wji;如果 t i t_i ti是multi-hot向量,那么 t i t_i ti的表示就是 { e i 1 , e i 2 , . . . , e i k } = { w i 1 i , w i 2 i , . . . , w i k i } \{e_{i_1}, e_{i_2}, ..., e_{i_k}\} = \{w_{i_1}^i, w_{i_2}^i, ..., w_{i_k}^i\} {ei1,ei2,...,eik}={wi1i,wi2i,...,wiki} - pooling和concat层
由于用户的历史行为长度是不固定的,而全连接层只能接收定长输入,通常的做法是通过一个池化层来处理用户历史,得到定长向量:
e i = p o o l i n g ( e i 1 , e i 2 , . . . , e i k ) e_i = pooling(e_{i_1}, e_{i_2}, ..., e_{i_k}) ei=pooling(ei1,ei2,...,eik)
最常见的两种池化方法就是sum pooling和average pooling。池化后不同组的定长向量会拼接在一起。 - MLP
全连接网络,用来自动进行特征交叉。 - loss
base model中的目标函数就是普通的负对数似然函数:
L = − 1 N ∑ ( x , y ) ∈ S ( y l o g p ( x ) + ( 1 − y ) l o g ( 1 − p ( x ) ) ) L = -\frac{1}{N} \sum_{(x, y) \in S}(y logp(x) + (1-y)log(1-p(x))) L=−N1∑(x,y)∈S(ylogp(x)+(1−y)log(1−p(x)))
DIN的结构
常规模型中用固定长度的向量来表达用户的兴趣,这会成为表达用户多种兴趣的瓶颈。解决这一问题最直接的方法就是扩大用户向量的维度,然而这可能会导致过拟合,以及增加计算和存储的负担致使模型无法训练。而DIN通过模仿用户点击物品时的注意力机制,优雅地解决了用户兴趣多样性的问题。
DIN的模型结构如上图所示,除增加了一个局部**单元外,其他部分与base model保持一致。**单元应用在用户历史,用来根据候选广告
A
A
A做有权重的sum weight:
v
U
(
A
)
=
f
(
v
A
,
e
1
,
e
2
,
.
.
.
,
e
H
)
=
∑
j
=
1
H
a
(
e
j
,
v
A
)
e
j
=
∑
j
=
1
H
w
j
e
j
v_U(A) = f(v_A, e_1, e_2, ..., e_H) = \sum^H_{j=1} a(e_j, v_A) e_j = \sum^H_{j=1} w_je_j
vU(A)=f(vA,e1,e2,...,eH)=j=1∑Ha(ej,vA)ej=j=1∑Hwjej
其中
{
e
1
,
e
2
,
.
.
.
,
e
H
}
\{e_1, e_2, ..., e_H\}
{e1,e2,...,eH}是用户
U
U
U的历史行为向量
H
H
H,
v
A
v_A
vA是广告
A
A
A的向量,
a
(
⋅
)
a(\cdot)
a(⋅)是一个前馈网络。如上图所示,除了两个输入向量,
a
(
⋅
)
a(\cdot)
a(⋅)还计算二者的外积输入到后面的网络。
上式的思想与attention类似,然而与传统attention不同的是,
∑
i
w
i
=
1
\sum_iw_i = 1
∑iwi=1的约束被去掉了,用以保留用户对不同广告的兴趣的强度。我们也试过用LSTM来模拟用户的历史行为数据,然而并没有带来效果上的提升。与NLP任务不同的是,用户历史序列可能会包含多个并存的兴趣。在这些兴趣间跳来跳去会让用户行为变得无规律可循。一个可能的后续研究方向是设计特殊的结构来使用序列模型。
训练技术
mini-batch aware regularization
PReLU
tbc