前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >效果广告点击率预估近期实践:深度学习

效果广告点击率预估近期实践:深度学习

作者头像
阁主的小跟班
修改2017-06-19 19:26:55
5.4K1
修改2017-06-19 19:26:55
举报

作者简介: 薛伟, 腾讯专家工程师。

1. 引言

深度学习可以说是目前机器学习和人工智能领域最热的词汇了,已经热了数年,而且有望继续热下去。深度学习技术自横空出世以来,在多个应用领域刷新了历史记录,如语音识别、图像识别、自然语言处理等等,且其后劲甚足,不断有新的记录出现。近日,来自Google和Facebook的两个科学家团队又在体现高级人工智能的计算机围棋上以深度学习技术取得突破,大大提升了计算机棋手的棋力,取得了对一些人类棋手的胜利。Google的这一突破还登上了Nature杂志的封面,并再次刷爆了笔者的朋友圈。

鉴于深度学习技术的辉煌战绩,以及目前来看深不可测的巨大潜力,各大IT和互联网公司纷纷投入资源开展研究与应用,以深度学习为方向的科研院所和创业企业也是层出不穷。鹅厂虽尚无深度学习研究院之类的独立部门,但是各BG不乏在深度学习研究和应用上颇有建树的团队,深度学习技术已经广泛应用于鹅厂各类产品,支持更好的语音识别、人脸识别、物体识别、商品识别、图片分类和检索、自然语言处理等等。本文将要分享的是笔者所在团队将深度学习技术应用于效果广告点击率预估的一些思考和实践经验。如笔者前文[1]所言,本文是一个有点迟到的开篇,一些平台方面的工作在之前的KM文章中已有介绍,后面还会陆续补充一些细节内容。

2. 从特征工程到端对端学习

需求来自于业务,方向来自于痛点。将深度学习技术应用于效果广告点击率预估并不是为了附庸风雅,而是因为有实际的需求和痛点。

时间回到三年前,当时现网点击率预估的主力算法模型是逻辑回归(logistic regression, LR)。这是一个简单的广义线性模型(generalized linear model, GLM),一般的机器学习和统计类教科书都有原理介绍,我们求极大似然估计(MLE),常用算法有并行随机梯度下降(parallel stochastic gradient descent,PSGD)和L-BFGS。模型和算法相对简单,但是特征工程(feature engineering)方面的工作量却是相当大的。

一种历史悠久并被广泛接受的观点[2]认为,特征工程的本质是个表示(representation)问题。如果说机器学习算法是要从样本数据中学习出一个解(模型)的话,特征工程就是要寻找样本数据的最佳表示,使学到的模型更灵活、更简单、更准确。一般所说的特征工程大致包含了特征提取/构造(feature extraction / feature construction)和特征选择(feature selection)两个部分。

特征提取/构造是指自动(特征提取)/手动(特征构造)地从原始数据出发构造新的特征的过程。自动特征提取方法包括从原始数据出发计算各种简单统计量、主成分分析(principal component analysis)、无监督聚类(unsupervised clustering)、图像中的线和边的检测等等,这些方法中有的还提供了对原始数据降维的功能。手动特征构造则是特征工程中更偏“艺术”的部分,通常要借助人的领域知识,以及对原始数据的深入观察和创造性思考。尽管在特征构造过程中可能会用到各种自动工具来辅助分析和可视化,在构造方法确定后,可能将其变成一个自动化的数据处理流程,但是特征构造过程的核心还是手动的。

特征选择是指从众多特征中挑选出少许有用特征的过程。和学习目标不相关的特征和冗余特征需要被剔除,如果计算资源不足或者对模型的复杂性有限制的话,还需要选择丢弃一些不重要的特征。特征选择方法大致可以分为三类:过滤器(filter)方法、包裹器(wrapper)方法和嵌入式(embedded)方法。过滤器方法会为每个特征计算某种统计量(如与目标变量的互信息(mutual information,有时也称作信息增益IG)),作为对这些特征的打分,然后按照打分对特征排序,过滤掉排名靠后的特征。包裹器方法会在由所有特征子集构成的空间中进行搜索,每次都用选中的特征子集训练一个模型,以该模型的精度作为对这个特征子集的打分。由于特征子集太多,所以这个搜索过程往往会使用启发式方法。嵌入式方法则是在训练模型的同时判断什么特征对模型精度的贡献大。一般是通过给模型引入正则化项,驱使学习算法产出复杂度相对较低的模型,从而达到上述目的。

效果广告点击率预估模型使用到了用户侧、广告侧和上下文侧的很多特征,持续的特征工程始终是模型效果提升的坚实基础。以用户兴趣类特征[3]为例,依托账号打通[4]的公司产品数据和广告数据,笔者所在的团队为各类精准推荐的场景打造了广告兴趣、App兴趣、群兴趣、订阅兴趣、微信商业兴趣等等一系列的兴趣特征,并且还在持续丰富、改进和融合当中。用户兴趣类特征在点击率预估问题上的信息增益颇高,所以我们很早就将其加入模型,并带来了显著的效果提升,但是这个过程并不轻松,因为仅兴趣单独加入模型是不够的。当我们使用LR这样的广义线性模型时,除了引入用户侧、广告侧和上下文侧的众多基本特征之外,我们还需要引入交叉维度的特征。然而,特征交叉的空间是非常庞大的,即便是模型比较简单,也不可能无限制地做特征组合交叉并加入模型。兴趣类特征本就维度比较高,交叉后规模爆炸更快。此时的重担就压到了特征选择上,不是只挑选基本特征就好,还需要挑选交叉维度的特征。我们效仿Google实现了一套大规模特征选择工具[5][6] ,并在应用中引入一些领域知识来约简搜索空间。尽管如此,特征选择的开销,不论是人力资源还是计算资源,仍然是非常大的。

不仅如此,特征构造方面我们也面临着挑战。身处大数据时代,每天有大量的数据接入数平的数据平台并得到处理。笔者所在团队的同学每天都在想办法从数据中提取有价值的信息,进而构造有助于效果提升的特征。仍以用户兴趣类特征为例,目前用于构造这些特征的数据处理方法、工具和模型都是经过多年打磨的。每当有新的数据源接入,在打通用户账号后,负责兴趣特征构造的同学就会尝试从该数据源提取信息来丰富现有的兴趣,或者创建新的兴趣。如果新的数据源和已有数据源性质接近,现有的方法和工具可继续支持,仅需少许人工干预,例如参数调整。如果新的数据源和已有数据源异构性比较强,那么就需要设计新的特征构造方法。长远来看,我们需要有自动化程度更高的方法,用来从各类源数据出发构造特征。不仅如此,我们希望这种特征构造方法能够在一开始就和其最终服务的目标——效果广告点击率预估——对齐。这样做的好处是显而易见的,可以确保构造出来的特征不仅是与问题相关的,而且是精炼的。

特征选择开销大,特征构造成本高,这两个痛点是我们在实践中感受到并总结出来的。在效果广告业务开展的初期,这方面的痛感还不是非常强烈,或者说,尚未制约到效果的提升。但是随着业务的发展,对点击率预估模型的要求越来越高,特征工程的巨大工作量对效果提升的制约已经相当明显。从那时起,我们就开始思考和寻找各种技术手段来解决这个痛点,除了前面提到的自动化特征选择工具之外,我们还实现并生产应用了FM(factorization machines)[7]等一批自动学习特征交互的模型。这些工作让我们对上述痛点有了更深入的认识,积累了经验,并最终促使我们转向深度学习寻找答案。

深度学习的算法模型众多,应用广泛,究其共性的话,表示学习(representation learning)是一个核心的基本点。深度学习算法基于分布式表示(distributed representation)[8],分布式表示假设我们所观察到的数据都是由因子(factor)之间的交互而生成的,而这些因子是按层(layer)来组织的。深度学习进一步假设这些由因子构成的层对应的是抽象(abstraction)或者组合(composition)的不同层级。对照前面我们的痛点,就不难理解我们为何会转向深度学习了。面对效果广告点击率预估这样一个有监督学习的问题,我们希望借助于深度学习来节约特征工程中的巨大投入(当然,无法完全避免),更多地让点击率预估模型和各辅助模型自动完成特征构造和特征选择的工作(这也被称作特征学习,feature learning),并始终和点击率预估的目标保持一致。端对端学习(end to end learning,也称作端到端学习)这个术语常被用来描述这个目标,这也是深度学习常被人推崇的能力。

笔者所在的团队在将深度学习技术应用于效果广告点击率预估之前,在深度学习平台[9]、深度学习+语音识别[10]、深度学习+图像识别[11]等方面积累了一些研究和应用的经验。然而效果广告点击率预估的场景和上述场景有一些差别,目标和约束不尽相同,在追求端对端学习的过程中所做的取舍也有所不同,本文稍作阐述。

3. 技术方案和应用效果

图1 Mariana 2.0功能模块示意图

3.1 架构

目前线上使用的深度学习点击率预估模型,其模型训练所用的架构同之前的模型差别不大。当事件(点击/曝光/转化等等)发生时,会实时地由上游生成最初的日志,然后经由TDBank[12]接入数据处理平台,再用TDP[12]流式拓扑来给日志关联各种特征,形成训练数据,最后交给模型训练程序来训练点击率预估模型。模型会定期推送到实时推荐引擎,供运行时预估使用。

与点击率预估模型训练强调流式和实时不同,用于特征学习的深度学习模型的训练对延迟要求不高,目前还是离线批处理为主。例如,我们会定期爬取广告的落地页,从中获得广告的图片和文字描述,我们还会收集一些用户订阅和UGC的内容,用户观看和点击广告的行为自然也在收集之列。在积累了足够多的数据后,我们会不定期启动训练深度学习模型来学习用户侧和广告侧的特征。此类模型的效果调优目前仍需要有人来操作,每次得到一个较好的模型后会持续使用一段时间,学习到的用户侧和广告侧特征会存入内存数据库TDE[12]供查询。

3.2 模型和算法考量

前面提到,效果广告点击率预估的场景和语音识别、图像识别之类的场景对深度学习模型有不同的约束。其中一个很重要的约束就是运行时延迟的约束。

在效果广告的应用场景中,用于展示广告的广告位可以是QQ客户端窗口中的某个位置、QQ空间页面中的某个位置、微信公众号文章页中的某个位置、手机QQ app中的某个位置,或者外部合作手机app中的某个位置。广告需要在用户打开或者刷新这些窗口/页面时立即得到呈现,以免破坏整个窗口/页面的展现效果,影响用户体验,所以留给广告系统的响应时间不多。我们知道,一个广告系统的架构和请求处理流程还是比较复杂的[13],当收到广告请求时,先要检索出符合流量和定向要求的广告,然后粗筛筛掉大部分的候选广告,然后请求pCTR模块和pCVR模块分别估计点击率和转化率,然后再做精排并返回最后排名在前的几个广告。这个处理流程中各个环节之间可并行的余地不是很大,所以留给点击率预估的处理时间就更少了。按照目前的经验约定,当候选广告的个数在100左右时,从请求pCTR服务到返回结果的平均延迟不应超过几十个毫秒,移动端广告位的延迟要求通常还要更高一些。

虽然点击率预估服务的接口很简单,传入用户、上下文和候选广告的信息,返回每个候选广告的点击率估值,但是背后仍然是一套比较复杂的系统,涉及到请求路由和负载均衡,分布式K/V存储和缓存等等,并不仅仅是模型运算。所以实际用于模型运算的耗时还要再少一点。在这种情况下,用于运行时点击率预估的模型的规模和计算复杂度不能太大。

因此,我们把端对端学习的过程分成了两个阶段,用到的深度学习模型也相应划分成两类,前面其实已经提到了。一类是运行时用做点击率预估的模型,一类是辅助构造抽象特征的模型,这两类模型从设计到训练都对齐点击率预估的目标。前者的深度目前控制在2~4隐层,每层的宽度也不是很大,不过还有进一步加深加宽的余地。这类模型的复杂度不高,但可以比较有效地解决前面提到的特征选择的痛点,无需手动尝试所有输入特征的组合,模型可以学到比较合理的组合方法,多个隐层可以捕捉到不同层次的特征交互。

后一类模型的规模和复杂度基本不受限制,因为其使用流程独立于运行时的点击率预估流程,延迟要求不高。例如,用于提取订单侧抽象特征的模型是在订单信息接入处理流程中被调用的,提取的特征向量会先入库TDE,然后再用于点击率预估模型。这块我们还在不断地做实验,尝试用不同的数据源和网络结构来提取与点击行为潜在相关的用户侧和广告侧的特征。与此同时,我们对“传统”特征构造方法的改进和推广应用仍在继续,我们认为这两种方法仍将在未来一段时间内并存和相互补充,它们的产出都会交给前一类模型作为输入,并在那里完成交互和融合。

到目前为止,我们主要谈的是对深度学习模型端对端学习能力的运用。不过,换个角度来看,神经网络模型的强大拟合能力也是我们所看中的,特别是当特征变多了之后,我们更需要借助神经网络强大的非线性函数拟合能力。

有了模型,还需要有算法来训练模型,近年来这块的研究也比较热,但我们目前使用的仍然主要是随机梯度下降及其各种自适应变体,配合适当网络结构设计,对于我们手头的模型来说基本够用。

3.3 系统考量

深度学习在学术界和工业界的火爆有目共睹,较为成熟的软件工具和平台也有不少[8],近期各大公司也纷纷开源了一些自用的机器学习平台,如Google开源的TensorFlow[14],微软开源的DMTK[15]和CNTK[16],基于这些平台也可以开发深度学习的算法程序。笔者所在的团队前几年积累了一些使用和开发深度学习工具和平台的经验[17],当时主要还是针对语音识别和图像识别等应用场景。在综合考虑了其他目标应用场景的需求,包括点击率预估的需求后,我们基于开源社区的Caffe[18]推出了Mariana 2.0平台[19][20][21][22],如图1[20]所示。

我们为Mariana 2.0平台设立的技术目标有这么几个。首先,满足多个领域常见的深度学习模型的训练需求,实验成本低且有充分的可扩展性,特别是要支持效果广告点击率预估相关的端对端学习需求,既支持相对规模较小的点击率预估模型,也支持大规模的特征挖掘模型,且可以根据需要扩展新的模型结构。其次,既能用于训练,也能用于运行时预测,一套代码搞定,且执行效率可以接受。第三,支持GPU/CPU异构计算和并行加速,从而充分发挥GPU服务器设备强大计算能力和高速网络通信能力。第四,依托Docker on Gaia[22]实现云化部署和管理。Mariana 2.0基本达到了上述目标,目前已经用于效果广告点击率预估的生产环境。对此平台感兴趣的同学可以看一下此前笔者团队发表的KM文章。

3.4 应用效果

基于深度学习的点击率预估模型从2015年年中开始应用于广点通现网,上半年在广点通Feeds广告位取得CTR+CPM 10%+的提升,下半年推广覆盖了其他移动内部站点、微信以及移动联盟,并在移动内部站点进一步带来CTR+CPM 8%+的提升,在微信广告位带来12%左右的提升。与此同时,特征工程的人力和计算资源消耗明显减少,新特征的实验周期明显缩短。

4. 展望

需求来自业务,方向来自痛点。于工作中体会到特征工程的一些痛点,促使我们转向深度学习。我们开发了平台,设计了模型,并在效果广告点击率预估应用中取得了较好的提升。深度学习技术的研究和应用方兴未艾,我们所涉猎的只是很小的一块。我们在实践中边总结边改进,还有很多的工作可以做,像模型结构设计、算法改进、系统性能调优,都需要继续投入。除此以外,深度学习和在线学习的融合也是我们重点关注的方向,我们在这方面的探索已经开始。

5. 后记

点击率预估模型的深度学习和在线学习融合方案已经在16年年中的时候实现,并用于年中的线上放量,进一步提升了广点通效果广告的线上效果。目前使用的融合方案有两种,一种是快速增量更新DNN模型,实现近似在线更新的效果,好处是部署和运维比较简单,另一种则是将在线贝叶斯学习的方法推广到DNN模型,实现纯在线学习,其部署和运维略复杂一点。这两种方案的线上效果经在线对比实验确认是比较接近的,目前已经分别用于覆盖一些重要的流量。深度学习和在线学习的融合使得我们可以兼得二者的优点,也为进一步的点击率预估模型结构设计优化打下了坚实的基础。

融合实现后,点击率预估模型结构精调和从原始数据出发的特征构造将会是今后一段时间我们探索深度学习技术及其应用的重点。

参考文献 [1] 效果广告点击率预估近期实践:在线学习 [2] Discover Feature Engineering, How to Engineer Features and How to Get Good at It, http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/ [3] TDW腾讯用户画像—用户兴趣解读 [4] 既相知,便相伴:揭开移动画像系列之总体介绍 [5] 一种基于LR的特征选择方案 [6] Sameer Singh , Jeremy Kubica , Scott Larsen , Daria Sorokina, Parallel Large Scale Feature Selection for Logistic Regression, SDM2009. [7] Steffen Rendle, Factorization Machines, in Proceedings of the 10th IEEE International Conference on Data Mining (ICDM 2010), Sydney, Australia. [8] Deep learning [9] 解密最接近人脑的智能学习机器——深度学习及并行化实现概述 [10] 深度神经网络DNN的多GPU数据并行框架及其在语音识别的应用 [11] 深度卷积神经网络CNNs的多GPU并行框架及其在图像识别的应用 [12] 腾讯实时计算平台(TRC)系列之一:初识TRC [13] 广点通广告引擎-设计与实现 [14] TensorFlow [15] Microsoft Distributed Machine Learning Toolkit, http://www.dmtk.io/ [16] Computational Network Toolkit (CNTK) [17] VLDB 2014总结:腾讯Mariana演讲者的视角 [18] Caffe, https://github.com/BVLC/caffe/ [19] 云化GPU集群建设:引言 - 承深度学习之需,探高性能计算之路 [20] 云化GPU计算集群建设:Mariana 2.0深度学习平台 [21] 云化GPU集群建设:Mariana 2.0使用手册、疑难解答和最佳实践 [22] 云化GPU集群建设:Docker on Gaia云平台

本文系转载,如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 从特征工程到端对端学习
  • 3. 技术方案和应用效果
    • 3.1 架构
      • 3.2 模型和算法考量
        • 3.3 系统考量
          • 3.4 应用效果
          • 4. 展望
          • 5. 后记
          相关产品与服务
          语音识别
          腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档