推荐算法丨特征交叉

因式分解机FM

线性模型对输入的特征取加权和,作为对目标的预估。如果先做特征交叉,再用线性模型,通常可以取得更好的效果。如果做二阶特征交叉,那么参数量为O(特征数量平方),计算量大,而且容易造成过拟合。因式分解机(Factorized Machine, FM)用低秩矩阵分解的方式降低参数量,加速计算。

若有x个特征,则线性模型可表示为: 加入二阶交叉特征: 引入特征交叉后,模型表达能力更强,也能取得更好的效果。但同时,直接加入二阶交叉特征引入了O(d^2)级别的参数量,大大提高了计算量。

相比于直接训练一个d×d的矩阵作为交叉项的参数,因式分解机只训练一个d×k的矩阵V(k<<d),将该矩阵第i列和第j列的内积作为交叉项的参数: 如此一来,参数量便大大减小。任何可以用线性模型(比如线性回归、逻辑回归)解决的问题,都可以用 FM 解决。但当前FM已经不常使用了。

FFM

FFM在FM的基础上引入了特征域。例如,⽤户的性别分为男、⼥、未知三类,那么对⼀个⼥性⽤户来说,采⽤ one-hot ⽅式编码的特征向量为[0,1,0],这个三维的特征向量就是⼀个“性别”特征域,其中第一维表示“是否为男性”,第二维表示“是否为女性”,第三位表示“是否未知”。

城市、学历都可以作为特征域。假如一个特征组合为(男,北京,本科),在FM中,我们对于每个特征都训练了一个隐向量v,例如男和北京的交叉特征权重应该是。而在FFM中,我们对于每个特征不是训练一个隐向量,而是m-1个隐向量,其中m为特征域数量。也就是说,当一个特征和其他每个特征域的特征交叉时,所使用的隐向量都是不同的。对于男性这个特征,我们会训练出。那么,我们的模型就变成了: 其中表示所在的特征域。

相⽐FM,FFM引⼊了特征域的概念,为模型引⼊了更多有价值的信息,使模型的表达能⼒更强 。但是复杂度也有所上升。

深度交叉网络DCN

深度交叉网络(Deep & Cross Networks, DCN)用来代替简单的全连接网络,可以用于召回双塔模型、粗排三塔模型、精排模型。DCN 由一个深度网络和一个交叉网络组成,交叉网络的基本组成单元是交叉层

交叉层

一个交叉层做了如下运算: 其中⊙为哈达玛积运算,即按位置相乘。一个交叉网络可以由多个交叉层叠加而成,类似ResNet。

深度交叉网络由一个深度网络和一个交叉网络组成:

深度交叉网络

特征向量经过全连接网络和交叉网络后分别得到一个向量,两个向量合并再输入一个全连接层得到最终的输出。

深度交叉网络可以用来代替召回、排序模型中的神经网络,如双塔模型中的用户塔物品塔,且往往能取得更好的效果,得到工业界的广泛认可。

LHUC网络结构

LHUC 的起源是语音识别,后来被应用到推荐系统,LHUC 可以用于精排。快手将其称为 PPNet,现在已经在业界广泛落地。

推荐系统中的LHUC模型

LHUC的模型结构如上图所示。模型的输入为用户特征和物品特征,输出为一个向量。需要注意的是,图中的两个神经网络由多个全连接层和一个**2*sigmoid激活函数组成,将最终的结果数值大小限定到(0,2)范围内。这样可以在和其他向量做哈达玛积后,放大某些数值,缩小某些数值**,具体放大哪些缩小哪些则受用户特征影响。

将LHUC用于推荐系统,门控神经网络(2 x sigmoid)的梯度不要传递到用户ID embedding特征,需要对其做 stop gradient。

LHUC模型原来用来做语音识别,输入分别为语音信号和说话者的特征,根据说话者的特征对语音信号的输出进行调节。

FiBiNet

学习FiBiNet需要先了解SENet和Bilinear Cross。

SENet

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结合了以上两种技术。

FiBiNet

传统的模型中,离散特征经过embedding后直接和连续特征拼起来作为神经网络的输入。FiBi加入了SENet和Bilinear,具体如上图,其中Bilinear输出的是几个交叉后的向量,再将这些向量做拼接得到一个高维向量。