当前位置: 代码迷 >> 综合 >> 推荐系统中CTR排序模型汇总(LR,GBDT,FM,FFM,MLR,Deep and wide,Deep and cross,deepFM,XDeepFM,PNN,NFM,AFM)
  详细解决方案

推荐系统中CTR排序模型汇总(LR,GBDT,FM,FFM,MLR,Deep and wide,Deep and cross,deepFM,XDeepFM,PNN,NFM,AFM)

热度:97   发布时间:2023-12-19 03:19:11.0

1. CTR概念

CTR, click through rate,指广告被点击次数 / 广告显示次数。

CTR预估模型公式: y = f ( x ) y = f(x) y=f(x), y ∈ [ 0 , 1 ] y \in [0, 1] y[0,1], 表示广告被点击的概率。

以下将介绍 LR, GBDT, FM, FFM, MLR, Deep and wide, Deep and Cross, deepFM, XDeepFM, PNN, NFM, AFM模型在CTR中的应用。

2. CTR 传统预估模型

2.1 LR

LR,logistic regression,是CTR预估模型的最基本模型,适用海量的高维离散特征。

f ( x ) = 1 1 + e ? θ T X f(x) = \frac{1}{ 1 + e^{-\theta^T X}} f(x)=1+e?θTX1?
其中, θ = ( θ 0 , θ 1 , . . . , θ n ) \theta = (\theta_0, \theta_1,..., \theta_n) θ=(θ0?,θ1?,...,θn?)

也可以表示为:
f ( x ) = l o g s t i c s ( l i n e a r ( X ) ) f(x)= logstics (linear (X)) f(x)=logstics(linear(X))

LR 的优势,处理离散化特征,模型简单,容易实现分布式计算。

LR变种,Google的FTRL, 可看做 LR + 正则化 + 特定优化方法。

FTRL算法的公式:
w t + 1 = arg ? min ? w ( ∑ s = 1 t g s ? w + 1 2 ∑ s = 1 t σ s ∥ w ? w s ∥ 2 2 + λ 1 ∥ w ∥ 1 ) \mathbf{w}_{t+1}=\underset{\mathbf{w}}{\arg \min }\left(\sum_{s=1}^{t} \mathbf{g}_{s} \cdot \mathbf{w}+\frac{1}{2} \sum_{s=1}^{t} \sigma_{s}\left\|\mathbf{w}-\mathbf{w}_{s}\right\|_{2}^{2}+\lambda_{1}\|\mathbf{w}\|_{1}\right) wt+1?=wargmin?(s=1t?gs??w+21?s=1t?σs?w?ws?22?+λ1?w1?)
在这里插入图片描述

LR缺点
特征与特征之间在模型中是独立的,对于存在交叉可能性的特征,需要人工进行特征交叉。

2.2 GBDT

GBDT,梯度提升决策树,表达能力比较强的非线性模型。
在这里插入图片描述
GBDT 的优势在于处理连续值特征,比如用户历史点击率。而且由于树的分裂算法,它具有一定的组合特征的能力。GBDT对特征的数值线性变化不敏感,它会按照目标函数,自动选择最优的分裂特征和相应的最优分裂点。并且,根据特征的分裂次数,得到一个特征的重要性排序。

缺点:
推荐系统的大多数场景都是大规模离散化特征,如果使用GBDT,则需要将很多特征统计成连续值特征(或者Embedding),这里需要耗费很多时间。GBDT模型具有很强的记忆行为,不利于挖掘长尾特征。

2.3 FM 和FFM

FM在LR不能自动处理交叉特征基础上改进。

FM模型:
在这里插入图片描述
逻辑斯蒂函数里边有两部分,一部分是,线性回归函数,第二部分是二次交叉项。

二次项权重 w i j w_{ij} wij? 需要存储一个二维矩阵的变量,这个二维矩阵的维度可能很大,FM利用矩阵分解的原理,将这个权重矩阵进行分解,即
在这里插入图片描述
FM模型变成:
在这里插入图片描述
在这里插入图片描述

FFM模型公式:
在这里插入图片描述
也就是, x i x_i xi? 和不同的特征交叉时,它的 v i v_i vi? 是不一样的。

FFM在FM的基础上,考虑了特征交叉的field的特点,但也导致了它没有办法实现线性的时间复杂度(假设n 个特征,一个特征 x i x_i xi? n ? 1 n-1 n?1 v i v_i vi? 个向量和其他特征的向量交叉,总共有 n ? ( n ? 1 ) 2 \frac{n*(n-1)}{2} 2n?(n?1)? 个向量的内积计算),模型训练比FM慢了一个量级,但效果比FM更好。

2.4 GBDT + LR/FM/FFM

GBDT 适合处理连续值特征,而 LR, FM, FFM更加适合处理离散化特征。GBDT可以进行一定程度的特征组合(多次组合),而FM,FFM只是二阶组合。同时,GBDT有一定的特征选择能力。也就是GBDT和LR,FM,FFM能够起到互补的作用。

Facebook 2014的论文 Practical Lessons from Predicting Clicks on Ads atFacebook 提出 GBDT + LR的解决方案,即先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,再拼接离散化特征,放到LR 进行训练。

GBDT + LR模型:
在这里插入图片描述
在这里插入图片描述

2.5 MLR

MLR 是由 阿里团队在 论文 Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction 里提出的一种非线性模型,等价于 聚类 + LR的形式。
定义:

softmax ? ( X , i , m ) = e μ i X ∑ j = 1 m e μ j X \operatorname{softmax}(X, i, m)=\frac{e^{\mu_{i} X}}{\sum_{j=1}^{m} e^{\mu_{j} X}} softmax(X,i,m)=j=1m?eμj?Xeμi?X?

f ( x ) = ∑ i = 1 m softmax ? ( X , i , m ) ? logistics ? ( linear ? ( X ) ) f(x)=\sum_{i=1}^{m} \operatorname{softmax}(X, i, m) * \operatorname{logistics}(\operatorname{linear}(X)) f(x)=i=1m?softmax(X,i,m)?logistics(linear(X))

相当于将 X 进行聚成 m 类,然后,每一个聚类单独训练一个 LR。
MLR和LR一样,需要较大的特征工程处理,模型本身属于非凸模型(?),需要预训练,可能出现不收敛的情况。

3. CTR排序的DNN篇

CTR场景特征基本是离散化特征,而且特征之间交叉存在意义,使用DNN类的模型就有很强的模型表达能力,能够学习出高阶特征;同时容易扩充其他类别的特征,比如特征拥有图片、文字类特征时。

DNN模型的主要架构:
在这里插入图片描述

并行结构:
在这里插入图片描述
基本上目前的DNN模型和这个架构类似,只是stack layer的方法不一样,比如,有无 shallow part, 或者shallow part异同(如,用 LR 或FM等)。

串行结构:
在这里插入图片描述


下面是并行结构

3.1 Deep and Wide model

Wide & Deep Learning for Recommender Systems;
在这里插入图片描述
shallow part 为 LR,stack layer为:concatenate(拼接Embedding后的向量)

Deep and Wide 网络 myblog;

3.2 Deep and cross model

在这里插入图片描述
在这里插入图片描述
shallow part 为 cross Network,高阶组合,stack layer为:concatenate(拼接Embedding后的向量)

3.3 deepFM model

在这里插入图片描述
deepFM 的 shallow part 为 FM,stack layer 也是concatenate.

3.4 XDeepFM model

在这里插入图片描述
在这里插入图片描述
比较难理解的是(a)中两个矩阵外积得到一个三维数组,两个向量外积操作就能得到一个矩阵(一个截面),D 对就有D层截面。
(b)中把一个三维数组映射回二维数组,是对一个截面进行加权平均,得到一个向量。
(c)是整体图,每一层 x k x^k xk 都是由 x 0 x^0 x0 和前一层 x k ? 1 x^{k-1} xk?1 操作得到的。
在这里插入图片描述
在这里插入图片描述
xDeepFM 的 shallow part 为 CIN.


下面是串行结构

3.5 PNN model

PNN,全称为Product-based Neural Network,认为在embedding输入到MLP之后学习的交叉特征表达并不充分,提出了一种product layer的思想,既基于乘法的运算来体现体征交叉的DNN网络结构。
在这里插入图片描述
l z l_z lz? 代表线性部分; l p l_p lp? 代表二次项部分特征.
在这里插入图片描述
定义:
p i , j = g ( f i , f j ) p_{i,j} = g(f_i, f_j ) pi,j?=g(fi?,fj?)

不同的g的选择使得我们有了两种PNN的计算方法,一种叫做Inner PNN,简称IPNN,一种叫做Outer PNN,简称OPNN。

IPNN
g ( f i , f j ) = < f i , f j > g(f_i, f_j ) = <f_i, f_j> g(fi?,fj?)=<fi?,fj?>
使用内积计算。

在这里插入图片描述

OPNN

外积计算。
定义:
g ( f i , f j ) = f i f j T g\left(f_{i}, f_{j}\right)=f_{i} f_{j}^{T} g(fi?,fj?)=fi?fjT?
在这里插入图片描述

3.6 NFM model

NFM model 的 deep part:
在这里插入图片描述
NFM的 shallow part 为 lr;stack layer 则为Bi-Interaction,实际上就是先做向量的内积,再做累加。
在这里插入图片描述
Bi-Interaction Layer名字挺高大上的,其实它就是计算FM中的二次项的过程,因此得到的向量维度就是我们的Embedding的维度。最终的结果是:
在这里插入图片描述
也就是:
在这里插入图片描述
这里, x i v i x_i v_i xi?vi?是Embedding层的表示。每个Embedding特征叉乘并相加。
结果将是一个k维度向量, k就是embedding向量的长度.

3.7 AFM

在这里插入图片描述

注意,这里面省去了线性部分,只考虑特征组合部分。

Attention-based Pooling Layer:

Attention机制的核心思想在于:当把不同的部分压缩在一起的时候,让不同的部分的贡献程度不一样。AFM通过在Interacted vector后增加一个weighted sum来实现Attention机制。形式化如下:

f A t t ( f P I ( E ) ) = ∑ ( i , j ) ∈ R x a i j ( v i ⊙ v j ) x i x j f_{A t t}\left(f_{P I}(\mathcal{E})\right)=\sum_{(i, j) \in \mathcal{R}_{x}} a_{i j}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j} fAtt?(fPI?(E))=(i,j)Rx??aij?(vi?vj?)xi?xj?

Attention Network形式化如下:

a i j ′ = h T ReLU ? ( W ( v i ⊙ v j ) x i x j + b ) a i j = exp ? ( a i j ′ ) ∑ ( i , j ) ∈ R x exp ? ( a i j ′ ) \begin{aligned} a_{i j}^{\prime} &=\mathbf{h}^{T} \operatorname{ReLU}\left(\mathbf{W}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j}+\mathbf{b}\right) \\ a_{i j} &=\frac{\exp \left(a_{i j}^{\prime}\right)}{\sum_{(i, j) \in \mathcal{R}_{x}} \exp \left(a_{i j}^{\prime}\right)} \end{aligned} aij?aij??=hTReLU(W(vi?vj?)xi?xj?+b)=(i,j)Rx??exp(aij?)exp(aij?)??

就是乘了一个矩阵,在 Softmax 获得权重。

整体公式:
y ^ A F M ( x ) = w 0 + ∑ i = 1 n w i x i + p T ∑ i = 1 n ∑ j = i + 1 n a i j ( v i ⊙ v j ) x i x j \hat{y}_{A F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\mathbf{p}^{T} \sum_{i=1}^{n} \sum_{j=i+1}^{n} a_{i j}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j} y^?AFM?(x)=w0?+i=1n?wi?xi?+pTi=1n?j=i+1n?aij?(vi?vj?)xi?xj?

4. 总结

DNN做CTR问题的关键有三:

  1. 是否保留浅层模型;
  2. 如何体现特征交叉性,即stack layer的做法。concatenate,Bi-interaction,直接向量相加等等。
  3. Embedding+ FC(全连接层)是标配。

最近开通了个公众号,主要分享推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
在这里插入图片描述


参考:

  1. 推荐系统中使用ctr排序的f(x)的设计-dnn篇 - Jachin的文章 - 知乎;
  2. 推荐系统中使用ctr排序的f(x)的设计-传统模型篇 - Jachin的文章 - 知乎;
  3. 推荐系统遇上深度学习(六)–PNN模型理论和实践;
  4. 论文 Neural Factorization Machines for Sparse Predictive Analytics;
  5. Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
  相关解决方案