推荐系统中使用ctr预估模型的发展

一. 什么是ctr?

ctr即广告点击率,在推荐系统中,通常是按照ctr来对召回的内容子集进行排序,然后再结合策略进行内容的分发。

二. ctr预估模型的发展。

ctr预估模型的公式:y = f(x), y的范围为[0,1],表示广告被点击的概率。

1. LR 海量高纬离散特征

LR(logistics regression),是ctr预估模型的最基本的模型,也是工业界最喜爱使用的方案。LR的介绍这里就不细说了,介绍的教程随便一搜一大堆。

这里写图片描述

LR的优势在于处理离散化特征,而且模型十分简单,很容易实现分布式计算。关于LR的变种也有许多,比如Google的FTRL,其实这些变种都可以看成:LR+正则化+特定优化方法。

LR的缺点也很明显,特征与特征之间在模型中是独立的,对于一些存在交叉可能性的特征(比如: 衣服类型与性别,这两个特征交叉很有意义),需要进行大量的人工特征工程进行交叉。虽然模型简单了,但是人工的工作却繁重了很多。而且LR需要将特征进行离散化,归一化,在离散化过程中也可能出现边界问题。这里便为GBDT+LR的方案进行了铺垫。

2. GBDT

GBDT,即梯度提升决策树,是一种表达能力比较强的非线性模型。具体模型的介绍,也可以google出一堆教程。所以这里就不做详细的推导了。
这里写图片描述
GBDT的优势在于处理连续值特征,比如用户历史点击率,用户历史浏览次数等连续值特征。而且由于树的分裂算法,它具有一定的组合特征的能力,模型的表达能力要比LR强。GBDT对特征的数值线性变化不敏感,它会按照目标函数,自动选择最优的分裂特征和该特征的最优分裂点,而且根据特征的分裂次数,还可以得到一个特征的重要性排序。所以,使用GBDT减少人工特征工程的工作量和进行特征筛选。

GBDT善于处理连续值特征,但是推荐系统的绝大多数场景中,出现的都是大规模离散化特征,如果我们需要使用GBDT的话,则需要将很多特征统计成连续值特征(或者embedding),这里可能需要耗费比较多的时间。同时,因为GBDT模型特点,它具有很强的记忆行为,不利于挖掘长尾特征,而且GBDT虽然具备一定的组合特征的能力,但是组合的能力十分有限,远不能与dnn相比。

3. FM 与 FFM

在LR部分,我们提及到了LR不能自动处理交叉特征。而FM则是在这个基础上进改进。

FM的模型公式为:
这里写图片描述
在逻辑斯特函数里面的公式可以看成两部分,一部分是我们所熟悉的线性回归函数,而第二部分则是二次交叉项。所以FM处理特征间二次交叉的能力。

但是二次项权重 w_{ij} 需要我们去存储一个二维矩阵的变量,而因为特征是大规模离散的,这个二维矩阵的维度可能很大。而FM的作者利用矩阵分解的原理,将这个权重矩阵进行分解,即这里写图片描述

则FM的公式变为:
这里写图片描述
但是这里,对于特征 x_{i},x_{j},x_{h} , x_{i} 与 x_{j} , x_{i} 与 x_{h} ,都是使用 v_{i} 去和 v_{j} 、 v_{h} 做内积。但是对于不同的特征组合,比如天气与地点,天气与性别,关联的程度是不一样的,都使用同样的向量去与不同的特征做内积,会带来明显的信息损失。所以引出了FFM(field FM)。

FFM的模型公式为:
这里写图片描述
这里可能对FM的原理没有阐述得十分清楚。这篇文章里面具体阐述了FM与FFM。

FM的优点相对于LR在于拥有处理二次交叉特征的能力,而且它是可以实现线性的时间复杂度的(具体看美团的文章),模型训练也十分快。

而FFM则是在FM的基础上,考虑了特征交叉的field的特点,但是也导致它没有办法实现线性的时间复杂度,模型训练要比FM慢一个量级,但是效果会比FM来得更好。

4. GBDT+(LR, FM, FFM)

前面提及到了GBDT适合处理连续值特征,而LR,FM,FFM更加适合处理离散化特征。GBDT可以做到一定程度的特征组合,而且GBDT的特征组合是多次组合的,不仅仅是FM与FFM这样的二阶组合而已。同时,GBDT具备一定的特征选择能力(选择最优的特征进行分裂)。

在facebook 2014年的一篇论文中,提及到GBDT+LR的解决方案。即先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,再拼接离散化特征放进去LR进行训练。在方案可以看成,利用GBDT替代人工实现连续值特征的离散化,而且同时在一定程度组合了特征,可以改善人工离散化中可能出现的边界问题,也减少了人工的工作量。

而kaggle的ctr预估比赛中,台大的团队参考fb,使用了gbdt+ffm的方案夺冠。

此时GBDT+LR模型的公式为:
这里写图片描述

5. MLR

MLR是由阿里团队提出的一种非线性模型。它等价于聚类+LR的形式。
这里写图片描述
相当于将X进行聚类,聚成m类,然后每一个聚类单独训练一个LR。

MLR相对于LR拥有更好的非线性表达能力,算是LR的一种拓展。

但是MLR与LR一样,也需要较大的特征工程处理,而且这个模型本身属于非凸模型,需要预训练,可能出现不收敛的情况。

6.dnn

1 . dnn的优势

在前面的篇章中,提及到了ctr预估的场景中,绝大多数的特征都是大规模离散化的特征,而且交叉类的特征十分重要,如果利用简单的模型(比如LR),需要做大量的人工特征工程,任务繁重。哪怕是GBDT,FM等具有一定交叉特征能力的模型,也是交叉的能力十分有限,也脱离不了特征工程。

而dnn类的模型拥有很强的模型表达能力,而且其结构也是“看上去”天然具有特征交叉的能力。利用基于dnn的模型做ctr问题主要有两个优势:

  1. 模型表达能力强,能够学习出高阶非线性特征。

  2. 容易扩充其他类别的特征,比如在特征拥有图片,文字类特征的时候。

2. ctr预估问题中dnn模型的主要架构

这里写图片描述

Fig.1

ctr预估问题中dnn模型的主要架构如上图Fig.1所示。基本上目前已有的dnn模型基本都是和这个框架类似,只是stack layer的方法不一样,有无shallow part,或者shallow part异同(lr or fm等部分)。
这里写图片描述

Fig.2 deep and wide model

以其中比较具有代表性的deep & wide为例,此时shallow part为:lr,stack layer则为:concatenate(拼接embedding后的向量)
这里写图片描述

Fig.3 deepFM model

而以deepFM为例的话,则shallow part为:fm, stack layer也一样是concatenate。
这里写图片描述

Fig.4 NFM model

以NFM例的话,shallow part为:lr(Fig 4只显示了deep part),而stack layer则为Bi-interaction,实际上就是先做向量的内积(与FM类似,但没有累加),然后再做累加。

其他模型也是与这些模型类似。其实dnn做ctr问题,关键的部分无非三部分,1. 是否保留浅层模型 (存在不保留shallow part的model,比如FNN,PNN)

  1. 如何体现特征交叉性,即stack layer的做法是什么。concatenate?Bi-interaction?直接向量加法?。。。等等

  2. embedding + fc(全连接层)是基本标配。

展开阅读全文

没有更多推荐了,返回首页