一种深度挖掘特征之间交互的神经网络模型
今天的博客主要参考了2019年KDD会议上的paper《Pairwise Multi-Layer Nets for Learning Distributed Representation of Multi-field Categorical Data》。这篇paper主要针对输入源数据为多个领域的类别特征(且每个领域的特征都有多种取值),设计了一种巧妙的提取特征之间交互信息的结构,并在正式训练任务之前提出了一种预训练模型的方式。这篇paper提出的模型属于结构并不复杂,但是思想确很巧妙的类型,还是很值得学习的。
首先,整个模型的架构图如下所示:
可以看到和一般的神经网络不一样,该网络以特征之间pairwise的方式进行输入特征Embedding之间全部的两两交叉组合,文中作者给出了3种交叉方式:1 ;2 ; 3 ,。假设输入特征的field个数为n,那么交叉之后的交叉field Embedding个数则为,接下来就是k-max pooling操作,从这些交叉field Embedding中选出模最大的k个,然后输入到下一层。从图中可以看出,每一层都经历了相同的操作,最后接到了输出层,这样多层的变换,使模型可以提取到更高阶的交互信息。由于是pairwise的方式进行训练,其中共现性的思想和Aprior思想又不谋而合,到这里其实整个模型的操作流程已经讲完了。
下面要重点讲一下作者巧妙设计的无监督预训练策略,如下图所示:
模型的训练目标是预测当前样本是真样本还是随机生成的样本,那么如何随机生成Fake sample呢?其实很简单,就是随机的去把某一个或某几个field的值替换成其他值,比方说有一个真样本,如果把第一维和第二维随机替换掉,就变成了,那么这个被随机替换了的就是负样本。这样先采用生成一些负样本,和原来数据中的正样本进行输入field Embedding的预训练过程,然后再把预训练后的模型参数针对目标下游任务进行fine-tuning。
作者在多个推荐数据集上进行了验证,和直接把输入field Embedding 向量拼接以及对输入field 向量sum-pooling操作进行比较,证明了这种结构的有效性。同时作者发现多层次的变换,更有利于模型提取到特征之间的高阶交叉信息,对最终效果的提升帮助是很大的。