利用深度学习网络显示挖掘高阶特征交互的CTR模型
今天的论文主要参考了华为诺亚方舟实验室这两年的3篇paper,分别是2019年WWW会议上的《Feature Generation by Convolutional Neural Network for Click-Through Rate Prediction》,2020年KDD会议上的《AutoFIS: Automatic Feature Interaction Selection in Factorization Models for Click-Through Rate Prediction》和2020年SIGIR会议上的《AutoGroup: Automatic Feature Grouping for Modelling Explicit High-Order Feature Interactions in CTR Prediction》。都是设计了几种不同的深度学习模型来对CTR预估场景下的特征交互进行了深度的挖掘,下面就来梳理一下这几篇paper的内容。
在一开始我想说的是这几篇paper对比的baseline都是FM,DeepFM,XDeepFM系列的特征交互模型,这些特征交互模型虽然细节不一样,但是在对于特征交互(尤其是高阶特征交互)挖掘方面,采用的都是穷举策略。这样效率往往是比较低的,尤其是那些有效的高阶特征组合常常是很sparse的。只交给模型自己选择的话,在有限的数据集上是很难达到理想的效果的。
首先要讲的论文是《Feature Generation by Convolutional Neural Network for Click-Through Rate Prediction》。它是使用了CNN+Pooling+MLP提取挖掘有效的高阶交互特征,将这部分特征作为补充和原始特征一起供后续模型进行分类,整个过程如下图所示:
其中红色的Model部分就是本文要讲的重点即CNN+Pooling+MLP高阶特征交互提取结构,可以看出通过Model组件提取出的高阶交互特征和原来的特征一起输入到后续的网络结构中去,完成最后对于样本的预测。
说实话,刚看到题目的时候博主本人也是挺诧异的,也是第一次听说把CNN应用在CTR预估领域模型中的。CNN最常见的应用领域一个是图像领域另一个就是NLP领域,因为CNN的卷积器具有local focus的特性,即提取那些相邻的特征之间的相关关系,比方说图像中的相邻像素点和NLP中的一句话的相邻词语之类。但是对于CTR领域数据来说,输入的特征之间并没有顺序关系的,即"A,B,C"和"B,C,A"其实从业务角度理解,是完全一样的。所以就很难理解,怎么会在构建CTR预估模型的时候使用CNN模型。话不多说,首先上图:
从图中可以看出,整个网络由两个核心组件组成:1 Feature Generation; 2 Deep Classifier。feature generation就是本文最大的创新点即CNN+Pooling+MLP特征交互提取结构;而Deep Classifier其实就是目前其他后续网络结构的一个统称,论文里使用的是IPNN对应部分的网络结构,其实也通过实验证明了,无论该部分使用的是FM,DeepFM还是XDeepFM,使用了Feature Generation策略之后相比于不使用模型的AUC值都是有提升的。下面就对Feature Generation过程进行详细的说明:
从整个过程可以看出 R a w F e a t u r e = > ( C 1 , S 1 ) = > ( C 2 , S 2 ) = > ( C 3 , S 3 ) = > ( C 4 , S 4 ) Raw Feature => (C_1,S_1) =>(C_2,S_2)=>(C_3,S_3)=>(C_4,S4) RawFeature=>(C1,S1)=>(C2,S2)=>(C3,S3)=>(C4,S4),其中每一个 ( C i , S i ) (C_i,S_i) (Ci,Si)组成的pair对代表了卷积操作和池化操作,这里的卷积窗口选择的是 R h e i g h t ∗ 1 R^{height*1} Rheight∗1的,即对不同field的同一个embedding维度进行卷积,同样池化操作的方式也相似的,即对不同field之间的同一个embedding进行pooling。这样每一个pair对的输出 S i S_i Si的维度就是 R ( n / h ) k m c R^{(n/h)km_c} R(n/h)kmc,其中 n n n代表了输入 C i C_i Ci的样本的field数量,k代表了embedding维度的长度, m c m_c mc代表了卷积器的个数。
正如前面所说的,在CTR预估场景中,输入field特征之间是没有顺序以及相邻关系的,而CNN+Pooling操作只能提取相邻特征间的交互关系,为了克服这个缺陷,作者又引入了Recombination Layer单元(其实就是一层全连接神经网络),转换公式如下:
R
i
=
t
a
n
h
(
S
i
.
W
R
i
+
B
R
i
)
R^i = tanh(S_i.WR^i+BR^i)
Ri=tanh(Si.WRi+BRi)
其中
W
R
i
∈
R
(
(
n
/
h
)
k
m
c
)
∗
(
(
n
/
h
)
k
m
r
)
WR^i \in R^{((n/h)km_c)*((n/h)km_r)}
WRi∈R((n/h)kmc)∗((n/h)kmr),
B
R
i
∈
R
(
n
/
h
)
k
m
r
BR^i \in R^{(n/h)km_r}
BRi∈R(n/h)kmr,这样就将非相邻特征之间的交互包含进来了。
最后将新生成的交互特征和原始的raw feature进行拼接,一起输入到后续的Deep classifier结构中去。这里需要注意的是,在输入部分作者针对同一个field采用了2套embedding表征,说这样是为了方便模型梯度的更新训练,同时为了加快模型的训练速度,采用了Batch Normalization方式进行训练。
最后通过在多个数据集上的实验证明这种特征提取的方式是非常有效的。
第二篇要讲的paper是《AutoFIS: Automatic Feature Interaction Selection in Factorization Models for Click-Through Rate Prediction》。整体来讲这篇paper对于提取特征之间交互的想法还是非常直观的,既然不是所有特征之间的交互都是同等重要的,那我直接对每一个特征交互都引入权重参数
α
\alpha
α,
α
\alpha
α的大小就反应了特征交互的重要性,同样的
α
\alpha
α可以作为模型参数的一部分随着模型一起进行训练。整个模型结构图如下所示:
整个公式也是比较简单的:
L
A
u
t
o
F
I
S
=
<
w
,
x
>
+
∑
i
=
1
m
∑
j
=
i
+
1
m
α
(
i
,
j
)
<
e
i
,
e
j
>
L_{AutoFIS}=<w,x>+\sum_{i=1}^m\sum_{j=i+1}^m \alpha_{(i,j)}<e_i,e_j>
LAutoFIS=<w,x>+∑i=1m∑j=i+1mα(i,j)<ei,ej>。
这里有几个点需要注意下:
1 针对
<
e
i
,
e
j
>
<e_i,e_j>
<ei,ej>部分使用了Batch Normalization,因为设计
α
(
i
,
j
)
<
e
i
,
e
j
>
\alpha_{(i,j)}<e_i,e_j>
α(i,j)<ei,ej>的结构就是希望权重系数
α
\alpha
α的大小能反映出特征交互的重要程度,因为
α
\alpha
α和embedding都会作为模型部分参数一起训练,因此如果不能保证输入的field的
<
e
i
,
e
j
>
<e_i,e_j>
<ei,ej>内积值是相当的,这个
α
\alpha
α很难真正对最终的特征交互结果产生实质的影响。因此这里借鉴了batch normalization的思想,对
<
e
i
,
e
j
>
<e_i,e_j>
<ei,ej>的内积相乘结果进行了归一化,
<
e
i
,
e
j
>
B
N
=
<
e
i
,
e
j
>
−
μ
(
<
e
i
,
e
j
>
)
σ
B
2
(
<
e
i
,
e
j
>
)
+
c
<e_i,e_j>_{BN}=\frac{<e_i,e_j>-\mu(<e_i,e_j>)}{\sqrt{\sigma^2_B(<e_i,e_j>)+c}}
<ei,ej>BN=σB2(<ei,ej>)+c
<ei,ej>−μ(<ei,ej>);
2 将 α \alpha α代表特征交互权值参数,将 W W W代表神经网络结构参数,在训练的时候这两部分参数是迭代训练的,即每一个batch数据在训练模型的时候被用到2次,一次更新 α \alpha α部分模型参数,另一次更新 W W W部分网络参数。
3 two-stage训练方式,在第一个Search stage中对 W W W部分网络参数使用adam优化器进行训练;对 α \alpha α部分参数则使用GRDA优化器进行训练(该优化器相对于adam更容易是参数产生系数解);在第二个Re-train stage阶段的时候,把上一阶段 α \alpha α为0的交互特征拿掉,并对剩下的交互特征重新进行训练,并且保留 α \alpha α参数系数,这一阶段的全部参数的学习都使用adam优化器,并且不再区分 α \alpha α参数和 W W W参数,整体一起随着模型进行优化。
第三篇要讲的paper是《AutoGroup: Automatic Feature Grouping for Modelling Explicit High-Order Feature Interactions in CTR Prediction》。这篇paper的思想从整体上来讲还是非常新颖的,通过设置不同的特征grouping来使模型自动的对交互特征进行挖掘,每一个group负责挖掘不同order的特征交互信息,也就是说AutoGroup在显示挖掘特征交互的时候不仅仅是2阶,甚至是任意的高阶交互。
可以看出从input到最后的output部分,数据流一共经历了Automatic Feature Grouping,Interaction和MLP三个部分。
A
u
t
o
m
a
t
i
c
F
e
a
t
u
r
e
G
r
o
u
p
i
n
g
Automatic Feature Grouping
AutomaticFeatureGrouping
Automatic Feature Grouping则是完成特征之间交互的单元,他会生成一个个对应不同交互order的feature set。假设最终要提取的特征交互的最高阶为
q
q
q。针对order从1到
q
q
q,针对第
p
p
p个order 特征交互部分,总共对应了
n
p
n_p
np个feature set。
这时显然模型就有了一个structure 结构上的选择,即第
i
i
i个特征是否会被输入到第
p
p
porder中的第
j
j
j个feature set中去。这样选择从某种意义上来说是一个二分类问题,1代表会被选择,0代表不会被选择。那么就有如下公式:
β
i
,
j
p
=
1
1
+
e
x
p
(
−
α
i
,
j
p
)
y
i
,
j
p
+
e
x
p
(
−
α
i
,
j
p
)
1
+
e
x
p
(
−
α
i
,
j
p
)
(
1
−
y
i
,
j
p
)
\beta_{i,j}^p=\frac{1}{1+exp(-\alpha_{i,j}^p)}y_{i,j}^p+\frac{exp(-\alpha_{i,j}^p)}{1+exp(-\alpha_{i,j}^p)}(1-y_{i,j}^p)
βi,jp=1+exp(−αi,jp)1yi,jp+1+exp(−αi,jp)exp(−αi,jp)(1−yi,jp)。其中
α
i
,
j
p
\alpha_{i,j}^p
αi,jp被称之为structure parameters。由于这部分参数是也作为模型参数,如果直接用
β
i
,
j
p
\beta_{i,j}^p
βi,jp来代替某一个field特征是否选择话,则是不太合适的,因为这个不是样本本身,而是样本的概率分布,因此这种softmax是不合适的。那么怎么才能按照
1
1
+
e
x
p
(
−
α
i
,
j
p
)
\frac{1}{1+exp(-\alpha_{i,j}^p)}
1+exp(−αi,jp)1概率去采样field样本,同样还能使采样结果包含参数
α
i
,
j
p
\alpha_{i,j}^p
αi,jp(不然就没法使用BP方法去对
α
i
,
j
p
\alpha_{i,j}^p
αi,jp进行求解)。这里就引用了称之为Gumbel-Softmax的trick,具体的Gumbel-Softmax和Softmax的区别可以参考Gumbel-Softmax与Softmax对比,这里就不再赘述了。
那么根据Gumbel-Softmax的技巧,整个field样本的采用结果用structure parameter来进行表征就是
(
β
i
,
j
p
)
0
=
e
x
p
(
(
l
o
g
α
0
+
G
0
)
/
τ
)
∑
i
∈
(
0
,
1
)
e
x
p
(
(
l
o
g
α
i
+
G
i
)
/
τ
)
(\beta_{i,j}^p)_0=\frac{exp((log\alpha_0+G_0)/\tau)}{\sum_{i\in(0,1)}exp((log\alpha_i+G_i)/\tau)}
(βi,jp)0=∑i∈(0,1)exp((logαi+Gi)/τ)exp((logα0+G0)/τ),其中
α
1
=
1
1
+
e
x
p
(
−
α
i
,
j
p
)
\alpha_1=\frac{1}{1+exp(-\alpha_{i,j}^p)}
α1=1+exp(−αi,jp)1,当
τ
\tau
τ趋近于0的时候,最终的
β
i
,
j
p
\beta_{i,j}^p
βi,jp是越接近one-hot形式向量的,在实验中
τ
\tau
τ取值为0.1。
需要注意的是,上述Gumbel-Softmax技巧仅仅是用在了训练阶段;而到了预测阶段,就不再使用,而是直接取
α
0
\alpha_0
α0和
α
1
\alpha_1
α1中的最大值。
I
n
t
e
r
a
c
t
i
o
n
Interaction
Interaction
这部分就是为了直接完成每一个具体的feature group set中的特征交互工作。它所谓的
p
p
p阶特征交互其实就是参考了经典的FM模型公式,具体不多说,直接上公式:
g
j
p
=
∑
f
i
∈
s
j
p
w
i
p
e
i
g_j^p=\sum_{f_i\in s_j^p}w_i^pe_i
gjp=∑fi∈sjpwipei
I
j
p
=
(
g
j
p
)
p
−
∑
f
i
∈
s
j
p
(
w
i
p
e
i
)
p
I_j^p=(g_j^p)^p-\sum_{f_i\in s_j^p}(w_i^pe_i)^p
Ijp=(gjp)p−∑fi∈sjp(wipei)p。
M
L
P
MLP
MLP
MLP的功能就是把interaction Group生成的交互特征进行拼接
β
=
c
o
n
c
a
t
(
I
1
1
,
.
.
.
I
n
1
1
,
.
.
.
.
I
1
p
,
.
.
.
.
I
n
p
p
,
.
.
.
.
I
1
q
,
.
.
.
.
I
n
q
q
)
\beta=concat(I_1^1,...I_{n1}^1,....I_1^p,....I_{n_p}^p,....I_1^q,....I_{n_q}^q)
β=concat(I11,...In11,....I1p,....Inpp,....I1q,....Inqq),然后使用多层全连接神经网络进行进一步的特征非线性变换,最终得到模型的预测结果。
最后在训练的时候需要注意的是,structure parameter α \alpha α和网络结构参数 W W W不能一起进行训练,因为它们之间的相互依赖性特别的大。和第二篇paper里提到的训练方式一样,也是采用交互迭代的方式进行训练,即每一个batch数据在训练模型的时候被用到2次,一次更新 α \alpha α部分模型参数,另一次更新 W W W部分网络参数。
综上所述,可以发现在CTR领域,显著地去挖掘有效的高阶特征交互对最终模型的识别准确率还是非常有帮助的。