石士、书浅 阿里妈妈技术

▐ 前言

随着号称“地表最强”的千亿参数规模GPT-3模型在 NLP 领域横扫各大数据榜单,大力出奇迹的暴力美学似乎成为了大数据场景建模的不二法门。搜索、推荐和广告场景的 CTR 模型也不例外,同样动辄千亿参数规模、上T体积大小的 CTR 模型成为了同行争相追逐的建模标配。但是无论面对生产运维环境,还是实验迭代环境,它对存储规模和计算性能的要求都是巨大的挑战。而且随着存量算力的逐渐耗尽和增量算力的趋势放缓,它的“大力暴力”成为了业务算法迭代的沉重负担。阿里妈妈搜索广告模型团队通过系统性的算法实践让原本庞大笨重的 CTR 模型轻盈转身,摇身一变“小巧且精悍”,数T模型压缩成几十G规模且预估精度无损,开辟了一条“小而美”的崭新的优化方向。

▐ 1. 超大规模模型演进之路的辩证思考

阿里妈妈搜索广告的 CTR 模型伴随直通车业务的发展持续迭代多年,主要包括两个优化路径,分别是特征优化和模型结构优化。特征优化主要包括多模态特征的丰富、高阶特征的升级和动态特征的引入等;模型结构优化主要包括围绕搜索意图挖掘的序列建模 Transformer 系列和图建模 GNN 系列的改造等。因为同时期享受到硬件算力的增长红利,所以算法迭代显得非常阔绰,结合工程基建的迅猛发展,CTR 模型逐年变得既宽又深。直通车的日常 CTR 模型已经到了数T规模,暗合了“模型越大、预估能力越强”暴力美学的发展路径。

阿里搜索广告特征模型优化发展路径但是日益臃肿的 CTR 模型不仅给工程实现带来艰巨的挑战,也开始制约算法创新的迭代效率。单套模型所依赖的存储和计算资源开销不菲,考虑到多人迭代的实验场景,多套并行对系统压力更大。另外,真实的迭代环境是存量算力逐渐耗尽、增量算力又显著放缓。因此,我们不得不重新审视算法迭代的资源利用率问题,开始重视投入产出比对模型迭代效率的影响;而且重新思考超大规模的 CTR 模型是否具有普世价值,毕竟还有诸多中小场景的业务依赖模型提效,但能够配备如此规模的机器资源和工程能力是一种奢望。

于是,为了在有限资源的约束下,模型仍然能够高效迭代支撑业务快速发展,直通车 CTR 模型开始走上了“减肥瘦身”之路。考虑到广告场景的特殊性,模型预估能力的微小下降会使得线上产生营收的真实损失,所以直通车 CTR 模型在瘦身的同时要求保持预估精度不降,这对模型精简来说是个不小的挑战。我们认为在庞大冗余的模型结构中应该存在不必要的信息编码,且实践证明类似 dropout 相关的操作还能使得模型的鲁棒性和泛化性得以提升,这中间应该存在着“预估精度保持不变,模型规模显著降低”的优化空间。

搜索、推荐和广告场景的 CTR 模型的特点是高维、稀疏且离散,模型的绝大部分参数主要集中在特征的 Embedding 层,所以如何经济有效地压缩 Embedding 层的参数规模是 CTR 模型瘦身的关键。Embedding 层的压缩主要有3个方向:

  1. 行维度: 即特征空间的压缩
  2. 列维度: 即Embedding向量维度压缩
  3. 值精度: 即FP16/Int8量化等

我们在这3个方向都有充分实践,本文主要介绍在 行维度的特征压缩,也是在直通车场景可以做到训练过程中自压缩,模型压缩比有量级(其他两个优化方向只有倍数压缩比)上的显著收益且模型预估精度保持不变,下图举例说明。

常用Embedding层压缩思路

▐ 2. 小而美模型的蜕变之路

直通车场景 Embedding 层的行维度即特征空间随着常年的迭代,在提效的同时规模也一路狂奔。在线服务系统从单机到分布式,分布式又由数列扩到十几列,系统复杂性和维护成本越来越高。虽然特征类型非常丰富,异构性也非常显著,但从存储规模的角度来说,整体服从幂律分布即少数类型的特征占据了存储规模大头。下面表格给出直通车主要特征的规模分布情况,因为存储规模还受到另外两个维度即 Embedding 维度数和值精度大小的影响,所以 Embedding 行占比和实际存储占比是不一致的。从表中可以看出,以下几类特征占据了不小的存储规模,分别是:

  • 复合特征的隐式类型的id类特征,例如<user_age, item_id>交叉特征对应的 Embedding,这一类特征提供了更加微观的id类特征的表征方式,在样本规模较为充分的情况下能够提供更加细腻的特征空间区分能力,实践中效果较为显著。
  • 复合特征的显式类型的统计值特征,例如<user_age, item_id>交叉特征的历史14天统计 CTR,这一类特征可以注入先验的数据分布,提供一定的泛化能力,在实践中效果较为明显。
  • 单特征的核心id类特征,例如query_id,item_id,user_id等,这一类特征是模型预估的基石,随着模型的演进我们也由有冲突 hash 升级到无冲突 hash 模式。虽然效果有提升,但为了控制住模型规模,系统需要配置相应的特征准入准出策略,当遇到数据分布变化剧烈的时期,例如季节变换或者大促时节,策略需要频繁调整,鲁棒性较低。

直通车特征分布情况针对上述主要特征,我们在真实业务环境下通过以下系统性实践逐步精简模型:

  • 设计关系网络,取代复合特征的隐式类型的id类特征;
  • 设计基于 Graph 的预训练网络,取代复合特征的显式类型的统计值特征;
  • 设计 Multi-Hash 通用的压缩方案,升级单特征的核心id类特征;
  • 设计随模型可学习的特征选择方案,确保整体特征结构的精简性,特征均有正向边际收益;

通过上述一系列解法,再结合样本列存升级、异构计算优化和增量特征迭代等系统改造,直通车 CTR 模型迭代环境大幅改善,模型规模从数T到几十个G两个数量级的精简,在线机器也节省了几百台,而且模型训练时长缩减50%,在线预估性能 QPS 提升100%,为未来技术升级的可持续发展打下坚实的基础。

2.1. 关系网络

直通车的特征体系中,复合特征是指由多个单特征组合而成的复杂特征类型,主要分为两类:

  1. 异构空间的交叉特征(例如<user_age, item_id>特征交叉);
  2. 同构空间的匹配特征(例如<query,item_title>的term匹配个数)。

虽然深度学习的全连接层 MLP 具有万能的拟合能力,但实践表明如果没有设计显式的模型结构来针对性刻画上述有待挖掘的特征交互关系,模型很难自己领悟到。这一类特征伴随直通车 CTR 模型从 LR 升级到 DNN,提效均是非常显著。但问题也显而易见,笛卡尔积式的特征交互使得模型规模膨胀非常大,需要通过设置合理的阈值系数才能把规模控制到合理的范围内。模型瘦身首当其冲就是设计关系网络来改善这个问题。

交叉特征 的隐式 Embedding 表征是业界关注最多的话题,我们借鉴业界较为常用的特征交叉建模方案(例如 FM 系列,DCN[1],AutoInt[2]等),设计适配直通车场景的交叉网络。该网络的特点是参考 self-attention 结构,基于共享的交互强度矩阵,对称性地双视角建模两两特征的交叉关系。且根据实际情况,对交叉特征域做先验设定(只保留流量需求侧与供给侧交互关系),整体交叉网络作为 Deep 的一部分(实验表明 Wide 设计效果不佳),大块的矩阵线性计算也有利于 GPU 加速,整体很好地刻画了交叉特征的 Embedding 表征。

匹配特征 一般刻画特征交互的强度关系,主要有两类:1)hard match,特征相同进行统计计数;2)soft match,特征相似进行相似度计算。我们参考业界较为常用的特征匹配建模方案(例如 K-NRM[3],DRMM[4]等),设计 hard 和 soft 匹配相结合的交互强度分布的直方图。该直方图不仅作用在文本语义匹配,刻画搜索意图相似度;还作用在用户历史行为序列上,刻画个性化的兴趣强度。

2.2. 基于 Graph 的预训练网络

复合特征除了上述提到的隐式类型以外,另一类就是显式的统计值,这类特征业务提效也非常明显,是业界提效公开的秘密手段,存储规模占比也不小,但是想做精简却无法像上述关系网络拟合一样来处理。举例来说,<user_age, item_id>交叉特征的 Embedding,可以通过单特征各自 user_age 的 Embedding 和 item_id 的 Embedding 计算得到,但是<user_age, item_id>交叉特征的 CTR,无法拆解成 user_age 的 CTR 和 item_id 的 CTR 交互计算。

为此,我们引入图学习技术,提出 PCF-GNN(Pre-trained Cross Feature learning Graph Neural Networks)方法[9] ,用节点表示特征,边表示特征交互的统计值,通过链边预测的方式拟合交互节点的边权重信息,从而显式建模交叉语义表征。该方案在取得业务提效同时还显著压缩模型规模,具体工作可详见: SIGIR 2021 | PCF-GNN:基于预训练图神经网络的显式交叉语义建模方案,欢迎关注。

2.3. Multi-Hash 压缩方案

通过上述建模方案,我们成功将模型规模从T级别压缩到百G级别,复合特征带来的模型规模膨胀问题得到了很好的解决。剩下的主要问题就是核心id类特征的模型规模需要进一步压缩,争取在线预估服务由分布式改为单机模式,减少通信开销,提升服务能力。直通车的核心id类特征设计是由单 hash有冲突模式升级为无冲突模式,好处是核心id特征得到唯一性刻画,Embedding 学习保持独立性,具备较快的 Embedding 收敛速度。这一升级带来显著业务提效,但于此同时系统复杂性也大大提升,除了增加分布式通信开销以外,还需要设计复杂的特征准入准出策略,保证模型规模不会随新特征的引入而线性无限膨胀。

为了优化上述系统问题,我们调研和实践了业界常用的几个方案,包括单 Hash 的商余互补法[5]和多 Hash 类的方法[6]和[7]等。通过长达多个月的样本持续训练,虽然单 hash 的商余互补法在理论上更优,但实验表明它的模型收敛性在直通车场景越往后会越疲软,长时间持续训练效果不如基础的 Multi-Hash 方法。我们最终采用简单有效的 Multi-Hash 方案,该方案特点是虽然单 hash 是有冲突的,但通过多 Hash 的共同表征,使得整体冲突率大大降低,类似达到无冲突的效果。同时,不同 Hash 函数的选择、Hash Embedding 是否共享、Hash Embedding 聚合方式等超参设计都会对最终的收敛结果产生影响。在规模极致压缩的情况下,我们也略微扩大了 Embedding 维度数,最终在效果不降的情况下将