FM系列—FM+FFM详解


预估CTR/CVR,业界常用的方法有人工特征工程 + LR(Logistic Regression)、GBDT(Gradient Boosting Decision Tree) + LR,该模型可以 半自动化 地做一些特征组合。FM(Factorization Machine)它可以 全自动化 地做特征组合。FFM(Field-aware Factorization Machine)模型。所有的 CTR 模型,它的核心就是特征组合,是怎么解决特征组合的问题,它的发展路径就按照这个方向发展。本文先介绍FM,然后介绍FM的改进FFM。

FM

基本思想

FM(Factorization Machine)的提出主要是为了解决稀疏数据下的特征组合问题

下面我们通过一个例子来说明FM模型,根据用户的基本属性,预测用户是否点击了广告,有下面这样的数据(经过One-Hot编码):

agecity=Beijingcity=Shanghaicity=Shengzhengsex=mansex=womanlabel
user_120100011
user_225000100

由上表的数据可以看出,经过One-Hot编码之后的特征是比较稀疏的。城市和性别特征一共5维,但只有两个维度有非零值。在实际应用中CTR/CVR预测时,用户的性别、职业、教育水平、品类偏好,商品的品类等,经过One-Hot编码转换后都会导致样本数据的稀疏性。特别是商品品类这种类型的特征,如商品的末级品类约有550个,采用One-Hot编码生成550个数值特征,但每个样本的这550个特征,有且仅有一个是有效的(非零),这也说明了One-Hot编码的另一个特点就是导致特征空间大

假设我们用最简单的线性拟合来预测y值:
y ^ = w 0 + ∑ i = 1 n w i x i \hat{y}=w_0+\sum_{i=1}^n{w_ix_i} y^=w0+i=1nwixi
上述这个模型的不足之处在于没有考虑到“北京的男性用户”、“上海的女性用户”这种组合特征可能是有用的,即 x i , x j x_i,x_j xi,xj,( x i , x j x_i,x_j xi,xj都是one-hot特征)同时为1时可能是一个很有用的特征,这种组合特征是 x i , x j x_i,x_j xi,xj和的线性组合所无法表示的。所以,我们必须在模型中引入 x i , x j x_i,x_j xi,xj的组合特征。直接将二者的乘积 x i x j x_ix_j xixj作为一个新的特征,即 x i x_i xi x j x_j xj 都非零时,组合特征 x i , x j x_i,x_j xi,xj才有意义。

这种关联特征与label的正向相关性在实际问题中是普遍存在的,如“化妆品”类商品与“女”性,“球类运动配件”的商品与“男”性,“电影票”的商品与“电影”品类偏好等。因此,引入两个特征的组合是非常有意义的。同样道理我们组合任意三个特征、四个特征,随着阶数的提高,样本会显得非常稀疏,而且额外引入的参数呈指数增长。

所以新的模型长这样:
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i n ∑ j = i + 1 n w i j x i x j \hat{y}=w_0+\sum_{i=1}^n{w_ix_i}+\sum_i^n{\sum_{j=i+1}^n{w_{ij}x_ix_j}} y^=w0+i=1nwixi+inj=i+1nwijxixj
注:我们穷举所有的i,j组合,若某些 x i , x j x_i,x_j xi,xj的组合不是有用特征,经过大量样本的训练,模型会把那些无用的特征的系数训练为0。

从上式可以看出组合特征的参数一共有 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)个,任意两个参数都是独立的,训练每个参数 w i j w_{ij} wij 需要大量的 x i 、 x j x_i、x_j xixj都不为0的样本,如果训练样本不足,容易导致 w i j w_{ij} wij不准确。

我们要在 w i j w_{ij} wij上做文章,将其表示成另外的形式,对每个特征分量 x i x_i xi,引入辅助量:
v i = ( v i 1 , v i 2 , … , v i k ) T \mathbf v_i = (v_{i1},v_{i2},\ldots,v_{ik})^T vi=(vi1,vi2,,vik)T
辅助量的长度为 k k k(k<<n),包含 k 个描述特征的因子。

w i j w_{ij} wij改写为:
w ^ i j = v i T v j = ∑ l = 1 k v i l v j l \hat w_{ij} = \mathbf v_i^T\mathbf v_j = \sum_{l=1}^k v_{il}v_{jl} w^ij=viTvj=l=1kvilvjl

因此,FM的模型方程为:
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i n ∑ j = i + 1 n < v i , v j > x i x j < v i , v j > = ∑ f = 1 k v i f v j f \hat{y}=w_0+\sum_{i=1}^n{w_ix_i}+\sum_i^n{\sum_{j=i+1}^n{<v_i,v_j>x_ix_j}}\\ <v_i,v_j>=\sum_{f=1}^k{v_{if}v_{jf}} y^=w0+i=1nwixi+inj=i+1n<vi,vj>xixj<vi,vj>=f=1kvifvjf
根据 x x x计算 y ^ \hat y y^的时间复杂度是:
{ n + ( n − 1 ) } + { n ( n − 1 ) 2 [ k + ( k − 1 ) + 2 ] + n ( n − 1 ) 2 − 1 } + 2 = O ( k n 2 ) \{n+(n-1)\} + \{\frac{n(n-1)}{2}[k+(k-1)+2] + \frac{n(n-1)}{2} -1\}+2=O(kn^2) {n+(n1)}+{2n(n1)[k+(k1)+2]+2n(n1)1}+2=O(kn2)
第一个花括号对应 ∑ i = 1 n w i x i \sum_{i=1}^n w_ix_i i=1nwixi的加法和乘法操作数,第二个花括号对应 ∑ i n ∑ j = i + 1 n < v i , v j > x i x j \sum_i^n{\sum_{j=i+1}^n{<v_i,v_j>x_ix_j}} inj=i+1n<vi,vj>xixj的加法乘法。

所有二次项参数 w i j w_{ij} wij 可以组成一个对称阵 W \mathbf W W(对角元素可以设置为正实数)。这个矩阵可以分解为 W = V T V \mathbf{W} = \mathbf{V}^T \mathbf{V} W=VTV,这里的 V \mathbf{V} V是由上面的辅助量 v i \mathbf v_i vi组成的矩阵。这样模型的参数就变成了 V \mathbf{V} V二次项的参数数量减少为 k n kn kn,其中 k k k是辅助量的长度, n n n是特征的个数。远少于多项式模型的参数数量。

参数因子化使得 x h x i x_h x_i xhxi的参数和 x j x i x_j x_i xjxi的参数不再是相互独立的,因此我们可以在样本稀疏的情况下相对合理地估计FM的二次项参数,具体来说, x h x i x_hx_i xhxi x i , x j x_i,x_j xi,xj的系数分别为 ⟨ v h , v i ⟩ ⟨vh,vi⟩ vh,vi ⟨ v i , v j ⟩ ⟨vi,vj⟩ vi,vj,它们之间有共同项 v i v_i vi。也就是说,所有包含“ v i v_i vi的非零组合特征”(存在某个 j ≠ i j≠i j=i,使得 x i x j ≠ 0 xixj≠0 xixj=0)的样本都可以用来学习隐向量 v i v_i vi,这很大程度上避免了数据稀疏性造成的影响。

又因为:
∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j = 1 2 ( ∑ f = 1 k ( ∑ i = 1 n v i f x i ) ( ∑ j = 1 n v j f x j ) − ∑ i = 1 n ∑ f = 1 k v i f v i f x i x i ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) ( ∑ j = 1 n v j f x j ) − ∑ i = 1 n v i f 2 x i 2 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) \sum_{i=1}^n{\sum_{j=i+1}^n{<v_i,v_j>x_ix_j}}\\ = \frac{1}{2}\left(\sum_{f=1}^k{\left(\sum_{i=1}^n{v_{if}x_i}\right)\left(\sum_{j=1}^n{v_{jf}x_j}\right)}-\sum_{i=1}^n{\sum_{f=1}^k{v_{if}v_{if}x_ix_i}}\right)\\ = \frac{1}{2}\sum_{f=1}^k\left(\left(\sum_{i=1}^n{v_{if}x_i}\right)\left(\sum_{j=1}^n{v_{jf}x_j}\right)-\sum_{i=1}^n{v_{if}^2x_i^2}\right)\\ = \frac{1}{2}\sum_{f=1}^k\left(\left(\sum_{i=1}^n{v_{if}x_i}\right)^2-\sum_{i=1}^n{v_{if}^2x_i^2}\right) i=1nj=i+1n<vi,vj>xixj=21f=1k(i=1nvifxi)(j=1nvjfxj)i=1nf=1kvifvifxixi=21f=1k((i=1nvifxi)(j=1nvjfxj)i=1nvif2xi2)=21f=1k(i=1nvifxi)2i=1nvif2xi2

注:上式右边展开可得到左边,原理是配方法。

这样根据 x x x计算 y ^ \hat y y^的时间复杂度是
k { [ n + ( n − 1 ) + 1 ] + [ 3 n + ( n − 1 ) + 1 ] } + ( k − 1 ) + 1 = O ( k n ) k\{[n+(n-1)+1]+[3n+(n-1)+1]\}+(k-1)+1=O(kn) k{[n+(n1)+1]+[3n+(n1)+1]}+(k1)+1=O(kn)

模型学习

引入二次项的FM模型,可以采用不同的损失函数用于解决回归、二元分类等问题,比如可以采用MSE(Mean Square Error)损失函数来求解回归问题,也可以采用Hinge/Cross-Entropy损失来求解分类问题。然后利用随机梯度下降学习模型。

(1)回归问题loss取最小平方误差
l o s s R ( y ^ , y ) = ( y ^ − y ) 2 loss^R(\hat y,y) = (\hat y - y)^2 lossR(y^,y)=(y^y)2
所以:
∂ l o s s R ( y ^ , y ) ∂ θ = 2 ( y ^ − y ) ∂ y ^ ∂ θ \frac{\partial loss^R(\hat y,y)}{\partial \theta} = 2 (\hat y - y)\frac{\partial \hat y }{\partial\theta} θlossR(y^,y)=2(y^y)θy^

(2)二分类问题loss取logit函数
l o s s C ( y ^ , y ) = − ln ⁡ σ ( y ^ y ) loss^C(\hat y ,y) = -\ln \sigma(\hat y y) lossC(y^,y)=lnσ(y^y)
所以:
∂ l o s s C ( y ^ , y ) ∂ θ = [ ( σ ( y ^ y ) − 1 ] y ∂ y ^ ∂ θ \frac{\partial loss^C(\hat y,y)}{\partial \theta} = [(\sigma(\hat y y) - 1]y \frac{\partial \hat y }{\partial\theta} θlossC(y^,y)=[(σ(y^y)1]yθy^

其中:
∂ ∂ θ y ^ ( x ) = { 1 , if    θ    is    w 0   x i , if    θ    is    w i   x i ∑ j = 1 n v j , f x j − v i , f x i 2 , if    θ    is    v i , f \frac{\partial}{\partial\theta} \hat y (\mathbf{x}) = \left\{\begin{array}{ll} 1, & \text{if}\; \theta\; \text{is}\; w_0 \\ \ x_i, & \text{if}\; \theta\; \text{is}\; w_i \\ \ x_i \sum_{j=1}^n v_{j, f} x_j - v_{i, f} x_i^2, & \text{if}\; \theta\; \text{is}\; v_{i, f} \end{array}\right. θy^(x)=1, xi, xij=1nvj,fxjvi,fxi2,ifθisw0ifθiswiifθisvi,f

为了避免过拟合,也引入正则化。所以,FM的最优化问题就变成了:
θ ∗ = arg ⁡ min ⁡ θ ∑ i = 1 N ( l o s s ( y ^ ( x i ) , y i ) + ∑ λ θ θ 2 ) \theta ^* = \mathop{\arg\min}_{\theta} \sum_{i=1}^N\left(loss(\hat y(x_i) ,y_i)+ \sum \lambda_\theta \theta^2\right) θ=argminθi=1N(loss(y^(xi),yi)+λθθ2)
注: λ θ \lambda_\theta λθ是正则化系数。

FM vs SVM

(1)SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量 v i 、 v j v_i、v_j vivj,交叉参数就不是独立的,而是相互影响的。

(2)FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行

(3)FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量

FFM

基本思想

FFM(Field-aware Factorization Machine)是FM的升级版模型,通过引入field的概念,FFM把相同性质的特征归于同一个field。以上面的广告分类为例,“sex=man”、“sex = woman”这两个特征都是代表性别的,可以放到同一个field中。即同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征 x i x_i xi,针对其它特征的每一种 f i e l d f i field \quad f_i fieldfi,都会学习一个隐向量 v i , f j v_{i,f_j} vi,fj。因此,隐向量不仅与特征相关,也与field相关。也就是说,“sex=man”这个特征与“city”特征和“age”特征进行关联的时候使用不同的隐向量,这与“city”和“age”的内在差异相符,也是FFM中“field-aware”的由来。

假设样本的 n n n 个特征属于 f f f 个field,那么FFM的二次项有 n f nf nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个,二次项有n个隐向量。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。根据FFM的field敏感特性,可以导出其模型方程:
y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , f j , v j , f i ⟩ x i x j y(\mathbf{x}) = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_{i, f_j}, \mathbf{v}_{j, f_i} \rangle x_i x_j y(x)=w0+i=1nwixi+i=1nj=i+1nvi,fj,vj,fixixj
下面通过例子说明FFM:

usermovieGenrePrice
user_13IdiotsComedy, Drama9.99

这条记录可以编码成5个特征,其中“Genre=Comedy”和“Genre=Drama”属于同一个field,“Price”是数值型,不用One-Hot编码转换。为了方便说明FFM的样本格式,我们将所有的特征和对应的field映射成整数编号。

Field nameField indexFeature nameFeature index
User1User=YuChin1
Movie2Movie=3Idiots2
Genre3Genre=Comedy3
Genre3Genre=Drama4
Price4Price5

那么,FFM的组合特征有10项:
⟨ v 1 , 2 , v 2 , 1 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 1 , 3 , v 3 , 1 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 1 , 3 , v 4 , 1 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 1 , 4 , v 5 , 1 ⟩ ⋅ 1 ⋅ 9.99   + ⟨ v 2 , 3 , v 3 , 2 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 2 , 3 , v 4 , 2 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 2 , 4 , v 5 , 2 ⟩ ⋅ 1 ⋅ 9.99   + ⟨ v 3 , 3 , v 4 , 3 ⟩ ⋅ 1 ⋅ 1 + ⟨ v 3 , 4 , v 5 , 3 ⟩ ⋅ 1 ⋅ 9.99   + ⟨ v 4 , 4 , v 5 , 3 ⟩ ⋅ 1 ⋅ 9.99 \langle \mathbf{v}_{{\color{blue}1}, {\color{red}2}}, \mathbf{v}_{{\color{blue}2}, {\color{red}1}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} + \langle \mathbf{v}_{{\color{blue}1}, {\color{red}3}}, \mathbf{v}_{{\color{blue}3}, {\color{red}1}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} + \langle \mathbf{v}_{{\color{blue}1}, {\color{red}3}}, \mathbf{v}_{{\color{blue}4}, {\color{red}1}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} + \langle \mathbf{v}_{{\color{blue}1}, {\color{red}4}}, \mathbf{v}_{{\color{blue}5}, {\color{red}1}} \rangle \cdot {\color{green}1} \cdot {\color{green}{9.99}} \ {} \\+ \langle \mathbf{v}_{{\color{blue}2}, {\color{red}3}}, \mathbf{v}_{{\color{blue}3}, {\color{red}2}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} + \langle \mathbf{v}_{{\color{blue}2}, {\color{red}3}}, \mathbf{v}_{{\color{blue}4}, {\color{red}2}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} + \langle \mathbf{v}_{{\color{blue}2}, {\color{red}4}}, \mathbf{v}_{{\color{blue}5}, {\color{red}2}} \rangle \cdot {\color{green}1} \cdot {\color{green}{9.99}} \ {} + \langle \mathbf{v}_{{\color{blue}3}, {\color{red}3}}, \mathbf{v}_{{\color{blue}4}, {\color{red}3}} \rangle \cdot {\color{green}1} \cdot {\color{green}1} \\+ \langle \mathbf{v}_{{\color{blue}3}, {\color{red}4}}, \mathbf{v}_{{\color{blue}5}, {\color{red}3}} \rangle \cdot {\color{green}1} \cdot {\color{green}{9.99}} \ {} + \langle \mathbf{v}_{{\color{blue}4}, {\color{red}4}}, \mathbf{v}_{{\color{blue}5}, {\color{red}3}} \rangle \cdot {\color{green}1} \cdot {\color{green}{9.99}} v1,2,v2,111+v1,3,v3,111+v1,3,v4,111+v1,4,v5,119.99 +v2,3,v3,211+v2,3,v4,211+v2,4,v5,219.99 +v3,3,v4,311+v3,4,v5,319.99 +v4,4,v5,319.99

其中,红色是field编号,蓝色是特征编号,绿色是此样本的特征取值。二次项的系数是通过与特征field相关的隐向量点积得到的,二次项参数共有 k n f knf knf 个( f f f是特征filds个数),相比FM参数扩大了F倍。

模型学习

FFM省略了常数项和一次项,模型方程如下:
ϕ ( w , x ) = ∑ j 1 , j 2 ∈ C 2 ⟨ w j 1 , f 2 , w j 2 , f 1 ⟩ x j 1 x j 2 \phi(\mathbf{w}, \mathbf{x}) = \sum_{j_1, j_2 \in \mathcal{C}_2} \langle \mathbf{w}_{j_1, f_2}, \mathbf{w}_{j_2, f_1} \rangle x_{j_1} x_{j_2} ϕ(w,x)=j1,j2C2wj1,f2,wj2,f1xj1xj2
其中, C 2 \mathcal C_2 C2是非零特征的二元组合, j 1 j_1 j1 是特征,属于field f 1 f_1 f1 w j 1 , f 2 w_{j_1,f_2} wj1,f2 是特征 j 1 j_1 j1对field f 2 f_2 f2的隐向量。此FFM模型采用logistic loss作为损失函数,和L2惩罚项,因此只能用于二元分类问题。
min ⁡ w ∑ i = 1 L log ⁡ ( 1 + exp ⁡ { − y i ϕ ( w , x i ) } ) + λ 2 ∥ w ∥ 2 \min_{\mathbf{w}} \sum_{i=1}^L \log \big( 1 + \exp\{ -y_i \phi (\mathbf{w}, \mathbf{x}_i ) \} \big) + \frac{\lambda}{2} \| \mathbf{w} \|^2 wmini=1Llog(1+exp{yiϕ(w,xi)})+2λw2
其中, y i ∈ − 1 , 1 y_i∈{−1,1} yi1,1 是第 i 个样本的label,L 是训练样本数量,λ 是惩罚项系数。

接着通过梯度下降法训练得到最优参数。

在训练FFM的过程中,有许多小细节值得特别关注。

第一,样本归一化。

第二,特征归一化。

第三,省略零值特征。

双线性FFM(Bilinear-FFM)

双线性 FFM 主要是为了解决FFM参数增加的问题。核心思想是通过共享参数从而减少参数数量。基本思路如下图:

在这里插入图片描述

从上图可知: v i , v j v_i,v_j vi,vj还是跟 FM 一样,还是用一个 vector 来表达,但是把两个交互的复杂特性放在大家共享参数里面去学,这就是双线性 FFM 的核心思想。如何共享参数W,又分为三种情况:
在这里插入图片描述

(1)共享同一个 W W W ,这是参数量最小的一种形式。 W W W的参数量是 k × k k\times k k×k k k k是特征Embedding的size;

(2)每个field共享一个 W W W ,即每个field各自学各自的 W W W

(3)每两个fields对共享一个 W W W ,能更加细化地描述特征组合;

下图展示了FFM和双线性FFM模型的参数变化情况:

在这里插入图片描述

FFM应用

CTR和CVR预估模型采用的特征大同小异,主要分三类:

用户相关的特征
年龄、性别、职业、兴趣、品类偏好、浏览/购买品类等基本信息,以及用户近期点击量/购买量/消费额等统计信息

商品相关的特征
商品所属品类、销量、价格、评分、历史CTR/CVR等信息

用户-商品匹配特征
浏览/购买品类匹配、浏览/购买商家匹配、兴趣偏好匹配等

为了使用FFM方法,所有的特征必须转换成“field_id:feat_id:value”格式,field_id代表特征所属field的编号,feat_id是特征编号,value是特征的值。数值型的特征比较容易处理,只需分配单独的field编号,如用户评论得分、商品的历史CTR/CVR等。categorical特征需要经过One-Hot编码成数值型,编码产生的所有特征同属于一个field,而特征的值只能是0或1,如用户的性别、年龄段,商品的品类id等。除此之外,还有第三类特征,如用户浏览/购买品类,有多个品类id且用一个数值衡量用户浏览或购买每个品类商品的数量。这类特征按照categorical特征处理,不同的只是特征的值不是0或1,而是代表用户浏览或购买数量的数值。按前述方法得到field_id之后,再对转换后特征顺序编号,得到feat_id,特征的值也可以按照之前的方法获得。

参考文章:

FM在特征组合中的应用

深入FFM原理与实践

分解机(Factorization Machines)推荐算法原理

从FFM到DeepFFM,推荐排序模型到底哪家强?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值