0. 写在前面
推荐系统相关从业人员肯定对FM(Factorization Machines)模型不会感到陌生,工业界及学术界在FM的基础上也提出了一系列优化模型,这些模型至今仍广泛应用于各类场景。本篇文章将带领大家重温FM模型,一探其中原理。
个人心得:
- 相比于LR,FM引入了二阶特征组合
- 通过矩阵分解引入隐向量的方式来估计特征参数,解决特征稀疏问题,同时大大减少参数数目
- 相比于MF(Matrix Factorization),FM能够引入用户特征、物品特征以外的其他特征,应用范围更广
论文地址:
https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
1. 背景
在推荐系统实现个性化推荐初期,协同过滤取得了广泛的应用。协同过滤基于相似物品的相同受众或者相似用户的相同偏好的思想实现个性化推荐,为了解决协同过滤UI矩阵(用户-物品矩阵)的稀疏问题,MF被提出用于估计用户与未发生交互的物品之间的得分。然而,协同过滤只能够考虑用户与物品的交互特征,用户及物品本身的特征,模型并不能够有效利用。为了充分利用特征,人们将LR(Linear Regression)模型应用到推荐场景当中,但是众所周知,LR是线性模型,无法拟合二阶及二阶以上的特征。为了解决这个问题,并同时保证模型的可应用型,FM模型问世。
2. 模型架构
我们先来看在推荐场景下的一组典型特征,如下图所示。
对id类特征进行特征编码后,我们得到新的特征组合为
上面我们也提到,如果使用一阶线性模型LR来拟合特征的话,LR的表示为
y
=
w
0
+
∑
i
=
1
n
w
i
x
i
y=w_{0}+\sum_{i=1}^{n}w_{i}x_{i}
y=w0+i=1∑nwixi
这里的LR只考虑拟合样本一阶特征,没有考虑二阶特征的情形。然而,二阶组合特征,例如“性别=男,颜色=蓝色”,是非常有意义的。那么,考虑二阶组合特征的LR可以表示为
y
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
w
i
j
x
i
x
j
y=w_{0}+\sum_{i=1}^{n}w_{i}x_{i}+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}x_{i}x_{j}
y=w0+i=1∑nwixi+i=1∑n−1j=i+1∑nwijxixj
相比于一阶LR,二阶LR多了二阶特征这一项,即特征两两组合并进行枚举。这个地方,会出现两个问题:
- 二阶特征参数数目为 n 2 n^{2} n2, 参数数目呈指数级增加。
- 样本稀疏导致的学习问题。类别变量经编码后大部分位数为0,与其他特征进行组合后,取值仍然为0,会导致样本稀疏的情况。在LR的训练过程中,对于稀疏样本,值为0的特征对应的参数将很难被更新。
FM模型在有效完成二阶特征组合工作的同时,有效的解决了上述问题,因此被广泛应用于各类特征二阶交叉的场景。FM模型的实现形式如下式所示
y
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
<
v
i
,
v
j
>
x
i
x
j
y=w_{0}+\sum_{i=1}^{n}w_{i}x_{i}+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}< v_{i},v_{j} >x_{i}x_{j}
y=w0+i=1∑nwixi+i=1∑n−1j=i+1∑n<vi,vj>xixj
可以看到,除了二阶特征项与二阶LR模型有差别以外,其他部分完全相同。下面,我们就来详细讲解下这部分。
FM模型的二阶项依然是枚举特征两两交叉的情况,但是稍有区别的是,二阶交叉特征的参数由标量
w
i
,
j
w_{i,j}
wi,j变为了向量
v
i
v_{i}
vi,
v
j
v_{j}
vj的点积。
v
i
v_{i}
vi,
v
j
v_{j}
vj如下所示,每一维一阶特征
x
i
x_{i}
xi均有相对应的向量
v
i
v_{i}
vi。
V
n
×
k
=
[
a
11
a
12
⋯
a
1
k
a
21
a
22
⋯
a
2
k
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
k
]
=
[
v
1
v
2
⋮
v
n
]
V_{n\times k}= \begin{bmatrix} a_{11}& a_{12}& \cdots & a_{1k}\\ a_{21}& a_{22}& \cdots & a_{2k}\\ \vdots & \vdots & \ddots & \vdots \\ a_{n1}& a_{n2}& \cdots & a_{nk} \end{bmatrix} =\begin{bmatrix} v_{1}\\ v_{2}\\ \vdots\\ v_{n} \end{bmatrix}
Vn×k=⎣⎢⎢⎢⎡a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1ka2k⋮ank⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡v1v2⋮vn⎦⎥⎥⎥⎤
可以看到,
v
i
v_{i}
vi,
v
j
v_{j}
vj是维度为
k
k
k的向量,其中
k
k
k是由模型使用者设定的超参数。那么,这里我们可以计算一下,FM使用到的参数数量为
n
∗
k
n*k
n∗k,也就是上面向量矩阵的大小。其中,
n
n
n为一阶特征数目,
k
k
k为向量长度(
k
k
k<<
n
n
n)。相比于二阶LR中
n
∗
n
n*n
n∗n的参数数目,FM模型可以说是极大的减少了模型参数数目,同时解决了上述的第一个问题。由于每个一阶特征均有其对应的向量
v
v
v,并且每个向量在训练过程中的更新不再仅仅与某一个向量发生交互,而是与所有的向量发生交互,
举个例子,即便在所有样本中 x i x j x_{i}x_{j} xixj没有共同出现过,也不影响其权重 w i j w_{ij} wij的训练,因为 v i v_{i} vi会在训练过程中根据 v k v_{k} vk( k ! = i , j k != i,j k!=i,j)而更新,不再依赖于 v j v_{j} vj,同理, v j v_{j} vj也会根据 v k v_{k} vk( k ! = i , j k != i,j k!=i,j)而更新,不再依赖于 v i v_{i} vi。
如此,FM模型解决了样本稀疏情况下参数的学习和更新问题。
3. 总结
FM模型作为推荐系统中的经典模型,解决了传统LR模型在特征二阶交叉后出现的参数爆炸及稀疏样本下的参数更新问题,因此被广泛应用于各类推荐场景。继FM模型后,学术界及工业界也尝试从不同的角度开展FM优化工作,涌现出了一批应用于推荐场景下的优秀模型。