CTR预估算法(深层模型)

CTR预估数据特点

  1. 输入中包含类别型和连续型数据。类别型数据需要one-hot,连续型数据可以先离散化再one-hot,也可以直接保留原值

  2. 维度非常高

  3. 数据非常稀疏

  4. 特征按照Field分组

CTR预估重点在于学习组合特征。注意,组合特征包括二阶、三阶甚至更高阶的,阶数越高越复杂,越不容易学习。Google的论文研究得出结论:高阶和低阶的组合特征都非常重要,同时学习到这两种组合特征的性能要比只考虑其中一种的性能要好。

那么关键问题转化成:如何高效的提取这些组合特征。一种办法就是引入领域知识人工进行特征工程。这样做的弊端是高阶组合特征非常难提取,会耗费极大的人力。而且,有些组合特征是隐藏在数据中的,即使是专家也不一定能提取出来,比如著名的“尿布与啤酒”问题。

模型演进历史

线性模型

线性模型最大的缺点就是无法提取高阶的组合特征,依赖于人工的特征组合,这也直接使得它表达能力受限,基本上只能处理线性可分或近似线性可分的问题。。所以常用的做法是人为的加入pairwise feature interactions。即使是这样:对于那些出现很少或者没有出现的组合特征以及高阶组合特征依旧无法提取。

FM模型

FM模型通过对于每一维特征的隐变量(latent vector)内积来提取特征组合,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。那么对于高阶的特征组合来说,可以通过多层的神经网络即DNN去解决。

深度模型

随着DNN在图像、语音、NLP等领域取得突破,人们意识到DNN在特征表示上的天然优势。相继提出了使用CNN或RNN来做CTR预估的模型。但是,CNN模型的缺点是:偏向于学习相邻特征的组合特征。 RNN模型的缺点是:比较适用于有序列(时序)关系的数据。

FNN的提出,应该算是一次非常不错的尝试:先使用预先训练好的FM,得到隐向量,然后作为DNN的输入来训练模型。缺点在于:受限于FM预训练的效果。
随后提出了PNN,PNN为了捕获高阶组合特征,在embedding layerfirst hidden layer之间增加了一个product layer。根据product layer使用内积、外积、混合分别衍生出IPNN, OPNN, PNN*三种类型。

无论是FNN还是PNN,他们都有一个绕不过去的缺点:对于低阶的组合特征,学习到的比较少。而前面我们说过,低阶特征对于CTR也是非常重要的。


对于离散特征一般会转换为one-hot的形式,但是将One-hot类型的特征输入到DNN中,会导致网络参数太多;为了避免全连接,可以采取类似于FFM中的思想,将特征分为不同的field,分而治之,将OneHot特征转换为Dense Vector。再加两层的全链接层,让Dense Vector进行组合,那么高阶特征的组合就出来了。但是低阶和高阶特征组合隐含地体现在隐藏层中,如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合。即将DNN与FM进行一个合理的融合:

为了同时学习低阶和高阶组合特征,以如何更有效地捕获特征组合为核心,人们对深度模型进行了诸多改进,总的来说深度排序模型从结构上可以分为并行结构与串行结构两大类,其中DNN的部分是公共组件,onehot到embedding特征编码,上面套两个隐层进行预测。

  • 并行结构:包含Wide和Deep两个部分,通过提出新型的wide结构,来更有效地捕获二阶特征组合,典型的模型包括Wide&Deep,DeepFM等。
  • 串行结构:embedding后用FM Function做二阶特征组合,上面套两个隐层做多阶特征捕获,显式地对二阶、三阶、四阶···K阶组合进行建模,捕获高阶特征组合,获得额外收益。目前的研究结论是:二、三、四阶都有正向收益,五阶以上就没什么用了。典型的代表模型是DeepCross、xDeepFM、PNN、NFM、AFM。


 

猜你喜欢

转载自blog.csdn.net/Yasin0/article/details/93344090