Loading...
Navigation
Table of Contents

FM & FFMData

参考链接

FM模型

首先定一下命名习惯。举个栗子,用户特征中包含性别,城市,这叫2个不同的域;对于性别,有男女2种特征取值;对于城市,有北京、上海、广州3种取值是。

FM模型包含线性部分二阶交叉部分,

$$y = w_0 + \sum_{i=1}^n w_ix_i + \sum_{i=1}^n\sum_{j=i+1}^n(v_i^T \cdot v_j)x_ix_j$$

其中:

  • n是所有特征取值的数量(2+3),而不是域的数量;
  • 因此$X^T=[x_1,x_2,\dots,x_n]=[1,0,0,0,1], x_i \in \{0,1\}$,是one hot向量(这里指命中男和广州);
  • $x_i\times x_j = 1$当且仅当$x_i=1$ & $x_j=1$;
  • 因此$x_i$对于一个长度为k的embedding $v_i$,通过lookup的方式得到;FM二阶交叉部分,两个特征交叉$x_i\times x_j$就对应着embedding相乘:$v_i^T\cdot v_j\in R$。注意,这个交叉是指FM的自动交叉,不是手动特征交叉,手动特征交叉依然是先交叉成新特征,然后lookup一个新的embedding。

在原始的FM设计中,是原始任意两个域之间都进行特征交叉;在实际业务中,为了减少复杂度,一般先将user侧内部的特性先sum pooling一下,item侧同理,然后将得到两个长度都为k的embedding,再进行相乘,得到一个实数。

FFM

FFM和FM的区别就在于,对于某个域的特征,FFM在和其他不同的域的特征交叉的时候,用的embedding也是不同的。比如,对于域“性别”,其会有2个独立的长度为k的embeddings,一个用来和“职业”的长度为k的embedding交叉,一个用来和“地区”的长度为k的embedding交叉。

Last updated on Dec 01, 2019.