如何在工业界优化点击率预估:(一)开篇

144
提问者
2023-03-15 16:06 悬赏 0财富值 阅读 1141回答 1

我此前一直在广告推荐领域负责排序预估方向的工业化迭代和创新,在分享和交流的过程中,发现部分业内同学要么存在思维局限性,要么又过于理想态,不加思辨的应用前沿技术,

默认分类
登录 后发表回答
1楼 · 2023-03-15 16:14.采纳回答

我此前一直在广告推荐领域负责排序预估方向的工业化迭代和创新,在分享和交流的过程中,发现部分业内同学要么存在思维局限性,要么又过于理想态,不加思辨的应用前沿技术,而忽视了场景特异性下的数据驱动的因果性。因此想整理一系列文章分享一下这些年自己的思考和经验,希望能给大家带来帮助,在探讨具体任务的解决方案时不仅会参考我们团队自己的工作也会借鉴业界前沿加以理解延伸,也因此本系列文章不是团队经典工作的解读稿,而更像是一篇整体迭代思维的综述,至于为什么收窄到点击率预估,而不是排序模块,是因为时间有限,想先尝试完备一个系列,后续可以再尝试扩展到不同模型,即使如此,由于预估模型的迭代通用性,对于CVR、粗排和重排等方向的优化依然具有一定的指导意义。

一、工业界的点击率预估

如标题,本文重点讲述如何从1-100去做好点击率预估,因此点击率预估的背景以及前期发展我就不再赘述了,对于点击率的基础理解可以参看怀人老师的你真的懂点击率(CTR)建模吗?,在我们广告业务中,点击率模型的目标是预估给定广告、场景、用户的情况下该用户会点击该广告的概率,即 p(y=1|ad,scene,user) 。下面具体说一下为什么要强调工业界和学术界这个差异,点击率预估在学术界优化目标比较纯粹,就是在特定的数据集上实现评价指标的提升,而且学界产出的优胜逻辑更关注变量控制下的创新性。这种视角下的技术产出往往会忽视

1、算法的通用性

通俗说就是照搬论文中的算法发现在工业数据上根本没用,即使是工业界的学术产出,也会存在类似问题,所谓No Free Lunch,别一看到先进技术就觉得找到了雷神之锤想在自己迭代的场景大杀特杀,一定要思辨技术的适用性和场景的问题需求是否匹配。在学习汲取别人工作的时候最好遵循三镜理论,放大镜,显微镜,照妖镜,要用放大镜扩展视野学习所有相关知识,用显微镜去看背后的思考逻辑,用照妖镜去选择真正对你有帮助的知识去汲取。

2、系统的完整性

设计的模型缺乏对系统现状以及稳定性和算力的考量,我想这块工业界的同学应该深有体会,部分算子或逻辑的设计确实能在公开数据集的消融实验看到更大的提升,但实际应用中要么工业系统架构上根本无法训练或驱动起来,要么投入到线上在维护和资源消耗上都显得性价比很低。

3、迭代的连续性

由于未考虑工业界实际系统环境以及lifelong的迭代特性,部分模型在设计上一旦上线成为主模型会减缓未来的迭代效率,逐渐锁死技术发展,毕竟学术迭代终点是基于文献的技术沉淀,而工业迭代是一份尽量考虑持之以恒的工作。

当然业界也存在为了短期利益去忽略后两点做一锤子买卖的事,但据我所了解的情况来看后人埋坑所耗费的精力远不如在当时顶住对应的业务压力。除了上述主要三点,工业界和学术界的优化路径大部分是可以相互参考的,只是在不同位置和责任上,优化目标存在些许偏差,而工业界优化点击率预估的优化目标通俗定义如下:

\qquad \qquad \qquad \qquad \qquad \qquad Max \ Metric(pctr,s)

\qquad \qquad \qquad s.t. \ 系统,算力,人力,可迭代性,团队合作

如上大家可以看到要想做好点击率除了优化模型提升预估准度,还需要考量诸多要素。因为我作为算法同学,本系列重点还是针对如何优化模型,所以将其他因素设置到constrain作为模型优化的上界考虑,但实际情况是互为约束,这也促使了近年来算法&工程Co-Design的迭代思维,因此新一代的算法架构师在寻求技术突破的时候可以将算法、算力与系统架构纳入整体视角一起考虑、设计和重构。接下来简单介绍下如何考量以上约束设计模型,但大家切不可局限思维带入性的认为约束是不可打破的。

(1)系统

所谓系统上的约束,主要指引擎链路和系统工具的局限性以及稳定性。局限性比较一目了然,底层做不到直接从源头扼杀想法,沉没成本最低。但稳定性往往是在经历迭代上线方能显现,这个稳定性主要在于业务大盘效果的稳定性,以及系统链路的稳定性。对于前者比如你的模型分布变化比较剧烈,如果下游链路对你的预估分强依赖,可能造成排序结果出现异常。另一种情况是你的模型所需要的链路支持较复杂和脆弱,比如强依赖日志落盘和IO带宽,这种需求在大促瞬时流量的时候可能会直接击垮系统造成雪崩。因此我们在模型设计之初就要考虑这些问题以避免不必要的麻烦,这里对应上诉两个问题举两个迭代的例子,继承预训练的Embedding向量是目前工业界引入泛化表征信息的常用方法,但是考虑到搜推广的工业环境一种lifelong的增量状态,无监督的预训练表征可能也需要更新,从而进一步更新Embedding向量,那么这种解耦式的训练和信息供给在在线切换的时候就会存在不一致的风险,从而导致大盘效果不稳定。对应另一种情况比如实时特征落日志,当然解法可以是去升级系统链路建设Feature Service。

(2)算力

所谓算力对应的在线的计算资源,对应的具体硬件需求有GPU,CPU,和Memory。在有限算力的合理资源利用率下对模型约束反映的是打分的quota和响应RT,这两者又影响到最后的排序结果和用户体验,进一步则是业务结果,整体的发展曲线如下图,当然这里可以发展一个动态算力的背包问题的解法来确定合理的模型复杂度和打分quota配置,毕竟算力约束是 \sum\limits_{i,j}x_{i,j}q_j <= C ,除了优化单次计算以外,也可以个性化打分量。不过本文我们要讨论模型优化设计之初我们如何考量算力的约束,首先就是算力的性价比,举一个简单的例子,比如我们想要对用户行为序列进行时序建模,常用的方案是GRU,串行的计算逻辑无疑带来算力的挑战,但如果采用叠加position embedding的attention计算在运算并行度上就会大大打开,实际效果经验上差异不大。另一方面结构设计上避免小矩阵运算,比如三路不同序列attention,直观的逻辑是分别attention再concat,但实际可以padding对齐后变成大矩阵计算,这些都能带来算力的节约。另外在逻辑结构上避免过多的中间Tensor,这也会导致GPU访存的消耗,从而降低QPS。当然这一块计算引擎优化的同学会更专业一些,他们也会帮助利用OP Pattern做一些Kernel fusion或者在线Inference的时候调整为FP16,但如果缺乏相关条件的同学要有这方面的技术sense,毕竟无法上线的模型设计一样是纸上谈兵。

由于不同团队的迭代和系统架构有所不同,上图我就不再展开,例如部分团队的样本来自于在线请求打分的直接落盘,而我们团队从迭代性考虑在样本生产上还是主要采用feature join的逻辑。整体迭代体系可以形象成下图的组织结构:"RTP计算平台 & 样本、模型、特征三兄弟 & 训练引擎XDL"。

如果将点击率预估模型看成一辆赛车,样本就是燃料,模型就是车架,特征就是轮子,要想跑的快缺一不可。但是我们不能瞎跑,还要有方向性地到达终点,因此还需要方向盘,而这个方向盘就是Loss,Loss的设计对应了我们想要的优化目标,而点击率模型在优化目标的追求上又有预估准度,排序能力,冷启泛化等标准,具体的评价指标有AUC,GAUC,logloss(上线后的PCOC)等。这些标准的重要性评判依赖所在的场景业务需求。因此围绕以上3+2的迭代结构以及这些优化目标,我将点击率优化的具体技术方向拆成如下几点,后续文章也会沿着这个顺序进行展开。当然机器学习的研究方向众多,而点击率模型做为其具体落地的应用可优化点也很广泛,这里只是挑选了主要方向:

  • 如何在工业界优化点击率预估:(二)样本

在机器学习中,训练样本决定了模型的效果上界,因此如果能选取合适的且质量较高的样本可以提高点击率模型的预估能力。本文主要分为三大类(1)有标签样本(2)无标签样本(3)外域样本三大类去介绍如何从样本层面进行点击率模型的优化。内容涉及到数据清洗,数据组织,数据时效,标签生成,数据扩增等一系列方法。

  • 如何在工业界优化点击率预估:(三)特征

正如上文的比喻,特征是模型这辆赛车的轮子,因此越好的轮子才能跑得更快,从另一个角度特征是预估的先验信息来源,只有足够的信息才能支撑我们在模型上的创新空间。本文从模型的物理意义划分多类进行介绍,分别是(1)用户特征(2)Item特征(3)场景特征(4)交叉特征(5)级联模型特征。最后会在介绍一下特征的生产和服务。

  • 如何在工业界优化点击率预估:(四)兴趣|序列建模

兴趣建模是我们团队迭代的强项也是核心赛道,其建模核心就是基于用户的历史行为序列挖掘用户和目标商品的兴趣相关度,我们团队从用户的多峰兴趣、兴趣演化、长期兴趣等视角出发持续发展出了很多工作,当然业界也在这一方向有不错的产出。但是以上工作更多聚焦了正向兴趣,但兴趣建模可以更广泛。因此本文从(1)用户正兴趣(2)用户负兴趣(3)商品侧兴趣 三部分介绍。

  • 如何在工业界优化点击率预估:(五)特征交叉建模

特征交叉建模通过参数化的形式隐式学习特征的高低阶融合信息从而提高预估能力,是点击率预估模型的重要技术方向,本文介绍了近年来特征交叉的热门技术方案及其挑战,分析模型是如何通过提高非线性特征交互的隐式学习容量来探索特征协同交互的潜力。

  • 如何在工业界优化点击率预估:(六)多场景建模

在工业界的推荐应用中经常会面临多业务、多场景的情况,为了减少迭代和维护的压力以及寻求数据共性上的学习增益,通常会集合成一个模型统一服务。但是由于不同场景的数据分布差异较大,容易造成建模效果有好有坏的跷跷板现象。因此需要研究如何捕捉数据共性带来提升,并保留数据特异性避免负迁移的建模方案,对此大家一般统称为多场景建模。本文主要从简到繁介绍多场景建模的进化过程以及背后的思考,并简单描述对应的工程改造。

  • 如何在工业界优化点击率预估:(七)图建模和预训练

在大数据时代,任何的联接行为都可以形成一张图,社交媒体有社区网络图,电商场景有用户商品的异构关联图,这些图除了能帮我们勾勒群簇关系,也能被我们利用起来辅助提升点击率预估模型的能力,而提升的手段包括预训练或端到端引入,因此本文主要从这三部分展开(1)图结构端到端训练(2)图结构表征训练(3)模型结构参数预训练。

  • 如何在工业界优化点击率预估:(八)Debias&Loss&校准

从标题可以看出本文主要从(1)Debias(2)Loss(3)校准 三部分展开,将这三部分集合一章是因为存在一定的关联内因,一言以蔽之则是Debias领域里部分方法都涉及到修改训练Loss,例如IPS等技术,而Loss一旦偏离基于点击监督的伯努利分布基本都会有打分准度的偏移,所以需要用到校准技术来进行纠偏。当然内容上不是补丁式串联,而是分别讲解各个技术给点击率预估带来的影响和优化空间。

  • 如何在工业界优化点击率预估:(九)集成学习&模型压缩

本文介绍机器学习技术中一柄矛和一把盾是如何应用在点击率预估中,矛自然是集成学习,在有监督学习算法中,想要学习出一个稳定的且在各个方面表现都很好的模型是较难的,因此可以用集成学习将多个模型组合到一起得到一个更好更全面的模型。盾则是模型压缩,随着模型增量复杂化发展,系统承载能力挑战不断加大,需要对应在效果无损的情况下进行压缩提升服务能力。

三、总结

除以上技术方向外,还有其他的点击率预估优化技巧,比如基础机器学习改进下的正则,Solver优化;比如业务驱动下的分坑预估和创意优选;比如端智能里Meta learning解决稀疏学习;比如冷启动里DropNet或者我们自研的Gated Robust Model等等,如果时间合适,这些内容我也会考虑继续在后续文章里呈现。对于已经撰写的内容,由于我所经历和了解的毕竟有限,因此能呈现的方法未必全面和最优,只是希望把我所认识到的优化角度以及思维过程分享给大家,希望能带来帮助。内容里也有我对一些方向的思考和想法,欢迎大家探讨,互相学习共勉。最后如果把这个系列当成毕业论文的话,应该有个致谢,感恩RANK团队以及公司过去所有陪我成长的同学。