参考链接
- 美团:深入FFM原理与实践
- 知乎 - FFM及DeepFFM模型在推荐系统的探索
- CSDN:Factorization Machines 学习笔记
- TensorFlow实现:tensorflow-DeepFM,实现2,实现3
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.