本文记录DIEN: Deep Interest Evolution Network for Click-Through Rate Prediction的学习笔记。DIEN在DIN的基础上,不光用了candidate ad作为attention机制的一部分来辅助不同兴趣的单独建模,其次采用了一个附加的loss来监督相邻的历史行为的变化过程,即考虑了用户的兴趣的演化过程。
文章目录
论文及代码地址:
论文地址:https://arxiv.org/abs/1809.03672
代码地址:https://github.com/mouna99/dien
论文细节
1. motivation
之前的很多方法没有挖掘用户行为背后的兴趣问题,其次用户的兴趣可能是不断变化的,怎么建模来表示用户兴趣的演化过程呢?DIEN做到的地方有两点:1)从用户的历史行为序列中提取潜在的时序兴趣;2)建模兴趣的演化过程。
具体的,整个兴趣建模的过程分为:interest extractor layer和interest evolving layer。在interest extractor layer,利用GRU建模历史行为间的依赖关系,其次提出了一个附加的loss来监督响铃两次行为对应的隐藏层的特征的变化;在interest evolving layer,作者采用了一种假设,即不同兴趣的演化过程是独立的,这样每次可以用候选的广告(或者理解为最后一次点击的商品)作为attention机制的一部分,让用户的历史行为能自适应的学习这种商品对应的兴趣的权重,为了在这部分也建模从前到后的演化过程,作者提出了一个AUGRU单元,这个AUGRU的作用一方面可以建模用户兴趣的演化过程,其次减弱兴趣漂移带来的影响。
2. method
2. 1 Feature Representation
在线上的展示系统中,一般分为四种特征:用户的画像,用户的行为,候选广告,点击的场景。用户画像通常包括:性别,年龄等;用户行为一般包括:一系列连续点击的商品的id;候选广告包括:广告的id等;点击的场景一般包括:点击的时间。
记用户的行为表示:
x
b
=
[
b
1
;
b
2
;
.
.
.
,
b
T
]
∈
R
K
×
T
x_b=[b_1;b_2;...,b_T] \in R^{K \times T}
xb=[b1;b2;...,bT]∈RK×T,其中
b
t
∈
{
0
,
1
}
K
b_t \in \{0,1\}^K
bt∈{0,1}K,
b
t
b_t
bt表示一个one-hot类型的向量,表示第
t
t
t次的行为,
T
T
T表示点击的行为总数,
K
K
K表示可以点击的商品或者广告总数。
BaseModel 一般采用embedding+MLP的模型,具体可见DIN的基础模型 embedding&MLP部分,用于点击率预测的loss记为:
L
t
a
r
g
e
t
=
−
1
N
∑
(
x
,
y
)
∈
D
N
(
y
l
o
g
p
(
x
)
+
(
1
−
y
)
l
o
g
(
1
−
p
(
x
)
)
)
L_{target}=-\frac{1}{N}\sum_{(x,y)\in D}^N(ylogp(x)+(1-y)log(1-p(x)))
Ltarget=−N1(x,y)∈D∑N(ylogp(x)+(1−y)log(1−p(x)))
其中
y
∈
{
0
,
1
}
y \in \{0,1\}
y∈{0,1}代表用户是否点击了target item,
x
x
x表示输入特征的embedding向量,
p
(
x
)
p(x)
p(x)表示用于预测用户是否点击的概率。
2. 2 Deep Interest Evolution Network
如下图所示,DIEN主要包括三个部分:
- Behavior layer: 用于学习behavior序列对应的embedding向量
- Interest extractor layer: 用于从历史行为中挖掘出相应的兴趣
- Interest evolving layer: 用于建模与target Ad相关的兴趣的演化过程
Interest extractor layer:
用GRU的隐藏层输出表示用户行为的兴趣,GRU模块定义为:
u
t
=
σ
(
W
u
i
t
+
U
u
h
t
−
1
+
b
u
)
r
t
=
σ
(
W
r
i
t
+
U
r
h
t
−
1
+
b
r
)
h
~
t
=
t
a
n
h
(
W
h
i
t
+
r
t
⋅
U
h
h
t
−
1
+
b
h
)
h
t
=
(
1
−
u
t
)
⋅
h
t
−
1
+
u
t
⋅
h
~
t
\begin{aligned} u_t &= \sigma(W^ui_t+U^uh_{t-1}+b^u) \\ r_t &=\sigma(W^ri_t+U^rh_{t-1}+b^r) \\ \tilde{h}_t &= tanh(W^hi_t+r_t \cdot U^hh_{t-1}+b^h) \\ h_t &=(1-u_t)\cdot h_{t-1}+u_t\cdot \tilde h_t \end{aligned}
utrth~tht=σ(Wuit+Uuht−1+bu)=σ(Writ+Urht−1+br)=tanh(Whit+rt⋅Uhht−1+bh)=(1−ut)⋅ht−1+ut⋅h~t
其中
i
t
i_t
it表示GRU模块的输入,
i
t
=
e
b
[
t
]
i_t=e_b[t]
it=eb[t]表示用户采用的第
t
t
t次行为,
h
t
h_t
ht表示第
t
t
t个隐藏层的状态。
W
W
W,
U
U
U表示GRU网络需要学习的内容。
然而,仅仅用上面的方式不能有效的建模用户行为的兴趣,比如隐藏层的状态
h
t
h_t
ht只能间接地表示兴趣,不能直接反应出当前的兴趣
h
t
h_t
ht对下一个点击决策
b
t
+
1
b_{t+1}
bt+1的影响。为了做到这一点,作者首先从所有行为的embedding中采样出来一个点击对(click pairs),包含正负样本,正样本为
b
t
+
1
b_{t+1}
bt+1表示实际行为下一个点击的样本,负样本从行为的embedding抽样一个
b
^
t
+
1
\hat b_{t+1}
b^t+1,模拟下一次未被点击的样本。记这两个样本的embedding向量为
{
e
b
i
,
e
^
b
i
}
\{e^i_b, \hat{e}^i_b\}
{ebi,e^bi},这部分监督隐藏层的loss记为:
L
a
u
x
=
−
1
N
(
∑
i
=
1
N
∑
t
l
o
g
σ
(
h
t
i
,
e
b
i
[
t
+
1
]
)
)
+
l
o
g
(
1
−
σ
(
h
t
i
,
e
^
b
i
[
t
+
1
]
)
)
L_{aux}=-\frac{1}{N}(\sum_{i=1}^{N}\sum_t log\sigma (h_t^i, e_b^i [t+1]))+log(1-\sigma(h_t^i, \hat{e}_b^i[t+1]))
Laux=−N1(∑i=1N∑tlogσ(hti,ebi[t+1]))+log(1−σ(hti,e^bi[t+1]))
其中
σ
(
x
1
,
x
2
)
=
1
1
+
e
x
p
(
−
[
x
1
,
x
2
]
)
\sigma(x_1, x_2)=\frac{1}{1+exp(-[x_1,x_2])}
σ(x1,x2)=1+exp(−[x1,x2])1,
h
t
i
h_t^i
hti表示对于用户
i
i
i第
t
t
t个隐藏层的变化。整个CTR预估模型的损失函数记为:
L
=
L
t
a
r
g
e
t
+
α
∗
L
a
u
x
L=L_{target}+\alpha * L_{aux}
L=Ltarget+α∗Laux
Interest evolving layer:
这一层主要建立在下面两个假设上对用户的兴趣演化进行建模:
- 兴趣是多样性的,但是不同兴趣之间可能会出现转移。用户可能在某一阶段对一件物品感兴趣,同时也可能在另一阶段对其他物品感兴趣。
- 兴趣之间可能会相互影响,但是每个兴趣有自己的进化过程。在建模过程中,我们只需要考虑到与target有关的兴趣演化过程。比如如果候选的target是书籍,我们只需要考虑历史行为中与书籍相关的兴趣的演化过程。
为了建模与target ad有关系的兴趣演化的过程,在这里采用类似DIN的方式,将target ad作为attention的一部分加入到Interest extractor layer 提取到的兴趣(隐藏层 h i t h_i^t hit),在attention 部分,记录attention score为: a t = e x p ( h t W e a ) ∑ j = 1 T e x p ( h j W e a ) a_t=\frac{exp(h_tWe_a)}{\sum_{j=1}^{T}exp(h_jWe_a)} at=∑j=1Texp(hjWea)exp(htWea),其中 e a e_a ea表示target ad的embedding, W ∈ R n H × n A W \in R^{n_H \times n_A} W∈RnH×nA是网络需要学习的权重, n H n_H nH表示隐藏层的维度, n A n_A nA表示embedding的维数。这个分数反应了target ad和输入的embedding之间的关系,越高的分数表示越强的相关性。
在兴趣的演化部分,采用了一个基于注意力机制有关的GRU单元,主要改进GRU单元的update gate。具体表示为:
u
~
t
′
=
a
t
⋅
u
t
′
h
t
′
=
(
1
−
u
t
′
)
⋅
h
t
−
1
′
+
u
~
t
′
⋅
h
~
t
′
\begin{aligned} \tilde{u}_t^{\prime}&=a_t \cdot u_t^\prime \\ h_t^\prime &=(1-u_t^\prime) \cdot h_{t-1}^ \prime + \tilde{u}_t^\prime\cdot \tilde{h}_t^\prime \end{aligned}
u~t′ht′=at⋅ut′=(1−ut′)⋅ht−1′+u~t′⋅h~t′
其中
u
t
′
u_t^\prime
ut′表示GRU单元之前的更新门,
u
t
′
u_t^\prime
ut′表示考虑了attention score的更新门,
h
t
′
,
h
t
−
1
′
,
h
~
t
′
h_t^\prime, h_{t-1}^\prime, \tilde h_t^\prime
ht′,ht−1′,h~t′表示GRU单元的隐藏层
在AUGRU单元中,通过attention score来放缩更新门向量的不同维度,让与隐藏层不太相关的兴趣在兴趣的演化中致以较低的权重。因此,AUGRU减少了兴趣漂移带来的影响,专注与target ad有关的兴趣演化过程的学习。
3. expriments and results
在Amazon dataset上,利用前 T − 1 T-1 T−1的点击行为,来预测接下来第 T T T的点击情况,AUC的结果见下图:
对应工业的广告点击率预测数据集,在训练集中,我们将最近49天点击的广告作为目标项目。 每个目标项目及其相应的点击行为都构成一个实例。 以一个目标项目 a a a为例,我们将单击 a a a的日期设置为最后一天,该用户在过去14天内采取的行为是历史行为。 同样,从第二天的测试集中选择目标项目,其行为与训练数据相同。实验结果见:
附加的loss: L a u x L_{aux} Laux对于模型训练的的影响:
attention score对于历史行为中target ad相关的兴趣的学习的影响:
参考文献
[1] https://arxiv.org/abs/1809.03672
[2] https://github.com/mouna99/dien