自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

廣告系統(tǒng)架構(gòu):要啥自行車!

企業(yè)動(dòng)態(tài)
本期文章是我們?yōu)樽x者帶來的【計(jì)算廣告小窺】專題的第三個(gè)部分。

[[178297]]

作者|面包包包包包包

修改|寒小陽 && 龍心塵

上一期我們一起探索了計(jì)算廣告的基本概念和四種形式(點(diǎn)擊查看《計(jì)算廣告小窺(上)》),和計(jì)算廣告的關(guān)鍵技術(shù)(點(diǎn)擊查看《計(jì)算廣告小窺(中)》)本期文章是我們?yōu)樽x者帶來的【計(jì)算廣告小窺】專題的第三個(gè)部分。這個(gè)系列的專題到此就結(jié)束啦,希望系統(tǒng)學(xué)習(xí)計(jì)算廣告的同學(xué)可以回顧三篇文章。

(上)(中)(下)全文目錄

  1. 引言
  2. 廣告=>互聯(lián)網(wǎng)廣告:“您好,了解一下”
  3. 互聯(lián)網(wǎng)廣告=>計(jì)算廣告:指哪兒打哪兒!
  4. 計(jì)算廣告四君子:誰在弄潮?
  5. 計(jì)算廣告關(guān)鍵技術(shù):這孫子怎么什么都知道?
  6. 廣告系統(tǒng)架構(gòu):要啥自行車,這里有寶馬。
  7. 手把手系列之教你搭建一個(gè)最小廣告系統(tǒng):mieSys

6. 廣告系統(tǒng)構(gòu)架:要啥自行車!

一句話解釋廣告系統(tǒng)架構(gòu):“道生一,一生二,二生三,三生萬物。”

場景1

廣告系統(tǒng)構(gòu)架場景一

坐在車?yán)?,手機(jī)打開為知筆記,想再瞅一眼的樹的幾種遍歷方法。眼睛跟著遞歸,思緒卻爆了內(nèi)存:面試官長什么樣?他會(huì)問我什么問題?部門名字聽起來還挺高大上的?面試完在附近吃點(diǎn)什么呢?聽同學(xué)說附近的小吊梨湯很贊啊!面包包包,那就小吊梨湯吧?好啊好啊,出來再加個(gè)西少爺肉夾饃吧?好啊好啊!“噗”的一下笑出了聲,還好司機(jī)師傅并沒有在意。我連忙收起自己的小尷尬,平復(fù)一下心情,然后開口問道,“師傅,今天您拉幾單了?”

場景2

廣告系統(tǒng)構(gòu)架場景二

原來大家工位都是在一起的呀。這這會(huì)兒燈都關(guān)著,還有午休呢。門口小哥和我差不多大,聊的還不錯(cuò)。面試官還沒來,先把簡歷和白紙都擺擺好。一切準(zhǔn)備就緒,抿了一口水,可以,這很怡寶。

場景3

廣告系統(tǒng)構(gòu)架場景三

面試官:你好,請坐(拿著簡歷開始看),先簡單介紹一下自己。

我:blablabla…

面試官:嗯,來寫道題吧。

我:正面鋼,不能慫!揮筆寫下了一行代碼:

return "燙燙燙" == "屯屯屯" ? "燙屯燙" : "屯燙屯";

面試官:

blablabla

我:

blablabla

面試官:加個(gè)微信吧,以后要是沒事兒了咱們斗圖玩兒。

我:哪兒斗得過您呀,跟著您多收藏幾個(gè)表情,來我掃您二維碼。

場景 4

leader:聽說你們剛剛斗圖斗的很開心,我這兒沒圖,咱們換一種玩法吧。

我:我心想沒圖你說個(gè)。。說一聲啊,我發(fā)您。

leader:不鬧了哈,我看你簡歷上說你對計(jì)算廣告有些了解,那你能不能通過一個(gè)case能讓我知道你對計(jì)算廣告都了解到什么程度呢?

我:我也頓時(shí)來了精神,這個(gè)問題好啊!我覺得最好的case是走一遍廣告投放的整個(gè)流程,在商業(yè)邏輯的指導(dǎo)下帶出系統(tǒng)框架、功能模塊和關(guān)鍵技術(shù),不知您是否感興趣?

leader:非常好,那你打算從哪里切入呢?

我:就從我們來的地方吧,不忘初心。

時(shí)間回到那個(gè)清晨,網(wǎng)站收入報(bào)表錯(cuò)落著疊放在桌子的一角,左手旁是一杯冷了的速溶咖啡,鼠標(biāo)有些油膩,用了一年的Cherry青軸依然趁手。敲下最后一個(gè)回車,他兩手交疊,揉了揉兩手酸脹的虎口,“呵,這一夜”。窗外已蒙蒙亮,他有點(diǎn)興奮,因?yàn)榻裉斓奶?,特別好看。

廣告

我們在《計(jì)算廣告小窺[上]》中提到過,互聯(lián)網(wǎng)廣告相較于傳統(tǒng)廣告,顯著之處就在于廣告效果可以被衡量。在用結(jié)果說話的今天,數(shù)據(jù)自然擁有著至關(guān)重要的戲碼。對于媒體網(wǎng)站來說,最重要的數(shù)據(jù)莫過于用戶在什么時(shí)間,從什么地方,在網(wǎng)站上做了什么事情。有了這三方面的基礎(chǔ)數(shù)據(jù),理論上我們可以做任何我們想做的事,譬如在《計(jì)算廣告小窺[中]》里我們討論過的受眾定向,為用戶打上標(biāo)簽,這才有了餅圖中的男和女;又譬如點(diǎn)擊率預(yù)估,將用戶可能點(diǎn)擊的廣告放在最顯眼的位置上,提升網(wǎng)站收益。自計(jì)算廣告誕生以來,類似的應(yīng)用和場景數(shù)不勝數(shù),時(shí)刻為用戶、廣告主和用戶服務(wù)著。為了能夠準(zhǔn)確無誤的完成上述使命,一個(gè)好的廣告系統(tǒng)必不可少。那么問題來了,想要完成一次廣告投放,需要我們的廣告系統(tǒng)具備哪些功能呢?下面我們實(shí)地走一遭,完成一次廣告投放,看看在這個(gè)過程中我們會(huì)遇到什么問題、我們?nèi)绾畏治鲆约叭绾稳ソ鉀Q。所謂一個(gè)系統(tǒng)的設(shè)計(jì)思路,大抵如此吧。

萬事俱備,只欠case,具體的case怎么選呢?我替大家選啦!目前為止,我們對餅圖應(yīng)該是最熟的,它那咱們就“重走長征路”,看看如何得到這張餅圖,然后用餅圖來指導(dǎo)廣告投放吧。OK,我們來定義一下問題,我們要完成的是:從數(shù)據(jù)中挖掘出用戶的性別,根據(jù)性別為用戶展示TA們最可能點(diǎn)擊的廣告。好了,問題定義完畢,在實(shí)際操作之前先從方法論的角度分析一下什么是廣告系統(tǒng),主要有微觀和宏觀兩個(gè)方面。

6.0 方法論之——“先把書讀厚”

先看前半句,從數(shù)據(jù)中挖掘出用戶的性別,這個(gè)好理解,輸入是媒體網(wǎng)站的數(shù)據(jù),輸出就是每個(gè)用戶的性別,典型的分類問題嘛,打個(gè)標(biāo)簽,規(guī)則也好,機(jī)器學(xué)習(xí)也好,都是可以做的。后半句呢,根據(jù)性別為用戶展示TA們最可能點(diǎn)擊的廣告,輸入是用戶性別,輸出是廣告。這些廣告是哪兒蹦出來的?想必一定是有一個(gè)廣告庫,這些廣告是被挑選出來的,而挑選的依據(jù)就是性別。再有,什么叫最可能點(diǎn)擊的廣告?這個(gè)很好理解,當(dāng)然是用戶感興趣的廣告啦,光感興趣還不行,你還得讓用戶看到,這就需要排序了,把用戶點(diǎn)擊率最高的廣告放在最顯眼的位置上。有沒有覺得這些字眼都很熟悉呢?分類,標(biāo)簽,點(diǎn)擊率,排序,我們好像在哪兒見過?這不就是我們在中篇里討論過的關(guān)鍵技術(shù)嘛!看來那些高大上的關(guān)鍵技術(shù)也是很接地氣的,就這么一個(gè)看似簡單的投放場景,這些技術(shù)我們幾乎都用到了,好像有點(diǎn)意思哈!現(xiàn)在讓我們將上述過程進(jìn)一步具體,讓程序員們可以看懂,便可歸納出下述表格。

方法論之——“先把書讀厚”

方法論之——“先把書讀厚”

根據(jù)這張表,一個(gè)模型已經(jīng)清晰地呈現(xiàn)在我們眼前,如上圖。在這里,“輸入-系統(tǒng)-輸出”是一個(gè)非?;厩彝ㄓ玫哪P?,大家可以在很多交叉學(xué)科里見到它的身影,例如通信工程里的《信號與系統(tǒng)》和《通信原理》,或者控制工程里的《現(xiàn)代控制原理》,再如機(jī)器學(xué)習(xí)中模型的訓(xùn)練過程,抽象出來都是如此。雖然應(yīng)用場景各有千秋,但是核心問題只有三個(gè):輸入是什么?輸出是什么?如何保證系統(tǒng)的穩(wěn)定性?想要回答這三個(gè)問題其實(shí)也很容易,以問題場景與核心需求為導(dǎo)向,多問幾個(gè)為什么即可。所謂:“道生一,一生二,二生三,三生萬物”,就是這個(gè)道理。

方法論介紹完,微觀和宏觀都有了,現(xiàn)在讓我們回到廣告系統(tǒng)中來。系統(tǒng)的輸入是媒體網(wǎng)站的數(shù)據(jù),輸出是排好序的廣告,中間部分便是我們要設(shè)計(jì)的了。得嘞,那咱們走著!

6.1 日志模塊

一句話解釋日志模塊:我有一個(gè)小咪咪秘密

系統(tǒng)的原始輸入是媒體網(wǎng)站的日志數(shù)據(jù),具體而言就是網(wǎng)站的訪問日志以及用戶的行為記錄。想不想偷偷看一眼?就一眼哦。

系統(tǒng)的原始輸入是媒體網(wǎng)站的日志數(shù)據(jù)

挺丑的哈~丑不要緊,我們有split(” “)!從日志中我們可以看出,每一條記錄都是由IP地址、訪問時(shí)間、GET請求、資源URL和HTTP Header組成的,其中時(shí)間就是訪問時(shí)間,IP地址表示用戶所處位置,做了什么就是GET??墒撬腥说臄?shù)據(jù)都堆在一起,我哪能分清誰是誰呢?不是有IP地址嘛!IP地址相同的就是一個(gè)人。這個(gè)思路可以,但一般不這么用,因?yàn)镮P地址一般是動(dòng)態(tài)的,不夠穩(wěn)定,而且有NAT這種東西存在,粒度不夠細(xì)。那怎么辦?用Cookie!

Cookie,這個(gè)?

Cookie

噢不不,是這個(gè)。

Cookie

Cookie往簡單了說,就是媒體網(wǎng)站給用戶起的名字,作為用戶在該媒體網(wǎng)站上的唯一標(biāo)識。有了Cookie之后,媒體網(wǎng)站就能很方便的從日志文件里區(qū)分出每個(gè)人的行為記錄,然后就可以給每個(gè)用戶打上合適的標(biāo)簽,做受眾定向了。哇噻,這么簡單呀!有數(shù)據(jù),有Cookie,做完受眾定向就能輸出性別啦?沒錯(cuò),從原理上講的確就這么簡單,輸入和輸出都有了,這個(gè)日志模塊算是走完了。但工業(yè)上要更復(fù)雜一些,因?yàn)槲覀円恢睕]說這些日志文件都存哪兒了。心想這有什么好聊的呀,存?zhèn)€文件或者存?zhèn)€數(shù)據(jù)庫不就完了?NONONO,門戶網(wǎng)站每天訪問量都是按億算的,簡單方法達(dá)不到要求。那工業(yè)上用的是什么呀,答曰Hadoop——分布式數(shù)據(jù)處理平臺。(以下開源工具部分內(nèi)容摘自劉鵬、王超老師著作《計(jì)算廣告》,人民郵電出版社)

通常情況下,數(shù)據(jù)處理需要一個(gè)能夠存儲(chǔ)和加工海量數(shù)據(jù)的基礎(chǔ)設(shè)施,實(shí)際上這也是大多數(shù)大數(shù)據(jù)系統(tǒng)都需要的平臺。在開源的這類平臺工具中,Hadoop幾乎是工業(yè)界的標(biāo)準(zhǔn)選擇。Hadoop的核心架構(gòu)包括HDFS、Hadoop MapReduce和HBase,其中HDFS是GFS(Goole File System)的開源實(shí)現(xiàn),MapReduce是Google MapReduce的開源實(shí)現(xiàn),而HBase則是Google BigTable的開源實(shí)現(xiàn)。

HDFS是一種易于橫向擴(kuò)展的分布式文件系統(tǒng),提供大規(guī)模數(shù)據(jù)文件存儲(chǔ)服務(wù),支持PB級數(shù)據(jù)規(guī)模。它可以運(yùn)行在上萬臺的通用商業(yè)服務(wù)器集群上,提供副本容錯(cuò)機(jī)制,為海量用戶提供性能優(yōu)越的存取服務(wù)。計(jì)算廣告系統(tǒng)里的海量日志文件等就是通過數(shù)據(jù)高速公路傳送,最終存儲(chǔ)在HDFS上,為各種離線計(jì)算任務(wù)提供服務(wù)。

Hadoop MapReduce是一種分布式計(jì)算框架,顧名思義,它由兩個(gè)部分組成:Map和Reduce。Map是將一個(gè)作業(yè)分解成多個(gè)任務(wù),而Reduce是將分解后多任務(wù)處理的結(jié)果匯總起來。在程序設(shè)計(jì)中,一項(xiàng)工作往往可以被拆分成多個(gè)任務(wù),任務(wù)之間的關(guān)系可以分為兩種:以是不相關(guān)的任務(wù),可以并行執(zhí)行;另一種是任務(wù)之間有相互依賴,先后順序不能夠顛倒,MapReduce適用于第一種類型,龐大的集群可以看作是硬件資源池,將任務(wù)并行拆分,然后交由每一個(gè)空閑硬件資源去處理,能夠極大的提高計(jì)算效率,同時(shí)這種資源無關(guān)性對計(jì)算集群的橫向擴(kuò)展提供了最好的設(shè)計(jì)保證。

在廣告系統(tǒng)中,Hadoop主要承擔(dān)著離線數(shù)據(jù)的存儲(chǔ)和計(jì)算需求,可以說是計(jì)算廣告系統(tǒng)進(jìn)行大規(guī)模數(shù)據(jù)處理不可或缺的基礎(chǔ)平臺。無論受眾定向、點(diǎn)擊率預(yù)估還是基礎(chǔ)的報(bào)表生成,都需要在Hadoop上進(jìn)行大規(guī)模的數(shù)據(jù)處理。

到這里,媒體網(wǎng)站數(shù)據(jù)的存儲(chǔ)方式就很清楚了,它們分布式的存儲(chǔ)在HDFS中。當(dāng)我們需要做統(tǒng)計(jì)或者計(jì)算任務(wù)時(shí),可以通過編寫MapReduce程序來實(shí)現(xiàn)。搞定了日志的存儲(chǔ)和Cookie分配,日志模塊就算是告一段落了。有了穩(wěn)定的數(shù)據(jù),系統(tǒng)才會(huì)有穩(wěn)定是輸入?,F(xiàn)在數(shù)據(jù)有了,怎么得到用戶性別吶?請看下一節(jié),受眾定向模塊。

6.2 受眾定向模塊

一句話解釋受眾定向模塊:雙兔傍地走,安能辨我是雄雌?

日志模塊為媒體網(wǎng)站提供了大規(guī)模的存儲(chǔ)和計(jì)算服務(wù),為廣告系統(tǒng)穩(wěn)定的數(shù)據(jù)輸入提供了強(qiáng)有力的保障。接下來的任務(wù)是根據(jù)日志數(shù)據(jù)來判斷用戶性別,在開始之前,我們先來看看古人是怎么判斷兔子性別的。

《木蘭詩》中寫道“雄兔腳撲朔,雌兔眼迷離;雙兔傍地走,安能辨我是雄雌?”小時(shí)候每次讀到這里就覺得智商受到了侮辱,一個(gè)瞇著眼,一個(gè)亂撲騰,倆走一塊兒怎么就看不出來雌雄了?我看很容易嘛!提溜起耳朵,眼睛瞪的溜圓亂舞扎的是公的,瞇縫著眼睛畏手畏腳的是母的。所以木蘭你還真認(rèn)為自己沒有被認(rèn)出來嗎,我怎么覺得是大家不愿點(diǎn)破呢。至于不愿點(diǎn)破的原因,是個(gè)細(xì)思極恐的故事,一會(huì)兒電臺就不讓播了。

說完兔子現(xiàn)在來說人,上面我們用“腿+眼睛”的不同表現(xiàn)來判斷兔子公母,這種方法叫做“規(guī)則”,放程序里就是個(gè)if..else..。現(xiàn)在我們要判斷人的性別,場景雖然遷移,但解決問題的方法并沒有改變,那都有哪些規(guī)則可以用來判斷人的性別呢,先來看看下面兩個(gè)用戶的購買記錄吧。

兩個(gè)用戶的購買記錄

用戶A和用戶B的性別分別是什么?這個(gè)應(yīng)該還是很明顯的,因?yàn)樗麄兎謩e買了多個(gè)有明顯性別傾向的商品,例如裙子和女鞋,男襪和男鞋,所以A是女性B是男性。從這里我們可以得到一個(gè)非常簡單并且符合直覺的假設(shè):如果一個(gè)用戶經(jīng)常瀏覽或購買女性的商品,那么該用戶可能是女性,反之是男性。假設(shè)有了,那我們假設(shè)的正確嗎?迭代驗(yàn)證之后發(fā)現(xiàn)準(zhǔn)確率高達(dá)90%(我編的),現(xiàn)在我們可以用它來區(qū)分用戶性別了。這種規(guī)則的實(shí)質(zhì)上是一種投票與統(tǒng)計(jì)的方法,看這個(gè)的行為記錄是更像男性一些,還是更像女性一些,最后取其大者即可。一提到統(tǒng)計(jì),大家都很熟悉,定義一個(gè)計(jì)數(shù)器即可。但是我們的場景是存儲(chǔ)在HDFS中的海量數(shù)據(jù),如何來實(shí)現(xiàn)這步操作呢,用MapReduce嘛,下面我隨手寫個(gè)代碼,大神請輕噴!

用MapReduce寫的代碼

用MapReduce寫的代碼

話說這么著來判斷用戶性別,是不是太隨意了點(diǎn)。才不是呢!畢竟這個(gè)策略是符合業(yè)務(wù)場景的!好吧好吧我承認(rèn)是我偷懶沒有去研究更多更先進(jìn)的算法和模型,磚我是扔出來了,坑我也挖下了,下面就看您各位的了,口喜 口喜~

不經(jīng)意間,我們已經(jīng)完成了一個(gè)系統(tǒng)單元的設(shè)計(jì)了,它的輸入是HDFS中的日志數(shù)據(jù),輸出是用戶性別,中間的數(shù)據(jù)處理是受眾定向,Step1搞定啦!

個(gè)系統(tǒng)單元的設(shè)計(jì)

基本的說完了,再延伸一些工業(yè)中常用內(nèi)容吧,以下內(nèi)容來自《計(jì)算廣告》。我們得到的用戶性別通常情況下是一個(gè){key : value}鍵值對,key是用戶的cookie_id,value是性別,1代表男0代表女。一般來說,這種鍵值對特征的數(shù)目非常龐大,無法放進(jìn)廣告投放機(jī)的內(nèi)存中,需要采用獨(dú)立的緩存服務(wù)。在這樣的需求下,這種緩存服務(wù)的特征非常明顯,一是往往只需要存儲(chǔ)簡單的鍵值對,二是大多數(shù)情況下需要支持高并發(fā)的隨機(jī)讀和不太頻繁的批量寫。在這樣的需求下,Redis是比較合適的開源工具之一。

Redis是一種NoSQL數(shù)據(jù)庫,它主要提供的是高性能的鍵值存儲(chǔ),采用的是內(nèi)存數(shù)據(jù)集的方式。Redis的Key可以包括字符串、哈希、列表、集合和有序集合等數(shù)據(jù)類型,因此也被稱作是一款數(shù)據(jù)結(jié)構(gòu)服務(wù)器。Redis會(huì)周期性地把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了主從同步,具有非常快速的非阻塞首次同步、網(wǎng)絡(luò)斷開自動(dòng)重連等功能。同時(shí)Redis還具有其他一些特性,其中包括簡單的check-and-set機(jī)制,pub/sub和配置設(shè)置等,使得它能夠表現(xiàn)的更像高速緩存(cache)。Reids還提供了豐富的客戶端,支持現(xiàn)階段流行的大多數(shù)編程語言,使用起來比較方便。在使用了Redis存儲(chǔ)用戶性別之后,我們的廣告系統(tǒng)現(xiàn)在長這樣,思路應(yīng)該還是挺清晰的,嗯嗯。

使用了Redis存儲(chǔ)用戶性別后的廣告系統(tǒng)

6.3 廣告檢索模塊

一句話解釋廣告檢索模塊:找我啊,找到我就讓你嘿嘿嘿

邁出了第一步,漸入佳境,趁熱打鐵我們來看第三個(gè)模塊:廣告檢索。在這個(gè)模塊中,輸入是用戶性別,輸出是候選廣告集合,這些廣告該怎么找呢?

有人說了,這簡單呀?,F(xiàn)在要為一位女性喜歡買鞋的用戶找一些合適的廣告,直接在廣告數(shù)據(jù)庫里寫一句SELECT * FROM TABLE_NAME WHERE USER_TAG = "shoes" AND USER_SEX = "female" 不就搞定了嗎?沒錯(cuò),這是一種方法,我在mieSys最小廣告系統(tǒng)(Github)里也是這么做的,但是可以十分肯定的說,這么做是不太合適滴。

朝陽群眾:啥?

西城大媽:387,到北京西站387。

海淀網(wǎng)友:寶寶心里苦,但寶寶不說。

吃瓜群眾:自己用不讓我們用,要不要臉?

好了好了大家消消氣,我承認(rèn)是我將問題簡(偷)化(懶)了。誠然,用數(shù)據(jù)庫的確可以實(shí)現(xiàn)廣告的檢索,但是在大規(guī)模的場景下,這種方法幾乎不可用,感興趣的同學(xué)可以在一個(gè)1000W行的表里寫一個(gè)SELECT試試,耗時(shí)十分感人。阿里有10億商品,這要是檢索一次,嗯。。

朝陽群眾:嗯?

西城大媽:剛上車的乘客請往里走。

海淀網(wǎng)友:寶強(qiáng)真是可憐啊,不過以后當(dāng)個(gè)經(jīng)紀(jì)人好像也不錯(cuò)。

吃瓜群眾:然后嘞,那還能咋查?

除了數(shù)據(jù)庫,還有更通用的檢索方法,常見于搜索引擎中,這就是倒排索引。所謂倒排索引,就是根據(jù)結(jié)果查原因。舉個(gè)不恰當(dāng)?shù)睦?,我們都知?+1=2,從1+1得到2是正排索引,那么從2得到1+1就是倒排索引。如果這個(gè)解釋還是很抽象的話,那就用程序員的方式吧。

廣告檢索模塊代碼

廣告檢索模塊代碼

這段代碼中,doc_tokens是一個(gè)字典,key是文檔id,value是該文檔中出現(xiàn)的句子,分詞之后以單詞(token)的形式存在。tokens_docid也是一個(gè)字典,key是token,value是出現(xiàn)過該token的文檔id。當(dāng)我們想要在搜索引擎中檢索同時(shí)包含“谷歌”和“Wave”的網(wǎng)頁是哪一個(gè),對兩個(gè)token的結(jié)果求一下交集即可,即D3。

朝陽群眾:噢?

西城大媽:年輕人來少坐會(huì)兒,給老人小孩讓個(gè)座兒。

海淀網(wǎng)友:寶寶去上訴了,看他面容好憔悴啊。

吃瓜群眾:還是沒看懂倒排跟廣告檢索有啥關(guān)系?

受眾定向模塊所完成的,就是給用戶打上各種標(biāo)簽;而廣告檢索模塊將要完成的,就是根據(jù)這些標(biāo)簽為用戶召回相關(guān)的廣告。這里面其實(shí)有三方關(guān)系:用戶標(biāo)簽、廣告標(biāo)簽和廣告。通常,用戶標(biāo)簽和廣告標(biāo)簽是存在著映射關(guān)系的,所以我們可以通過用戶標(biāo)簽,來找到相應(yīng)的廣告標(biāo)簽。如果將廣告看作是doc,將廣告標(biāo)簽看作token,那么通過廣告標(biāo)簽找廣告的過程就是倒排索引。

鑒于上述描述,廣告檢索通常也用倒排索引來實(shí)現(xiàn),其中查詢的條件可以看作一個(gè)由“與或”關(guān)系連接的布爾表達(dá)式,例如我們剛才提到的一位用戶標(biāo)簽為“喜歡買鞋的女性”,其對應(yīng)的廣告標(biāo)簽就是“類別:鞋” 和 “性別:女”的交集。根據(jù)標(biāo)簽“類別:鞋”我們可以檢索到廣告集合S1,根據(jù)標(biāo)簽“性別:女”可以檢索到廣告集合S2,二者取交集之后的結(jié)果,記為我們檢索到的廣告。

朝陽群眾:哈?

西城大媽:前方到站是阜成門南,下車乘客請?zhí)崆皳Q到車門處,下車請刷卡。

海淀網(wǎng)友:寶強(qiáng)在美國那個(gè)別墅一般般啊,那個(gè)會(huì)說英語的“哥哥”會(huì)不會(huì)是經(jīng)紀(jì)人呀。

吃瓜群眾:有點(diǎn)意思了,那這些檢索到的廣告都有用嗎?

非常好的問題,檢索到的廣告都有用嗎?假設(shè)我們只有用戶的性別標(biāo)簽,阿里有10億商品,男女各一半,那我這一下就得到了5億條商品的廣告。下面用這5億條去做CTR排序,我想那一定是瘋了,肯定不是這樣的。通常情況下,我們會(huì)將這些檢索得到的廣告通過模型的方法做一下截?cái)嗪痛诌x,將頭部相關(guān)性較高的保留下來作為廣告檢索的最終結(jié)果。其實(shí)在實(shí)際的工業(yè)場景中,類似具體的問題還有很多,例如用倒排索引的方法做廣告檢索其實(shí)還會(huì)遇到一些具體問題,這里暫不細(xì)表,感興趣的同學(xué)可以看一看《計(jì)算廣告》P223。

廣告檢索

廣告檢索的完成,意味著我們的Step2完成了。萬事俱備,只欠Ranking,想想還有點(diǎn)小激動(dòng)呢!現(xiàn)在我們的廣告系統(tǒng),就長這樣啦。

廣告檢索完成后的廣告系統(tǒng)

朝陽群眾:嗯,沒人吸毒。

西城大媽:終點(diǎn)站北京西站到了,祝您旅途愉快。

海淀網(wǎng)友:兒子還真不像寶強(qiáng)-_-。

吃瓜群眾:原來是這樣,我聽懂了。那現(xiàn)在既然找到了廣告,說好的嘿嘿嘿呢?

面包君滿臉黑線,撒腿就跑,邊跑邊說“追我呀,追到我我就讓你嘿嘿嘿。略~~~”

[[178307]]

6.4 CTR預(yù)估模塊

一句話解釋CTR預(yù)估模塊:排排坐,吃果果。

終于來到了最后一個(gè)模塊,該模塊的輸入是候選的廣告集合,輸出是一個(gè)根據(jù)用戶pCTR從高到低排序的一個(gè)廣告序列。

在計(jì)算廣告[中]里我們曾經(jīng)介紹過CTR預(yù)估相關(guān)內(nèi)容,下面我們簡單回顧一下。

點(diǎn)擊率與點(diǎn)擊率預(yù)估的對比,就是0.1%與那80%。之所以點(diǎn)擊率預(yù)估十分重要,是因?yàn)樗苯雨P(guān)系到媒體網(wǎng)站的收入,也直接關(guān)系到廣告主的推廣效果。廣告位的個(gè)數(shù)就那么幾個(gè),顯眼的更少,憑什么把你放在頭條呢?靠的就是點(diǎn)擊率預(yù)估。

點(diǎn)擊率預(yù)估是機(jī)器學(xué)習(xí)中十分經(jīng)典并且難度極高的問題。既然聊到了機(jī)器學(xué)習(xí),那一定得聊一聊特征選擇及構(gòu)造,模型的選擇和調(diào)參,這其中任何一個(gè)單拎出來都是工業(yè)界中十分熱門的話題。在這里,我就來個(gè)拋磚引玉,看看常用的思路都有哪些。

6.4.1 點(diǎn)擊率預(yù)估綜述

用于點(diǎn)擊率預(yù)估的數(shù)據(jù)主要是日志數(shù)據(jù),一般會(huì)有點(diǎn)擊行為(點(diǎn)擊為1,沒點(diǎn)為0)、廣告信息(廣告位、廣告主id、廣告標(biāo)簽和廣告描述等)、用戶信息(用戶id和用戶標(biāo)簽等)、上下文信息和時(shí)間戳等。有了這些原始數(shù)據(jù)之后,需要對數(shù)據(jù)進(jìn)行清洗,然后利用統(tǒng)計(jì)或模型的方法構(gòu)造特征,進(jìn)而做特征選擇和特征組合,最終特征的數(shù)量級大約在10億-100億維。完成了特征工作之后,在模型方面,較為經(jīng)典的點(diǎn)擊率預(yù)估模型是線性模型Logistic Regression,由于LR在通過sigmoid之前是一個(gè)[0,1]之間的浮點(diǎn)數(shù),利用LR的特點(diǎn),我們可以將這個(gè)浮點(diǎn)數(shù)作為用戶點(diǎn)擊該廣告的概率,把廣告按照這個(gè)概率從高到低放置在相應(yīng)廣告位上,就完成了廣告排序。

6.4.2 特征工程

1.特征分類

  • 從數(shù)值上看,特征主要分為連續(xù)型特征和離散型特征。連續(xù)型特征是指特征值是一個(gè)可連續(xù)變化的實(shí)數(shù),例如某個(gè)廣告的點(diǎn)擊次數(shù){ad1:87, ad2:13, ad3:2};離散型特征是指特征值非0即1,例如{性別:0}表示該用戶是女性,{性別:1}表示該用戶是男性。

 

  • 從來源上看,可以分為統(tǒng)計(jì)特征和概率特征。統(tǒng)計(jì)特征就好比上面提到的廣告點(diǎn)擊次數(shù),是經(jīng)過簡單統(tǒng)計(jì)得到的絕對值累加。概率特征例如某個(gè)廣告的點(diǎn)擊率(點(diǎn)擊量/展示量){ad1:0.01, ad2:0.13, ad3:0.07}。

2.特征表示

  • 離散化。離散化要完成的任務(wù)主要是對連續(xù)型特征做分類,拿用戶年齡舉例。年齡是一個(gè)在0~100間的實(shí)數(shù)。在一般的業(yè)務(wù)場景中,我們不會(huì)去care用戶到底是21歲還是22歲,但是會(huì)care用戶是11歲還是21歲。鑒于此,我們可以將年齡按10歲為間隔做一下分類:1~10歲用1表示,11~20用2表示,以此類推。間隔的選取要依賴具體業(yè)務(wù)場景,在人口統(tǒng)計(jì)中間隔10歲可能比較好,但在電商中,可能1~18代表1,18~24代表2效果會(huì)更好一些。
  • 歸一化。歸一化要完成的任務(wù)是使不同連續(xù)特征間建立起可比關(guān)系,拿成績和GPA來舉例。成績一般是百分制,比如{score:87},GPA一般是4分制,比如{GPA:4.0}。如果單看數(shù)值,那87肯定要比4大,但是實(shí)際上4.0在GPA中代表的是優(yōu)秀:90~100分,比87要大。所謂歸一化,就是當(dāng)前特征值在該特征范疇下的相對大小,score:87就是87/100=87%,GPA:4.0就是4.0/4.0=100%,這下兩個(gè)特征間就產(chǎn)生了可比性。歸一化的方法也有多種,這里就不多說了。
  • Dummies。有人叫它“啞變量”,我總感覺怪怪的,就叫原名吧。Dummies是實(shí)現(xiàn)One-Hot的一種方式,例如特征性別{1:男, 2:女, 3:不詳}。在這里,1,2,3僅僅用于指代作用,并沒有數(shù)值上的大小關(guān)系,但是對于模型來說,1、2、3這樣的值會(huì)影響模型的迭代,因?yàn)樵谔荻认陆抵?/li>

Dummies

1:男—-> [1, 0, 0]

2:女—-> [0, 1, 0]

3:不詳—>[0, 0, 1]

通過Dummies,我們將一維特征擴(kuò)展到了三維,既保留了特征的物理含義,也使得模型訓(xùn)練更加可信,是不是好了很多呢~

3.特征組合

特征組合是一個(gè)充滿了智慧和經(jīng)驗(yàn)的領(lǐng)域,花樣繁多,令人贊嘆。這里說一種常規(guī)的方法:笛卡爾積。

在數(shù)學(xué)中,兩個(gè)集合X和Y的笛卡兒積(Cartesian product),又稱直積,在集合論中表示為X × Y,是所有可能的有序?qū)M成的集合,其中有序?qū)Φ牡谝粋€(gè)對象是X的成員,第二個(gè)對象是Y的成員。

其實(shí)之前我們已經(jīng)了解特征組合了,在哪里呢?嘿嘿,還記得那位“喜歡買鞋的女性”用戶嗎,讓我們看看在特征層面如何表示這種信息。假設(shè)我們有一個(gè)特征,叫做商品類別{1:上衣, 2:裙褲, 3:鞋, 4:其他}, 還有一個(gè)特征是用戶性別{1:男, 2:女, 3:不詳}。通過笛卡爾積,我們可以得到新特征“喜歡買鞋的女性”{(商品類別:鞋), (性別:女)},至于特征值嘛,一般常見的操作就是加減乘除對數(shù)之類的。

4.特征選擇

同特征組合一樣,特征選擇更是一個(gè)將“人工的智能”體現(xiàn)的淋漓盡致的領(lǐng)域。特征選擇的根本任務(wù),是找出那些影響力大,冗余性小的特征集合。最理想的情況當(dāng)然是獲得描述問題的不同“角度”,一個(gè)不多一個(gè)不少。

理想是求最優(yōu)解,但是顯然這是一個(gè)NP Hard的問題,即便如此,也難不倒我們的各路數(shù)據(jù)英雄。他們個(gè)個(gè)身懷絕技,充分發(fā)揮主觀能動(dòng)性,在實(shí)戰(zhàn)中練就了一身特征選擇的好本領(lǐng)。

從方法論上來說,特征選擇有三種方法:Filter、 Wrapper和Embedded。Filter通常用來做預(yù)處理,通過特征與label之間相關(guān)性(主要是統(tǒng)計(jì)信息,例如互信息、顯著性檢驗(yàn)等)的評估,先過濾掉一部分;Wrapper是指將特征子集帶入模型,通過模型效果來進(jìn)行特征重要性的評估;Embedded是指特征選擇和模型訓(xùn)練同時(shí)進(jìn)行,直接決定是選擇特征還是拒絕特征,比較經(jīng)典的是決策樹和神經(jīng)網(wǎng)絡(luò)。就實(shí)戰(zhàn)方面而言,我常用的有下面幾種方法,還請各路英豪多多指教:

  • 利用統(tǒng)計(jì)方法,評估特征重要性
  • 利用L1正則將不重要的模型,刪除權(quán)重為0的特征
  • 特征帶入模型,根據(jù)權(quán)重算特征的相對重要性
  • 暴力循環(huán),如果加上該特征效果更好就保留,否則不加

不知不覺說了這么多,還是沒說廣告點(diǎn)擊率預(yù)估的特征工程到底該怎么做呀。其實(shí)任何機(jī)器學(xué)習(xí)問題都是有場景的,即便都是CTR預(yù)估,所面臨的數(shù)據(jù)規(guī)模,業(yè)務(wù)需求都不一樣,所對應(yīng)的特征工程也各有千秋,但總歸起來方法大致就是這些。至于我是怎么做的,其實(shí)沒用太復(fù)雜的東西,能滿足我的需求即可。在下一章介紹最小廣告系統(tǒng)mieSys(Github)時(shí)會(huì)大致說一下,這里就略過啦。

6.4.3 模型選擇

就模型方面來說,DNN幾乎橫掃了數(shù)據(jù)領(lǐng)域各個(gè)會(huì)議,無論哪個(gè)領(lǐng)域都要把CNN, RNN和LSTM套進(jìn)來試一試效果。即便如此,LR在CTR預(yù)估中的霸主地位還是很難撼動(dòng)的,這玩意兒實(shí)在太好用了,經(jīng)過優(yōu)化那是又快又準(zhǔn)。DNN在語音、圖像和自然語言處理領(lǐng)域的成效是有目共睹的,但是面對廣告這樣的高維向量也是犯起了老大難,直到最近注意到有用FM做embedding做降維的做法,倒是可以較好的解決這個(gè)問題。至于Online Learning方面,F(xiàn)TRL還是很好用的,國內(nèi)好幾家都在用。

上面這一段說下來,忽然覺得自己好像懂很多的樣子。。好了,不裝了,我去啃論文推公式了!關(guān)于模型選擇就說這么多,我是忠實(shí)的LR粉,沒啥說的,表衷心!至于Deep Learning,這種沒有理論依據(jù)就靠矩陣運(yùn)算顛過來倒過去不是Embedding就是梯度彌散再者就是Relu或者Dropout的東西,對此我只想說:請帶上我!

不知不覺,特征和模型都說完了,這就意味著CTR預(yù)估模塊講完了?CTR預(yù)估講完了,候選廣告有了序,TopN的一展示,我們的任務(wù)就完成了?來對照一下問題定義。我們要完成的是:從數(shù)據(jù)中挖掘出用戶的性別,根據(jù)性別為用戶展示TA們最可能點(diǎn)擊的廣告。我們將問題分解成多個(gè)基本的“輸入-系統(tǒng)-輸出”模塊之后,先后完成了單元模塊的設(shè)計(jì),最終打通了整個(gè)系統(tǒng)的流程,經(jīng)過多個(gè)模塊的處理和流水線式的輸入輸出,我們確實(shí)得到了我們想要的結(jié)果。

 模型選擇

 模型選擇

沒錯(cuò)!你看那主頁上那廣告不是達(dá)芙妮的女鞋嗎!

我們的系統(tǒng)建成了,就是這么簡單!

興奮著興奮著,突然就清醒過來,看了看四周,原來我還在那個(gè)會(huì)議室里,已經(jīng)過去了將近兩個(gè)小時(shí)。對面坐著leader,正慈眉善目的看著我,悠悠的說了句:

“不錯(cuò),挺好的。但是,是不是少了點(diǎn)什么?”

我一愣,少了點(diǎn)什么?不少呀!這不都挺好的,廣告也展示出來了,功能也實(shí)現(xiàn)了,還少啥?但是又仔細(xì)一想,難道leader是想問那些?噢噢那還真是少了。我不好意思的向leader吐了個(gè)舌頭,“嗯,確實(shí)還少了些東西”。

6.5 Server模塊

怎么把這個(gè)給漏了呢,說好的場景是媒體網(wǎng)站,沒有Server就意味著沒有頁面,給用戶看個(gè)啥?嗯嗯這個(gè)不能少。

6.6 計(jì)費(fèi)模塊

這個(gè)是最不該漏掉的,既然是廣告系統(tǒng),那怎么能不提錢呢?剛才的廣告確實(shí)是展示了,但是廣告商的賬戶里還有余額嗎?額…好像,沒了。。

6.7 反作弊模塊

這個(gè)模塊大家可能都不太熟悉,其實(shí)我也不太熟,但它卻至關(guān)重要。我們所有的決策和算法,都是建立在數(shù)據(jù)的基礎(chǔ)上,那么有一個(gè)非常嚴(yán)肅的問題:如果數(shù)據(jù)是錯(cuò)誤的,甚至是假的呢,這些策略還有效嗎?想到這里,我是覺得背后一涼,很難想象那種金玉其外敗絮其中的場景,嗯補(bǔ)上補(bǔ)上。

leader點(diǎn)點(diǎn)頭,說“基本都補(bǔ)上了,那么,還有嗎?”。

面試到這種程度,看來必須要放大招了。“有,看圖!”

在線廣告系統(tǒng)的框架圖

這張圖是劉鵬老師在網(wǎng)易公開課中講課時(shí)用到的,是工業(yè)級別的在線廣告系統(tǒng)的框架圖。從里面找找我們剛剛討論過的吧。

數(shù)據(jù)模塊找到了嗎?最下面綠色的,Data Highway以及Session log generation。受眾定向呢?就是Audience Targeting。然后到了中間,Ad retrieval就是廣告檢索,看到和它連著的Ad index了嗎,倒排呀!隨后就是CTR模塊,是CTR Model以及Ad Ranking。這就是最基本的四個(gè)模塊,那后來加的三個(gè)呢?Server就是Web,在左上角和中間上部;計(jì)費(fèi)和反作弊都在右下角。嗯,看來咱們弄的還挺全乎的。

那其他那些模塊是什么呢?我也只是知道個(gè)大概,這里就不獻(xiàn)丑,有了解的同學(xué)還請多多指教。

場景5

 廣告系統(tǒng)構(gòu)架場景五

leader沉思許久,最后沖著我重重的點(diǎn)了點(diǎn)頭,說了句河南話:“中!”

我趕緊回了句,“謝謝”。

leader神秘一笑,“那下面我們來做道算法題吧…”

我心說什么?廣告系統(tǒng)都有了,還要做題!要啥自行車?上表情包!

表情包

leader:哈哈開個(gè)玩笑,恭喜你,面試過了。

我:謝謝您!Mua~~~~

表情包

場景6

廣告系統(tǒng)構(gòu)架場景六

大眾點(diǎn)評搜索“小,吊,梨,湯”。噢!在這兒呢,不遠(yuǎn)不遠(yuǎn),看了下評價(jià)還不錯(cuò)。剛邁開步子準(zhǔn)備過去,路邊站著一位小姑娘,懷里捧著一沓宣傳單,給過路行人發(fā)放著。我走過去,她注意到我,熟練的抽出一張,笑著說道:

“您好,請了解一下”。

6. 展示廣告最小系統(tǒng)mie Sys

這一章就隨便聊聊mieSys的來歷吧,不講技術(shù)了。

mieSys的地址是http://115.159.33.50/,這兩個(gè)月來多次被抓肉雞,可能是Redis的問題,最近穩(wěn)定了。前不久我將系統(tǒng)開源了,代碼寫的不好,好多地方都可以優(yōu)化,先放個(gè)v1.0吧Github地址:https://github.com/breadada/mieSys

為什么想做這個(gè)最小系統(tǒng)呢,僅僅是因?yàn)橛X得好玩。之前在海淘的時(shí)候,就被Amazon的推薦效果給驚到了,我剛點(diǎn)了一雙鞋進(jìn)去,再次退到首頁的時(shí)候,大多數(shù)廣告位都與我剛點(diǎn)的那雙鞋有關(guān),或者是同一品牌,或者是同一款式。當(dāng)時(shí)我就心想,我也要做一個(gè)。后來劉鵬和王超老師出了《計(jì)算廣告》,讀到后面有介紹開源廣告框架,我心想這好啊,比葫蘆畫瓢的整一個(gè)唄?還正在猶豫中,就被介紹Nginx的一句話打動(dòng)了:

在廣告系統(tǒng)中,用Nginx作為前端Web服務(wù)器,而將廣告投放機(jī)的功能用C/C++語言實(shí)現(xiàn)成fastCGI插件,是一個(gè)開發(fā)成本較低、性能又很不錯(cuò)的方案。實(shí)際上,這一方案已經(jīng)實(shí)現(xiàn)了一個(gè)基本的廣告投放機(jī),從事最簡單的廣告投放業(yè)務(wù),而其他模塊和功能則可以根據(jù)需求逐步開發(fā)。

后 話

 

對相關(guān)內(nèi)容感興趣的同學(xué),還請參閱劉鵬和王超老師所著《計(jì)算廣告》,有更精準(zhǔn)的定義、描述與更詳細(xì)的講解,到這里,整個(gè)《計(jì)算廣告小窺》系列就結(jié)束了。

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)文章,微信公眾號:大數(shù)據(jù)文摘 id: BigDataDigest】

 大數(shù)據(jù)文摘二維碼

責(zé)任編輯:趙寧寧 來源: 大數(shù)據(jù)文摘
相關(guān)推薦

2023-06-30 10:36:32

人工智能數(shù)字孿生

2011-06-07 16:57:05

2017-03-30 16:27:46

互聯(lián)網(wǎng)

2017-08-28 11:17:21

車廠共享單車

2017-01-04 12:00:23

智能運(yùn)動(dòng)

2019-05-20 13:59:16

無人自行車谷歌黑科技

2021-06-09 14:48:04

自動(dòng)駕駛數(shù)據(jù)人工智能

2024-08-16 15:38:52

2020-07-22 18:19:13

iOS 14地圖自行車路線

2020-08-28 14:08:12

NTT Ltd虛擬自行車

2023-08-07 12:53:05

開發(fā)服務(wù)

2023-08-11 14:00:42

鴻蒙元服務(wù)

2013-03-11 09:23:22

Go語言面向?qū)ο?/a>

2015-03-27 16:16:37

智能

2025-02-28 10:36:25

2020-11-20 12:46:14

機(jī)器狗騰訊自行車

2021-07-23 17:15:19

GitHub代碼開發(fā)者

2020-08-24 07:55:48

解密系統(tǒng)架構(gòu)

2019-12-27 13:50:04

JavaAPI代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號