推荐算法丨特征交叉
因式分解机FM
线性模型对输入的特征取加权和,作为对目标的预估。如果先做特征交叉,再用线性模型,通常可以取得更好的效果。如果做二阶特征交叉,那么参数量为O(特征数量平方),计算量大,而且容易造成过拟合。因式分解机(Factorized Machine, FM)用低秩矩阵分解的方式降低参数量,加速计算。
若有x个特征,则线性模型可表示为:
相比于直接训练一个d×d的矩阵作为交叉项的参数,因式分解机只训练一个d×k的矩阵V(k<<d),将该矩阵第i列和第j列的内积作为交叉项
FFM
FFM在FM的基础上引入了特征域。例如,⽤户的性别分为男、⼥、未知三类,那么对⼀个⼥性⽤户来说,采⽤ one-hot ⽅式编码的特征向量为[0,1,0],这个三维的特征向量就是⼀个“性别”特征域,其中第一维表示“是否为男性”,第二维表示“是否为女性”,第三位表示“是否未知”。
城市、学历都可以作为特征域。假如一个特征组合为(男,北京,本科),在FM中,我们对于每个特征都训练了一个隐向量v,例如男和北京的交叉特征权重应该是
相⽐FM,FFM引⼊了特征域的概念,为模型引⼊了更多有价值的信息,使模型的表达能⼒更强 。但是复杂度也有所上升。
深度交叉网络DCN
深度交叉网络(Deep & Cross Networks, DCN)用来代替简单的全连接网络,可以用于召回双塔模型、粗排三塔模型、精排模型。DCN 由一个深度网络和一个交叉网络组成,交叉网络的基本组成单元是交叉层。
一个交叉层做了如下运算:
深度交叉网络由一个深度网络和一个交叉网络组成:
特征向量经过全连接网络和交叉网络后分别得到一个向量,两个向量合并再输入一个全连接层得到最终的输出。
深度交叉网络可以用来代替召回、排序模型中的神经网络,如双塔模型中的用户塔物品塔,且往往能取得更好的效果,得到工业界的广泛认可。
LHUC网络结构
LHUC 的起源是语音识别,后来被应用到推荐系统,LHUC 可以用于精排。快手将其称为 PPNet,现在已经在业界广泛落地。
LHUC的模型结构如上图所示。模型的输入为用户特征和物品特征,输出为一个向量。需要注意的是,图中的两个神经网络由多个全连接层和一个**2*sigmoid激活函数组成,将最终的结果数值大小限定到(0,2)范围内。这样可以在和其他向量做哈达玛积后,放大某些数值,缩小某些数值**,具体放大哪些缩小哪些则受用户特征影响。
将LHUC用于推荐系统,门控神经网络(2 x sigmoid)的梯度不要传递到用户ID embedding特征,需要对其做 stop gradient。
LHUC模型原来用来做语音识别,输入分别为语音信号和说话者的特征,根据说话者的特征对语音信号的输出进行调节。
FiBiNet
学习FiBiNet需要先了解SENet和Bilinear Cross。
SENet
SENet 是计算机视觉中的一种技术,可以用在推荐系统中对特征做动态加权。
假设有m个特征向量(这些向量的长度可不同),对这些向量做变换得到一个m维向量。将该m维向量作为权重对原来的特征向量做加权,得到新的特征向量。SENet的作用在于对离散特征做field-wise加权,放大或削弱某些特征的作用。比如用户ID Embbedding是64维向量,则这64个元素算一个field,获得相同的权重。m个特征向量即m个fields。
Bilinear Cross
Bilinear Cross用于做Field间特征交叉,即将两个fields做交叉得到新的特征。Field间特征交叉通常有以下几种方式。
- 内积:将两个特征向量做内积得到一个实数。如果有m个离散特征,就会得到m^2个实数。
- 哈达玛积:将两个特征向量做哈达玛积得到一个向量。如果有m个离散特征,就会得到m^2个向量。内积和哈达玛积都要求向量维度相同。
- Bilinear Cross:
- 内积:
。如果有m个fields则需要 个参数矩阵,参数量非常大,因此只能人工指定一些重要的、相关的特征做交叉。 - 哈达玛积:
。如果有m个fields则会产生m^2个向量,往往也是人工指定一些特征做交叉。
- 内积:
FiBiNet
FiBiNet结合了以上两种技术。
传统的模型中,离散特征经过embedding后直接和连续特征拼起来作为神经网络的输入。FiBi加入了SENet和Bilinear,具体如上图,其中Bilinear输出的是几个交叉后的向量,再将这些向量做拼接得到一个高维向量。