今天的博客主要参考了2019年推荐系统顶会RecSys的paper《FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction》。该篇paper最大的创新点就是提出了一种自动提取特征重要性的结构SENET Layer和提取特征之间交互重要性的结构Bilinear-Interaction Layer。
下面先来展示一下整体模型的架构图:
其实和一般的CTR模型是非常相似的,原始特征Embedding经过SENET Layer之后变成了SENET-like Embedding,然后这两种Embedding一起经过Bilinear-Interaction Layer层后进入combine layer后(这里的combine layer其实就是向量的concat操作)。接下来如果是shallow part那么就直接接输出,如果是deep part的话再经过multiple hidden layer后再接输出。下面就来详细介绍一下模型中两个最重要的部件SENET Layer层和Bilinear-Interaction Layer层。
SENET Layer层
上图其实就是SENET Layer层,而这种结构其实最早是运用在图像领域的,这里作者把其用到了推荐领域。其中
e
1
,
e
2
,
.
.
.
e
f
e_1,e_2,...e_f
e1,e2,...ef是原始特征Embedding,而
v
1
,
v
2
,
.
.
.
v
f
v_1,v_2,...v_f
v1,v2,...vf是变换后的Embedding,从e=>f只是乘以了一个权重系数,即
F
r
e
w
e
i
g
h
t
(
e
i
)
=
v
i
F_{reweight}(e_i)=v_i
Freweight(ei)=vi。具体
F
r
e
w
e
i
g
h
t
F_{reweight}
Freweight是怎么做的呢?总共分为3个步骤:
1 假设原始特征有
E
=
[
e
1
,
.
.
.
e
f
]
E=[e_1,...e_f]
E=[e1,...ef]其中f为特征field的数量,
e
i
e_i
ei是维度为k的Embedding向量。接下来经过变换
z
i
=
1
k
∑
t
=
1
k
e
i
(
t
)
z_i=\frac{1}{k}\sum_{t=1}^{k}e_i^{(t)}
zi=k1∑t=1kei(t),得到
Z
=
[
z
1
,
.
.
.
z
i
,
.
.
z
f
]
Z=[z_1,...z_i,..z_f]
Z=[z1,...zi,..zf](即向量i中每一维数值的平均值),其中
z
i
z_i
zi为标量;
2 将得到的
Z
=
[
z
1
,
.
.
.
z
i
,
.
.
z
f
]
Z=[z_1,...z_i,..z_f]
Z=[z1,...zi,..zf]通过2层的全连接网络,得到权重系数输出
α
=
[
α
1
,
.
.
.
α
f
]
\alpha=[\alpha_1,...\alpha_f]
α=[α1,...αf],
α
=
σ
2
(
W
2
σ
1
(
W
1
Z
)
)
\alpha=\sigma_2(W_2\sigma_1(W_1Z))
α=σ2(W2σ1(W1Z)),其中
W
1
∈
R
f
∗
f
r
W_1\in R^{f*\frac{f}{r}}
W1∈Rf∗rf,
W
2
∈
R
f
r
∗
r
W_2\in R^{\frac{f}{r}*r}
W2∈Rrf∗r是随着模型训练的参数,r作为维度的压缩系数是一个模型的超参数;
3 最后
V
=
F
r
e
w
e
i
g
h
t
(
α
,
E
)
=
[
α
1
∗
e
1
,
.
.
.
α
f
∗
e
f
]
V=F_{reweight}(\alpha,E)=[\alpha_1*e_1,...\alpha_f*e_f]
V=Freweight(α,E)=[α1∗e1,...αf∗ef]。
可以看出,在上述结构中模型可以自动的学习出不同field特征的重要性,将更重要的field特征赋予更高的权重,将不重要的field特征赋予更小的权重。
Bilinear-Interaction Layer层
图中列出了3中提取特征interaction的方式,其中a就是内积(inner product),b就是对位相乘(Hadamard product),而c作为本文提出的Bilinear-Interaction其实就是在b的基础上多乘了一个参数矩阵而已,
p
i
j
=
v
i
∗
W
⨀
v
j
p_{ij}=v_i *W \bigodot v_j
pij=vi∗W⨀vj。同时关于这个
W
W
W参数作者提出了3种方式:
1
W
W
W被所有的物品交互共享,相当于增加了
K
∗
K
K*K
K∗K的参数量;
2
W
W
W以商品
i
i
i为based,即每一个商品有一个W,即
W
=
W
i
W=W_i
W=Wi,相当于增加了
f
∗
K
∗
K
f*K*K
f∗K∗K的参数了;
3
W
W
W以商品
i
i
i和商品
j
j
j的交互为based,即
W
=
W
i
j
W=W_{ij}
W=Wij,相当于增加了
f
(
f
+
1
)
2
∗
K
∗
K
\frac{f(f+1)}{2}*K*K
2f(f+1)∗K∗K的参数量。
后续作者实验部分发现,在不同的情况下这三种方式都有可能成为最优的方式。
最终作者通过大量的对比实验证明了无论是在shallow的结构中还是deep的结构中SENET Layer + Bilinear-Interaction Layer的组合使用都能比其他神经网络based的CTR模型得到最好的效果。