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