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