简介
本文主要介绍新浪微博机器学习团队发表在RecSys19上的一项工作。
文章标题为 FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction
文章指出当前的许多通过特征组合进行CTR预估的工作主要使用特征向量的内积或哈达玛积来计算交叉特征,这种方法忽略了特征本身的重要程度。提出通过使用Squeeze-Excitation network (SENET) 结构动态学习特征的重要性以及使用一个双线性函数来更好的建模交叉特征。
下面对该模型进行一个简单的介绍并提供核心代码实现以及运行demo,细节问题请参阅论文。
模型结构
整体结构
图中可以看到相比于我们熟悉的基于深度学习的CTR预估模型,主要增加了SENET Layer和Bilinear-Interaction Layer两个结构。下面就针对这两个结构进行简单的说明。
SENET Layer
SENET Layer的主要作用是学习不同特征的一个重要程度,对重要特征加权,对蕴含信息量不多的特征进行削弱。对于该结构的更详细的介绍可以参考论文Squeeze-and-Excitation Networks
该使用特征组的embedding向量作为输入,产生一个特征组权重向量 A = [ a 1 , . . . , a i , . . . a f ] A=[{a_1,...,a_i,...a_f}] A=[a1,...,ai,...af],最后将原始特征组embedding向量 E E E乘上 A A A得到一组新的embedding向量 V = [ v 1 , . . . , v i , . . . v f ] V=[{v_1,...,v_i,...v_f}] V=[v1,...,vi,...vf]
具体来说,分为3个步骤:
Squeeze
这一步主要是对每个特征组中的embedding向量进行汇总统计量的操作。文章使用了池化操作来对原始特征组embedding向量 E = [ e 1 , . . . , e f ] E=[e_1,...,e_f] E=[e1,...,ef]进行压缩表示得到统计向量 Z = [ z 1 , . . . , z i , . . . z f ] Z=[z_1,...,z_i,...z_f] Z=[z1,...,zi,...zf],其中 z i z_i zi表示第 i i i个特征的全局信息。 z i z_i zi可以通过如下的平均池化的方式计算得到:
z i = F s q ( e i ) = 1 k ∑ t = 1 k e i ( t ) z_i=F_{sq}(e_i)=\frac{1}{k}\sum_{t=1}^ke_i^{(t)} zi=Fsq(ei)=k1∑t=1ke