
作者 | Chilia 哥伦比亚大学・搜索推荐 整理 | NewBeeNLP
目前大多数的CTR模型采用的是Embedding和Feature Interaction(以下简称FI)架构,如下图所示:

当前大多数的研究主要集中在设计更复杂的网络架构来更好的捕获显式或隐式的「特征交互」,如Wide & Deep的Wide部分、DCN中的CrossNet、DIN中的注意力机制等等。而另一个主要的部分,即「Embedding模块」同样十分重要,出于以下两个原因:
1)Embedding模块是FI模块的「上游模块」,直接影响FI模块的效果; 2)CTR模型中的大多数参数集中在Embedding模块(巨大的embedding table!),对于模型效果有十分重要的影响。
但是,Embedding模块却很少有工作进行深入研究,特别是对于连续特征的embedding方面。现有的处理方式由于其硬离散化(hard discretization)的方式,通常suffer from low model capacity。而本文提出的AutoDis框架具有high model capacity, end-to-end training, 以及unique representation.
华为在KDD'21上提出一种AutoDis框架
已经用于华为的主流广告平台,线上A/B测试实现2.1%的CTR提升和2.7%的eCPM(effective cost per mille)提升。
CTR预估模型的输入通常包含连续特征和离散特征两部分。对于离散特征,通常通过embedding look-up操作转换为对应的embedding (之后我会介绍谷歌对离散特征embedding的改进);
而对于连续特征的处理,可以概括为三类:No Embedding, Field Embedding和Discretization(离散化)。
No embedding是指不对连续特征进行embedding操作,而直接使用原始的数值。如Google Play的Wide & Deep直接使用原始值作为输入;而在Youtube DNN中,则是对原始值进行变换(如平方,开根号)后输入:

这类对连续特征不进行embedding的方法,由于模型容量有限,通常难以有效捕获连续特征中信息。
Field Embedding是指同一个field无论取何值,都共享同一个embedding,随后将特征值与其对应的embedding相乘作为模型输入:

其中, e_1,e_2,...e_n 是field embedding。
由于同一field的特征「共享」同一个embedding,并基于不同的取值对embedding进行「缩放」,这类方法的表达能力也是有限的。
Discretization即将连续特征进行离散化,是工业界最常用的方法。这类方法通常是两阶段的,即首先将连续特征转换为对应的「离散值」,再通过「look-up」的方式转换为对应的embedding。
首先探讨一个问题,为什么需要对连续特征进行离散化呢?或者说离散化为什么通常能够带来更好的效果呢?关于这个问题的探讨,可以参考知乎问题:
- https://www.zhihu.com/question/31989952/answer/54184582
总的来说,将连续特征进行离散化给模型「引入了非线性」,能够「提升模型表达能力」,而对于离散化的方式,常用的有以下几种:
1) EDD/EFD (Equal Distance/Frequency Discretization):即等宽/等深分箱。对于等宽分箱,首先基于特征的最大值和最小值、以及要划分的桶的个数 H_j ,来计算每个样本取值要放到哪个箱子里。
对于等深分箱,则是基于数据中特征的频次进行分桶,每个桶内特征取值的个数是大致相同的。
2)LD (Logarithm Discretization):对数离散化,其计算公式如下:

3)TD (Tree-based Discretization):基于树模型的离散化,如使用GBDT+LR来将连续特征分到不同的节点。这就完成了离散化。
「离散化方法的缺点:」
上述的三种局限可以通过下图进一步理解:

SBD: 40和41岁没有多大区别,但是却有完全不同的embedding;DBS: 18和40岁差距甚远,但是embedding却一模一样!
上述三种对于连续特征的处理方式的总结如下表所示:

可以看到,无论是何种方式,都存在一定的局限性。而本文提出了AutoDis框架,具有「高模型容量」、「端到端训练」,「每个特征取值具有独立表示」的特点,接下来对AutoDis进行介绍。
AutoDis的全称为「Auto」matic end-to-end embedding learning framework for numerical features based on soft 「dis」cretization.
AutoDis是一种pluggable embedding framework,可以和现有的深度结构很好的兼容:

Autodis用于做连续特征的embedding,如图中的Age和Height
为了实现高模型容量、端到端训练,每个特征取值具有独立表示,AutoDis设计了三个核心的模块,分别是「Meta-Embeddings、automatic Discretization和 Aggregation」模块。
为了提升model capacity,一种朴素的处理连续特征的方式是给每一个特征取值赋予一个独立的embedding。显然,这种方法参数量巨大(因为你可以有无穷个连续特征取值!),无法在实践中进行使用。另一方面,Field Embedding对同一域内的特征赋予相同的embedding,尽管降低了参数数量,但model capacity也受到了一定的限制。
为了平衡参数数量和模型容量,AutoDis设计了Meta-embedding模块: 对于第 j 个连续特征,对应 H_j 个Meta-Embedding(可以看作是分 H_j 个桶,每一个桶对应一个embedding)。第j个特征的Meta-Embedding表示为:ME_j \in \mathbb{R}^{H_j \times d} 对于连续特征的一个具体取值,则是通过一定方式将这 Hj 个embedding进行聚合。相较于Field Embedding这种每个field只对应一个embedding的方法,AutoDis中每一个field对应 H_j 个embedding,提升了模型容量;同时,参数数量也可以通过 H_j 进行很好的控制。
Automatic Discretization模块可以对连续特征进行「自动的离散化」,实现了「离散化过程的端到端训练」。具体来说,对于第 j 个连续特征的具体取值 x_j ,首先通过两层神经网络进行转换,得到 H_j 长度的向量。下图的例子假设有41个特征,每个特征分配 H_j = 10 个桶

最后得到的 \tilde{x_j} 需要经过某种softmax变成概率分布:

传统的离散化方式是将特征取值分到某一个具体的桶中,即对每个桶的概率进行「argmax」,但这是一种无法进行梯度回传的方式,是硬离散化。而上式可以看作是一种软离散化(soft discretization)。对于温度系数 ,当其接近于0时,得到的分桶概率分布接近于one-hot,当其接近于无穷时,得到的分桶概率分布近似于均匀分布。这种方式也称为softargmax。
至此,我们得到了 H_j 个桶的embedding以及概率分布。
根据前两个模块,已经得到了每个桶的embedding,以及某个特征取值对应分桶的probability distribution,接下来则是如何选择合适的Aggregation Function对二者进行「聚合」。论文提出了如下几种方案:
所以,其实就是对 H_j 个桶的embedding进行加权求和。
模型的训练过程同一般的CTR过程相似,采用二分类的logloss指导模型训练,损失如下:

最后来看一下实验结果,离线和线上均取得了一点微小的提升:

那么,AutoDis是否有效解决了SBD和DBS的问题呢?实验结果也印证了这一点:

右图:等深分箱,不同的取值都是分开的点,没有相似度的联系;左图:Autodis,相似的取值聚在一起,说明端到端的方法把握了数值的相似性
[1]An Embedding Learning Framework for Numerical Features in CTR Prediction: https://arxiv.org/pdf/2012.08986.pdf