今天看了出自 IJCAI 2017 的论文 DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,思想并不复杂,现将笔记大致记录于此。
背景
CRT (click-through rate) 预测,是指预测用户对某个物品(广告)的点击率,以便于推送用户最有可能点击的物品。广告平台(比如微信)当然希望有一个模型能够准确预测出用户最可能点击的广告,这样可以增加平台收益。
预测点击概率需要用到用户信息和物品信息,通常是将多种信息融合在一个向量中。离散的用户和物品的属性,就采用 one-hot 表示,连续的属性可以归一化后直接使用。训练样本为 ((x, y)),其中 (x) 是一个高维稀疏矩阵,其中包含 user 和 item 的信息,(y in{0,1}) 表示用户是否点击了 item。
特征间的组合常常很有用,比如从用户点击数据中发现在吃饭的时间用户常常下载点外卖的软件,这说明 time 和 app category 有很大关系。另外可能在数据中发现男孩子常常玩射击类游戏,这说明用户性别和年龄与游戏类别存在很大的联系。
要从数据中捕获以上提到的特征,需要模型能够组合不同的特征。线性模型无法进行特征组合,仅能学习到不同特征的权重。为此人们做了特征工程,向线性模型中加入 (x_ix_j) 这样的组合特征,为了解决组合特征参数过多的问题,提出了 Factorization Machines。
但是 FM 因为计算量的问题也常常只能引入二阶特征(两个特征的组合),为了能够引入更加强大的特征组合。Wide & Deep 模型被提出,结合线性模型和深度神经网络,试图让模型学习到更加复杂的特征。
本文的 DeepFM 和 Wide & Deep 的动机,我感觉是差不多的,只是 DeepFM 提出了一种看起来更加简洁的模型。
DeepFM
DeepFM 的模型架构图如下:
单看此图肯定时看不明白的,稍加解释如下:
模型架构图的左边是一个 FM 模型,FM 的输入就是高维的稀疏向量,这个向量是是不同属性的 one-hot 向量拼接得来的。上图中输入向量下面的 Field i 就是一个属性对应的 one-hot 向量。如果熟悉 FM 就知道,FM 模型会对每一个特征学习到一个低维的稠密向量,可以视为特征的 Embedding。
右面是一个深度神经网络模型,高维的稀疏向量中每一个 Filed 中只有一个维度有值,每一个 Filed 对应的 one-hot 向量,可以经过一个 Embedding 层转换为低维的稠密向量。Embedding 层中的各个特征的 Embedding 同时也用于 FM 模型。
论文中视各个 Filed 都是离散的,都可以表示为 one-hot 向量,但如果某个属性是连续值,该怎么办?可以直接把连续值放入神经网络,也可以使用这个特征对应的 Embedding。
FM 模型可以表示为:
深度模型的输入为:
其中 (e_i) 就是第 Field i 对应的 Embedding,不同 Field 的 Embedding 拼接起来得到一个稠密向量,输入到全连接的神经网络中。神经网络模型可以表示为:
最终整个 DeepFM 模型可以表示为:
总结
FM 解决的是输入比较稀疏时,组合特征不好学习的问题。DeepFM 提供了一种结合低阶和高阶特征的方法,联合训练 FM 和 神经网络,让模型抽取到更加丰富的特征。和 Wide & Deep 模型相比,DeepFM 中浅层网络和深层网络使用的输入是相同的。Wide & Deep 网络中 Wide 部分的的输入还是需要做特征工程,而在 DeepFM 中则不需要特征工程或需要的更少。