跳到主要内容

MOBIUS Towards the Next Generation of Query-Ad Matching in Baidu’s Sponsored Search

整理一下百度凤巢最近发表的一篇广告检索相关的论文,本文提出了一种新的架构来统一之前召回和rank分开的架构。

一、Motivation #

image
传统的广告推荐系统,一般采用2-3层的漏斗架构,最底层是matching层,从上百万的广告候选集中召回跟用户query语义相关的广告;然后会有1~2层rank层,对广告进行ctr预估排序。为什么会有2层,一般来说是为了解决性能问题,做成粗排和精排,粗排大部分采用双塔结构,性能上比精排(全连接结构)好,能够预估上千条资源,然后取top的上百条候选集走最上的精排。

然而,这种架构有一个问题:match层跟rank层的优化目标不一样。match层主要侧重优化相关性,而rank层主要优化商业指标比如ctr。这样会导致match层召回的很多广告cpm不高,不会被展现,从而影响商业收入。

image
本文提供了一种思路是把召回层和rank层融合,做成一层(mobius系统),兼顾相关性和商业指标。

二、Challenges #

2.1 模型对于长尾样本的泛化能力不足 #

百度rank层的ctr模型采用的是大规模DNN,有上百亿、千亿级别的特征,侧重于memorization,而对于长尾的样本泛化效果不好。 mobius系统最开始尝试直接用之前的rank层ctr预估模型对样本进行预估,发现在抛开之前match层的相关性束缚后,模型容易预估出高ctr但相关性很差的结果,论文中举了一个case来说明这个问题。

image
假如用户分别输入了Tesla model3white rose两个query。 传统多层的漏斗,首先召回时保证一定的相关性,由于Mercedes-BenzTesla model3相关性很高,就会在match层被召回;然后通过rank层预估ctr很高,最终展现的概率就达,从而Mercedes-Benz能累积到很多日志。 在用mobius进行ctr预估时,这时预估的候选集就不只是之前rank层所面对的经过挑选的几百条了,而是百万级别的候选集,这里面肯定有很多候选集是处于流量长尾的,即query-ad pair展现次数很少。比如用户的querywhite rose和adMercedes-Benz可能之前没有展现过。但是如果query和或者ad中有一个频繁出现,那么ctr模型也会认为这个query-ad pair的ctr很高,那么Mercedes-Benz可能跟很多query组合都会被认为ctr很高,从而针对white rose系统也会召回相关性没那么高的Mercedes-Benz广告

2.2 广告检索的性能问题 #

传统多层漏斗架构的优势就是通过多级筛选,逐步减少每一层要预估的资源条数,从而缓解性能问题。如果mobius要直接从百万级的广告中进行检索,那么在线检索性能就是需要考虑的问题。

三、Solutions #

3.1 Active-Learned CTR Model #

作者认为模型的主要的问题是怎么让模型识别出低相关性且高ctr的query-ad pair作为bad case。为了学习出bad case,那么就需要人工构造出bad case的样本,再通过在模型的目标函数中加上bad case率这个目标来进行学习。因此,整体分成了2个部分:人工构造样本和模型学习。

3.1.1 样本构造 #

image
结合图中的关键步骤进行说明: 1.拿到一个batch的训练样本 2.拆分出query集合和ad集合 3.基于两个结合做cross join,生成样本 4.用相关性模型(之前的match阶段的模型)对所有生成的样本进行相关性预估 5.设定一个相关性阈值,把低于这个阈值的样本认为是lowRelAugData,用ctr模型进一步进行ctr预估 6.从低相关的样本中,根据ctr预估值筛选出高ctr的样本做为bad case。常规的做法是手工设定一个ctr阈值,选出高于这个阈值的样本。但是为了balance the exploration and exploitation of the augmented data,这里实现了一个采样器,通过采样选出高ctr样本,保证了一定的探索性。 7.把人工构造的bad case样本跟常规训练样本合并,放出到trainBuffer 8.进行模型训练

3.1.2 模型学习 #

image
结合图再描述一遍,这个图的观看顺序是先看绿色的线,再看红色的线。 绿色的线从底部开始看: 1.获取样本 2.构造低相关性样本 3.样本过一遍模型的ctr预估 4.data sampler选出bad case

再看红色的线: 1.bad样本跟正常的点击和未点击样本放到一起,因此所有样本有3种label(click\unclick\bad case) 2.网络是双塔结构,quert和ad分别各一个网络,到最上面是96维(32 * 3) 3.分别做cos后果softmax,拟合3种label 4.最后学习出的pr(click)可以用于线上ctr预估,pr(bad)可以用来过滤ctr高但相关性差的样本

3.2 Fast Ads Retrieval #

image
线上实时检索为了处理数百万条候选集,必须采用近邻检索的方式。 常规的做法是左边那条通路: 1.user和ad向量生成后做向量压缩 2.通过ann检索 3.检索后结果再根据business weight进行调整

image
本文的做法是把business weight调整融合到ann的cos检索中,同时采用了Optimized Product Quantization (OPQ)的压缩方案,整体在耗时和召回覆盖率上有较大的提升。

四、Experiment #

image
作者做了模型效果的评估,相比原始点击和未点击样本训练的模型,新模型在auc上有一定下降,但是相关性有大幅提升
image
本文提的新的检索方案,比传统ANN方案在广告检索覆盖率和性能方面都有很大的提升

最终上线,广告收益CPM等也有很大的提升

五、思考 #

mobius系统采用的是双塔结构,这种结构其实没法引入query-ad的交叉特征,在预估精度上有一定影响的。不知道在这个系统之上会不会还有一个小型的rank系统(全连接dnn)网络进行ctr预估

Reference #

[1] http://research.baidu.com/Public/uploads/5d12eca098d40.pdf


38db85a4c595ca6