广告检索技术的简单理解

Rtb发展到现在,流量对广告系统的速度要求越来越高。如何在用户无感知的时间内快速从大量的广告中选出一条呈现在用户面前,是一个非常有研究价值的问题。本文会形象生动地介绍广告检索技术,了解系统如何从大量的广告库里拉出那些符合用户流量特征的广告。

 

检索其实分为2步:1,为广告库里所有广告建立倒排索引,2,在索引中查找符合用户画像的所有广告。

 

  1. 为广告库里所有广告建立倒排索引

输入:所有广告

输出:所有广告的倒排索引

  1. 在索引中查找符合用户画像的所有广告

输入:所有广告的倒排索引,用户画像

输出:符合用户画像的所有广告

 

 

假设现在有2个广告,他们分别有自己的定向条件。

a1=年龄在(20,30)或(40,50)且性别男且在广东=(age∈(20,30) ∪age∈(40,50))∩(gender∈{男})∩(geo∈{广东})

a2=年龄在(25,45)且在广州=(age∈(25,45))∩(geo∈{广州})

现在有一个用户来请求广告,他的用户画像为:ios、男、广州、28岁。请问哪些广告是与他匹配的?

接下来我们就来看看这个过程是怎么进行的。

 

正式开始之前,介绍点背景知识。

定义(析取范式)析取范式(DNF)是合取(连词∧)子句的析取(连词∨)。也就是说,析取范式是多个多个交集的并。

定理(范式存在定理)任何一个命题共识都存在着与之等值的析取范式与合取范式。

 

 

方案1:

第1步,建立倒排索引。

根据范式存在定理,任何一个用布尔表达式的广告,都可以表示成析取范式的形式。那么前面提到的a1/a2可以变形为:

a1=( (age∈(20,30))∩(gender∈{男})∩(geo∈{广东}) ) ∪ ( (age∈(40,50) )∩(gender∈{男})∩(geo∈{广东}) )

a2=(age∈(25,45))∩(geo∈{广州})

引入j1/j2/j3,用来代表析取范式中的各个交集:

j1=(age∈(20,30))∩(gender∈{男})∩(geo∈{广东}), j2=(age∈(40,50) )∩(gender∈{男})∩(geo∈{广东}) , j3=(age∈(25,45))∩(geo∈{广州})

那么,前面提到的2则广告可以表示为:

a1=j1∪j2, a2=j3

这里进行倒排,

 

第2步,在索引中查找广告。

请求广告的用户画像为:ios、男、广州、28岁。直接去倒排索引中匹配,j1符合要求,那么a1广告可以出,j2不符合要求,j3符合要求,那么a2广告可以出。综合起来看,a1/a2均符合该用户,后续可以再对这两个广告进行排序,决定最终出哪一则广告,后续的过程就不是检索系统的范围了,这里不赘述。

 

这个方案并不是最优的,麻烦的地方在于j1~j3很少重复,这样广告需要匹配很多很多个j式,并不是特别节省时间,下面介绍另外一种优化算法,采用的两层倒排索引。

 

优化方案2:

第1步,建立倒排索引。

建立两层的倒排索引,考虑把(age∈(20,30))∩(gender∈{男})∩(geo∈{广东})拆得更细。

引入size这个量,用来表示某个j需要同时满足多少个条件,即定向条件是多少个子条件的交集。j1,需要同时满足3个定向条件,则size=3;同理,j2,size=3;j3,需要同时满足2个定向条件,size=2。按照size组织一层索引。

对size=2中的内容,命中2次(含义是同时满足两个条件)则算成功(两个条件取值均为true,那么他们交集仍然为true),对size=3中的内容,命中3次则算成功。如下图所示。

 

 

第2步,在索引中查找广告。

请求广告的用户画像为:ios、男、广州、28岁。现在上层索引中匹配。

  • size=2。25~45岁,j3命中+1;广州,j3命中+1。即命中2条,已达到size要求,那么j3条件得到满足。再查下层索引,j3满足意味着可以出a2广告。
  • size=3。20~30岁,j1命中+1;男,j1命中+1,j2命中+1;广东,j1命中+1,j2命中+1。j1命中了3次,达到size要求,那么j1条件得到满足。再查下层索引,j1满足意味着可以出a1广告。

综上所述,该用户匹配到的广告有a1、a2.

posted @ 2015-12-09 16:43  ErinFlyingFish  阅读(6472)  评论(1编辑  收藏  举报