为什么推给我的广告都是我想要的?腾讯多模型特征工程解析背后奥秘

阅读数:4162 2019 年 4 月 23 日

大数据与深度学习的应用,我们每个人随口都能说上来两个,像淘宝的精准推送,互联网广告的精准投放等等,这些都是大数据与深度学习结合的产物。

在当前 AI+Big Data+Cloud Computing 的时代里,极大促进了人群的精准画像以及广告的精准投放,但是如果没有一个完整的体系架构,这些技术无法通过相互弥补来更大化的优化问题。为了系统化地解决广告系统在初选、精选阶段上多模型优化中对特征数据的需求,腾讯建设了统⼀的特征工程平台。

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

专访内容

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

广告系统是流量方、广告主与平台方之间三方博弈的激烈区域,为了平衡三方的利益,当今广告系统都在追求千人千面的广告体验,即精准投放并展示用户感兴趣的广告。在这个过程中,广告业务系统就需要实现精准的广告定向,同时还需要做好广告排序逻辑,并且要从系统性能的角度出发,将广告排序分为初排和精排两个阶段。在每个阶段中都会存在较多的模型,如广告定向阶段有人群扩展模型、自动定向模型、用户兴趣定向模型等,初排阶段有轻量级点击率预估模型 (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 部分的工作。

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

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

腾讯特征工程平台的建设目标有:

  1. 简单易用,业务快速迭代。从模型方的角度来看,模型方同学使用特征数据时不用了解特征数据如何接入、数据存储在哪里、如何存储的、数据是如何去获取到的等等背后的逻辑,只需要简单地声明下我需要什么样的特征数据即可,如只要简单地配置说我需要特征 f1,f2,,fm,特征工程平台就会根据这个配置,在离线训练时生成包含这些特征的训练样本集,在线预测时会生成对应的预测输入。
  2. 保证数据质量。机器学习里最经典的一句话叫做 "Garbage In, Garbage Out",因此为了保证模型的正常工作,就必须要保证输入模型数据的正确性。输入模型的数据主要分为两种,一种是离线训练用的 Training Data,一种是在线预测用的 Serving Data,需要时刻关注 Serving-Training Data 之间的 Skew(偏差),以及 Training Data 或者 Serving Data 的 Drift(漂移)。同时在如何避免、解决 Skew 问题上一直以来都存在着较大的挑战,我们也采取了各种措施来解决避免这块的问题,并取得了不错的成绩。
  3. 系统高性能,节约成本。最近的机器学习模型,特别是深度学习,由于网络结构复杂,网络参数非常多,为了保证模型的效果,通常需要海量的特征数据来进行模型训练。因此我们需要对特征数据的存储、计算等方面进行不断地优化并提升系统的吞吐量,从而节约成本。

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

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

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

  • 基础设施层,基于腾讯的大数据基础设施,包括 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。

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

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

举例下,以 litectr 为例,假设现在用了如下的 m f1,f2,,fm,fn,litectr 的模型方可以采取如下的步骤:

  1. 先到特征仓库里看下 fn 这个特征长什么样,数据的分布情况如何。
  2. 初步判断特征 fn 有效果,再到特征仓库里看下这个特征在其它模型上的应用情况如何,包括离线调研时对模型业务的效果如何,上线之后线上 ABTest 的效果如何等。
  3. 其他模型使用特征 fn 有效果的话,那么就可以开始发起离线调研任务。使用特征计算层里的特征补录模块的功能,只需要简单的配置下,在 litectr 中已存在包括 m 个特征的训练样本数据集上,再增加特征 fn,生产出来包括有 f1,f2,,fm,fnm+1 个特征的训练样本数据集,然后将之前的只有 m 个特征的训练样本数据集和新增了 fn 的训练样本数据集一起给到模型训练模块去训练,并通过离线评测模型的效果 (如离线 AUC 等等) 来评估新增特征 fn 的效果。
  4. 在离线评测新增特征 fn 效果不错,那么由特征工程平台里通过数据同步模块将特征仓库里的特征 fn 发布到离线训练所需要的 KV 库和在线预测所需要的 KV 库里去。当前这里是假设特征还没有被其它模型所使用的情况下,若其它模型已经在生产环境中使用了,这一步是可以省略掉的。
  5. 在训练样本生产数据流里增加配置需要特征 fn 和对应的特征抽取逻辑(若没有定制化的操作,可以使用系统默认的特征抽取器),然后就可以得到包括有 fn 的训练样本数据了;同样也一样在在线预测模块里增加配置需要特征 fn 和对应的特征抽取逻辑即可。从而完成了整个特征的上线操作,开启 ABTest 阶段,若效果非常不错的话,将这个特征全量从而完成了一次特征上线的迭代
  6. 在生产环境里使用起来了之后,我们自动会在监控报表系统 Eagle Eye 里增加了对 Training/Serving Data 的 Skew/Drift 的监控报表。

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

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

  1. 如何解决 Training/Serving Data 的 skew 问题,能否全部通过落地日志的方式来解决呢?落地日志会带来哪些弊端呢?
  2. 在技术栈里用到了 HBase 来作为 KV 存储系统,但是在海量存储和大并发下 GC 是瓶颈,如何来解决这块的问题来提升性能?
  3. 存在有海量的特征数据,使用什么文件格式能满足业务的需求并且节省存储成本?
  4. 由于有很多模型同时在一个平台里执行,如何解决多租户问题,如何保证任务管理分发的高可用和时效性?

通过一系列的努力,腾讯特征工程已经全部解决了上面的一系列问题。关于大数据研发的经验,特别是在存储、访问计算等领域内的经验,是完全可以同时应用到其他的业务上的,另外任务管理分发那里,这是一个通用的系统,可以推广在任何的业务使用上。

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

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

  1. 广告定向 (Targeting),即大家常说的精准广告定向,从广告主的角度来说这种方式能够有效触达潜在用户人群;从用户的角度来说,看到的广告都是自己所感兴趣的,而不会产生厌烦的情绪。
  2. 商业智能 (Business Intelligence),基于 OLAP 等系统分析数据并输出报表,为各方提供决策所需要的数据。
  3. 机器智能 (Machine Intelligence),即类似于特征数据一样,将数据应用到模型上,来提升模型的预测效果。

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

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

当前腾讯的特征工程平台同各个模型方结合的都比较紧密,后续会先将与业务关联并非紧密的部分提炼出来,如列式存储系统、任务管理分发系统等,之后会考虑先在腾讯内部的开源系统进行开源,然后根据反馈情况再考虑到业界开源,一起建设好简单易用、高性能、高可用的特征工程平台。

嘉宾介绍

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

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

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

链接: https://2019.qconguangzhou.com/presentation/1502

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论