Deepfm是华为诺亚方舟实验室和哈工大在2017年合作发表的一篇论文,思想和实现都很简单,只是在wide&deep的基础上加一个FM,其中FM和DNN共享原始的embedding特征向量,由于FM计算的时间复杂度为O(Kn),其中K为field的个数,一般也很小,故deepfm实际计算的时间复杂度和DNN接近。
上图为deepfm的模型结构,可以看出和deep&cross类似,只是把cross层换成了FM层,FM层计算很简单,一般FM的公式可以定义为如下公式:
其中vi 是第 i 维特征的隐向量,⟨⋅,⋅⟩ 代表向量点积。隐向量的长度为 k(k<<n),直观上看,上式的时间复杂度是O(knn),上面这个公式可以经过化简得到如下公式:
这样FM模型的计算时间复杂度就可以由O(knn)简化成O(K*n). 最后再把FM层的特征向量和DNN的特征向量concat, 最后再经过一个二分类的softmax,就可以得到预测为正,负样本的概率。
模型的tensorflow实现代码可以参考: https://github.com/qiaoguan/deep-ctr-prediction/tree/master/DeepFM
参考文献: Huifeng Guo et all. “DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,” In IJCAI,2017.