计算广告

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

2018-12-15  本文已影响688人  lirainbow0

背景:设计个性化信息检索时,用户行为预测扮演着重要的作用。用户行为预测的目标是估计用户点击、购买等行为的概率,而该概率代表了用户对该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算法中交叉简化将不再适用.

简介: FFM算法按照field对latent vector进行区分,从而提升模型的效果。但是FFM算法没有区分不同特征交叉的重要性,本文针对不同特征交叉赋予不同的权重,从而达到更精细的计算交叉特征的目的。
网络结构

简介: 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算法结构相同。
网络结构

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

简介: FM算法仍然属于wide&deep架构,不过在wide部分做了改进,采用FM替换linear layer,从而通过FM算法对交叉特征的计算能力提升模型的整体性能。其中inner product和deep network共享embedding feature,因此模型能同时从原始特征中学习低阶、高阶特征,并且不需要专业特征。
网络结构
1:FM component

简介: FNN、wide&deep、DeepFM等算法在deep network部分都是对embedding之后的特征进行concatenate,未能充分进行特征交叉计算。本文NFM算法则是对embedding直接采用element-wise后sum起来做特征交叉,然后通过MLP直接将特征压缩,最后concatenate linear部分和deep部分的特征。
网络结构
1: Bi-Interaction Layer

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

简介: DCN模型做特征交叉时采用的是特征内积,我们知道inner product得到的是一个标量。

DUPN


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


简介: 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:用户历史行为向量

3:自适应归一化
不归一化时,SGD只需要更新mini-batch中非零稀疏特征。但是加入l2归一化之后,每个mini-batch需要计算所有参数,这将会导致计算负担加重。在CTR任务中,特征较为稀疏并且维度较高,大部分特征只出现几次,而小部分特征出现很多次,即长尾分布,这将会导致模型过拟合。一个较为直接的方式,对出现次数较少的特征进行截断,但是这样将会导致信息的丢失,因此作者提出了一种根据特征频次自适应的更新方式。
1:出现频次较高的特征给予较小的正则化强度
2:出现频次较高的特征给予较高的正则化强度

简介: 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

上一篇下一篇

猜你喜欢

热点阅读