人工智能在广告行业的应用

随着机器学习的日趋火热,“人工智能”——词似乎占尽了世人的眼球—AlphaGo一鸣惊人,自动驾驶走进生活、智能机器人逐渐成为居家标配。人工智能已经悄悄来到我们的身边,与生活中的一切产生密不可分的联系。

之前我们通过一系列面试题理清了人工智能领域的知识脉络,涵盖了机器学习领域众多基本算法和模型,不仅是踏入人工智能大门、成为优秀数据工程师的基础,更可以将统计理论、数学模型学以致用,去探寻人工智能时代数据海洋中的规律与本源。只有深入透彻地了解各种机器学习方法、理论体系、实践技巧以及适用场景,才能在实际问题中因地制宜,量体裁衣,选择合适的解决方案。

“天下之事,闻者不如见者知之为详,见者不如居者知之为尽”。本章将着重实践算法、模型、理论于真实世界的广袤天地,涵盖广告、游戏、自动驾驶、机器翻译、人机交互等诸多领域,为读者揭开触手可及的人工智能那层神秘的面纱。

广告是当今互联网商业变现最重要的模式之一。数字广告是大部分互联网巨头最主要的现金流。根据Google母公司Alphabet 2017年第一季度的财报,广告总营收214.11亿美元,占其总营收的86.5%。Facebook的广告收入占比更加夸张,达到惊人的98%,可以说Facebook就是一家不折不扣的广告公司。除此之外,百度、阿里巴巴、腾讯的广告部门也均是各公司的核心部门。阿里妈妈、腾讯广点通、百度凤巢的广告部门,无论是招聘门槛还是内部重视程度都很高。

从权威媒体机构Zenith 2017年发布的《全球30大媒体主》排名来看(见下图),互联网公司更是占据了半壁江山。除了Alphabet和Facebook雄霸前两位外,百度排第4名,腾讯排第14名。传统媒体中排名最高的是康卡斯特(Comcast)媒体集团,屈居第三位。排名第20位的CCTV也成为了中国排名最高的传统媒体主。

全球广告收入最高的30大媒体.png

图  全球广告收入最高的30大媒体

数字广告的发展史还要追溯到1995年。当时,以雅虎为代表的门户网站把网页当作线上杂志进行售卖,并按照约定的形式进行投放。那时,数字广告与传统媒体的广告售卖方式非常相似,只是把内容从线下搬到了线上。从1998年开始,以谷歌为代表的搜索引擎引领了潮流。与门户网站有所不同,搜索引擎的商业变现采用的是与搜索服务相结合的付费搜索模式,即根据用户的即时兴趣(搜索关键词)定向投送广告。这种广告一般采用竞价的方式进行售卖,广告主可以根据用户的实时兴趣对广告投放效果进行优化,因而与门户网站相比,广告的投放效果具有精准度更高的特点。2005年以后,在线视频业务的流量不断攀升,代表网站有YouTube、Hulu等,由于其广告投放模式与传统电视广告类似,不断蚕食着传统电视广告的市场。

互联网广告模式之所以得到各大广告商的青睐,有以下几点原因。首先,用户花在互联网上的时间越来越多,广告主为了抓住年轻的一代用户,必须加大互联网广告的投入;其次,在线广告的投放门槛很低,在Google只需100美元自助开户后就可以进行广告投放;同时,广告投放容易实现个性化,并经由A/B测试进行量化的评测和优化。随着互联网广告在商业上的蓬勃发展,其背后的算法模型研究也受到越来越多的关注。2008年,在第十九届ACM-SIAM学术讨论会上,雅虎研究院资深研究员Andrei Broder提出了计算广告学(Computational Advertising)的概念。他认为,计算广告学是一门由信息科学、统计学、计算机科学以及微观经济学等学科交叉融合的新兴分支学科,其研究目标是实现语境、广告和受众三者的最佳匹配。

在介绍计算广告的常用算法模型之前,先对互联网广告的主要产品类型和商业模式进行介绍。这里按照互联网广告的商业模型,将其分为合约广告、竞价广告、程序化交易广告等类型。

合约广告一般在门户网站和视频网站中较为常见,例如,Hulu广告收入的绝大部分来自于合约广告。这是由于用户与视频广告的交互较少,缺乏点击等反馈数据,不宜直接评估后续的转化效果。合约广告的客户通常是品牌类广告主,它们的主要诉求是向公众宣传自己的品牌形象,并不显式地评估后续的转化效果。合约广告一般以CPM(Cost per mille,千次曝光成本)进行结算,即每完成一千次曝光流量平台向广告主收取固定的成本。图(a)在Hulu网站上观看美剧《实习医生格蕾》(Grey’s Anatomy)时,浏览器展示的视频广告截图。

竞价广告最重要的形式是搜索广告。搜索广告的标的物是关键词,每个搜索广告可以对一些特定的关键词进行出价。用户输入的查询与广告竞标的关键词进行匹配,检索出所有符合条件的广告,并选择其中的一条或几条广告与搜索的网页结果一起展示,通常广告排在网页之前。搜索广告一般按点击结算,在用户点击之后按照广告主对该关键词的出价收费,没有点击则不收费,因此点击率预估算法对竞价广告的优化至关重要。图(b)展示了在百度中搜索“深度学习”时返回的搜索结果页面,其中第一条即竞价系统所选择的广告,在下方有“广告”字样。

程序化交易广告能够让广告主更加灵活地选择自己的受众群体和曝光时机。在每一次展示机会到来之时,广告交易平台将流量的相关信息和竞价请求发送给需求方平台(Demand Side Platform,DSP),需求方平台根据流量的实际情况代表广告主进行出价,价高者得到本次的曝光机会。程序化交易广告通常以CPA(Cost Per Action,每次行动成本)的方式进行结算,因此需要综合考虑广告预估的点击率、转化率等因素。图(c)为在CSDN的某个博客页面上,京东赢得一次实时竞价机会而展示的一个商品广告。

合约广告.png

(a)合约广告

竞价广告.png

(b)竞价广告

程序化交易广告.png

(c)程序化交易广告

图 常见的广告类型

不同类型的广告在广告系统设计上有所区别,比如合约广告一般不需要考虑广告的实际效果,所以没有CTR模块;程序化交易广告需要对接广告交易平台等第三方信息,所以需要更多的数据对接模块。但总体来说,广告系统的整体架构是通用的。下图是一个简化的广告系统框架,主要展示了与算法相关的模块,而对其他系统模块有所省略。系统由分布式计算平台、流式计算平台和广告投放机三大部分组成。分布式计算平台负责根据海量的投放日志进行批处理计算,得到算法分析和建模的结果,例如用户画像、点击率/转化率建模等算法都是在分布式计算平台上运行的,并将得到的用户标签、模型特征和参数等数据更新至数据库中。流式计算平台负责收集和计算有实时需求的用户标签、特征、点击反馈等数据,并将它们实时地同步到数据库中去。当一个请求到来时,广告投放机根据请求对应的用户、上下文等信息以及数据库当前的状态进行广告检索、排序和选择。一次广告投放完成之后,相关的记录将被流式计算平台及时地获取并处理,同时它们也被收集到投放日志中,供分布式计算平台稍后使用。

广告系统的各个算法模块,不仅与Spark、HDFS、Kafka等大数据工具息息相关,更涉及大量机器学习的知识。如果要成为广告算法工程师,在打牢算法基础的同时,还需要对广告的商业模型,各模块的业务功能有较深的了解。下面就对广告系统各个模块涉及的算法和机器学习知识进行逐一介绍。

广告系统架构图.png

图  广告系统架构图

■ 用户画像

用户画像是计算广告学的核心组成部分之一,在合约广告、搜索广告、程序化交易广告等产品形式中广泛存在。在合约广告中,广告主可以根据自身品牌的受众群体指定合适的定向条件,以节省成本;搜索广告和程序化交易广告可以根据用户的画像对该用户对各广告的点击率和转化率进行更精确的预估,从而优化整体的投放效果。

监督学习和非监督学习技术在用户画像中都得到了广泛的应用。例如,性别预测问题就是一个典型的监督学习问题。我们根据用户填写的性别信息可以得到一些用户的性别,而对于另外一些用户我们无法得知他们的准确性别,但是有些广告主要求针对特定的性别进行品牌推广。例如,一个主要经营男装的广告主可能需要对广告的受众定向设为男性。为了满足广告主的类似需求,我们需要通过用户过去的行为和其他已有特征对用户性别进行建模和预测,比如通过某个用户经常观看足球、拳击等项目的历史行为,预测出他是男性的概率更高,对于其他的用户标签也是类似的。只要我们有了足够多的标注样本,都可以用监督学习的方式对用户标签进行建模和预测。

监督学习的模型可以采用逻辑回归、支持向量机、决策树、随机森林、梯度提升决策树、前向神经网络等,采用的特征因具体的业务而异。例如,在搜索引擎中,可以根据用户的搜索和浏览历史来对用户的性别进行预测,从而实现更精准的搜索广告投放。参考文献[45]利用一个大型网站的历史访问数据进行实验,输入的特征为该用户搜索和浏览过的历史网页文本,其中的每个词作为单独的一维特征,最终分类器学习到的较为显著的文本特征如下图所示。可以发现,在预测女性时,较为重要的特征是孩子、食物、家庭等;而对于男性来说,较为显著的特征是体育、车、因特网等。所以,对特征的学习结果还是比较符合直觉的。

男性和女性的文本特征.png

图  男性和女性的文本特征

另外一大类用户画像方法是采用非监督学习。非监督学习的目的是发现数据本身存在的规律,并不需要使用带标注的数据。根据用户以往的行为和已有的特征,我们可以将用户聚为一些特定的类别。对于每一类用户,虽然很难描述他们所对应的确切标签,但是可以知道他们拥有很高的相似度,并据此预期他们对广告具有某种相似的兴趣。这样,通过应用聚类技术,并将得到的聚类结果用于点击率预估、广告排序与选择,通常能够带来明显的效果提升。常用的聚类方法有K均值、高斯混合模型、主题模型等,它们都属于非监督学习的范畴。

参考文献[46]是一个用非监督学习的方法挖掘用户兴趣主题的例子。该论文结合了用户在移动端的搜索内容和上下文特征(时间、地点等),利用主题模型对用户的行为数据进行建模。下图展示了两个挖掘出来的主题实例,其中左边的主题可以理解为在工作日的早晨搜索股票的相关信息;右边的主题可以理解为在周末的晚上搜索聚会的酒吧;IsRelevant表示该特征的取值与我们对主题的解读是否相关,这是一种人工的判断。可以发现,绝大多数的特征都是与主题相关的,说明主题挖掘的效果较好。

非监督学习挖掘用户兴趣主题.png

图 非监督学习挖掘用户兴趣主题

■ 点击率预估

点击率预估是效果类广告中最重要的算法模块之一。为了优化广告效果,首先要对广告展示之后的效果(即点击率、转化率等)有一个准确的判断,才能据此进行合理的选择与投放。在搜索广告中,一般通过广告的点击数量进行效果的评估和结算,因此点击率预估的准确性在效果优化中起到非常关键的作用。如果最终评估效果的指标是转化,那么还需要同时对点击之后的转化率进行估计。在很多场景中,实际的转化数据非常稀少,很难直接利用转化数据对模型进行训练,所以经常退而求其次,对二次跳转、加入购物车等行为进行建模。对转化、二次跳转、加入购物车等行为进行建模的原理与点击率预估十分类似,因此仅以点击率预估为例对算法流程以及常用模型进行介绍。

点击率预估可以抽象成为一个二分类问题。它所解决的问题是:给定一个请求以及与该请求所匹配的广告,预测广告展示之后获得点击的概率。标注可以从实际的投放数据中获得,在历史的投放结果中,获得了点击的记录标注为1,其余标注为0。下图为点击率预估模型中的一条训练/测试数据记录的示意[47]。左边的方框中列出了这条数据记录对应的特征,包括与用户(User tags)、上下文(Date,City,Ad exchange,Domain,...)、广告主(Ad Id)、创意(Ad size)等相关的特征。在训练记录中,如果这条记录最终发生了点击,则记录为1,否则记录为0;在预测时,我们需要预测这条记录发生点击的概率,即CTR(Click-Through Rate)。

一条点击率预估的数据记录.png

图  一条点击率预估的数据记录

点击率预估的公开数据集可以参见2014年Criteo(全球领先的DSP公司)在Kaggle上发起的CTR预估竞赛。训练集是连续7天的Criteo广告展示数据,里面包含点击和非点击数据,总共4000+万条,其中对负样本进行了不同采样率的采样;测试集是紧接着训练集之后一天的广告展示数据,总共600+万条,采样方式和训练集一致。

点击率预估主要分为样本采样、特征抽取与组合、模型训练、模型评估等步骤,下面分别进行介绍。

样本采样

在点击率预估时,通常要对负样本进行采样,这是因为在点击率预估的二分类问题中,点击数通常要远远小于总曝光数(PC端展示广告的点

击率一般在0.1%~1%之间),这将导致正负样本严重不均衡。如果点击率为0.1%,那么简单地将所有样本都预测为负样本,分类器的准确率也可以达到99.9%,这在一些分类器和训练算法中会存在问题。更重要的是,一条负样本所包含的信息相比于正样本来说较少,如果我们能够对负样本进行采样,就可以减少训练时间,或者能够在同样的训练时间中处理更多的正样本,从而在训练时间不变的条件下取得更好的效果。需要指出的是,样本在采样之后会改变数据的分布,因此在预估点击率时还需要将原始分布还原。

特征抽取与组合

抽取与用户、上下文、广告主、创意等相关的各维特征,并对这些特征进行组合。这一步听起来是一个比较简单的过程,但是实际上非常重要,里面包含着各种学问。尤其是在传统的机器学习模型中,特征工程的好坏将对模型的效果产生决定性的影响,并花了算法工程师大部分的时间。在点击率预估中,捕捉特征之间的交互非常重要,由于一些特征表达了广告的性质,另一些特征表达了用户的兴趣,因此需要学习到两类特征的交互,才能更加准确地对点击率进行估计。传统的机器学习模型无法直接捕捉到两类特征之间的交互,因此需要显式地进行特征交叉,即将任意两个特征组合起来作为一维新的特征。这样做可能会遇到维度爆炸的问题,由于我们并不知道哪些特征的交互最好捕捉,因此需要尝试所有可能的特征组合。实践中,经常采用梯度提升决策树和分解机对原始特征进行预处理。在梯度提升决策树中,每一棵决策树的每一条从根到叶子结点的路径可以作为一种显著的特征组合,然后将所有的特征组合作为逻辑回归模型的输入再进行训练(见下图)。这是Facebook在2014年发表的工作[48],后来被证明在很多应用场景中都取得了不错的效果。对于分解机来说,每个特征可以被分解成相同空间中的K维向量表示,它们的交互强弱可以通过向量的点积表达,因此将特征的向量表示作为逻辑回归模型的输入,可以帮助算法更好地捕捉到特征交互对点击率的影响。NTU CSIE ML Group在Criteo发起的CTR预估竞赛中,有团队同时利用梯度提升决策树和分解机进行特征工程,获得了竞赛的第一名。

Facebook的CTR预估模型.png

图  Facebook的CTR预估模型

进入到深度学习时代,深度神经网络为我们提供了一种更加自动地抽取组合特征的方式,可以直接端到端地对点击率进行建模和预测。下图是一种端到端的深度CTR预测模型,其中原始输入为最简单的独热编码,接着通过预训练分解机将输入表示为嵌入的向量,然后通过三个全连接层,最后应用Sigmoid激活函数输出点击率的预测结果[49]。

深度CTR预估模型.png

图 深度CTR预估模型

在实际的产品线中,我们可能不方便推翻以前的架构,全部改为利用端到端的深度学习模型对点击率进行建模。这时,将深度学习模型输出的中间结果当作高层语义特征,输入到传统的浅层机器学习模型中,通常也能够取得不错的效果提升。

模型训练

进行完特征抽取与组合,并选择一个合适的模型后,我们就可以对模型进行训练了。模型的训练与调优过程也蕴藏着许多经验与知识。例如,在线上进行实时点击率预估的时候,我们通常希望模型被全部加载到内存中,从而保证服务的响应时间。因此,需要在模型的稀疏性和预测效果之间进行一个折中,对模型的稀疏性有一定的要求。但是,如果采用L2范式对模型进行正则化,很难得到完全稀疏的结果,更好的方案是采用L1正则。这就要求面试者了解L1和L2正则化的特点和相关理论。例如,在编写深度神经网络模型对点击率进行建模和训练时,我们需要检验程序计算出的梯度是否正确,这需要对梯度验证技术有所了解。另外,由于深度神经网络模型的假设空间是非凸的,有时在使用随机梯度下降法优化时会陷入局部最优解难以自拔,这时需要对随机梯度下降法失效的原因进行深入分析,并利用改进的方法进行训练。

模型评估

模型训练完成之后,就需要对其效果进行合理的评估了。模型评估主要分为离线评估和在线评估两个阶段。离线评估的任务是设计合理的实验和指标,使得离线评估的结果和将来上线之后的结果尽量吻合。由于单个指标通常只能评估模型的某个方面,我们通常需要采用不同的指标来对模型的效果进行综合评价。以点击率预估为例,离线阶段常用的评估指标有Log Loss和AUC。Log Loss衡量预测点击率与实际点击率的吻合程度;AUC评价模型的排序能力,即获得点击的样本应尽量排在未获得点击的样本前面。一方面,我们希望预测的点击率尽可能精准;另一方面,又希望更有可能获得点击的广告被尽可能地排列在前面。所以要求两个指标都得到比较好的结果,至于哪个指标作为主要指标要视具体的业务场景而定。如果一个模型在离线评估阶段取得了好的结果,下一个阶段就是进行线上A/B测试了。这一环节在模型正式上线之前至关重要,因为即使一个精心设计的离线实验仍然与线上的环境有所差别。如何设计一个合理的A/B测试方案也是一个优秀的广告算法工程师必须掌握的。

■ 广告检索

广告检索阶段的任务是根据查询、受众等定向条件检索出所有满足投放条件的广告。例如,根据查询的模糊匹配,要求将与该查询文本在语义上相近的广告尽可能地召回,供下一阶段广告排序和选择算法使用。这一阶段主要以召回率为评估指标,因为被漏掉的广告在后面就没有机会被展示出来了。解决模糊匹配问题的经典方法是查询扩展[50]。通俗地讲,就是为当前的查询找到一组语义相关的查询,然后至少被其中一个查询检索到的广告都可以加入备选集合。查询扩展本质上是计算两个查询之间的文本相似度,或者求出给定一个查询的条件下生成另一个查询的概率。前者可基于主题模型、Word2Vec等算法实现,后者可利用深度神经网络等方法进行建模。

■ 广告排序/选择

不同的广告业务场景在此步骤中的决策方式是不同的。对于合约广告来说,我们的目标是满足合约中规定的每日曝光数量要求(当曝光数量不足时会受到惩罚),并不涉及点击率预估,因此广告的排序和选择问题可以被建模成带约束的优化问题。下图是使用优化问题的建模思路,左侧的每一个节点代表一个广告,右侧的每一个节点代表一类曝光机会。我们将流量按照特征划分为若干个分段,每个分段代表了一类曝光机会,每一个合约由于其定向条件的限制,只能在某些分段的流量上进行投放。于是广告的选择可以表达成为一个二部图匹配问题,优化的目标是使得总的投放收入最大化[51]。

合约广告的选择问题.png

图 合约广告的选择问题

假设dj为第j个合约的总需求量,si为第i类曝光机会的供给量,vj为第j个合约的单次曝光收入(CPM),xij∈[0,1]为第i类曝光机会到来时,选择第j个合约的广告进行展示的概率。目标函数如下,即使得总的投放收入最大化。

image.png

image.png

其中式(2)规定每个合约规定的总曝光量必须得到满足;式(3)表示每类曝光机会选择各个合约的总概率之和应该小于等于1;式(4)表达概率xij的非负性。对上述问题求解即可找到一个最优解,当然在总供给量不够的情况下,上面的问题也可能无解,这时需要在式(2)中添加一个变量uj,代表合约j的欠曝光量(under-delivery),且约束变更为:Σi sixij+uj≥dj。与此同时,在目标函数中也需要加入欠曝光量所带来的惩罚,具体的公式参照文献[51]。

在竞价广告的模式下,广告投放机根据点击率预估的结果对广告进行排序和选择。对于一个新上线的广告,如果没有充分的曝光,是无法对其点击率做出准确预测的。这时如果我们仅采用利用的方案,会倾向于选择其他点击率更高的广告,或给出一个较低的出价。长此以往,该广告很可能丧失足够的曝光机会,我们也永远无法对其点击率进行合理的估计。因此,我们需要对曝光量不足的广告进行探索,但仅仅采用探索的方案显然也是不行的。对于已有足够曝光量的广告,还是应该遵循点击率预估的结果进行排序、选择和出价。探索与利用是一对矛盾的主体,需要在其间找到平衡,才能达到最佳的投放效果,这也是强化学习所重点关注与解决的问题。在强化学习的场景下,一开始我们并没有足够多的带标注样本,需要与环境进行交互(投放广告),通过获得反馈的方式来改进模型,最终获得一个最优的投放策略。在程序化交易的场景中,需求方平台还需要对选定的广告进行出价,如何优化出价也是一个独立的研究课题,在这里就不展开了,有兴趣的读者可以参考文献[52]。

综上所述,计算广告的相关算法几乎包含了本书介绍内容的方方面面。要想成为一个优秀的广告算法工程师,除了熟练掌握业务流程之外,还要为各类算法、理论和方法打好坚实的基础,并在实践中不断掌握算法优化的经验。在面试中,关于理论、方法、实践经验等相关的问题都会涉及,所以也请各位读者能够认真阅读前面的面试题和解答,为以后的工作打下坚实的基础。

本文摘自《百面机器学习》,作者是诸葛越和葫芦娃,这本书目前收录了超过100道机器学习算法工程师的面试题目和解答,其中大部分源于Hulu算法研究岗位的真实场景。个人认为这本书非常值得一看,强烈建议大家买一本纸质书籍放在床头每天查阅,不久的将来您一定能成为机器学习领域的大牛!

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1198

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客
32132
07-14 294
07-12 236

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值