0-摘要
DeepFM融合了因子分解机(FM)的推荐优势和Deep Learing的特征提取优势。在基准数据和商业数据上都表现优越。
1- 介绍
点击率(CTR)预测是估计用户对某个商业项目进行点击的概率。提升点击人数,从而提升CTR。对于在线广告,提升CTR可以增加企业的收入。总体上来说,排序的策略是CTR*bid。这里的bid是指每次点击产生的收益,点击不同item收益可能不同。但是不管怎样,不断提升CTR可以创造更多的收益。那么就需要能更为准确地预测CTR。本文的核心任务就是预测CTR。
通过用户的点击行为序列学习到背后潜在的隐特征。例如主流的app商店发现,用户常常在用餐时间下载外卖类app,这就是一种二阶的交互信息:app应用类别和时间,这类的二阶交互信息可以用以CTR。再比如,男性青少年偏爱射击类和角色扮演游戏,这些信息是3阶的。该信息包含了性别,年龄和app的应用类别,也是有助于CTR。这些用户行为背后的特征交互是非常复杂的,这些特征包括了低阶和高阶的交互信息。2016年谷歌的Wide & Deep model系统基于低阶和高阶特征的交互信息在整体上都带来了额外的性能提升。
建模的核心挑战在于特征之间的交互信息。上述举例的交互特征只是少部分,多数的特征交互是隐藏于数据背后的,难以利用先验知识发现。这与啤酒与尿布的案例很想,只有通过数据的挖掘才能够发现两者之间的关系。此外,纵使退一万步说,交互特征是易于理解,而不是深藏于数据背后的,但是海量的特征数量使得专家学者也只能望洋兴叹。
早期的线性模型如FTRL,虽然效果不错,但是缺乏表达特征间相互作用的能力。一般是在后期手动方式添加特征之间的交互项,如此不仅难以泛化到高阶特征,也难以应付训练集中较少或者尚未出现的特征。2010年提出的因子分解机(FM)可以解决这个问题。FM通过隐向量的内积表现特征之间的相互关系。由于FM构建特征之间更高阶的关系会更加复杂,所以一般只采用2阶。
深度学习在特征表示很具有很大优势,所以在学习特征之间相互作用上也具有很大潜力。基于CNN的模型只能处理相邻特征,基于RNN的模型由于天然的序列依赖特性更适于CTR领域。2016年有学者提出了Factorization-machine supported Neural Network (FNN),该模型用FM进行预训练,再输入到DNN,这也使得模型受限于FM。Qu等人于2016年提出Product-based Neural Network (PNN)在嵌入层和全连接层之间引入一个product 层来表示特征之间的相互作用。其实FNN和PNN都仅仅能够表达低阶的特征间相互作用,且程度有限。cheng等人于2016年提出一个混合网络结构:Wide & Deep模型。该模型融合了一个线性模型(wide)和深度学习模型,能够同时表达低阶和高阶的特征信息。该模型需要同时输入wide part和deep part,其中wide part需要依赖专家的特征工程。本文的模型是可以通过端到端的获取低阶和高阶特征相互作用。本文主要贡献如下:
(1)FM+DNN。FM部分实现低阶的特征提取,DNN实现高阶的特征提取。同时无需做特征工程。
(2)训练高效。DeepFM的wide part和deep part共享同一输入和嵌入向量。
2-DeepFM方法详解
样本(instance)数量为n,每个instance表示为
(
χ
,
y
)
(\chi,y)
(χ,y),其中
χ
\chi
χ为m个field组成的数据。这很类似我们所习惯的特征数,但是其实并不是,每个field是有多种特征的。
y
y
y=1表示用户点击了,0表示没有点击。
χ
\chi
χ可以包括分类型的字段,比如(性别,位置),也可以是连续型的字段,比如(年龄)。所以,field其实就是指一个信息维度,或者一个数据字段。对于分类型的字段,每个字段都通过one-hot方式进行编码;对于连续型的字段,则直接用其值表示即可,或者对其进行离散化,再用one-hot方式进行编码。这步处理之后,每个instance都转为
(
x
,
y
)
(x,y)
(x,y),其中
x
=
[
x
f
i
e
l
d
1
,
x
f
i
e
l
d
2
.
.
.
x
f
i
e
l
d
j
.
.
.
x
f
i
e
l
d
m
]
x=[x_{field_1},x_{field_2}...x_{field_j}...x_{field_m}]
x=[xfield1,xfield2...xfieldj...xfieldm]是一个
d
d
d维的向量,其中
x
f
i
e
l
d
j
x_{field_j}
xfieldj表示
χ
\chi
χ的第
j
j
j个field的向量化表示。
CTR预测模型就是
y
^
=
C
T
R
_
m
o
d
e
l
(
x
)
\hat{y}=CTR\_{model}(x)
y^=CTR_model(x)。
2-1 DeepFM
DeepFM包含两部分:因子分解机部分与神经网络部分,分别负责低阶特征的提取和高阶特征的提取。这两部分共享同样的输入。对于特征
i
i
i,标量
w
i
w_i
wi用于表示其一阶权重。隐向量
V
i
V_i
Vi用以表示特征
i
i
i与其他特征之间的相互作用。
V
i
V_i
Vi在FM部分是用以对2阶特征进行建模,即特征之间的相互作用;
V
i
V_i
Vi输入到Deep部分则是用以进行高阶特征建模。
DeepFM的预测结果可以写为:
(1) y ^ = s i g m o i d ( y F M + y D N N ) \hat y = sigmoid({y_{FM}} + {y_{DNN}}) \tag1 y^=sigmoid(yFM+yDNN)(1)
2-1-1 FM部分
FM部分是一个因子分解机。因为引入了隐变量的原因,对于几乎不出现或者很少出现的隐变量,FM也可以很好的学习。
FM的输出公式如下:
(2)
y
(
x
)
=
w
0
+
∑
i
=
1
n
(
w
i
x
i
)
+
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
(
<
v
i
,
v
j
>
x
i
x
j
)
y(x)=w_0+\sum_{i=1} ^n(w_i x_i)+\sum_{i=1}^{n-1} \sum_{j=i+1}^n(<v_i,v_j>x_ix_j) \tag{2}
y(x)=w0+i=1∑n(wixi)+i=1∑n−1j=i+1∑n(<vi,vj>xixj)(2)
从上式可以看出,除了一阶特征表示,还是2阶的特征表示。通过特征的隐向量之间的内积表示2阶的特征。即计算
V
i
和
V
j
V_i和V_j
Vi和Vj的内积,从而得到特征i和特征j的2阶相互作用。这种方案就可以一定程度避免训练数据集中很少出现或者不出现的特征。
其中的
d
d
d应该是隐向量的维度吧,
V
V
V的shape应该是
n
∗
d
n*d
n∗d
2-1-2 Deep部分
深度部分是一个前馈神经网络,用以获取高阶特征间相互作用。与图像或者语音这类连续而且密集的输入不同,CTR的输入一般是极其稀疏,超高维,离散型和连续型混合且多字段(这里的字段指的是field,例如(性别,年龄,位置))。因此需要重新设计网络结构,在第一层隐含层之前,引入一个嵌入层来将输入向量压缩到低维稠密向量。
嵌入层网络结果如下:
这个网络结构有两个很有意思的point:
1)虽然输入的field vector长度不一,但是它们embedding出来的长度是固定的,上图示例的嵌入长度是k;
2)之前FM中的latent vector
V
V
V向量作为该嵌入层的权重矩阵,以实现输入的
f
i
e
l
d
v
e
c
t
o
r
field vector
fieldvector压缩到
e
m
b
e
d
d
i
n
g
v
e
c
t
o
r
embedding vector
embeddingvector的转换。隐向量
V
i
,
k
V_{i,k}
Vi,k是嵌入层中第
i
i
i个field连接到嵌入层第
k
k
k个节点的权重。
Zhang等人在2016年提出的FM+DNN(FNN系统),是用FM训练出的
V
V
V来对DNN部分进行初始化。而本文这里,是将FM部分作为整个框架的一部分一起学习的,而不是预训练。
这里的第二点如何理解呢,假设我们的 k = 5 k=5 k=5,首先,对于输入的一条记录,同一个field 只有一个位置是1,那么在由输入得到dense vector的过程中,输入层只有一个神经元起作用,得到的dense vector其实就是输入层到embedding层该神经元相连的五条线的权重,即 v i 1 , v i 2 , v i 3 , v i 4 , v i 5 v_{i1},v_{i2},v_{i3},v_{i4},v_{i5} vi1,vi2,vi3,vi4,vi5。这五个值组合起来就是我们在FM中所提到的 V i V_i Vi。在FM部分和DNN部分,这一块是共享权重的,对同一个特征来说,得到的 V i V_i Vi是相同的。
2-2 与其他神经网络的关系
对比结果如下: