一种深度挖掘特征之间交互的神经网络模型

今天的博客主要参考了2019年KDD会议上的paper《Pairwise Multi-Layer Nets for Learning Distributed Representation of Multi-field Categorical Data》。这篇paper主要针对输入源数据为多个领域的类别特征(且每个领域的特征都有多种取值),设计了一种巧妙的提取特征之间交互信息的结构,并在正式训练任务之前提出了一种预训练模型的方式。这篇paper提出的模型属于结构并不复杂,但是思想确很巧妙的类型,还是很值得学习的。

首先,整个模型的架构图如下所示:
一种深度挖掘特征之间交互的神经网络模型
可以看到和一般的神经网络不一样,该网络以特征之间pairwise的方式进行输入特征Embedding之间全部的两两交叉组合,文中作者给出了3种交叉方式:1 fsum(ci,cj)=ci+cjf^{sum}(c_i,c_j)=c_i+c_j;2 fmul(ci,cj)=cicjf^{mul}(c_i,c_j)=c_i \bigodot c_j; 3 fhighway(ci,cj)=τg(WH(ci+cj)+bH)+(1τ)(ci+cj)f^{highway}(c_i,c_j)=\tau \bigodot g(W_H(c_i+c_j)+b_H)+(1-\tau) \bigodot (c_i+c_j)τ=σ(Wτ(ci+cj)+bτ)\tau=\sigma (W_\tau (c_i+c_j)+b_\tau)。假设输入特征的field个数为n,那么交叉之后的交叉field Embedding个数则为n(n1)2\frac{n*(n-1)}{2},接下来就是k-max pooling操作,从这些交叉field Embedding中选出模最大的k个,然后输入到下一层。从图中可以看出,每一层都经历了相同的操作,最后接到了输出层,这样多层的变换,使模型可以提取到更高阶的交互信息。由于是pairwise的方式进行训练,其*现性的思想和Aprior思想又不谋而合,到这里其实整个模型的操作流程已经讲完了。

下面要重点讲一下作者巧妙设计的无监督预训练策略,如下图所示:
一种深度挖掘特征之间交互的神经网络模型
模型的训练目标是预测当前样本是真样本还是随机生成的样本,那么如何随机生成Fake sample呢?其实很简单,就是随机的去把某一个或某几个field的值替换成其他值,比方说有一个真样本(a1,b2,c3,d4)(a_1,b_2,c_3,d_4),如果把第一维a1a_1和第二维b2b_2随机替换掉,就变成了(a3,b1,c3,d4)(a_3,b_1,c_3,d_4),那么这个被随机替换了的就是负样本。这样先采用生成一些负样本,和原来数据中的正样本进行输入field Embedding的预训练过程,然后再把预训练后的模型参数针对目标下游任务进行fine-tuning。

作者在多个推荐数据集上进行了验证,和直接把输入field Embedding 向量拼接以及对输入field 向量sum-pooling操作进行比较,证明了这种结构的有效性。同时作者发现多层次的变换,更有利于模型提取到特征之间的高阶交叉信息,对最终效果的提升帮助是很大的。