一种自动提取有效组合特征的网络结构(推荐系统)

今天的博客主要参考了2019 WWW会议的paper《Feature Generation by Convolutional Neural Network for Click-Through Rate Prediction》,主要讲了在推荐领域一种利用卷积结构来进行自动特征提取的模型结构,并证明自动提取的特征能够显著提升模型的性能。

众所周知,目前各个公司在推荐领域使用的都是以神经网络为基础的深度学习模型,但是推荐领域普遍存在着非常严重的数据稀疏问题,特别是涉及到特征交叉部分的时候这样的现象尤为明显,因此直接在输入层输入独立的特征,把挖掘特征之间交互信息的任务完全交给后续的多层全连接网络显然是远远不够的。

所以各个公司在真正实践的时候,往往由领域专家从业务本身入手,人工的在输入层加入有意义的交叉特征往往是对最终模型效果的提升有着较大的帮助。但是很多推荐场景业务非常的复杂,涉及到的特征组合更是数不胜数,这给做特征的领域专家带来了很大的工作量。基于这样的背景,作者同时结合了在图像领域抽取局部信息特征的卷积结构(CNN)提出了一种叫做Feature generation的结构,自动的从原始特征中进行特征的组合,将组合后的特征和原始特征进行拼接feed到后续的深度网络结构中,并证明了模型的有效性。

话不多说,先展示一下模型的整体结构图:
一种自动提取有效组合特征的网络结构(推荐系统)
左边是大家都很熟悉的Wide & Deep模型,右边就是这篇paper提出的模型FGCNN,其实整体来看是非常相似的,只不过FGCNN下面多了一个红色的model模块用来生成Generated features,然后这些Generated features和raw features进行拼接输入到后续的网络结构中去。所以从功能上来看,整个模型分为了2个部分:Feature Generation和Deep Classifier,Deep Classifier可以是各种模型,是一个抽象的概念,当然作者证明了无论哪种具体的Deep Classifier,加入了Feature Generation生成的features都能够显著提升模型的效果。
在讲解具体的模型结构,这里要说明一下,模型使用的输入特征都是经过embedding之后的特征,因为大部分的特征都是离散特征,对于连续性的特征则可以通过分桶来转换成离散性特征,所有filed的embedding特征维度都是K。

Feature Generation
一种自动提取有效组合特征的网络结构(推荐系统)
上图详细的讲解了feature generation内部的具体运作流程,不难看出主要有3个步骤组成:1 卷积操作;2 Pooling 操作;3 Recombine 操作,而且这样的步骤重复了2个step分别产生了R1R^1R2R^2,下面来分别讲解一下这三步操作的具体细节。
一种自动提取有效组合特征的网络结构(推荐系统)
其中Name,Age,Height,Gender都是embedding形式的向量,在第i个step中,卷积采用的卷积核的宽度都是1,高度是hih_i,卷积核的个数是mcim_c^i。除了第1个step输入的特征维度为Rnfk1R^{n_f*k*1},其余step的输入特征维度为RnfkmciR^{n_f*k*m_c^{i-`}},其中nfn_f为filed的个数,卷积后输出的特征维度为RnfkmciR^{n_f*k*{m_c^i}}

在pooling节点采用的窗口宽度为1,长度为npn_p,那么输出特征的维度由RnfkmciR^{n_f*k*{m_c^i}}变为Rnf/npkmciR^{{n_f/n_p}*k*{m_c^i}}

接下来的recombination操作就是为了增强模型的鲁棒性,因为和图像与NLP处理不同,推荐领域输入的特征在空间上并不具备关联性,也就是说NAHG的排列和AHGN的排列其实是一样的,但是卷积操作天然具有局部性,不同特征顺序输入给CNN得到的结果是不一样的,而且CNN抽取的特征也只有局部的组合性,为了能够从全局的视角来对特征进行组合,这里加了一个所谓的recombination操作,其实就是一个矩阵相乘的转换罢了。pooling操作的输出作为输入数据,数据维度为Rnf/npkmciR^{{n_f/n_p}*k*{m_c^i}},特征组合矩阵的维度为Rnf/npkmcinf/npkmriR^{{{n_f/n_p}*k*{m_c^i}}*{{n_f/n_p}*k*{m_r^i}}},那么转化后的数据维度则为Rnf/npkmriR^{{n_f/n_p}*k*{m_r^i}},最后再把生成的数据输给tanh进行非线性变换,最终就生成了step i的输出RiR_i

接下来这个步骤会重复ncn_c次,最终把生成的这些R收集起来,即R=(R1,R2,.....Rnc)R=(R^1,R^2,.....R^{n_c}),其实每一个RiR_i都可以看成是具有nf/npmri{n_f/n_p}*{m_r^i}个field的k维生成向量,接下来把R和原始特征拼接起来就作为后续Deep Classifier的输入特征。

Deep Classifier
一种自动提取有效组合特征的网络结构(推荐系统)
作者使用了IPNN model作为deep classifier,从图中可以看出IPNN模型结构其实非常简单,它借鉴了FM的思想,只不过把所有特征的pairwise interaction的向量内积作为新的特征和原始特征进行拼接输入到后续的多层全连接网络中去。

作者最终通过大量的实验,证明了这种特征生成的有效性。特别强调一点是,作者专门通过打乱特征的输入顺序,观测到模型最终的预测效果是稳定而提升的,从而证明了recombination操作的对应全局特征交互信息提取的有效性和稳定性。