微信扫一扫
分享到朋友圈

腾讯广告精准投放背后的秘密

作者:InfoQ 来源:InfoQ 公众号
分享到:

05-12

作者 | 李彪
编辑 | 佘磊

关于大数据与深度学习的应用,我们每个人随口都能说上来两个,像淘宝的精准推送,互联网广告的精准投放等等,这些都是大数据与深度学习结合的产物。在当前 AI+Big Data+Cloud Computing 的时代里,极大促进了人群的精准画像以及广告的精准投放,但是如果没有一个完整的体系架构,这些技术无法通过相互弥补来更大化的优化问题。为了系统化地解决广告系统在初选、精选阶段上多模型优化中对特征数据的需求,腾讯建设了统⼀的特征工程平台。

本次 InfoQ 采访到了腾讯广告特征工程负责人李彪老师,通过对行业的深入剖析,全方位阐述了特征生产、存储和计算等功能当前技术背景下的实现方法与重要性。同时,李彪老师还将会在 5 月底的 QCon 全球软件开发大会 广州站 【广告系统实践专题】带来多模型特征工程系统化解决方案的相关演讲。

 腾讯当初做这个“统一的特征工程平台”的原因是什么,基于怎样的设计理念?请详细解释下“广告业务多模型特征工程”是一款怎样的产品。

广告系统是一个流量方、广告主、平台方三方博弈的系统,为了平衡三方的利益,当今广告系统都追求千人千面的广告体验,即精准投放并展示用户感兴趣的广告。在这个过程中,广告系统需要实现精准广告定向,同时还需要做好广告排序逻辑,并且对广告排序逻辑从系统性能的角度出发,将广告排序分为了初排和精排两个阶段,在每个阶段中都会存在有比较多的模型,如广告定向阶段有人群扩展模型、自动定向模型、用户兴趣定向模型,初排阶段有轻量级点击率预估模型 (litectr)、轻量级转化预估模型 (litecvr) 等等,精排阶段有点击率预测模型、转化率预估模型、用户体验负反馈模型等等。

从机器学习模型角度出发,参考 Google 的 D. Sculley 在文章 Hidden Technical Debt in Machine Learning Systems 上所写到,在生产环境下将一个机器学习模型应用到业务上并发挥作用,纯粹的跟机器学习 (文章里面用的是 ML Code) 的只是很少的部分工作,还存在很大部分的工作在处理特征数据的生产、存储、预处理,模型训练、评估和发布等,因此最近诞生了 SysML 这么个方向,结合机器学习和系统方面的内容,并且 Google 推出来 TensorFlow Extended(简称 TFX) 系统,Facebook 推出了 FBLearner Flow 系统,Uber 搭建了米开朗琪罗系统,Apple 公司也在 Sigmod 2019 上发表了一篇"Data Platform for Machine Learning"的论文。

如上面所述,当然可以是每个模型负责方自己单独来搭建一套机器学习系统,但是对于一个广告业务里,重复造轮子比较浪费资源,并且在性能优化上不能从全局角度考虑,因此我们统一建设了一套面向整个广告业务的机器学习平台,其中特征工程平台是机器学习平台里的跟特征相关的子系统,包括数据的接入、清洗、存储、预处理和使用,可以理解是解决了 TFX 系统里面的 Pre-Trainer 部分的工作。

 随着大数据、机器学习等技术的快速发展,广告投放正在变得越来越精准,这些技术在腾讯广告业务多模型特征工程中得到了怎样的应用,技术亮点有哪些?

特征工程平台,或者叫做为机器学习服务的数据平台,解决的是为各个模型 (不管是广告定向、广告初排还是广告精排) 在处理机器学习模型所需要的数据的研发平台,快速地满足模型对特征数据的需求迭代。

我们的建设的目标有:

  • 简单易用,业务快速迭代。从模型方的角度来看,模型方的同学使用特征数据上需要做到简单易用,即不需要知道特征数据如何接入,数据存储在哪里、怎么存储的,数据是如何去获取到的,只需要简单地声明下我需要什么样的特征数据即可,如只需要简单地配置说需要那些特征,特征工程平台就会根据这个配置离线训练的时候去生成包含这些特征的训练样本集,在线预测的时候生成对应的预测输入。

  • 保证数据质量,机器学习里最经典的一句话叫做"Garbage In, Garbage Out",因此为了保证模型正常工作,那么必须要保证输入给模型的数据的正确性。给模型的数据分为两种,一种是离线训练用的 Training Data,一种是在线预测用的 Serving Data,需要时刻关注 Serving-Training Data 之间的 Skew(偏差),以及 Training Data 或者 Serving Data 的 Drift(漂移)。在如何避免、解决 Skew 问题上存在着较大的挑战,我们也采取了各种措施来解决避免这块的问题,并取得了不错的成绩

  • 系统高性能,节约成本。最近的机器学习模型,特别是深度学习中,由于网络结构复杂,网络参数非常多,为了保证模型的效果,通常需要海量的特征数据来进行模型训练。因此我们需要对特征数据的存储、计算等进行不断地优化,提升系统的吞吐量,从而节约成本。

当前我们建设了统一的前文统计特征生产框架、广告素材特征生产框架、特征仓库、训练样本生产框架以及在线特征服务等系统,初步实现了上述的三大目标,并在数据存储、数据访问计算以及任务管理调度方面做了大量的有意义的优化。

 腾讯广告业务多模型特征平台,在架构层面有着怎样的考量,包括特征生产、存储、离线训练和在线预测上的计算与调度等等?

从架构上,从下往上分为有基础设施层、特征生产层、特征存储层、特征计算层以及最上的特征应用层 (即各个模型方)。特征工程平台主要是特征生产层、特征存储层和特征计算层,并在这三层的上提供了公共的任务调度模块和监控告警模块。

  • 基础设施层,基于腾讯的大数据基础设施,包括 TDW 系统里的 Spark/HDFS/HBase/Hive/TDBank(类似于 Kafka 一样的消息队列系统),以及自研的 KV 系统 Marvel,列式存储格式 Dragon 以及 OLAP 引擎 Pivot;

  • 特征生产层,在底层基础设施上,存在有搭建了统一的前文统计特征生产框架 CF2,广告素材特征生产框架 TerraStore;

  • 特征存储层,基于特征生产层产生的特征或者其他的团队生产出来的特征 (如语义特征、Embedding 特征等等),通过特征注册纳入到特征仓库里,然后根据后续特征计算层的需要,将特征仓库里的特征同步到离线训练需要的 KV 系统和在线预测所需要的 KV 系统。同时也提供了元数据管理、数据质量校验等功能;

  • 特征计算层,为模型方在调研环境提供特征补录、生产环境提供训练样本生产和在线预测提供预测输入等功能,并做到模型方只需要简单地配置就可以完成这些功能操作;

  • 特征应用层,即使用了特征计算层的各个模型;

  • 公共模块,在特征生产层、特征存储层以及特征计算层里,我们开发了统一的任务调度系统 Hotwheels,以及对 Training/Serving Data 检测 Skew/Drift,对数据质量进行校验熔断的监控告警系统 Eagle Eye。

 在当前互联网“一切求快”的效率面前,特征的选择以及上线可以说非常的重要,但是面对大体量的数据规模,开发者不得不将很多的精力放在数据的接入、存储以及访问上,导致整体项目的进度滞后。那么腾讯特征工程平台是如何帮助开发者提升特征上线效率的?还请结合具体的功能实例或案例进行说明。

对,如前面列的我们建设特征工程平台的三大目标中排第一的就是"简单易用,业务快速迭代",因此对于模型方来说,不需要关注数据接入、存储和访问等大数据研发相关的问题,只需要简单地配置下就可以完成了在离线特征调研、特征上线了,极大地提升了特征上线的效率。

举例下,以 litectr 为例,假设现在用了如下的 m 个特征 f1, f2, …, fm, 然后特征生产方又生产了特征 fn。litectr 的模型方可以采取如下的步骤:

  • 先到特征仓库里看下 fn 这个特征长什么样的,数据分布情况是如何的;

  • 初步判断特征 fn 有效果,再在特征仓库里看下这个特征已经在其他的模型上应用如何,包括离线调研的时候对模型业务效果如何,上线之后线上 ABTest 效果如何等;

  • 其他模型使用特征 fn 有效果,那么开始发起离线调研任务。使用特征计算层里的特征补录模块的功能,只需要简单的配置下,在 litectr 的已有的包括有 m 个特征的训练样本数据集上,再增加特征 fn,生产出来包括有 f1, f2, …, fm, fn 这 m+1 个特征的训练样本数据集。然后将之前的只有 m 个特征的训练样本数据集和新增了 fn 的训练样本数据集一起给模型训练模块去训练,并通过离线评测模型的效果 (如离线 AUC 等等) 来评估新增特征 fn 的效果;

  • 在离线评测新增特征 fn 效果不错,那么由特征工程平台里通过数据同步模块将特征仓库里的特征 fn 发布到离线训练所需要的 KV 库和在线预测所需要的 KV 库里面去。当前这块是假设特征还没有其他模型使用的情况下,若其他模型已经在生产环境使用了,这一步是可以省略掉的;

  • 在训练样本生产数据流里增加配置需要特征 fn 和对应的特征抽取逻辑(若没有定制化的操作,可以使用系统默认的特征抽取器),然后就可以得到包括有 fn 的训练样本数据了;同样也一样在在线预测模块里增加配置需要特征 fn 和对应的特征抽取逻辑即可。从而完成了整个特征的上线操作,开启 ABTest 阶段,若效果非常不错的话,将这个特征全量从而完成了一次特征上线的迭代;

  • 在生产环境里使用起来了之后,我们自动会在监控报表系统 Eagle Eye 里增加了对 Training/Serving Data 的 Skew/Drift 的监控报表。

 这样一套特征工程平台在实践的过程中有遇到过哪些挑战?对后续的业务有何参考价值?

遇见了很多的跟大数据研发方面的挑战,简单地举例下:

  • 如何解决 Training/Serving Data 的 skew 问题,能否全部通过落地日志的方式来解决呢?落地日志会带来哪些弊端呢?

  • 在技术栈里用到了 HBase 来作为 KV 存储系统,但是在海量存储和大并发下 GC 是瓶颈,如何来解决这块的问题来提升性能;

  • 存在有海量的特征数据,使用什么文件格式能满足业务的需求并且节省存储成本;

  • 由于有很多模型同时在一个平台里执行,如何解决多租户问题,如何保证任务管理分发的高可用和时效性。

解决了上面的一系列的问题,对于大数据研发的经验特别是存储、访问计算,是可以同时应用到其他的业务上的,另外任务管理分发那块,是一个通用的系统,可以推广到任何的业务使用上。

 可以根据自身长期积累的研发经验来总结一下,如何做才能在广告系统中最大化数据的价值?

广告系统是一个典型的以数据为驱动的业务,数据在广告业务上的价值有如下几个方面:

  • 广告定向 (Targeting),即大家常说的精准广告定向,从广告主的角度来说能有效地触达潜在用户人群;从用户的角度来说,看到自己感兴趣的广告,而不是随机或乱出广告;

  • 商业智能 (Business Intelligence),基于 OLAP 等系统分析数据并输出报表,为各方提供决策所需要的数据;

  • 机器智能 (Machine Intelligence),即类似于特征数据一样,将数据应用到模型上,来提升模型的预测效果。

特征工程平台主要是将数据以特征的形式来通过机器智能来体现价值,模型预测效果好,可以提升类似于广告点击率等业务指标,从而使得用户体验好、广告主的 ROI 好、平台方的 RPM 收益高,发挥了数据的价值。

 开源是现在的一大趋势,我们特征工程平台会有开源的想法吗,还是已经有了开源的动作?

当前我们的特征工程平台这块同各个模型方结合的比较紧密,可以先梳理下将跟业务不是非常相关的部分提炼出来,如列式存储系统、任务管理分发系统等,考虑先在腾讯内部的开源系统开源,然后根据反馈情况再考虑到业界开源,一起建设好简单易用、高性能、高可用的特征工程平台。

嘉宾介绍

李彪,10 年 + 研发和广告系统架构设计经验,先后负责过广告检索系统、⽤户画像系统,最近一直负责特征⼯程平台建设,解决广告业务中多模型对特征的存储、计算方⾯的问题,致力于通过⼤数据研发解决机器学习中数据⼯程问题,提升模型优化的效率和效果,发挥数据的价值。对大数据研发、分布式存储计算、深度学习系统建设有着浓厚的兴趣。

5 月 25-28 日,QCon 全球软件开发大会广州站上,李彪老师将会现场进行【广告业务多模型特征工程系统化解决方案】相关内容的分享,通过简要介绍广告系统如何使用模型特征优化业务指标以及特征工程平台的架构等内容,为现场观众讲解如何系统化地解决多模型的特征共享等问题。

感兴趣的同学可以扫描下方二维码或点击阅读原文了解大会详情,咨询可致电鱼丸:13269078023(微信同号)。


点个在看少个 bug

阅读39288
广告 秘密 
举报0
关注InfoQ微信号:infoqchina

用微信扫描二维码即可关注
声明

1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“InfoQ”微信公众号,文章版权归InfoQ公众号所有。

评论
更多

文章来自于公众号:

InfoQ

微信号:infoqchina

邮箱qunxueyuan#163.com(将#换成@)
微信编辑器
免责声明
www.weixinyidu.com   免责声明
版权声明:本站收录微信公众号和微信文章内容全部来自于网络,仅供个人学习、研究或者欣赏使用。版权归原作者所有。禁止一切商业用途。其中内容并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现头条易读网站上有侵犯您的知识产权的内容,请与我们联系,我们会及时修改或删除。
本站声明:本站与腾讯微信、微信公众平台无任何关联,非腾讯微信官方网站。