OPPO 广告召回算法通常与探求

上图左上侧局部是普通介绍系统流程,即先启动召回,再启动排序。左下侧局部是 OPPO 旧的召回架构,即先启动定向过滤,再经过截断战略,最后启动特性化召回。这里有两个疑问,第一个是由于功能疑问,不能做全量广告的特性化召回;第二个是由于特性化召回在截断战略的前面,这会造成特性化召回的成果遭到影响。因此咱们想经过工程和算法的变革,做到全量广告的特性化召回,优化平台全体的目的。另外,也宿愿能经过一个更好的多路召回机制,来优化整个广告播放的体验和生态。

上图左上侧局部是新的召回架构,最关键的变动是引入了 ANN,也就是近邻检索的才干。经过这个工程变革,允许了全量广告的特性化召回。

同时,咱们从新设计了多路召回机制,即“单主路加多辅路”召回机制。单主路指的是主路用“面向最终目的的分歧性召回”,这是一种 LTR 的方式。多辅路包括 ECPM 支路、冷启支路和一些其余支路。

ECPM 支路关键是为了补偿主路 LTR 无余。冷启动支路关键是对新广告启动冷启的搀扶。

OPPO 经过“偏心”和“效率”两方面启动冷启的搀扶。“偏心”方面,关于一些新广告,会有独立的流量供新广告启动随机的探求,这是一个偏心的战略。“效率”方面,则经过算法找出未来有后劲的新广告,每一次性恳求都会有专门针对这些新广告的召回配额。经过这两种方式,优化新广告冷启的成果。

还有一些其余支路,关键是面向某一类特定的疑问,或许是作为运营同窗的中短期运营手腕而存在的。经过切换架构及继续迭代,新召回架构带来了累积 15% 的 ARPU 优化,成果还是相当可观的。

接上去分享一下 OPPO 在主路召回模型上的一些业务虚践和探求,关键从四个方面解说:主路召回模型选型、离线评价目的树立、样本优化通常、模型优化探求。

首先引见一下主路召回模型目的,咱们将其拆解为三个方向:

上方三个方向确定之后,接上去看一下有哪些或许的召回选型。

咱们从 2016 年 Youtube 的经典论文看起,他们将介绍系统分红两个阶段,召回和排序。关于召回,他们以“点击且完播的概率”作为目的启动建模;关于排序,他们以“播放时长加权的点击率”为目的启动建模。

基于以上内容,可以推导出召回的三种或许选型:

这三种选型实质上对应着两种方案,第一种叫做“精准值预估”,对应上方第一个选型;第二种叫做“汇合选用”,对应上方的第二、三个选型。咱们应该选用哪种方案呢?

首先明白咱们对召回选型的诉求:第一,咱们宿愿能够满足一段期间的极速迭代;第二,咱们宿愿它的终点足够高。咱们首先对这两种方案做了一些优缺陷剖析。

“精准值预估”建模的目的是 ECPM。其长处是可解释性很强,同时还自然具备调价敏理性。然而其缺陷也很显著:首先,召回既要与精排坚持分歧,又面临少量未曝光的候选集,义务比拟艰巨;其次,不同的 OCPC 类型散布差异渺小,双塔模型学习难度很大;最后,召回阶段关于精准 ECPM 的诉求不够剧烈,因此义务的难度或许会超越实践的需求。

“汇合选用”建模的目的是精排头部的广告。由于间接面向后链路建模,其分歧性会很强。同时还自然具备智能兼并下游优化项的才干。当然,它也有缺陷:首先,预估值的可解释性比拟弱;其次,为了和 ECPM 打分性质坚持分歧,还须要独自做一些优化(如调价敏理性)。

咱们经过在线成果和优缺陷对比,选用“汇合选用”技术作为最终选型。

上图左侧就是 LTR 原型模型。结构比拟便捷,就是典型的双塔模型。只是它的样本稍微不凡一点,一条 pairwise 样本由多条样本组成。其中正样本指的是精排头部的广告,负样本是由大盘曝光的广告里随机采样获取的。Loss 驳回 Ranking Loss,这里就不细讲了。

经过原型模型和一些特色层面的优化,第一版上线就取得了 6% 的 ARPU 优化。在第一版之后进一步做迭代,就须要离线评价目的来指点优化。

离线评价树立关键分了三个阶段。在第一阶段,为了极速上线,咱们并没有专门去定制一个评价集,只是便捷地将样本依据期间划分红训练集和测试集。这种方式的存在的疑问是 AUC 太高了,到达了 0.98,很难进一步指点迭代。另外,由于召回是样本的艺术,当样本扭转之后,试验之间的 AUC 是无法比的。总的来说,这个评价集难以指点咱们继续优化,因此须要一个更分歧、更稳固的评价集,就引出了第二阶段的方案。

2、离线评价树立-全库评价

第二阶段,是离线 Faiss 全库检索。此时,正样本是精排 Top K 的广告,负样本是大盘曝光的广告,目的是 GAUC 和 Recall。Recall 指的是精排头部的 Top K 跟实践打分的 Top N 的交加数量,而后除以 K 求平均,这其实权衡的是对精排 Top K 的召回成果。其中有两个超参,第一个是 K,普通须要依据业务虚际状况去选用;第二个是 N,指的是模型的容错水平,通常上 N 越大,这个义务会越便捷。咱们离线发现 N 的选用须要与模型才干婚配,过于艰巨或过于便捷都不利于模型的迭代。

第二阶段方案还存在一些小疑问。首先是 Faiss 在保障精度的前提下,全库检索的效率还是比拟低的。另外,由于以前方案只用到了随机的负样本,难以做更精细的成果剖析。接上去引见第三阶段的评价方案,分段采样评价。

3、离线评价树立-分段采样评价

分段采样评价与之前方案最大的区别是负样本做了拆分,拆成了 Easy、Medium 和 Hard 三局部。Easy 负样本是从大盘曝光广告中采样获取的;Medium 负样本是从当次恳求进入粗排但没进入精排的广告中采样获取的;Hard 负样本是从精排尾部的广告中采样获取的。Positive 还是由精排的 Top K 广告组成。数量上咱们要确保 Easy 远大于 Medium 远大于 Hard 远大于 Positive。评价目的没有变,还是 GAUC 和 Recall。由于拆分了负样本,更利于咱们做一些精细化的剖析。

确定了评价方式之后,接上去就要去做一些样本的优化。

上文提到召回模型必定要具备调价敏理性,这里开展引见一下什么叫调价敏理性。关于整个广告系统来说,广告的出价是广告主投放广告的一个很关键的抓手,会影响广告的竞争力。咱们希冀广告系统全链路对广告主的出价都应该敏感。这个敏感是指:假设广告主的出价提高了,那么一切环节对这个广告的打分都应该提高。之前咱们的处置方式是间接把这个广告出价的分桶特色作为底层特色输入模型。但咱们发现随着广告主出价的优化,它的打分只要 5% 是优化的,这种敏理性是远远不够的,因此咱们构建了调价敏理性模型。

模型结构如上图左侧所示。全体看,其实就是在双塔模型的右侧,加了一个 bid_part 结构。这个结构实质上是由广告的出价 CPA 乘以特性化的权重获取 bid_logits。经过这种优化,广告的调价敏理性从原来的 5% 优化到了 90%,比拟合乎预期,同时在线 ARPU 也有 1% 左右的优化。

在调价敏理性疑问处置后,接上去咱们要做成果的优化。其实 Easy Negative 区分度曾经比拟好了,想要去优化成果,最便捷的方法就是引入后链路的数据,比如参与 Medium Negative 和 Hard Negative 作为反应机制。

前期系统数据上报只要 Hard 数据,所以就先参与 Hard Negative。参与 Hard Negative 之前咱们的预期是离线成果必需会有优化,另外召回的多样性也会有优化。这是由于以前样本只关注精排的头部数据,模型很有或许曾经记忆住了,不须要很强的特性化就能够处置这个疑问。而引入了 Hard Negative 之后,它就须要对不同的恳求做一些特性化的了解。从上图右侧的离线目的上也可以看到,Recall 和在线成果都有所优化。其中广告多样性有巨幅优化,约 8%,这是咱们十分想要看到的结果。

经过参与 Hard Negative 全体取得了很大优化之后,参与 Medium Negative 应该是穿凿附会的事件。由于这块数据系统还没上报,所以咱们想经过人工规定开掘一些 Medium Negative。经过剖析,咱们发现召回和精排的全体打分是分歧的,然而存在两种极其的 case。第一种是召回很多,然而简直从不竞得的广告。这些广告存在的要素是由于它们没有曝光,甚至没有进入到精排,因此他们很难成为负样本,模型就感知不到。第二种状况是召回的很少,但竞得率奇高无比,当然这种状况真实太少了,所以咱们疏忽了这种状况。

关于第一种状况,如上图左边这个热力求,横轴是竞得次数的分桶,纵轴是召回次数的分桶,都是从小到大。左下角圈起来的局部是召回很多,然而竞得很少的广告,占比不是很多,但值得试一试。通常发现离线在线成果只要强劲优化,并且人工开掘样本的效率真实太低了。因此,咱们思考是否经过模型自发现去处置这个疑问。

之所以会想到这一点,是由于只管 Easy Negative 全体区分度很好,然而外面还是存在一些比拟难区分的样本,只是这些样本的占比比拟低而已。因此,假设咱们让每个正样本都采样海量的 Easy Negative 样本,模型是不是就能够自发性地学习到那些比拟艰巨的负样本呢?是不是就相似于 Medium Negative 呢?从这一个角度看,这相似于对比学习。

为了到达这个目的,咱们有两个方法。第一个方法就是间接往样本里加 Easy Negative,但疑问是计算跟存储的老本都会线性增长;第二个方法就是间接在模型里做 in batch 负采样,这种方案没有计算和存储的老本,因此咱们优先思考这个方案。

Loss 也有两种方法,第一种是用 LTR Loss。但在咱们的成功中,随着每条 pairwise 样本中样本数的参与,LTR Loss 的计算量会呈指数级增长,所以咱们想优先思考第二种方法:Pointwise Loss。这个 Loss 的计算量随着样本数的参与呈线性增长。同时,由于 Loss 计算量全体在模型训练时占比拟小,对全体耗时影响不大。所以咱们最终选用了 Pointwise Loss。

5、大规模多分类处置选型简介

确定了 Loss 的方案,详细应该用哪种 Loss 呢?在继续引见之前,须要先解说一下大规模多分类的背景常识。

召回可以定义成一个超大规模多分类的疑问。它的负样本就是不可胜数的广告,正样本就是精排 Top K 的广告。普通的多分类,其实就是做一个 softmax,其分母就是一切负样本的打分的累加。但关于大规模多分类来说,这样做会使分母的计算量过大,简直是无法行的。针对此疑问,业界有两种方法。

第一种方法是将多分类转化成二分类,如上图左侧局部。转化成二分类之后,其实是转化成了 NCE 疑问。实质上是把以前模型的预估值 F(x,y) 批改成 G(x,y),两边多了一个 Log Q 的采样概率批改系数。但这个值不好求,比拟偷懒的方式,是间接让 G(x,y) 近似等于 F(x,y),而后间接放到二分类 BCE Loss 里,这叫做 NEG,也就是 Negative Sampling。NCE 的好处是随着负样本的参与,从通常上能够迫近大规模多分类的成果。而这个 NEG 通常上是有偏向的。

第二种方法就是继续坚持多分类的方式。和第一种方法很相似,区别是要把 G(x,y) 放到 softmax 的 Loss 里,同时负样本间接采样。与 NCE 一样,批改的 Sample Softmax 通常上能够迫近大规模多分类的成果,而不批改 Sample Softmax 则是有偏的。然而,由于其操作便捷,未批改的 Sample Softmax 类方法也会有一些公司经常使用并取得收益。

在确定经常使用 Pointwise Loss 方法后,咱们先尝试了比拟便捷的 Negative Sampling。样本是 in batch 负采样,Loss 是 BCE Loss,最后将原来的 BPR Loss 加上这个 BCE Loss 做融合。经过离线试验发现,假设只经常使用 In Batch Negative Sampling,成果是显著降低的。然而假设融合 LTR 和 In Batch Negative Sampling,成果则有强劲优化。

咱们感觉很纳闷,加了几百个样本,成果居然只是强劲优化,这是不合乎预期的。因此咱们继续驳回了刚刚提到的 Sample Softmax 方法,还是在 In Batch 内负采样,Loss 是不批改的 Sample Softmax Loss,如上图右侧公式所示,这有点像 infoNCE,因此咱们也参考 infoNCE 引入了温度系数的概念。成果如上图左下侧所示,假设只经常使用 In Batch Sample Softmax,那么成果跟旧的 LTR 基本持平。假设融合 LTR 和 In Batch Sample Softmax,成果则有大幅度的优化。进一步伐整温度系数,优化则愈加显著。经常使用调整过温度系数的版本后,ARPU 优化了将近 2%,合乎预期。不过这里要稍微留意下,随着 In Batch 数量的参与,Medium 和 Hard 的成果会有一个 Trade Off。

关于 Sample Softmax 成果优于 NEG,咱们是纳闷的,于是启动了一些搜查,发如今不少论文和文章里,也都有提到这个现象,看起来并非个例。因此大家后续对大规模分类疑问,或容许以优先思考 Sample Softmax 类方法。

7、场景联结训练独立服务

最后讲下联结训练,这实质上是个多场景的疑问。

在 OPPO 场景,由于媒体属性、广告主志愿等要素,广告在不同媒体上的散布是有较大差异的。对此,咱们有以下几种方案选型。

第一种方法是齐全独立。每个媒体独自建模、训练、预估。然而多个模型优化和运维的老本比拟高,另外也没方法学习媒体之间的特性。

第二种方法是齐全一致。关键是负样本共用,联结训练,在服务的时刻坚持只用一个模型,然而媒体之间的差同性很难被表现进去。

还有一种方法是联结训练和独立建模。不同媒体的样本是独立的,但训练时还是联结训练。模型结构如上图左侧所示,不同的媒体都有一个属于自己的 ad tower,一切媒体共享 user tower,此时不同媒体的 ad embedding 是独立的。这种方式既能坚持媒体的特性,也能学到媒体的特性,并且也能够一致地优化和迭代。这种方式在咱们的一些小场景上取得了收益,目前正方案在大场景中推动。

上方是关于样本优化的便捷引见。可以看出,召回确实是样本的艺术,更详细的说,是负样本的艺术,咱们很多上班都是围绕着负样本优化来做的。然而样本只能选择模型的下限,详细怎样去迫近这个下限,还须要做一些模型的优化。

上方到来模型优化探求局部。关键包括两局部,第一局部是关于双塔交互的优化,第二局部是关于泛化性的优化。

受计算复杂度解放,召回广泛经常使用双塔结构。然而双塔结构的缺陷就是 user 和 item 交互太晚,造成消息损失比拟大。针对此疑问,业界有一些探求上班,便捷归类如下。

第一类是双塔的交互时辰不变,优化交互向量的消息量,比如 SENet 或许并联双塔。另外一个是将双塔交互的时辰提早,比如 DAT、IntTower 和 MVKE。还有一种是模型不变,经过特色去交互,比如物理含意相反的特色,让其共享 embedding,这也是一种隐式的交互。接上去咱们会从这三类外面区分挑一个咱们在通常中取得收益的模型来详细引见。

2、优化交互向量有效消息量-SENet

第一个是 SENet。SENet 最开局关键运行在图像畛域,它是经过对特色做一些特性化的加权(有点相似于特色 attention),突出关键特色压抑不关键特色,来缓解前文中提到的“交互向量消息损失过大”的疑问。其结果如上图左侧所示,SENet 在咱们的场景中取得了显著的收益。

更关键的是,咱们发现 SENet 的特色权重和特色关键性高度正关系。后续咱们很多特色成果或许关键性的剖析,都间接将 SENet 的特色权重作为参考。

第二个是美团的 DAT,中文名为对偶增强的双塔模型。它关键的优化点是把向量交互的时辰提早。优化内容关键蕴含两局部,第一个局部叫做 AMM,第二局部叫 CAL。

这里关键讲下 AMM。美团的双塔由 query 塔和 item 塔组成。在 query 塔新增一个增强向量,即上图绿色局部,希冀跟 item 塔最后一层 embedding 尽或许相似。同理,在 item 塔也有一个增强向量,跟 query 塔最后一个输入 embedding 尽或许相似。经过这种方式,让双塔交互增强。

试验发现,参与 AMM 特色后,成果有显著的优化。同时,假设在 AMM 特色输入时,优选下特色,其优化将愈加显著。这个优选特色的规定是:用户侧用相对泛化的特色,而 item 侧用更稠密更详细的特色。咱们猜想优选特色成果更好的要素是用户侧的增强向量其实不须要那么强的特性化。

最后一个就是特色的隐式交互。在双塔模型里的 user 塔和 item 塔往往存在一些物理含意相反的特色,共享这些特色的 embedding 比间接训练成果更好。在咱们的场景外面也有这种特色,叫做语义标签特色。这种特色的开掘方式如上图左侧所示,咱们会提取广告的语义消息,并且输入到大模型里,打上一些标签。而这些广告的标签会依据广告与用户的交互行为被赋予用户,所以用户和广告身上都会有这些标签。咱们在模型训练的时刻,经过上图左下侧所示的方式,使 user 塔和 item 塔的语义标签共享 embedding table。试验发现,这种方案的离线目的有强劲优化。

主路召回作为召回的外围组成局部,承当着处置“大局部疑问”的义务。但由于广告、媒体、用户、期间上的一些细分粒度往往有差异,造成学习这些差异的特性和特性比拟艰巨。详细来说,从广告的视角有新老广告;从媒体的视角有不同类型的媒体;从用户的视角有高活用户和低活用户;从期间的视角有日常、周末、节假日、双十一。实质过去说,这里须要处置的疑问是“混合散布下的差异化精准建模”的疑问。

关于这个疑问,业界也有一些探求。有的是间接增强特性化的特色,比如 Youtube 的 BiasNet,就是间接用一个 Bias Tower 穿透到最底层;还有多专家方案,比如腾讯的 MVKE 和 Google 的 CDN;还有灵活权重,比如快手的 POSO 和 PPNet;还有一些融合类的方法。接上去引见咱们在通常中取得了必定收益的两个方法,区分是 CDN 和 PPNet。

首先引见一下经常使用 CDN 的背景。最开局为了减速迭代,主路模型除了在主路召回上用,也在新广告召回支路去做冷启。这就要求主模型统筹新广告的排序成果。然而在主路模型的训练集里,新广告的占比必需是比拟少的,同时新广告的特色跟老广告有显著的差异,所以新广告的一些消息和特色会被淹没,新广告的成果得不到保障。因此咱们参考了 2023 年 Google 提出的 CDN 模型,希冀优化新广告成果。

CDN 结构如上图左侧红框所示,实质上是把 item 特色拆成了记忆类特色和泛化类特色,而后经过两个 expert 去学习,最后经过一个 Gate 门控对这两个 expert 做加权融合。记忆类特色关键包括 item 的稠密类特色,泛化类特色关键包括统计类特色。线上试验证实,新广告冷启效率有 10% 的增长,十分可观。

上方引见多场景优化,除了上文提到的样本层面的优化,还有模型层面的优化。

首先讲下背景。OPPO 有很多场景类型,比如文字消息流、视频流等等。在将这些场景联结训练的时刻,如何统筹其特性和特性呢?

咱们参考了快手的 PPNet,成功方式如上图左侧红框所示。实质是经过特性化门控网络,对原始的模型,做一个灵活的特性化加权,获取一个千媒千面的模型。经过这种方式,咱们发现成果是有优化的。

然而有一点须要留意,假设间接将媒体的 ID 输入到 Gate 门控,优化是比拟强劲的。假设经过专家常识对这些门控的输入做一些聚合,那么 PPNet 就开局浮现它的威力了。聚合的方法是把属性相似,或用户行为相似的媒体聚合。最后,假设对不同的媒体驳回不同的 batch norm(即 DBN),模型的功能会进一步优化。

前文中引见了往年 OPPO 召回的关键关系上班,接上去分享一些咱们的展望。

首先,只管 ECPM 支路比拟便捷,然而 ECPM 支路还是能够对 LTR 主路起到补充作用,因此咱们后续还会在 ECPM 支路上做一些上班。

其次,如今广告介绍全体曾经走向了广告商品化、创意智能化。在这个趋向下,召回和排序的分工也会出现一些变动。当然,召回辅佐下游找到价值最高的广告,这一个定位是不变的。

以上就是本次分享的所有内容,谢谢。

Q1:假设召回的算法太复杂的话,你们是怎样思考的?

A1:咱们不能要求召回算法复不复杂,由于这取决于你想处置的是什么类型的疑问。举个例子,如今 OPPO 召回的定位是“单主路加多辅路”,主路要处置大局部的疑问,那主路算法或许就复杂些。有些传统公司的召回是“多主路召回”,比如热度召回、统计召回、兴味召回等等叠加,那每一个路召回或许都比拟便捷,算法也不须要太复杂。

Q2:让召回去学精排,会不会造成召回愈加局限性呢?

A2:假设把局限了解为 SSB 疑问,其实召回不时存在这个疑问。之前的 gap 是从召回的全量候选到曝光候选。如今假设让召回去学精排,那如今的 gap 就是从全量候选到精排的 Top 局部广告。这种方式的 SSB 会缓解一些,SSB 疑问是要常年去探求处置的。

Q3:离线评价目的 Recall 公式里的 N 和 K 是如何确定的?

A3:不同的场景中,N 和 K 的取值是不一样的。

K 得依据详细的业务场景来定。比如在消息流,普通咱们就看几个广告,那 K 或许取 1-3;在下载商店,一次性性会展现很多 APP,那 K 就会很大,甚至取上百个。

N 的取值则与模型成果和 K 无关,N 越大义务越便捷。假设义务太便捷,Recall 十分高,比如 0.99,那么任何优化都很难离线表现出成果;义务太难,Recall 十分小,那很多优化也或许无法表现进去,就像让小在校生去参与高考,大家都 0 分。详细的 N 和 K 的组合,须要自行依据场景和模型调理。

Q4:在召回阶段样本设计时,便捷和艰巨样本比例是怎样调控的?

A4:召回是在全量候选集外面找出用户或许感兴味的广告,这就选择了在样本设计时,便捷样本数量要远远大于艰巨样本数量。

便捷和艰巨样本的比例,是经过通常去确定的。比如 Facebook 的论文中提到,便捷和艰巨样本的比例值是 100 比 1。咱们的场景没有那么迥异,但也差不多。

Q5:召回离线评价为什么用 AUC?你们的召回离线评价和线上成果是分歧的吗?

A5:在召回阶段,AUC 相似一个护栏目的,是为了确保召回里的排序全体没有大的散布疑问。在此基础上,咱们尽量优化 Recall。另外,咱们大局部的离线目的和在线目的全体的趋向是分歧的。当然,咱们无法保障离线和在线优化的百分比是齐全相反的。

您可能还会对下面的文章感兴趣: