综述:机器学习在CTR中的应用

背景:设计个性化信息检索时,用户行为预测扮演着重要的作用。用户行为预测的目标是估计用户点击、购买等行为的概率,而该概率代表了用户对该item的兴趣程度,用户之前的行为同时也影响着我们随后的排序。如何根据用户的query选择正确的ads并对其进行合理的排序,不仅极大的影响着用户点击、浏览等行为,而且对于搜索广告的收益也起到重要的作用。
IR任务中,数据大部分为multi-field类型,例如:[weekday=Tuesday, Gender=Male, City=London],我们可以通过one-hot对其进行编码,映射为高维稀疏特征。例如,我们可以将上述特征进行one-hot编码,然后concatenate得到
[\underbrace {[0,1,0,0,0,0,0]}_{{\rm{Weekday = Tuesday}}}\underbrace {[0,1]}_{{\rm{Gender = Male}}}\underbrace {[0,0,1,0,...,0,0]}_{{\rm{City = London}}}]

LR

{\mathop{\rm f}\nolimits} \left( {\bf{x}} \right) = {\bf{wx}} + b
,其中\bf{x}为特征,\bf{w}为特征权重,b为偏差。

Degree-2 Polynomial (Poly2)

简介: LR模型具有计算高效、可解释性强等优点,但是需要人工抽取交叉特征。而交叉特征对于模型性能起到重要的作用,相比LR线性模型,Poly2设计了特征自动交叉,从而自动计算交叉特征提升模型性能。
{\mathop{\rm y}\nolimits} \left( {\bf{x}} \right) = {w_0} + \sum\limits_{i = 1}^m {{x_i}{w_i} + \sum\limits_{i = 1}^m {\sum\limits_{j = i + 1}^m {{x_i}{x_j}{w_{h\left( {i,j} \right)}}} } }
h\left( {i,j} \right)是将ij编码为一个自然数的函数。

FM

简介: Poly2模型虽然能够自动抽取交叉特征,但是当特征维度较高并且稀疏时,权重\bf{w}难以收敛。针对该问题作者提出了FM算法,其中正定矩阵\bf{w},可以通过特征向量空间\bf{v}渐进表示。
{\mathop{\rm y}\nolimits} \left( {\bf{x}} \right): = {w_0} + \sum\limits_{i = 1}^n {{x_i}{w_i} + \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i}{x_j}} } }
\begin{array}{l} \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i}{x_j}} } \\ = \frac{1}{2}\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i}{x_j}} } - \frac{1}{2}\sum\limits_{i = 1}^n { < {{\bf{v}}_i},{{\bf{v}}_i} > {x_i}{x_i}} \\ = \frac{1}{2}\left( {\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {\sum\limits_{f = 1}^k {{v_{i,f}}{v_{j,f}}} {x_i}{x_j}} } - \sum\limits_{i = 1}^n {\sum\limits_{f = 1}^k {{v_{i,f}}{v_{i,f}}{x_i}{x_i}} } } \right)\\ = \frac{1}{2}\sum\limits_{f = 1}^k {\left( {\left( {\sum\limits_{i = 1}^n {{v_{i,f}}} {x_i}} \right)\left( {\sum\limits_{j = 1}^n {{v_{j,f}}} {x_j}} \right) - \sum\limits_{i = 1}^n {v_{i,f}^2x_i^2} } \right)} \\ = \frac{1}{2}\sum\limits_{f = 1}^k {\left( {{{\left( {\sum\limits_{i = 1}^n {{v_{i,f}}} {x_i}} \right)}^2} - \sum\limits_{i = 1}^n {v_{i,f}^2x_i^2} } \right)} \end{array}
\sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i}{x_j}} }是一个无对角线的上三角矩阵,直接可以计算整个矩阵然后减去对角线。

FFM


简介: FM算法将所有特征归结到一个field,而FFM算法则按照field对不同特征进行区分,主要体现在交叉项中。在FM算法中user这个特征对应的latent vector不论是对price、genre还是movie都是相同的,而FFM算法中则对特征进行归类,latent vector会区分交叉filed,模型参数个数n(n-1)/2。可以看出来FM算法时FFM算法的一个特例,但是随着FFM算法对latent vector的细化,FM算法中交叉简化将不再适用.
y\left( x \right) = {w_0} + \sum\limits_{i = 1}^n {{x_i}{w_i}} + \sum\limits_{{j_1} = 1}^n {\sum\limits_{{j_2} = {j_1} + 1}^n {\left( {{{\bf{w}}_{{j_1},{f_2}}} \cdot {{\bf{w}}_{{j_2},{f_1}}}} \right)} } {x_{{j_1}}}{x_{{j_2}}}

其中,{f_1}{f_2}分别表示{j_1}{j_2}对应的field,{\bf{w}}_{{j_1},{f_2}}代表{j_1}{f_2}交叉的权重。

FwFMs


简介: FFM算法按照field对latent vector进行区分,从而提升模型的效果。但是FFM算法没有区分不同特征交叉的重要性,本文针对不同特征交叉赋予不同的权重,从而达到更精细的计算交叉特征的目的。
网络结构
{\mathop{\rm y}\nolimits} \left( {\bf{x}} \right): = {w_0} + \sum\limits_{i = 1}^n {{x_i}{w_i} + \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i}{x_j}} } } {r_{{\mathop{\rm F}\nolimits} (i),{\mathop{\rm F}\nolimits} (j)}}

其中,{r_{{\mathop{\rm F}\nolimits} (i),{\mathop{\rm F}\nolimits} (j)}}表示field {\mathop{\rm F}\nolimits} (i){\mathop{\rm F}\nolimits} (j)交叉特征的重要性。

AFM


简介: AFM算法与FwFM算法类似,目标都是希望通过对不同交叉特征采用不同权重,从而减少引入噪声提升模型性能。

AFM的embedding层后,先让f个field的特征做了element-wise product后,得到f*(f-1)/2个交叉项,然后AFM引入了一个Attention Net,认为这些交叉特征项每个对结果的贡献是不同的。例如x_ix_j的权重重要度,用a_{ij}来表示。从这个角度来看,其实AFM其实就是个加权累加的过程。
1: Attention-based Pooling Layer
{{a'}_{ij}} = {{\bf{h}}^{\rm{T}}}{\mathop{\rm ReLU}\nolimits} \left( {{\bf{w}}\left( {{{\bf{v}}_i} \odot {{\bf{v}}_j}} \right){x_i}{x_j} + \bf{b}} \right)
{a_{ij}} = \frac{{\exp \left( {{{a'}_{ij}}} \right)}}{{\sum\nolimits_{\left( {i,j} \right) \in {\Re x}} {\exp \left( {{{a'}_{ij}}} \right)} }}
2:AFM模型结构
y\left( x \right) = {w_0} + \sum\limits_{i = 1}^n {{x_i}{w_i}} + {{\bf{p}}^{\rm{T}}}\sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n {{a_{ij}}\left( {{{\bf{v}}_i} \odot {{\bf{v}}_j}} \right)} } {x_i}{x_j}

其中,\bf{h}\bf{w}\bf{p}\bf{b}为模型参数。

FNN


简介: LR、FM被广泛的应用在工业场景中,但是这些模型对于抽取高阶特征显得无能为力。深度模型可以学习高阶复杂的交叉特征,对于提升模型性能有着重要的作用。由于CTR中大部分特征是离散、高维且稀疏的,需要embedding后才能用nn学习。

FNN模型将embedding层用FM初始化,即每个特征对应一个偏置项w_i和一个k维向量v_i。然后参数向量再随着训练不断学习调整。假设每个field的类别特征都只有一个1值,其余为0值,即可进行one-hot编码,然后做embedding,Dense Layer里每个Field对应的参数就是该Field那个不为0的变量对应的FM里的偏置项w_i和k维隐向量v_i。简单说模型第一层到第二层之间其实是普通的全连接层,而为0的输入变量对Dense Layer里的隐单元值不做贡献。
FNN模型结构
{z_i} = {\bf{W}}_0^i \cdot x[star{t_i}:en{d_i}] = \left( {{w_i},v_i^1,v_i^2,...,v_i^K} \right)
{{\bf{l}}_1} = \tanh \left( {{{\bf{W}}_1}{\bf{z}} + {{\bf{b}}_1}} \right)
{{\bf{l}}_2} = \tanh \left( {{{\bf{W}}_2}{{\bf{l}}_1} + {{\bf{b}}_2}} \right)
\hat y = {\mathop{\rm sigmoid}\nolimits} \left( {{{\bf{W}}_3}{{\bf{l}}_2} + {{\bf{b}}_3}} \right)
损失函数(最小交叉熵)为:
L\left( {y,\hat y} \right) = - y\log \hat y - \left( {1 - y} \right)\log \left( {1 - \hat y} \right)

CCPM


简介: 模型结构整体结构相对比较简单,首先将特征映射到embedding稠密向量,然后经过卷积神经网络抽取高维特征,最后通过pooling层抽取主要的高维信息。

PNN


简介: FNN算法实际上是对特征embedding之后进行concatenate,再接FC,虽然使用了激活函数增加了非线性,实际上是对特征进行了加权组合(add 操作)。PNN算法与FNN算法的区别在于PNN算法中间多了一层Product Layer层。其中z为embedding层的线性部分,p为embedding层的特征交叉部分,其他与FNN算法结构相同。
网络结构
{{\bf{l}}_z} = \left( {{\bf{l}}_z^1,{\bf{l}}_z^2,...,{\bf{l}}_z^n,...,{\bf{l}}_z^{{D_1}}} \right),\;\;\;\;{\bf{l}}_z^n = {\bf{W}}_z^n \odot {\bf{z}}

{{\bf{l}}_p} = \left( {{\bf{l}}_p^1,{\bf{l}}_p^2,...,{\bf{l}}_p^n,...,{\bf{l}}_p^{{D_1}}} \right),\;\;\;{\bf{l}}_p^n = {\bf{W}}_p^n \odot {\bf{p}}

{{\bf{l}}_1} = {\mathop{\rm relu}\nolimits} \left( {{{\bf{l}}_z} + {{\bf{l}}_p} + {{\bf{b}}_1}} \right)

{{\bf{l}}_2} = {\mathop{\rm relu}\nolimits} \left( {{{\bf{W}}_2}{{\bf{l}}_1} + {{\bf{b}}_2}} \right)

\hat y = \sigma \left( {{{\bf{W}}_3}{{\bf{l}}_2} + {b_3}} \right)

Product layer分为两部分,其中z代表线性信号向量,而p代表二次信号向量。
1: Inner Product-based Neural Network
{\mathop{\rm g}\nolimits} \left( {{{\bf{f}}_i},{{\bf{f}}_j}} \right) = < {{\bf{f}}_i},{{\bf{f}}_j} >

,即用内积来表示特征的交叉,类似于“且”的关系,{{\bf{f}}_i}为embedding向量。
2: Outer Product-based Neural Network
{\mathop{\rm g}\nolimits} \left( {{{\bf{f}}_i},{{\bf{f}}_j}} \right) = {{\bf{f}}_i}{\bf{f}}_j^{\rm{T}},即用矩阵乘法来表示特征的交叉,类似于“和”的关系

Wide & Deep


简介: 线性模型具有计算高效、可解释性强等优点,但是模型的泛化性差。深度学习模型对于长尾特征具有更高的泛化性,并且不需要大量的特征工程。然而当交叉特征稀疏时,深度学习模型容易出现over-generalize。本文提出同时对线性模型和深度模型联合训练,从而结合线性模型记忆性强、深度模型泛化性强的优点。
网络结构
1: The Wide Component
y = {{\bf{w}}^{\rm{T}}}{\bf{x}} + b

wide部分长处在于学习样本中的高频部分,优点是模型的记忆性好,对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差,例如对于没有见过的ID类特征,模型学习能力较差
2: The Deep Component
{{\bf{a}}^{\left( {l + 1} \right)}} = {\mathop{\rm f}\nolimits} \left( {{{\bf{W}}^l}{{\bf{a}}^l} + {{\bf{b}}^l}} \right)

其中,l代表第l层,{\mathop{\rm f}\nolimits}为激活函数。
deep部分长处在于学习样本中的长尾部分,优点是泛化能力强,对于少量出现过的样本甚至没有出现过的样本都能做出预测(非零的embedding向量);缺点是模型对于低阶特征的学习需要用较多参才能等同wide部分效果,而且泛化能力强某种程度上也可能导致过拟合出现badcase
3: Joint Training of Wide & Deep Model
{\bf{P}}\left( {{\rm{Y}} = 1|{\bf{x}}} \right) = \sigma \left( {{\bf{w}}_{wide}^{\rm{T}}\left[ {{\bf{x}},\Phi \left( {\bf{x}} \right)} \right] + {\bf{w}}_{deep}^T{{\bf{a}}^{{l_f}}} + b} \right)
其中,{\bf{w}}_{wide}为wide部分的权重,{\bf{w}}_{deep}为deep部分的权重,其中{\Phi}\left( {\bf{x}} \right)是指交叉特征。

DeepFM


简介: FM算法仍然属于wide&deep架构,不过在wide部分做了改进,采用FM替换linear layer,从而通过FM算法对交叉特征的计算能力提升模型的整体性能。其中inner product和deep network共享embedding feature,因此模型能同时从原始特征中学习低阶、高阶特征,并且不需要专业特征。
网络结构
1:FM component
{{\mathop{\rm y}\nolimits}_{{\rm{FM}}}} = < w,x > + \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n { < {{\bf{v}}_i},{{\bf{v}}_j} > {x_i} \cdot {x_j}} }

2:Deep component
{a^{l + 1}} = \sigma \left( {{{\bf{W}}^l}{{\bf{a}}^l} + {{\bf{b}}^l}} \right)

3:combination output layer
\hat y = {\mathop{\rm sigmoid}\nolimits} \left( {{{\mathop{\rm y}\nolimits} _{{\rm{FM}}}} + {{\mathop{\rm y}\nolimits} _{{\rm{DNN}}}}} \right)

NFM


简介: FNN、wide&deep、DeepFM等算法在deep network部分都是对embedding之后的特征进行concatenate,未能充分进行特征交叉计算。本文NFM算法则是对embedding直接采用element-wise后sum起来做特征交叉,然后通过MLP直接将特征压缩,最后concatenate linear部分和deep部分的特征。
网络结构
1: Bi-Interaction Layer
{{\mathop{\rm f}\nolimits}_{BI}}\left( {{{\bf{v}}_x}} \right) = \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n {{x_i}{{\bf{v}}_i} \odot {x_j}} } {{\bf{v}}_j}

{{\mathop{\rm f}\nolimits}_{BI}}\left( {{{\bf{v}}_x}} \right) = \frac{1}{2}\left[ {{{\left( {\sum\limits_{i = 1}^n {{x_i}{{\bf{v}}_i}} } \right)}^2} - \sum\limits_{i = 1}^n {{{\left( {{x_i}{{\bf{v}}_i}} \right)}^2}} } \right]

其中,\odot代表element-wise product,因此{{\mathop{\rm f}\nolimits}_{BI}}的维度等于\bf{v}的维度。
2:Hidden Layers
\begin{array}{l} {{\bf{z}}_1} = {\sigma_1}\left( {{{\bf{W}}_1}{{\mathop{\rm f}\nolimits}_{BI}}\left( {{{\bf{v}}_x}} \right) + {{\bf{b}}_1}} \right)\\ {{\bf{z}}_2} = {\sigma_2}\left( {{{\bf{W}}_2}{{\bf{z}}_1} + {{\bf{b}}_2}} \right)\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;......\\ {{\bf{z}}_L} = {\sigma_L}\left( {{{\bf{W}}_L}{{\bf{z}}_2} + {{\bf{b}}_L}} \right) \end{array}
3:Prediction Layer
{\mathop{\rm f}\nolimits} \left( {\bf{x}} \right) = {{\bf{h}}^{\rm{T}}}{{\bf{z}}_L}
\begin{array}{l} {{\hat y}_{NFM}}\left( {\bf{x}} \right) = {w_0} + \sum\limits_{i = 1}^m {{x_i}{w_i} + {{\bf{h}}^{\rm{T}}}{\sigma_L}\left( {{{\bf{W}}_L}\left( {...{\sigma_1}\left( {{{\bf{W}}_1}{{\mathop{\rm f}\nolimits}_{BI}}\left( {{{\bf{v}}_x}} \right) + {{\bf{b}}_1}} \right)...} \right) + {{\bf{b}}_L}} \right)} \end{array}

NFM算法可退化为FM算法,将向量\bf{h}置为全1的向量,即有:
\begin{array}{l} {{\hat y}_{NFM - 0}}\left( {\bf{x}} \right) = {w_0} + \sum\limits_{i = 1}^m {{x_i}{w_i} + {{\bf{h}}^{\rm{T}}}\sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n {{x_i}{{\bf{v}}_i} \odot {x_j}} } {{\bf{v}}_j}} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\; = {w_0} + \sum\limits_{i = 1}^m {{x_i}{w_i} + \sum\limits_{i = 1}^n {\sum\limits_{j = i + 1}^n {\sum\limits_{f = 1}^k {{h_f}{v_{if}}{v_{jf}} \cdot {x_i}{x_j}} } } } \end{array}

DCN


简介: 目前FM、FFM、DeepFM和PNN算法都只计算了2阶交叉,对于更高维度的交叉特征只能通过deep部分去学习。因此作者提出了Deep&cross network,可以任意组合特征,而且不增加网络参数。
网络结构
1:embedding and stacking layer
将稀疏特征用embedding进行表示,比如:country=USA,以一个稠密向量表示USA这个特征,然后将所有的特征concatenate为一个向量用于表示输入。这里将dense特征和embedding特征一起concatenate,然后做为模型的输入。
{{\bf{x}}_0} = \left[ {{\bf{x}}_{embed,1}^T,...,{\bf{x}}_{embed,k}^T,{\bf{x}}_{dense}^T} \right]

2: cross layer
借鉴于residual network的思想 ,在每一层网络对特征进行交叉
{{\bf{x}}_{l + 1}} = {{\bf{x}}_0}{\bf{x}}_l^T{{\bf{w}}_l} + {{\bf{b}}_l} + {{\bf{x}}_l} = {\mathop{\rm f}\nolimits} \left( {{{\bf{x}}_l},{{\bf{w}}_l},{{\bf{b}}_l}} \right) + {{\bf{x}}_l}

3: deep layer
{{\bf{h}}_{l + 1}} = {\mathop{\rm f}\nolimits} \left( {{{\bf{w}}_l}{{\bf{h}}_l} + {{\bf{b}}_l}} \right)

,其中{\mathop{\rm f}\nolimits}(.)为relu激活函数。
4:combination output layer
将经过cross layer的输出x和经过deep layer的输出h进行concat得到最终的特征向量。
p = \sigma \left( {\left[ {{\bf{x}}_{{L_1}}^T,{\bf{h}}_{{L_2}}^T} \right]{{\bf{W}}_{{\rm{logits}}}}} \right)

xDeepFM


简介: DCN模型做特征交叉时采用的是特征内积,我们知道inner product得到的是一个标量。
{{\bf{x}}_k} = {{\bf{x}}_0}{\bf{x}}_{k - 1}^{\mathop{\rm T}\nolimits} {{\bf{w}}_k} + {{\bf{b}}_k} + {{\bf{x}}_{k - 1}}

去掉偏执项{{\bf{b}}_k}后有
\begin{array}{l} {{\bf{x}}_{i + 1}} = {{\bf{x}}_0}{\bf{x}}_i^{\mathop{\rm T}\nolimits} {{\bf{w}}_{i + 1}} + {{\bf{x}}_i}\\ \;\;\;\;\; = {{\bf{x}}_0}\left( {{{\left( {{\alpha ^i}{{\bf{x}}_0}} \right)}^T}{{\bf{w}}_{i + 1}}} \right) + {\alpha ^i}{{\bf{x}}_0}\\ \;\;\;\;\; = {\alpha ^{i + 1}}{{\bf{x}}_0} \end{array}

\alpha是一个标量,因此多层之后{{\bf{x}}_{i + 1}}仍是{{\bf{x}}_0}与标量的乘积,并且特征交叉只是bit-wise级。
本文通过vector-wise级进行交叉计算,并且不会带来过高的计算复杂度。从图中可以看出,整个模型由三部分组成,分别是线性层、CIN(Compressed Interaction Network)和DNN,整体结构仍然属于wide&deep架构。
根据前一层隐层的状态{\bf{X}}^{(k-1)}和原特征矩阵{\bf{X}}^0,计算出一个中间结果{\bf{Z}}^{(k)},它是一个三维的张量。


{\bf{X}}_{h,*}^k = \sum\limits_{i = 1}^{{{\rm{H}}_{k - 1}}} {\sum\limits_{j = 1}^m {{\bf{W}}_{ij}^{k,h}} } \left( {{\bf{X}}_{i,*}^{k - 1} \circ {\bf{X}}_{j,*}^0} \right)

其中,m代表field个数,{{\rm{H}}_{k - 1}}代表第k-1层的特征向量个数,{\bf{W}}类似于CNN中的filter,而矩阵外积之后的矩阵就是需要卷积的image,{\bf{X}}_{h,*}^k就是一个feature map。
{\mathop{\rm p}\nolimits}_i^k = \sum\limits_{j = 1}^{\rm{D}} {{\bf{X}}_{i,j}^k}
其中,i \in \left[ {1,{{\rm{H}}_k}} \right]。这样,我们就得到一个pooling vector:{{\mathop{\rm p}\nolimits} ^k} = \left[ {{\mathop{\rm p}\nolimits} _1^k,{\mathop{\rm p}\nolimits} _2^k,...,{\mathop{\rm p}\nolimits} _{{H_K}}^k} \right]。hidden layers的所有polling vectors在连接到output units之前会被concatenated:{{\mathop{\rm \bf{p}}\nolimits} ^ + } = \left[ {{{\mathop{\rm \bf{p}}\nolimits} ^1},{{\mathop{\rm \bf{p}}\nolimits} ^2},...,{{\mathop{\rm \bf{p}}\nolimits} ^T}} \right]\rm{T}表示网络的深度。

\hat y = \sigma \left( {{\bf{w}}_{{\rm{linear}}}^T{\bf{a}} + {\bf{w}}_{dnn}^T{\bf{x}}_{dnn}^k + {\bf{w}}_{cin}^T{{\bf{p}}^ + } + b} \right)

总结: 从LR到xDeepFM算法,模型的优化主要在于从wide和deep两方面去获得更多更合理的交叉特征。wide部分的优化从ploy2、FM、FFM、AFM算法的二阶交叉到DCN、xDeepFM的高阶交叉;deep部分的优化从FNN对embedding进行concatenate,到PNN对embedding进行inner product、outer product,再到NFM对embeding进行bi_interaction。为了获得更好的效果,目前主流的深度学习算法大都采用wide&deep框架,同时结合wide部分和deep部分的优点。
模型复杂度

model Number of Parameters
LR m
Poly2 m + H
FMs m + m * K
FFMs m + m * (n-1) * K
FwFMs m + m * K + n * (n-1)/2
AFM m + m * K + K * H1 + H1 * 2 + K
FNN 1 + n + n * k + (1 + f + f * k) * H1 + H1 * H2 + H2 * 1
IPNN 1 + n + n * k + (1 + f + f * k) * H1 + H1 * H2 + H2 * 1
OPNN 1 + n + n * k + (1 + f + f * k) * H1 + H1 * H2 + H2 * 1
Wide&deep 1 + n + n * k + f * k * H1 + H1 * H2 + H2
deepFM 1 + n + n * k + f * k * H1 + H1 * H2 + H2 * 1
NFM 1 + n + n * k + k * H1 + H1 * H2 + H2 * 1
DCN 1 + n + 2 * d * Lc + d * (m + 1) + m * (m + 1) * (Ld - 1) + 1 + d + m
xDeepFM 1 + n + k * H1 * f + H1 * H2 + H2 * 1 + H2 * (1 + H1 * f)

模型效果

DUPN


简介: 前面列举的算法都是针对单点数据,而用户的行为序列一定程度上代表了用户当前的兴趣,但是行为序列中不是每一次行为都是同等重要的。每一次行为对每一个用户的重要程度都是不同的,因此本文通过user对行为序列做attention计算得到一个user embedding,为了获得更加通用的user embedding,作者将该user embedding应用到多个任务做multi-task建模。
输入item节点特征包含:

{\bf{h}} = \sum\limits_{t = 1}^N {{a_t}{{\bf{h}}_t}}

{a_t} = \frac{{\exp \left( {{\mathop{\rm attention}\nolimits} \left( {{{\bf{h}}_t},q,u,\omega } \right)} \right)}}{{\sum\nolimits_{t = 1}^T {\exp \left( {{\mathop{\rm attention}\nolimits} \left( {{{\bf{h}}_t},q,u,\omega } \right)} \right)} }}

attention是一个两层的全连接层。

RIB


简介: RIB模型和DUPN网络结构类似于,不同之处在于attention计算。另外本文输入特征中加入商品页停留时间特征、用户行为(点击、浏览、购买、加入购物车)和哪个模块进入商品页,具体特征如下:

Var Attribute Description
p_i Product ID SKU(Stock Keeping Unit)
c_i Category ID Product category
a_1 Home2Product Enter p_i from homepage
a_2 ShopList2Product Enter p_i from category page
a_3 Sale2Product Enter p_i from sale page
a_4 Cart2Product Enter p_i from carted page
a_5 SearchList2Product Enter p_i from searched results
a_6 Detail_comments In p_i comment module
a_7 Detail_specification In p_i specification module
a_8 Detail_bottom At the bottom
a_9 Cart Add p_i to cart
a_10 Order Order p_i
t_1 Dwell time 0 \sim9 seconds
t_2 Dwell time 10\sim24 seconds
t_3 Dwell time 25\sim60 seconds
t_4 Dwell time 61\sim120 seconds
t_5 Dwell time >120 seconds

其中attention计算为:
{{\bf{M}}_t} = \tanh \left( {{{\bf{w}}_m}{{\bf{h}}_t} + {b_m}} \right)
{\bf{at}}{{\bf{t}}_t} = {\mathop{\rm softmax}\nolimits} \left( {{{\bf{w}}_a}{{\bf{M}}_t} + {b_a}} \right)
{\bf{output}} = \sum\limits_{t = 1}^T {{\bf{at}}{{\bf{t}}_t}{{\bf{h}}_t}}

DIN


简介: 与DUPN、RIB算法不同,本文并未采用GRU网络对用户历史行为序列进行建模,而是直接通过attention对行为序列进行加权。DIN模型通过当前item对用户历史行为数据进行加权求和计算用户表征向量,这里通过dice激活函数计算历史行为的权重。与候选广告商品相关的行为赋予更高的权重,对用户兴趣的表示起主要作用。
1:用户历史行为向量
{{\bf{v}}_{\rm{U}}}\left( {\bf{A}} \right) = {\mathop{\rm f}\nolimits} \left( {{{\bf{v}}_A},{{\bf{e}}_1},{{\bf{e}}_2},...,{{\bf{e}}_H}} \right) = \sum\limits_{j - 1}^H {{\mathop{\rm a}\nolimits} \left( {{{\bf{e}}_j},{{\bf{v}}_A}} \right)} {{\bf{e}}_j} = \sum\limits_{j = 1}^{\rm{H}} {{{\bf{w}}_j}{{\bf{e}}_j}}

其中,\bf{e}代表用户行为向量,\bf{v}代表广告embedding向量。
2:activation function
RELU激活函数从0点进行分割,大于0原样输出,小于0输出为0,这样将会导致模型更新缓慢,因此它的改进版PRELU,又叫LeakyRELU的出现,它修正了小于0输出为0的问题,即使小于0也能更新网络参数,加快模型收敛。但是它仍然是在0点进行分割,数据分割应该是随着数据而自适应的变化,因此作者提出了PRELU的改进版Dice。


3:自适应归一化
不归一化时,SGD只需要更新mini-batch中非零稀疏特征。但是加入l2归一化之后,每个mini-batch需要计算所有参数,这将会导致计算负担加重。在CTR任务中,特征较为稀疏并且维度较高,大部分特征只出现几次,而小部分特征出现很多次,即长尾分布,这将会导致模型过拟合。一个较为直接的方式,对出现次数较少的特征进行截断,但是这样将会导致信息的丢失,因此作者提出了一种根据特征频次自适应的更新方式。
1:出现频次较高的特征给予较小的正则化强度
2:出现频次较高的特征给予较高的正则化强度
{{\bf{w}}_j} \leftarrow {{\bf{w}}_j} - \eta \left[ {\frac{1}{{\left| {{{\rm B}_m}} \right|}}\sum\limits_{\left( {x,y} \right) \in {{\rm B}_m}} {\frac{{\partial L\left( {p\left( x \right),y} \right)}}{{\partial {{\bf{w}}_j}}} + \lambda \frac{{{\alpha _{mj}}}}{{{n_j}}}{{\bf{w}}_j}} } \right]

DIEN


简介: din算法对用户历史行为通过当前item计算attention,获得最终的user embedding,整个算法计算简单,易于理解。但是模型忽略了用户行为之间的关联关系,因此本文用一个GRU网络(兴趣提取模块)来计算用户兴趣的关联关系。DUPN算法也是通过一个GRU网络计算用户历史行为,然后通过一个additional attention进行加权求和获得最终的user embedding,本文思路与DUPN类似,整体结构仍然是通过GRU计算用户历史行为,然后通过一个attention对不同行为item进行加权求和,得到最终的user embedding,不同之处在于本文通过另一个GRU对时序数据更新进行控制。
Auxiliary loss
{L_{aux}} = - \frac{1}{N}\left( {\sum\limits_{i = 1}^N {\sum\limits_t {\log \sigma \left( {{{\bf{h}}_t},{\bf{e}}_b^i\left[ {t + 1} \right]} \right)} } } \right) + \log \left( {1 - \sigma \left( {{{\bf{h}}_t},{\bf{\hat e}}_b^i\left[ {t + 1} \right]} \right)} \right)

为了充分利用用户历史不同的时刻行为,作者在每个时刻加入auxiliary loss用于表征用户的兴趣(用户点击item为正、随机采样候选集为负)。
Attention
{a_t} = \frac{{\exp \left( {{{\bf{h}}_t}{\bf{W}}{{\bf{e}}_a}} \right)}}{{\sum\nolimits_{j = 1}^T {\exp \left( {{{\bf{h}}_j}{\bf{W}}{{\bf{e}}_a}} \right)} }}

,其中通过候选item和gru输出计算attention权重。
Interest Evolving Layer
GRU with attentional input (AIGRU)
{{{\bf{i'}}}_t} = {{\bf{h}}_t}*{a_t}

Attention based GRU(AGRU)
{{{\bf{h'}}}_t} = \left( {1 - {a_t}} \right)*{{{\bf{h'}}}_{t - 1}} + {a_t}*{{{\bf{h'}}}_t}

GRU with attentional update gate (AUGRU)
{{{\bf{\tilde u'}}}_t} = {a_t}*{{{\bf{u'}}}_t}

{{{\bf{h'}}}_t} = \left( {1 - {{{\bf{\tilde u'}}}_t}} \right) \circ {{{\bf{h'}}}_{t - 1}} + {{{\bf{\tilde u'}}}_t} \circ {{{\bf{\tilde h'}}}_t}

我们常用attention与GRU输出进行加权求和得到最终的特征表示,但是本文通过另一个GRU网络对第一个GRU网络的输出进行建模,通过attention计算得到当前item与历史行为item的相关度,然后通过该相关度得分做节点更新约束,如果与当前相关性较弱,则u趋近于零,状态不更新,最后取最终的状态输出作为最终的特征输出(作者尝试了3种不同类型的Interest Evolving Layer )。

参考文献

[1]Factorization Machines
[2]Field-aware Factorization Machines for CTR Prediction
[3]Wide & Deep Learning for Recommender Systems
[4]Deep Learning over Multi-Field Categorical Data: A Case Study on User Response Prediction
[5]Product-based Neural Networks for User Response Prediction
[6]DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
[7]Neural Factorization Machines for Sparse Predictive Analytics
[8] Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
[9]Deep & Cross Network for Ad Click Predictions
[10]Deep Interest Network for Click-Through Rate Prediction
[11]Field-aware Factorization Machines for CTR Prediction
[12]Field-weighted Factorization Machines for Click-Through Rate Prediction in Display Advertising
[13] Micro Behaviors: A New Perspective in E-commerce Recommender Systems
[14] xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容