FM、deepFM介绍以及特征处理

  • FM

FM、deepFM介绍以及特征处理

FM在LR的基础上引入交叉项,其公式为:

FM、deepFM介绍以及特征处理

从公式中可以看出,组合特征的参数一共有1+2+….+(n-1) =n(n−1)/2 个,n是离散化后的特征维度。Wij求解的思路是通过矩阵分解的方法。所有的二次项参数Wij可以组成一个对称阵W,W可以分解为 W=VTV,V 的第 i 列便是第 i 维特征的隐向量,如下。

FM、deepFM介绍以及特征处理


FM模型的复杂度是线性的,FM模型是SVM模型与factorization模型的结合。

公式推导、求导参数更新、以及FM相比较SVM的优点和不同参考:https://blog.csdn.net/ISMedal/article/details/100578354

  • DNN

FM、deepFM介绍以及特征处理

  • DeepFM:

FM、deepFM介绍以及特征处理
DeepFM算法是将FM算法和DNN结构结合的一种方式,相当于将Wide & Deep模型中的Wide部分的LR换成了FM。DeepFM目的是同时学习低阶和高阶的特征交叉,底部共享同样的输入。通常FM与深度模型的组合有两种,一种是二者并行,另一种是二者串行。DeepFM就是并行的一种结构。并行就是FM将输入部分计算完之后单独拿出来,得到一组特征表示,然后再利用深度模型(多层全连接)对输入部分进行告阶的特征组合。最后把二者的特征进行concact,得到一组特征,最后对这组特征进行分类或者回归。其实这只是特征的一种组合方式,目的就是为了得到特征的高阶表示。模型可以表示为:

FM、deepFM介绍以及特征处理

 

  • Ctr预估和推荐场景下,各个模型的优缺点:

参考第四部分https://blog.csdn.net/ISMedal/article/details/100578354

  1. LR: LR最大的缺点就是无法组合特征,依赖于人工的特征组合,基本上只能处理线性可分或近似线性可分的问题。
  2. FM:FM通过隐向量latent vector做内积来表示组合特征,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。后面又进行了改进,提出了FFM,增加了Field的概念。
  3. RNN:比较适用于有序列(时序)关系的数据。
  4. CNN:偏向于学习相邻特征的组合特征。
  5. FNN:先使用预先训练好的FM,得到隐向量,然后作为DNN的输入来训练模型。(不了解)
  6. PNN:和FNN一样,只能学习到高阶的特征组合。没有对于1阶和2阶特征进行建模。内积的计算复杂度依旧非常高。(不了解)
  7. Wide&Deep:同时学习低阶和高阶组合特征,它混合了一个线性模型(Wide part)和Deep模型(Deep part)。这两部分模型需要不同的输入,而Wide part部分的输入,依旧依赖人工特征工程。
  8. DeepFM:在Wide&Deep的基础上进行改进,不需要预训练FM得到隐向量,不需要人工特征工程,能同时学习低阶和高阶的组合特征;FM模块和Deep模块共享Feature Embedding部分,可以更快的训练,以及更精确的训练学习
  • DeepFM数据处理:

参考博文:https://blog.csdn.net/qq_18293213/article/details/89707683?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

包括:缺失值填充-1,每条样本的缺失值个数统计、编码(数值型、离散型)、原始数据编码转换等。

  • 对不同类型特征的处理总结:

参考博文:https://mp.weixin.qq.com/s?__biz=MjM5MzY4NzE3MA==&mid=2247484660&idx=1&sn=41b0fed96beb8c50858ed0e2dd21acbc&source=41#wechat_redirect

1. 稠密连续类型特征的处理

在点击率预估问题中,可以尝试的几种方法

  1. 归一化后直接输入dnn部分,不参与fm部分交叉
  2. 不归一化经过bn后输入dnn,不参与fm部分交叉
  3. 离散化后作为id feature, embedding后与其他sparse feature的embedding 一起参与fm的交叉
  4. 为每一个field下的dense value  维护一个embedding vector  ,取  作为其最终的embedding表示,与其他sparse feature的embedding一起参与fm的交叉,如下图右侧的Feature field MFM、deepFM介绍以及特征处理

 

2. 带权重序列类型特征的处理

给定一个由若干个(item_id, weight)组成的列表,这种列表的含义可以是用户历史偏好的item_id以及偏好权重,或者是历史收藏加购过的商品或者对应店铺的次数等等。例如FM、deepFM介绍以及特征处理

一般情况有以下两种做法来使用这个信息:

  1. 不考虑上下文因素,直接将这个列表输入。可以通过sum/mean pooling 的方式将一个变长序列压缩到一个定长的向量,输入给我们的模型。例如:FM、deepFM介绍以及特征处理

  2. 考虑上下文因素,根据当前预估item进行一个查表操作。比如我们当前打分item属于标签1,那么直接查表得到('标签1', 0.8),这个时候我们可以选择直接使用权重0.8作为输入,或者选择用0.8*emb(标签1)作为输入,这种方法表达的是用户对于当前item的偏好。