知乎文章 : 推荐算法——CTR预估模型
CTR预估模型可以广泛应用于个性化推荐、信息检索、在线广告等领域,用来学习和预测用户的反馈,用户的反馈主要有点击、收藏、购买等。
数据
CTR预估模型的特征数据往往包含多个特征,这些特征会根据其自身特点被编译成one-hot编码,然后将多个特征对应的编码向量链接在一起构成特征向量。
高维、稀疏、以及多类别是输入给CTR预估模型的特征数据的典型特点。
Embedding 表示
又叫Distributed representation,相对于高维稀疏的one-hot编码表示,embedding学习一个低维稠密的实数向量,即将位数较多的稀疏数据压缩到位数较少的空间。具体关于embedding技术可以查看《自然语言处理——Skip-Gram》的模型细节部分,其实就是将one-hot编码处理成一个固定维度的嵌入向量表示。
Logistic Regression(LR)
LR一直是CTR预估的benchmark模型,具有简单、易于并行化实现、可解释性强等优点,但是LR模型中的特征是默认相互独立的,遇到具有交叉可能性的特征需进行大量的人工特征工程进行交叉(连续特征的离散化、特征交叉),不能处理目标和特征之间的非线性关系。
连续特征的离散化就是把原始的连续值划分多个区间,如等频划分或等间距划分,甚至训练一个但特征的决策树模型进行划分(信息增益)。特征离散化相当于把线性函数变成了分段线性函数,引入了非线性结构。离散化还可以使得数据中的噪音有更好的鲁棒性(异常值落在同一区间);还可以使得模型更加稳定,特征值的微小变化(在同一个区间)不会引起模型预测值变化。
LR+GBDT
GBDT(Gradient Boost Decision Tree)是用来解决LR模型的特征组合问题。GBDT可以用来学习高阶非线性特征组合。对应树的一条路径。通常将一些连续值特征、值空间不大的categorical特征都丢给GBDT模型;空间很大的ID特征留在LR模型中训练,既能做高阶特征组合又可以利用线性模型易于处理大规模稀疏数据的优势。
GBDT优势在于处理连续值特征,如用户历史点击率、用户历史浏览次数等连续值。由于树的分裂算法,具有一定组合特征的能力。GBDT根据最优的分裂特征和该特征的最优分裂点,根据特征的分裂次数得到一个特征的重要性排序,GBDT减少了人工特征工程的工作量。
但是大多数推荐系统中出现的是大规模的离散化特征,使用GBDT需要首先统计成连续值特征(embedding),需要耗费时间,GBDT具有记忆性强的特点,不利于挖掘长尾特征。而且GBDT虽然具有一定组合特征能力,但是组合的能力十分有限,远不能与DNN相比。
关于GBDT可以参考文章《机器学习——提升算法(Adaboost、xgboost、GBDT)》。
FM/FFM
GBDT虽然可以学习特征交叉组合,但是只适合中低度稀疏数据,容易学到高阶组合。但是对于高度稀疏数据的特征组合,学习效率很低。另外GBDT也不能学习到训练数据中很少或者没有出现的特征组合。但是FM(因子分解机,Factorization Machine)可以通过隐向量的内积提取特征组合,对于很少或没出现的特征组合也可以学习到。例如,特征 和特征
在训练数据中从来没有成对出现过,但特征
经常和特征
成对出现,特征
也经常和特征
成对出现,因而在FM模型中特征
和特征
也会有一定的相关性。毕竟所有包含特征
的训练样本都会导致模型更新特征
的隐向量
,同理,所有包含特征
的样本也会导致模型更新隐向量
,这样
就不太可能为0。
LR模型不能自动处理交叉特征的问题,因此FM就是针对LR这个缺陷进行的改进:
一部分是线性回归,另一部分是二次交叉项,因此FM具有处理特征二次交叉的能力。
需要存储一个二维矩阵,由于特征的大规模离散,这个二维矩阵维度可能很大,因此这里使用了矩阵分解,即
。
FM的优点就是具有处理二次交叉特征的能力,而且是可以实现线性复杂度(o(n)),模型训练速度快。
FFM(Field-aware Factorization Machine)
FFM引入了field概念,FFM将相同性质的特征归于同一个field。同一个categorical特征经过one-hot编码生成的数值特征都可以放入同一个field。在FFM中,每一维特征 ,针对其他特征的每一种field
都会学习一个隐向量
。隐向量不仅与特征相关,也与field相关。假设样本的n个特征属于f个field,那么FFM二次项有nfk的隐向量。其中k为每个特征隐向量的长度。
FM是把所有特征都归属于一个field时的FFM模型。
FFM的模型学习
FFM模型使用的logistic loss作为损失函数+L2正则项:
学习率调整采用了Adagrad,参考:《深度学习——网络优化》
FFM模型训练时的一些注意事项:
第一,样本归一化。FFM默认是进行样本数据的归一化的 。若不进行归一化,很容易造成数据inf溢出,进而引起梯度计算的nan错误。因此,样本层面的数据是推荐进行归一化的。
第二,特征归一化。CTR/CVR模型采用了多种类型的源特征,包括数值型和categorical类型等。但是,categorical类编码后的特征取值只有0或1,较大的数值型特征会造成样本归一化后categorical类生成特征的值非常小,没有区分性。例如,一条用户-商品记录,用户为“男”性,商品的销量是5000个(假设其它特征的值为零),那么归一化后特征“sex=male”(性别为男)的值略小于0.0002,而“volume”(销量)的值近似为1。特征“sex=male”在这个样本中的作用几乎可以忽略不计,这是相当不合理的。因此,将源数值型特征的值归一化到[0,1]是非常必要的。
第三,省略零值特征。从FFM模型的表达式可以看出,零值特征对模型完全没有贡献。包含零值特征的一次项和组合项均为零,对于训练模型参数或者目标值预估是没有作用的。因此,可以省去零值特征,提高FFM模型训练和预测的速度,这也是稀疏样本采用FFM的显著优势。
下图很好的解释了 ,
以及
。
GBDT+(LR,FM,FFM)
GBDT适合处理连续值特征,而LR、FM、FFM更加适合处理离散化特征。GBDT可以做到一定程度的特征组合,而GBDT的特征组合是多次组合而不仅是与FM和FFM这样的二阶组合而已。GBDT具备一定的特征选择能力(选择最优的特征进行分裂)。
MLR
MLR即混合逻辑回归,由阿里团队提出,是对LR的推广,采用分而治之的策略:如果分类空间本身是非线性的,按照合适的方式将空间分为多区域,每个区域用线性的方式进行拟合,最后MLR的输出就变成了多个子区域预测值的加权平均:
MLR目标函数,m为分片数(m=1,即LR模型); 是聚类参数,决定分片空间的划分,即某个样本属于特定分片的概率:
是分类参数,决定分片空间内的预测;最终模型预测值为所有分片对应的子模型的预测值的期望。
相当于将X进行聚类,每一个聚类单独训练一个LR。
MLR模型在大规模稀疏数据上实现了非线性拟合能力,在分片数足够多时,有较强的非线性能力;同时模型复杂度可控,有较好的泛化能力,同时保留了LR模型的自动特征选择能力。
MLR的难点在于目标函数非凸非光滑,使得传统的梯度下降算法并不适用。需要预训练,可能出现不收敛的情况。同时和LR相同也需要较大的特征工程处理。
DNN
在ctr预估场景中,绝大多数特征都是大规模离散化特征,并且交叉类的特征十分重要,如果利用简单的模型如LR的话需要大量的特征工程,即使是GBDT,FM这种具有一定交叉特征能力的模型,交叉能力十分有限,脱离不了特征工程。
DNN具有很强的模型表达能力,有以下优势:
- 模型表达能力强,能够学习出高阶非线性特征。
- 容易扩充其他类别的特征,如特征是图片或文字类时。
基于DNN的电影推荐系统
DNN模型结构
DeepFM
DeepFM是为了解决DNN的不足而推出的一种并行结构模型。
DeepFM会在另一篇文章中详细介绍。
DIN
DIN是阿里17年的论文中提出的深度学习模型,该模型基于对用户历史行为数据的两个观察:1、多样性,一个用户可能对多种品类的东西感兴趣;2、部分对应,只有一部分的历史数据对目前的点击预测有帮助,比如系统向用户推荐泳镜时会与用户点击过的泳衣产生关联,但是跟用户买的书就关系不大。于是,DIN设计了一个attention结构,对用户的历史数据和待估算的广告之间部分匹配,从而得到一个权重值,用来进行embedding间的加权求和。
DIN模型的输入分为2个部分:用户特征和广告(商品)特征。用户特征由用户历史行为的不同实体ID序列组成。在对用户的表示计算上引入了attention network (也即图中的Activation Unit) 。DIN把用户特征、用户历史行为特征进行embedding操作,视为对用户兴趣的表示,之后通过attention network,对每个兴趣表示赋予不同的权值。这个权值是由用户的兴趣和待估算的广告进行匹配计算得到的,如此模型结构符合了之前的两个观察:用户兴趣的多峰分布以及部分对应。Attention network 的计算公式如下:
代表用户表示向量,
表示用户行为
的embedding向量,
表示广告的表示向量,用户的表示向量不仅仅取决于用户的历史行为,而且还与待评估的广告有直接的关联。