廣告檢索技術的簡單理解


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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM