搜狗网盟CTR预估的进化之路

【转】http://wenda.chinahadoop.cn/question/931

搜狗王兴星——网盟CTR预估的进化之路,DCon2015文字实录
搜狗网盟CTR预估的进化之路
今天最后一位嘉宾我们也老朋友了,搜狗的王兴星,王兴星现在是搜狗自身研究员,负责搜狗的网盟算法组,他曾经获得百度推荐大赛全国第一名,品友实时竞价算法大赛的全国第一名,KDDCUP2012全球第三,属于专业的比赛型选手,这个这么说不太合适,因为他现在所的研发的CTR预估系统,在搜狗的PC和无线网盟、DSP多个产品线,多次获得搜狗年度年度最佳新人、搜狗技术犀牛,搜狗技术犀牛是什么意思,你们可以再给我们解释一下,广告技术部MVP等重要奖项,那么他今天带来的题目是《搜狗网盟CTR预估的进化之路》,好,欢迎王兴星。

王兴星:感谢小象,谢谢刘老师,然后我先来解释一下犀牛是一个什么玩意,每个公司都可能会有一些技术相关奖项,搜狗技术相关的奖一个是犀牛奖一个是黄牛奖,奖励做出的技术上面有一点不一样的东西,黄牛主要奖励一些工作量比较饱满的。今天我讲的题目是《搜狗网盟CTR预估进化之路》。
搜狗网盟CTR预估的进化之路
互联网简史、互联网发展大概可以分为这样几个阶段,第一个话在门户阶段,第二的话是搜索引擎阶段,因为我们知道像百度刚开始都是替一些门户网站做这些搜索功能。到后面有很多网垂直类的网站起来,再到我们现在非常火的这种社交媒体,这个其实就互联网发展历史,其实互联网发展历史对应我们互联网广告发展的历史。
搜狗网盟CTR预估的进化之路
在这种门户阶段典型的话,我把杂志上的那种横幅广告,等于说形势就差不多,到搜索的话就是很自然的话,就在搜索广告,然后很多中小网站起来之后,他们就有能量变现的诉求在里面,其实联盟广告的话,其实就是帮中小网站解决流量变现的问题,随着社交起来之后,像很多社交类型的广告,比如说野生广告、Feed流广告也都随之起来了。
搜狗网盟CTR预估的进化之路
搜狗的产品线可能大家都听说过,是一个叫3级火箭,应该是说输入法推浏览器,浏览器推搜索,其实从整个公司的产品层次的话,其实也分为这样三个等级,一个是搜狗客户端产品,包括像搜狗输入法、搜狗浏览器,然后再此基础之上会构建搜狗的搜索引擎,包括我们PC搜索和无线搜索,在搜索基础之上可会有搜索广告,包括像PC做的广告和无线搜索广告,然后搜狗一个优势就是拥有很多的数据,这些数据也可用来为我们联盟广告变现。
搜狗网盟CTR预估的进化之路
在座可能有很多不是跟广告相关的,我大概介绍两种目前常见的广告形态,一个是搜索广告,搜索广告大概是这样的逻辑,就是用户在搜索一个Querys之后,搜索引擎会返回,一堆搜索结果,如果这个Querys它的商业价值比较高的时候,我们在前面几条会是广告,插入的会是广告,那入户点击了这个广告之后,搜索引擎会对我们的广告主进行计费。联盟广告与搜索广告不是用户输入一个Querys,而是用户在浏览一个网页的时候,才去点击的一个广告,这个时候联盟广告或者说其他的一些广告的这种形态吧,会对我们的广告主进行计费,下面我们画了目前几个常见的广告形态,在左上角这个我们把它称之为叫搜索词广告,就是用户以前搜索的历史Querys,针对搜索词广告,我们会有这样的一个产品形态的优化,它在外观就比较不太美观一点,然后一种产品形态的话,我们把这种纯文字变成图文结合的这种方式。
搜狗网盟CTR预估的进化之路
下面的话,有这种其他的一些产品形态,包括像我们看到左边两边对称一种,我把它称之为对联广告,这是联盟广告一些常见的产品形态。在影响收入方面的话,大概有哪些因素影响我们广告的收入呢?
搜狗网盟CTR预估的进化之路
我大概做了这样一个拆解,以搜索广告为例,一个广告平台的收入大概可能以搜索广告为例,大概可以拆为以下几个方面,第一个的话就是拼音,就是说你这个搜索引擎可能有多少是拼音,这个是取决于你的WebSearch,在联盟广告里面是取决于你有多少个站点。第二个方面的话我们把它称之为与检索相关的,第一方面叫PVR,就说你这个广告里面有多少能够出你的广告,这个主要由两方面相关,一个的话就是说,与你的广告部相关,如果说你的广告部越来越丰富的话,你的PVR会越来越大。第二个方面其实跟你的检索技术相关。检索相关的第二个的话就是说ASN,就是你每一次展示的时候,它平均广告的条数,这是与检索相关,除此以外的话,就是一个很重要的数据,也是我们今天要讲的,就是跟我们的CTR就是Click Through Rate。
搜狗网盟CTR预估的进化之路

我们可以看出,CTR它是影响广告收入的一个重要的方面,除此以外CTR还一些其他的意义,比如说对于网民来说的话,也是非常影响用户体验的。对于广告主来说,因为我们是在竞价广告里面,GSP是一个非常重要的手段,GSP的话大家可以看一下,下面这个公式,就是CTR是里面的一个必要方面。
搜狗网盟CTR预估的进化之路
CTR用预估这样一件事情应该怎么样做呢?我大概画了这样一个判断,有一个网民来的时候,我们有一个CTR模型,预估去一个广告它对应的CTR,然后再乘以这个广告的Bid,就是这个广告CPM然后我们去进行排序,就得到这个广告的这样一个序,我们在做CTR工作的时候,网民浏览的一个一面,它会产生一个PV,当他点击之后,我们会把它点击记录下来,这样的话我们就有两种类型,一个PV日志,一个Click日志,我们把这两个日志按照我们PVID进行分析之后,我们就可以得到一个用户他是点了这个广告还是没有点这个广告,就得到我们的Sample,在此基础上我们会有Feature这样的工作,又得到我们Feature之后,又有了label我们就又有了收入,有了收入我们就可以进行CTR,训练就得到我们的Model,然后上线,这样的话就是一个CTR、Model这样的一个训练的序列的这样一个流程。
搜狗网盟CTR预估的进化之路
在CTR里面有三个重要的框架,一个就是我刚才说的instence我们怎么训练,这是我们的训练框架,第二个就是说我们需要做的feature怎么可以高效的进行,这里面有一套框架支持,这样的事情,然后我们在做实验时候,包括我们模型实验,我们怎么样有一套框架能够支持我们快速的去做实验迭代,我们需要有一套实验框架。
搜狗网盟CTR预估的进化之路
这个是传统的,也是我们以前的做CTR的预估的最经典的方法,就是采用一种Batch Learning 的方法,这就是我们以前的大概规模,每天PV在10亿的量级,每个PV里面的话,就一个广告框里面可能大概有4到5条这样一个广告,一个广告框里面,所以说一天的样本数的话是在百亿这样一个量级,我们每次训练的话会用一个月的数据,应该是在千亿这样一个量级,训练我们是是采用一个大规模的MPI的实现,因为我们知道在BATTCH里面一个最重要的操作,其实是把所有机器上面的梯度进行累加,一个高效的实现方式,就是我下面画出来的这AllReduce。AllReduce这样一个背后的核心思想就是说,我如果想把假设7亿个结点上面的,每个规点进行相加的话,会分为三个阶段,第一的话我会把每个节点现在成这样2X数结构,第二的话我会有一个pass up纷这样一个过程,就比如说最左边的这两个节点,一个7一个5,他需要把自己的值往前传,有这样一个pass up操作,传送给他们的一个副节点,第一的话截到它的左节点和右节点,那个传送过,他会与支撑相加,他会得到13,他会继续往上传,直到传到rut(音)结点就可以拿到全局的这样的一个求和,这是第二步,然后第三步的话他会有一个pass down这样一个操作,pass down这样一个操作,每一个节点会把它自身的值传给它的子节点,经过这三步之后呢,整个集群上面所有的节点都会知道每个节点上求和这样一个结果是多少,如果说我们就处理这样整个集群这样一个个数,就可以知道整个集群的一个平均值,是传统的值做集群的任何一个实现方案,但是这样做的时候,会有什么样的问题,第一个问题就是说,我们的数据量很大,消耗的资源很多,然后随之带来的问题,就是说以前我们在做这么大数据量的时候,可能迭代一次可能是七八个小时,所有这带来的问题就是说,在这样的消耗资源的情况下,我们做实现就会做的很慢,比如说我们一天只能做一个实验,我们怎么样去做这样一件,去优化这样一件事情呢?
搜狗网盟CTR预估的进化之路
我们主要写得这样一套流失的CTR历史框架,我们从前面开始看,这个是我们线上的所有的最左边,然后我们会有实时的Collector,会从线上把我们的PV跟Click同时把它给抓下来,抓下来完了之后,Click会做两个log的join完了之后会把Sample发送给我们后面的这样一个流失训练器,流式训练器背后,会有Parameter Server,Parameter Server干什么事情呢?第一个就是会接送我们这种流失训练框架,它发送过来的这种Parameter的,这是它的第一个功能接受参数更新,第二个实时CTR预测,通过这样一套框架,我们就可以支持我们CTR的反馈从以前的天达到秒级别的,对这是一个方面。
搜狗网盟CTR预估的进化之路
第二个方面就是说,我们在训练框架里面,就完全取代了原来的只采样online去做这样一件事情,带来好处就是说我们不需要再做这种迭代的计算而是one pass下面的话我们列举了我们做过的一些模型,大概分为三类吧,第一个的话就是微软为代表的Ad-Predictor,第二个就是Google这样的FTRL,第三类的就是搜狗在一些开源算法上做的一些优化,OLLR简称为Online Latent Logistic Regression。
搜狗网盟CTR预估的进化之路
这个团队如何提高效率和协作,然后第一个就是我们在做Feature engineering的时候我这样提高它的效率,我们有一套这种这样一套框架,团队怎样去做实验,我们会有一种实验框架。
搜狗网盟CTR预估的进化之路
我们首先来看一下特征框架,特征框架的话它需要满足这样几个要求,一个的话它要要求一致性,这个是它最重要的一个性质,就是说我们线上它在predict的时候,它用的的这个模型,它需要跟线下的数据一致,这是最重要的一个。我们需要保证的这样一个事情,不然的话如果不一致的话,我们可以想象它会出现什么问题,就是说你在线下训练时候的数据与你线上应用不一致,是由于代码错误假设不同的接口,这样的话就会使得你线上一致的时候,很多东西都是你没有见过的,它的效果会表现的非常差。

另外的话就是重复计算的问题,因为我们假设有ABC三个这样的特征,假设B和C同时依赖于A,如果说我们不做这样多层结构的时候,他们依赖于A就有可能会被计算多次,我们如果说做一个多层结构,就可能A只被计算一次,然后B和C再依赖于A,它们就不需要于A再进行一次计算。然后第三个的话,就是说我们需要做一些特征的分析,比如说特征之间的话会有一些依赖,然后我们可以在线上配置的时候,我们可以不需要去管这些依赖,而且是我们的框架会自动的帮我们去分析特征的依赖,把它形成一个带,或者是一个存在环。然后还有一个特点的话,就是我们可以实现动态的配置,就是说我们这个特征它是使用什么样的方法,我们只需要通过文件去配置就可以了,而不是就是说我们需要重新写一套代码,去做这样的事情。 然后最后也是比较重要的一点,就是我们这样一套自动框架的话,它是在上线的时候我们是不需要重启,通过加载实验就可以了。
搜狗网盟CTR预估的进化之路
然后我截了一个图,然后我们大概可以看一下,特征框架我们的特征框架刚才是什么样子的,然后最上面的话,是我们Sample的结构,这个里面的话,被分为两种,一个是后面带一个Log,一个是名,名的话是表示一个案子级别的这样一个特征,一的话是代表一个PV级别,PV级别的特征它只需要提取一遍,比如说一个广告贩子你有四个广告,但你跟这个PV相关的你只需要提取一边,下面的话是我们举得一些提取的例子,比如说这个的话,就是说同一组Feature它们前面的前戳可以是一样的,然后这一项是什么呢?就是我们规定的每个它最多可以提一个这样的特征,那最后配置这个Feature,它对应的提取方法,再后面是配置它所依赖的Sample以及它依赖的Feature的序,整个框架的话会自动去解析,它所依赖的序,以及Feature之间的依赖性,最后的话是给我们out put做这样一个规定,就是我们的特征框架,
搜狗网盟CTR预估的进化之路
最后的话就讲一下我们实验系统,这是我们通常做实验的一个过程,我们做实验时候首先是设计时间,然后我们会有线下的一个,在最后的话,我们会进行上线,通过线上的结果来迭代,去做我们的实验,那这个时候我们就会有这样一个需求,比如说刚开始,我们去挖了一个新特征,我们怎样在线上的时间,刚开始的时候比如说我们有100各用户,我们可能抽取5个用户去做基线,然后再抽取5个人去做实验,然后我们线下会有一套统计流程,把这样的两个对比结果,就把它抽取出来,然后如果说效果是好的,我们就认为是这样一种正向的实验。
搜狗网盟CTR预估的进化之路
在这个过程当中的话,我们就会遇到一些问题,当然问题可以分为这样三个方面,第一的话就是我们流量切分的问题,比如说像是第二种实验的话,我们可以用随机的流量去切分,再往难一点的话,可能会根据比如说我们猜这个用户他喜欢什么样的广告,我们可以根据用户的浏览历史去猜,或者根据用户目前浏览的上下文去猜,这个时候的话,就要求我们进行流量切分的时候,可以支持用户的流量切分,也支持网页的流量切分,然后除此之外的,我们可能还会有一些复杂的业务逻辑。
搜狗网盟CTR预估的进化之路
比如说我们先做一个样子,我们需要针对与其中的十个位置去上我们的广告,这就会有一个比较复杂的流量切分,然后流量的切分的话就会有这样三个复杂的要求,然后此外的话,做实验的时候一个最根本的要求就是要保证基线和实验进来的能量的同质的,要保证这两者之间的一个可对比性,除此以外流量怎么使用,就是我们有时候会做一个新功能一个开发,这个时候我们通常会切比较小的流量,比如说1%去做功能的验证,然后第二流量使用的要求就是我们会有一个固定流量,要求切5%,然后实验证明之后再扩大10%。然后第三个就是说我们假设不同的人做同一个实验,在做实验的时候,在同一个时刻我们是相互不干扰的,这个大概是我们做实验框架的要求,以前的我们这边是简单的根据机器切,但是我们会发现有各种各样的问题,第一个典型的问题是流量不够用了,第二是假设这两台机器做对照,就会存在于两个不同的机房,两者之间就会存在一些评选差异,如果说评选方面存在差异话,就会天然的话两者之间评选之间就会有一些差异,如果说假设它差异是1%,如果说我们策略优化小于1%,就有可能会被这样的这对于策略来说的话是非常可怕的,然后这是我们后来的一套实验框架,这是参照酷狗做的一个实验框架,如果城与城之间的话是相互不干扰,就是说假设,然后上面可能有ABC三个策略,这层完了之后呢,我们会把上面一层的策略随机到下一层的时候,这就保证了在下一层的时候它流量又是公平的。假设我有三层,即使我有能量的话,就是被扩大了3倍,这样的话它的利用率就更加高,然后我这一块就讲就这些,大家有什么问题。