【数据竞赛】2020腾讯广告算法大赛冠军方案分享及代码
寫(xiě)在前面
2019年冠軍選手成功衛(wèi)冕!!!
代碼地址:https://github.com/guoday/Tencent2020_Rank1st
從初賽冠軍、復(fù)賽冠軍,然后到最佳答辯,一路披荊斬棘,再次感謝隊(duì)友(中山大學(xué)微軟亞洲研究院聯(lián)合培養(yǎng)博士生郭達(dá)雅、多次榮獲國(guó)內(nèi)NLP和數(shù)據(jù)挖掘比賽top名次選手梁少?gòu)?qiáng),賽圈id“大白”)。
本文將給出冠軍核心方案,全文內(nèi)容架構(gòu)將依托于答辯PPT,希望這篇分享能夠給予你更多的啟發(fā)。
下面就讓跟隨我一起探索這榮獲最高嘉獎(jiǎng)的方案 !
賽題介紹
本屆算法大賽的題目來(lái)源于一個(gè)重要且有趣的問(wèn)題。眾所周知,像用戶年齡和性別這樣的人口統(tǒng)計(jì)學(xué)特征是各類推薦系統(tǒng)的重要輸入特征,其中自然也包括了廣告平臺(tái)。這背后的假設(shè)是,用戶對(duì)廣告的偏好會(huì)隨著其年齡和性別的不同而有所區(qū)別。許多行業(yè)的實(shí)踐者已經(jīng)多次驗(yàn)證了這一假設(shè)。然而,大多數(shù)驗(yàn)證所采用的方式都是以人口統(tǒng)計(jì)學(xué)屬性作為輸入來(lái)產(chǎn)生推薦結(jié)果,然后離線或者在線地對(duì)比用與不用這些輸入的情況下的推薦性能。本屆大賽的題目嘗試從另一個(gè)方向來(lái)驗(yàn)證這個(gè)假設(shè),即以用戶在廣告系統(tǒng)中的交互行為作為輸入來(lái)預(yù)測(cè)用戶的人口統(tǒng)計(jì)學(xué)屬性。
我們認(rèn)為這一賽題的“逆向思考”本身具有其研究?jī)r(jià)值和趣味性,此外也有實(shí)用價(jià)值和挑戰(zhàn)性。例如,對(duì)于缺乏用戶信息的實(shí)踐者來(lái)說(shuō),基于其自有系統(tǒng)的數(shù)據(jù)來(lái)推斷用戶屬性,可以幫助其在更廣的人群上實(shí)現(xiàn)智能定向或者受眾保護(hù)。與此同時(shí),參賽者需要綜合運(yùn)用機(jī)器學(xué)習(xí)領(lǐng)域的各種技術(shù)來(lái)實(shí)現(xiàn)更準(zhǔn)確的預(yù)估。
賽題理解
1.數(shù)據(jù)
在比賽期間,主辦方將為參賽者提供一組用戶在長(zhǎng)度為 91 天(3 個(gè)月)的時(shí)間窗口內(nèi)的廣告點(diǎn)擊歷史記錄作為訓(xùn)練數(shù)據(jù)集。每條記錄中包含了日期(從 1 到 91)、用戶信息(年齡,性別),被點(diǎn)擊的廣告的信息(素材 id、廣告 id、產(chǎn)品 id、產(chǎn)品類目 id、廣告主id、廣告主行業(yè) id 等),以及該用戶當(dāng)天點(diǎn)擊該廣告的次數(shù)。測(cè)試數(shù)據(jù)集將會(huì)是另一組用戶的廣告點(diǎn)擊歷史記錄。
2.目標(biāo)
提供給參賽者的測(cè)試數(shù)據(jù)集中不會(huì)包含這些用戶的年齡和性別信息。本賽題要求參賽者預(yù)測(cè)測(cè)試數(shù)據(jù)集中出現(xiàn)的用戶的年齡和性別,并以約定的格式提交預(yù)測(cè)結(jié)果。
3.評(píng)價(jià)指標(biāo)
大賽會(huì)根據(jù)參賽者提交的結(jié)果計(jì)算預(yù)測(cè)的準(zhǔn)確率(accuracy)。年齡預(yù)測(cè)和性別預(yù)測(cè)將分別評(píng)估準(zhǔn)確率,兩者之和將被用作參賽者的打分。
測(cè)試數(shù)據(jù)集會(huì)和訓(xùn)練數(shù)據(jù)集一起提供給參賽者。大賽會(huì)將測(cè)試數(shù)據(jù)集中出現(xiàn)的用戶劃分為兩組,具體的劃分方式對(duì)參賽者不可見(jiàn)。其中一組用戶將被用于初賽和復(fù)賽階段除最后一天之外的排行榜打分計(jì)算,另一組則用于初賽和復(fù)賽階段最后一天的排行榜打分計(jì)算,以及最后的勝出隊(duì)伍選擇。
特征工程
1.統(tǒng)計(jì)特征
用戶出現(xiàn)的總次數(shù)和天數(shù)
用戶點(diǎn)擊廣告的總次數(shù)
用戶點(diǎn)擊不同廣告、產(chǎn)品、類別、素材、廣告主的總數(shù)
用戶每天每條廣告點(diǎn)擊的平均次數(shù),均值和方差
2.概率分布特征
簡(jiǎn)單的理解就是五折交叉的target encoding 得到每個(gè)該廣告實(shí)體對(duì)應(yīng)的性別年齡信息,按用戶點(diǎn)擊廣告實(shí)體進(jìn)行聚合統(tǒng)計(jì)。在此次比賽中我們僅使用了這兩組特征,但在比賽過(guò)程中我們也進(jìn)行了大量的特征工程嘗試,比如tfidf+stacking、word2vec、deepwalk等特征,或者各類聚合統(tǒng)計(jì)。
模型介紹
先來(lái)看下模型框架部分,主要分為三個(gè)部分。
BERT—Bidirectional Encoder Representation From Transformer
首先是bert部分,假設(shè)每個(gè)廣告為一個(gè)單詞,將用戶點(diǎn)擊序列看作一句話,這樣就將問(wèn)題轉(zhuǎn)為了NLP的文本分類問(wèn)題。我們使用bert作為我們的encoder進(jìn)行編碼,這里我們使用了12層transformer。每層transoformer將上一層的隱變量作為輸入,經(jīng)過(guò)Multi-Head Self Attention和Layer Norm等,最后輸出交互更高的隱變量。
我們知道bert在NLP取得巨大成功的原因主要是預(yù)訓(xùn)練,所以在比賽初期不斷嘗試將預(yù)訓(xùn)練運(yùn)用到本賽題中。但與NLP不同,廣告具有稀疏性,使其詞表達(dá)到七八百萬(wàn),這里會(huì)造成兩個(gè)問(wèn)題。第一個(gè)問(wèn)題是這么大的詞表很難放入GPU中,第二個(gè)問(wèn)題是即使放到CPU,由于參數(shù)過(guò)大,也難于訓(xùn)練。針對(duì)這些問(wèn)題,我們使用了兩階段的預(yù)訓(xùn)練方法對(duì)BERT進(jìn)行訓(xùn)練。
預(yù)訓(xùn)練—Word2Vector
第一階段是使用word2vec去預(yù)訓(xùn)練廣告的embedding,目標(biāo)是將類似的廣告進(jìn)行聚類,具體操作如下圖所示,將用戶點(diǎn)擊廣告序列輸入到embedding層,然后預(yù)測(cè)廣告id。但這里會(huì)存在兩個(gè)問(wèn)題,首先是我們只使用了一個(gè)廣告去預(yù)測(cè)另一個(gè)廣告,并沒(méi)有使用更多的廣告進(jìn)行預(yù)測(cè),因此缺失了更多的上下文信息。其次是沒(méi)有利用廣告本身的屬性進(jìn)行預(yù)測(cè),比如類別信息,或者年齡性別信息。比如給定該廣告是一個(gè)游戲類型的廣告,那么就更容易預(yù)測(cè)出當(dāng)前廣告,同時(shí)也鼓勵(lì)模型結(jié)合最近點(diǎn)擊的廣告和當(dāng)前廣告的屬性進(jìn)行預(yù)測(cè),從而對(duì)齊廣告id及其屬性的embedding。
預(yù)訓(xùn)練—Masked Language Modeling (MLM)
鑒于以上問(wèn)題,我們對(duì)Masked Language Modeling(MLM)進(jìn)行改進(jìn),原始的MLM是直接mask掉整個(gè)廣告包括屬性,但我們只mask廣告的一部分(廣告id或者屬性)。
具體地,我們隨機(jī)mask掉20%的token,mask后的位置使用0向量來(lái)代替,或者采樣一個(gè)屬性id來(lái)替換。使用改進(jìn)的MLM預(yù)測(cè)這些廣告的時(shí)候,不僅可以使用最近點(diǎn)擊的廣告,也可以用它的屬性去預(yù)測(cè),使得不同屬性的embedding能夠在語(yǔ)義空間上對(duì)齊。同時(shí),我們也采用了一個(gè)很關(guān)鍵的策略,我們把詞表縮小到10萬(wàn)(提取top10w,其余為unk),這樣使得bert能跑起來(lái)。對(duì)于原始的MLM,我們也嘗試過(guò),雖然有提高但提高不是很大。
最后預(yù)測(cè)這些id的時(shí)候,不僅可以使用之前之后點(diǎn)擊的廣告,也可以用它的屬性去預(yù)測(cè)。
融合層—Fusion Layer
把點(diǎn)擊廣告的受眾人群性別年齡分布融入到網(wǎng)絡(luò)之中,具體的做法是把人群分為五個(gè)部分,假設(shè)用戶點(diǎn)擊n個(gè)廣告并來(lái)自第一個(gè)人群,那么可以把剩下的作為種子人群,計(jì)算出每個(gè)廣告的性別年齡概率分布,用四層的transformer進(jìn)行融合。
輸出層
結(jié)果與分析
初賽階段
2020-5-21: 使用BERT
2020-5-27: 調(diào)整BERT的參數(shù),鎖定A榜冠軍
2020-6-03: 調(diào)整學(xué)習(xí)策略,使用warmup調(diào)整學(xué)習(xí)率,學(xué)習(xí)率先增后減
2020-6-12: 模型融合
2020-6-22: 切換B榜
復(fù)賽階段
2020-6-26: 復(fù)現(xiàn)初賽模型
2020-6-30: 引入Fusion Layer, 鎖定A榜冠軍
2020-7-21: 模型融合
2020-7-22: 切換B榜
思考與總結(jié)
主要?jiǎng)?chuàng)新
改進(jìn)BERT并運(yùn)用到人口屬性預(yù)測(cè)場(chǎng)景
分階段預(yù)訓(xùn)練,緩解廣告稀疏性問(wèn)題并加快預(yù)訓(xùn)練速度 (4*V100 預(yù)訓(xùn)練12個(gè)小時(shí))
改進(jìn)MLM預(yù)訓(xùn)練目標(biāo),并從多維度學(xué)習(xí)廣告及其屬性的語(yǔ)義表示
將BERT運(yùn)用到人口屬性預(yù)測(cè)的場(chǎng)景,從性能上驗(yàn)證了預(yù)訓(xùn)練在廣告領(lǐng)域的潛力
提出融合后驗(yàn)概率分布的方法及模型
利用受眾人群求出每個(gè)廣告的概率分布
利用多層Transformer融合概率分布及BERT的語(yǔ)義表示,能有效提升性能
問(wèn)題思考
預(yù)訓(xùn)練模型越大越好?
如何進(jìn)一步改善預(yù)訓(xùn)練模型?
預(yù)訓(xùn)練目標(biāo)
支持圖輸入的預(yù)訓(xùn)練模型
廣告稀疏性問(wèn)題,例如在未脫敏的情況下使用BPE算法
總結(jié)
歷時(shí)兩個(gè)半月的騰訊廣告大賽,非常感謝工作人員辛苦的答疑。感謝主辦方提供真實(shí)的業(yè)務(wù)場(chǎng)景與數(shù)據(jù),讓我們能在比賽中學(xué)習(xí)到更多知識(shí),在廣告業(yè)務(wù)中做更多嘗試。
往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請(qǐng)掃碼進(jìn)群(如果是博士或者準(zhǔn)備讀博士請(qǐng)說(shuō)明):總結(jié)
以上是生活随笔為你收集整理的【数据竞赛】2020腾讯广告算法大赛冠军方案分享及代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 李航老师《统计学习方法》的代码实现、课件
- 下一篇: 【资源】太赞了!程序员应该访问的最佳网站