最近研究了几篇这两年在顶会上发表的使用神经网络模型进行CTR预估的策略(也可以看做是目前工业界正在使用的主流方法),正好在这里总结一下。

所谓CTR预估,就是点击转化率的预估即click through
rate,一般用在推荐广告系统中。简单来说,就是当用户浏览网页或者使用APP的时候,在用户浏览的context中插入一些广告(比方说一些APP的安装链接、一些商品的销售信息),如果用户在浏览的过程中点击了这些广告,就算作是一次成功的转化。因为考虑到了用户的因素,因此针对不同的人不同的爱好,系统会推荐不同的广告。如果是离线系统,一般采用AUC进行系统性能的评估;如果是在线系统,一般采用A&B
Test 的方式进行系统性能的评估。


在推荐系统中,输入样本特征包括了数值特征(比方说浏览时间、身高等等)和类别特征(比方说user-id和item-id等等),为了使这些特征的形式保持一致,方便模型的训练,一般有两种可选方式:1
全部转化为数值特征;2 全部转化为类别特征,当然这就对应于两种解决方案即“海量类别特征+简单模型” 和“少量数值特征+复杂模型”(李沐)。
这里的简单模型一般指的是LR,复杂模型一般指的是DNN。


如果全部转化为类别特征,对于原始的类别特征来说往往采用one-hot的编码方案,对于原始的数值特征来说则需要进行离散化的处理(一般采用的是等频离散化策略,即每一个离散区间内的样本数大致相当)。至于数值特征离散化的意义则如下所示:
1 对异常数据有很强的鲁棒性。比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
2 离散化后可以加强特征交叉;
3 对LR来看,能够提升模型学习能力 。单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性;
4 较少对数值的敏感性,加强模型的鲁棒性。
比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。

这种方案最大的缺点就是会导致输入特征的稀疏性,即很多位都是0,同时还会出现有些在预测集中出现的特征组合从来没有在训练集中遇到过,这样就会使模型对于这部分样本的预测准确性大大地下降。一般业界认为这种“海量类别特征+简单模型”的方式提取到的都是低阶的特征交互信息,因为LR可以看成是单层的神经网络。


如果全部采用数值特征,一般来说对于原始的类别特征就是使用embedding策略将其映射到一个低维的实数向量空间中去,这个向量可以随机初始化也可以使用FM算法进行pre-training初始化。接下来通过多层神经网络结构和非线性变换,一般业界认为这种“少数数值特征+复杂模型”的方式提取到的都是高阶的特征交互信息。

基于上面的基础知识,下面我来介绍几篇比较不错的论文。

首先要介绍的就是2016年Google发表的论文《Wide & Deep Learning for Recommender
Systems》,他在论文就形象的把推荐系统和它最拿手的“search ranking
system”进行了类比,即推荐系统中的user和context信息可以被看做是search ranking
system中的query,推荐系统的输出则可以被看做是search ranking system输出的ranked list of
items。整个模型架构如下所示:

从图中就可以看出该模型之所以叫做Wide & Deep
模型是因为由Deep模块和Wide模块组成,所谓Wide模块其实就是上面提到的“海量类别特征+LR”,Deep模块就是“少量数值特征+DNN”(论文用实验证明对于神经元总量相同、总层数相同的DNN网络,100-200-300,300-200-100,150-300-150,200-200-200这四种方式中200-200-200效果是最好的)。最后整体的预测函数形式是
p=sigmoid(ywide+ydeep+b)
。最后使用交叉熵作为损失函数进行联合训练,即同时训练Deep模块和Wide模块。同时该论文着重说明了一下Joint training 和 ensemble
model的本质区别:“In an ensemble, individual models are trained separately without
knowing each other, and their predictions are combined only at inference time
but not at training time. In contrast, joint training optimizes all parameters
simultaneously by taking both the wide and deep part as well as the weights of
their sum into account at training time.”

第二篇要介绍的是2017年华为诺亚方舟实验室的在IJCAI会议发表的论文《DeepFM: A Factorization-Machine based
Neural Network for CTR
Prediction》,这个论文提出的模型和上述Google那篇其实是很相似的,只不过把Wide模块的LR换成了FM(注意:该模型所提到的FM专指只利用一阶和二阶交互信息的线性FM即
yFM=w0+∑ni=1wixi+∑ni=1∑nj=i+1vTivj.xixj)而已,同时DNN和FM共享embedding部分,结构如下所示:

同样FM用来学习低阶交互特征,DNN用来学习高阶交互特征。

第三篇要介绍的是2017年在SIGIR会议上发表的论文《Neural Factorization Machines for Sparse
Predictive Analytics》,提出的模型名称为NFM。整个模型的预测公式为:yNFM(x)=w0+∑Ni=1wixi+f(x)
,而f(x)代表的模型结构如下所示:

图中的Hidden Layers就是简单的全连接网络结构,可以看出图中有一个被称之为“Bi-Interaction
Pooling”的操作,这也是这篇文章最大的创新点,这个操作的定义为:fBI(x)=∑ni=1∑nj=i+1xivi⨀xjvj。 其中⨀
操作定义为两个向量的对位相乘操作,很简单这个fBI(x)就是直接获得了所有向量的二阶交互特征(为了方便fBI的计算,一般按照12(∑nixivi)2−∑ni(x
ivi)2)。在经过多层的神经网络之后对输出神经元向量乘上h得到一个数值概率,即f(x)=hT.DNN(fBI(x))。那么显而易见yNFM(x)=w0+∑Ni
=1wixi+hT.DNN(fBI(x))。其实不难看出,当“Bi-Interaction
Pooling”操作后的神经网络只有一层而且h向量为全1向量的时候,这个fBI(x)
就相当于简单的FM模型。下面这段话是作者提出这个“Bi-Interaction Pooling”操作的主要原因:“In this work, we
present a new paradigm of neural networks for sparse data prediction. Instead
of concatenating feature embedding vectors, we propose a new Bi-Interaction
operation that models the second-order feature interactions. This results in a
much more informative representation in the low level, greatly helping the
subsequent non-linear layers to learn higher-order interactions.”

第四篇要介绍的是2017年IJCAI上发表的论文《Attentional Factorization Machines:Learning the
Weight of Feature Interactions via Attention
Networks》。从题目上可以看出这篇论文提出的模型是attention机制和FM的一种组合方式,因为很显然不是所有的二阶特征交互的重要性都是一样的,如何通过机器自动的从中学习到这些重要性是这篇论文解决的最重要的问题,首先展示一下模型的架构图:


他把引入attention机制的FM写成了如下形式:yAFM=w0+∑ni=1wixi+pT∑ni=1∑nj=i+1αij(vi⨀vj)xixj
。下面就来着重的介绍一下这些α系数是如何生成的,其中关于特征i和j之间的相关度独立公式如下:tij=hTRelu(W(vi⨀vj)xixj+b)
,对每一对交互特征按照相同的方式计算相关度并进行归一化处理,那么αij=exp(tij)∑(i,j)∈Rxexp(tij)。其中h W和b都是模型参数。

第五篇要介绍的是2016年微软在SIGKDD会议上发表的论文《Deep Crossing: Web-Scale Modeling without
Manually Crafted Combinatorial
Features》。这篇论文针对的也是CTR预估问题,从名字上不难看出这是一种深度神经网络模型,整个网络架构其实很简单如下所示:


在输入层统一的把所有的特征转化为dense特征,对于那些类别特征使用embedding技术进行转化。值得一提的是,在这篇paper中提到了一种技巧,可以在保证准确率的前提下降低类别特征one-hot的维度:采用统计方式,只对出现次数在一定排名之前的类别进行有效编码,其余剩下的稀少类别归为剩下的一种类别中去。其实该文章最大的创新点就是把residual
layers即深度残差网络引入了推荐系统中去,residual layer如下:


第六篇要介绍的是2016年发表的论文《Field-aware Factorization Machines for CTR
Prediction》。从题目上看这篇paper也是一种对FM模型的创新,传统的FM在计算二阶特征交互的时候,每一维特征都对应一个固定的latent向量,但是作者说这样是不合理的。应该是每一维特征对应多个latent向量,每一个latent向量用来区分和该维特征交互的特征种类(听上去有点绕口)。举例来说比方对于一个拥有三个特征属性的样本(A,B,C),如果进行二维特征交互操作,对于这种field-aware的方式来说,当A和B交互的时候以及当A和C交互的时候分别对应两个latent向量
VA−>B和VA−>C。如果采用这样的方式,那么使用多个latent向量的维度k就可以比只使用一个向量的维度k要少。

总的来说CTR预估目前工业界主流的方式还是神经网络那一套理论,这几篇论文都是几篇比较基础的论文,希望记录下来,以后会进一步跟进这个方向。

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信