作者 | 向寒、元涵
前言
点击率(Click Through Rate,CTR)和点击转化率(Conversion Rate,CVR)预估在电子商务中的许多工业应用(例如搜索、推荐和在线广告系统)中发挥着重要作用。其中最主要的挑战是,用户、query、商品的特征分布以及ground truth的CTR/CVR可能受季节性、商家活动、大促等因素影响,随时间发生很大的的变化。预估模型适应这些变化主要有两种策略:
- 模型引入实时信息,比如商品/用户实时特征,用户实时点击行为、曝光序列、端上行为等;
- 模型继续引入实时数据,做实时增量训练,并在一天内多次更新预测模型。
但是,以上方案依然有局限性:即使模型的特征是动态的,增量数据是流式的,但是受限于在线系统对模型的构建和切换的耗时,模型只能每N小时(N>=2)生效一次。因此模型不仅滞后实时数据N小时,而且由于模型是冻结的,也无法应对CTR/CVR的实时变化。
为了解决这个问题,我们之前的方案是在deep cxr模型之上增加了一个小规模的online stacking模型,输入是deep cxr模型的分数,个性化匹配信息,用户/商品标签特征,实时统计值等等不是非常sparse的特征。通过online stacking cxr模型的实时更新(由于模型规模比较小)来弥补deep cxr大模型的实时性不足。online stacking模型的前身是搜索的online ltr模型,是搜索做了多年的一个成熟在线学习技术。
今年,通过和定向广告团队关于在线学习技术的交流,和过去online stacking/ltr模型的积累,我们提出了Multi-Layer Multi-Frequency的更新方法,直接对深度大模型做实时更新。Multi-Layer将模型按照权重大小结合业务逻辑拆分为三个部分,分别为freezing embeddings,changing embeddings和changing weights。
Multi-Frequency策略将freezing embeddings通过checkpoint全量切换更新,changing embeddings和changing weights进行实时更新。我们进行了离线与在线实验,实验结果表明我们的方法可以捕捉更加实时的数据分布,并进一步提升CTR/CVR预估的精度。此外,我们所提出的方法已经部署于生产系统中,日常和双11大促的在线A/B测试进一步证明了其有效性。
1.背景
淘宝和亚马逊等大型电商门户网站通过移动应用和PC网站为数亿用户提供数十亿商品。为了获得更好的用户体验和业务效果,帮助用户找到自己喜欢的商品是电商中最重要的任务之一。达成以上目标的最主要手段是对点击率(CTR)和点击转化率(CVR)的精准预估。其中最主要的挑战是,用户、query、商品的特征分布以及ground truth的CTR/CVR可能受季节性、商家活动、大促等因素影响,随时间发生很大的的变化。
如图1所示,CVR在日常一天内的ground truth会发生非常大的变化,最高点是最低点的4倍;如图2所示,双11前后两天的ground truth都跟双11有着极大的不同,尤其是CVR在双11当天是预热期的2.5倍+。因此,预估模型需要有能力去适应这些变化:首先,我们的模型在特征层面引入了更丰富更实时行为序列特征,端上点击序列,端上曝光序列,可以捕捉用户不断演化的兴趣;其次,去年双11,我们基于AOP平台实现了多路实时样本流的超大规模多目标模型在线联合学习,并在一天内多次更新预测模型。
今年我们在以上基础上,设计并落地了真正意义上的超大规模深度网络的在线学习,也就是streaming training real-time updating的模式。为此,我们提出了Multi-Layer Multi-Frequency的更新方法,将小时级别更新模型提升到分钟级更新和秒级生效。在双11当天,取得了相当不错的效果。
2.流式训练和实时更新
在原有模式基础上,feed更多的数据进行连续训练,我们将这种行为称为增量学习。实践中发现,增量学习可以稳定提升模型性能。在生产实践中,增量学习有几种不同粒度。其中普遍增量模式是,restore已有模型的checkpoint,采用批训练模式,全量部署上线,更新时效性为天级别。进阶的模式是,使用实时样本进行流式训练,但部署过程依旧采用全量模型切换,更新时效性为小时级。然而,最完美的增量学习解决方案是流式训练&实时更新。
2.1 Multi-Layer 权重
首先,在搜索的算法和工程体系下,实时更新全量模型是不现实的。搜索大模型权重包括Embeddings和MLP。其中embedding包括一些high sparse的ID类特征,比如item id。我们模型中item id数量在使用淘汰机制结果后依然为8亿,每个id的dimension为64,那么item id embedding大小为190G。这类high sparse的ID类特征,在RTP是以表的形式存储的,因此这样大的embedding是无法实时更新的。
其次,uid/item_id embedding这类high sparse特征进行纯实时更新是不适合的。high sparse特征需要更多的数据才能让embedding学习的充分,而学习不充分的后果就是模型在当前样本上过拟合,在未来样本上缺少泛化性。因此,我们倾向认为在日常情况下item id学习到的embedding是相对稳定的商品表征,稳定期可以到7天。只有在换季、大促期间,item id embedding在一天内才需要发生比较大变化。
因此,我们将模型权重按照sparse的程度分为三个部分,分别为freezing embeddings,changing embeddings和changing weights。其中,freezing embeddings对应模型中的high sparse embedding如user_id、query id、item_id。changing embeddings对应其余embeddings,如user profile embedding、商品品牌embedding、商品统计特征embedding。changing weights对应模型中的所有MLP部分权重。我们的模型结构和多层权重如图3所示。
图3 Multi-Layer Weights,灰色部分表示freezing embeddings,橘色部分表示changing embeddings,蓝色部分表示changing weights
changing weights包括sequantial modeling的MLP以及CTR/CVR任务prediction layer的MLP。为何对changing weights做实时更新是必要的?
首先,sequence中的MLP包含了序列化建模以及attention网络。我们采用Self-Attention对序列进行建模,weights包括Multi-head Attention中的Q、K、V的投影,以及FFN网络,通过这些参数建模序列中商品两两的依赖关系。我们采用商品的行为类型(点击、加购、购买)、停留时长、以及距离当前的行为时间,来计算不同商品的重要性权重,其中MLP就在学习这几种商品context的关系,来共同决定attention的结果。不管是序列依赖关系还是attention都是实时发生变化的,因此对序列中MLP的实时更新十分必要。
其次,prediction layer中的MLP主要学习不同抽取的向量表征之间的实时关系。比如用户当时当刻是更看重商品的品牌还是商品的价格,又比如当时用户是以自身的长期还是短期(Long -and Short Term)兴趣为出发点来选购商品。这些向量表征的关系是需要进行实时训练,从而可以分配实时的不同权重。此外,CTR和CVR预估不仅要保证用户和商品之间的序关系,而且要保证CTR和CVR预估值各自的准度。prediction layer依照实时数据的分布来调节网络中的参数,同时实时学习CTR/CVR的准确值。
2.2 Multi-Frequency 更新
图4 Multi-Frequency的更新策略
我们提出Multi-Frequency的更新策略,将freezing embeddings通过checkpoint全量切换更新,changing embeddings和changing weights进行实时更新,如图4所示。那么在Multi-Frequency的更新策略下,如何保证MLP和Embedding的一致性?日常策略:天级更新一次全量模型,天内进行模型实时更新;大促策略:双模型交替更新。
双模型交替更新如图5所示。大促当天我们准备了两个实时训练任务,分别称为模型A和模型B。模型进行流式训练,其中embedding和mlp全部参与训练,并通过checkpoint进行小时级别的构建和切换。模型B将high sparse的embedding fix住,训练其余embedding和mlp。具体过程如下:
图5 双模型交替更新
- T为起始时刻,模型A和模型B恢复同样的checkpoint各自开始流式训练;
- T+1分钟开始,模型B开始通过swift更新部分embedding和mlp参数到RTP;
- T+2分钟,模型B继续更新部分embedding和mlp参数到RTP;
- T+N小时时刻,模型A已累计训练N小时,此时通过checkpoint更新全量,并且在切换阶段停止模型B向RTP发送参数。
- T+N小时+30分钟时刻,模型A切换完成,模型B restore 模型A同时也是线上的checkpoint。
- T+N小时+30分钟+1分钟开始,模型B继续开始流式训练和实时更新。
2.3 实践经验
2.3.1 Streaming CTR/CVR CoTrain
进行streaming cotrain,需要同时消费CTR和CVR的样本流。这与离线cotrain有着很大不同。离线天级别cotrain,只需要按照样本比例设置固定的样本迭代概率,交替训练,最终两个task基本会同时结束。而实时训练是,CTR和CVR样本的比例关系是不固定的,因此需要使用动态样本比例。我们的方法是先基于一个固定的比例进行迭代,但是在迭代之前会先检查数据流中是否有足够样本,如果有足够样本才会执行当前task,否则切换另一个task执行。这样的方案,就不会卡主训练流程。
2.3.2 No Time Feature
模型中经常会引入时间特征提升模型在每个时间段的预估准度,比如day of week和hour of day两个参数,但是在实时训练的任务中,我们永远训练的是同一个时刻的数据,比如都是周一,13点的数据,模型容易在这两个特征上过拟合,而对下一个时刻周二9点的数据没有泛化性。
2.3.3 SyncSendSwiftHook
我们通过chief worker向RTP发送swift消息,而发送的过程中,training workers依然在频繁的更新PS中的参数。而流式训练任务任务的迭代速度为200 steps/sec,batch-size为1024,那么一秒中权重经过20万样本,变化200次。因此此过程中更新的参数,很大程度上会不一致。我们设计了SyncSendSwiftHook,它的逻辑是在chief发送权重之前,会设置一个标记位sending=True,而训练worker在每次训练前都会检查这个sending标记,如果发现sending=True则会sleep,直到chief worker发送结束后,将sending置为False。
2.3.4 Sending Mean and Variance
不要忘记更新BN中的均值和方差。因为均值和方差并不是trainable variable,是通过update op进行更新的参数,所以非常容易忘记,而引发严重的问题。
3.实验和分析
为了准确验证更新部分Embedding和MLP的方案的有效性,我们将可能的收益分为离线天级收益和实时收益。离线天级收益是指增量一天数据后,在新一天数据上的AUC提升值;实时收益针对流式训练实时更新模式,通过当前10分钟的训练对接下来10分钟的预测样本上的AUC提升。
3.1 对比方法
- Base:全量模型,freezing所有weights。
- ALL-EMB+MLP:全部参数参与训练
- MLP:只训练MLP。
- Part-EMB+MLP:训练部分embedding和MLP。
3.2 离线天级收益验证:
我们指定BASE模型训练到第T天数据,其他模型以BASE模型为基准模型增量第T+1天的数据。我们以所有方法在T+2天AUC表现来评价所有方法。如表1所示,ALL-EMB+MLP增量学习一天数据在next-day的AUC评测上,CTR提升0.16%,CVR提升0.18%;MLP在total AUC上可以获得ALL-EMB+ MLP全部收益,在PV-AUC上可以获得50%收益;Part-EMB+MLP在total AUC和PV-AUC上均可以获得ALL-EMB+MLP全部收益。
表1 增量一天数据后,在预测集的CTR&CVR AUC
3.3 大促实时收益验证:
我们以双11当天的实时CTR&CVR AUC为例,验证模型的实时收益。实时AUC统计线上30分钟窗口回流数据。为了更准确验证模型提升的有效性,我们在双11通过事件分别验证每个模块的有效性。
3.3.1 实时模型更新时间线:
- 8点,实时大模型上线
- 13点更新全量模型。
- 17点30分,实时更新停止,
- 20点30,实时模型开启。
3.3.2 分事件,CTR&CVR AUC对比:
- 早上8点,实时大模型上线(只更新部分embedding+hidden layer),AUC提升非常明显,其中CTR AUC提升0.6%,CVR AUC提升0.8%。
- 13点更新全量模型(embedding+hidden layer全更新),AUC有进一步提升。其中CTR AUC提升扩大0.9%,CVR AUC提升扩大为2%。
- 17点30分,实时更新停止,CTR AUC提升维持在0.5%,CVR几乎无提升。说明在大促期间,CVR预测对实时性的需求更高。
4.未来展望
首先,逐步推进流式训练+实时更新解决方案的日常化。在离线模型checkpoint全量更新期间,开启实时更新模式。日常测试结果为:CTR AUC 提升0.7%,CVR持平。其次,通过CTR模型的实时化方案和CTR收敛快的特性,可以考虑将算法工程师对大模型迭代调优的战场从离线批转到在线实时,这不仅可以提高模型调优的效率,也可以加速拿线上效果。此外,由于深度大模型的完全实时化,online stacking模型的必要性变弱,未来甚至可以去掉。最后,全链路的监控体系、稳定性仍需完善,实时链路已经是一个近online系统,要向online系统的生产安全标准靠拢。