本文记录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
之前的很多方法没有挖掘用户行为背后的兴趣问题,其次用户的兴趣可能是不断变化的,怎么建模来表示用户兴趣的演化过程呢?DIEN做到的地方有两点:1)从用户的历史行为序列中提取潜在的时序兴趣;2)建模兴趣的演化过程。
具体的,整个兴趣建模的过程分为:interest extractor layer和interest evolving layer。在interest extractor layer,利用GRU建模历史行为间的依赖关系,其次提出了一个附加的loss来监督响铃两次行为对应的隐藏层的特征的变化;在interest evolving layer,作者采用了一种假设,即不同兴趣的演化过程是独立的,这样每次可以用候选的广告(或者理解为最后一次点击的商品)作为attention机制的一部分,让用户的历史行为能自适应的学习这种商品对应的兴趣的权重,为了在这部分也建模从前到后的演化过程,作者提出了一个AUGRU单元,这个AUGRU的作用一方面可以建模用户兴趣的演化过程,其次减弱兴趣漂移带来的影响。
在线上的展示系统中,一般分为四种特征:用户的画像,用户的行为,候选广告,点击的场景。用户画像通常包括:性别,年龄等;用户行为一般包括:一系列连续点击的商品的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)表示用于预测用户是否点击的概率。
如下图所示,DIEN主要包括三个部分:
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 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有关的兴趣演化过程的学习。
在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