《推荐系统》-FFM模型

1、FFM理论

在CTR预估中,经常会遇到one-hot类型的变量,one-hot类型变量会导致严重的数据特征稀疏的情况,为了解决这一问题,在上一讲中,我们介绍了FM算法。这一讲我们介绍一种在FM基础上发展出来的算法-FFM(Field-aware Factorization Machine)。

FFM模型中引入了类别的概念,即field。还是拿上一讲中的数据来讲,先看下图:
《推荐系统》-FFM模型

图1、点击数据

在上面的广告点击案例中,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,Country也可以放到一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户国籍,广告类型,日期等等。

为了使用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,特征的值也可以按照之前的方法获得。

在FFM中,每一维特征 x i x_{i} xi ,针对其它特征的每一种field f i f_{i} fi ,都会学习一个隐向量 x i , f j x_{i,f_{j} } xi,fj 。因此,隐向量不仅与特征相关,也与field相关。也就是说,“Day=26/11/15”这个特征与“Country”特征和“Ad_type"特征进行关联的时候使用不同的隐向量,这与“Country”和“Ad_type”的内在差异相符,也是FFM中“field-aware”的由来。

假设样本的n个特征属于 f个field,那么FFM的二次项有nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。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(x)=w_{0}+ \sum_{i=1}^n w_{i} x_{i}+ \sum_{i=1}^{n} \sum_{j=i+1}^n <v_{i, f_{j} }, v_{j, f_{i} }> x_{i} x_{j} y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,fj,vj,fi>xixj

可以看到,如果隐向量的长度为k,那么FFM的二次参数有nfk 个,远多于FM模型的nk个。此外,由于隐向量与field相关,FFM二次项并不能够化简,其预测复杂度是 O(kn^2)。

下面以一个例子简单说明FFM的特征组合方式。输入记录如下:
《推荐系统》-FFM模型
图2、通常数据

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

那么,FFM的组合特征有10项,如下图所示。
《推荐系统》-FFM模型
图4、FFM的组合特征

其中,红色是field编号,蓝色是特征编号。

2、FFM实现细节

这里讲得只是一种FFM的实现方式,并不是唯一的。

2.1 损失函数

FFM将问题定义为分类问题,使用的是logistic loss,同时加入了正则项
m i n x ∑ i = 1 L l o g ( 1 + e x p { − y i ϕ ( W X i ) } ) + λ 2 ∥ W ∥ 2 \underset{x}{min} \sum_{i=1}^L log(1+exp\left\{-y_{i}\phi (W X_{i} ) \right\})+\frac{\lambda }{2} \left\|W\right\|^2 xmini=1Llog(1+exp{yiϕ(WXi)})+2λW2

什么,这是logisitc loss?第一眼看到我是懵逼的,逻辑回归的损失函数我很熟悉啊,不是长这样的啊?其实是我目光太短浅了。逻辑回归其实是有两种表述方式的损失函数的,取决于你将类别定义为0和1还是1和-1。大家可以参考下下面的文章:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/6340129.html。当我们将类别设定为1和-1的时候,逻辑回归的损失函数就是上面的样子。

2.2 梯度下降

梯度下降方法有很多种,根据为提高效率分别衍生了批量梯度下降,随机梯度下降及小批量梯度下降,根据需求选择即可

参考文献

论文:Field-aware Factorization Machines for CTR Prediction

推荐系统遇上深度学习(二)–FFM模型理论和实践

FM系列算法解读(FM+FFM+DeepFM)

C++版的FFM模型:libFFM

深入FFM原理与实践

推荐好文: 深度学习在CTR预估中的应用