【複賽前排分享(三)】高手上場第一招,這些賽事技巧你掌握了嗎?

  • 2020 年 12 月 16 日
  • AI

2020騰訊廣告演算法大賽複賽已經落幕,決賽答辯終極一戰即將在8月3日14:00深圳騰訊濱海大廈舉行,了解決賽詳情並預約直播觀賽,請點擊:

《決賽來襲!十強戰隊齊聚,終極一戰拉開帷幕!》

外部賽場戰況激烈,騰訊公司也聯合碼客開啟了面向員工的內部賽道。在這次複賽前排分享會,我們邀請到了名列複賽內部榜第三的Embedding團隊。在破解本次賽題的過程中,他們不僅實現了自己的解決方案,還解鎖了許多賽事技巧。接下來,就讓Embedding的思路引領我們走向破題的關鍵吧!


01 賽題解讀

本屆騰訊廣告演算法大賽的複賽題目是用戶畫像,即根據用戶點擊廣告的序列預測用戶的年齡和性別。


02 答題概況&技巧

本次比賽我們組使用了純Transformer架構,另外訓練了基於聯合ID的詞向量嵌入方案,在複賽A榜中,基於Skip Gram的詞向量6輸入20折模型可獲得1.474的分數,加上聯合ID詞向量後能達到1.476,在B榜中為1.478。

再給大家分享一些我們總結的本次賽事技巧:

1) transformer學習率要小,並且隨著epoch的增加,可適當降低學習率。

2) 模型中間層的結果可以concat的方式拼接到一起,供最後全連接層使用。

3) creative_id關聯起來的多個屬性ID可以通過聯合學習的方式生成詞向量,能進一步提升模型性能。

4) transformer結構多折融合收益顯著。


03 數據準備&預處理

將初賽訓練集、測試集和複賽訓練集解壓縮到input文件夾,生成的詞向量和合併後的數據文件也都存儲在input文件夾中,model文件夾為存儲訓練過程中保存的模型文件。

之後對數據進行預處理:

- ad.csv: product_id, industry中的\\N替換成0,然後所有值+1。

- ad.csv, click_log.csv連接:以creative_id為基礎將兩張表合併,將初賽數據集、複賽數據集合併,並按照'user_id', 'time'排序。

- hdf文件保存:

train_click_log

test_click_log

train_user

- 生成訓練、測試jsonl數據集:對每個user,生成:

{'user_id': user_id, 'labels': [age, gender], 'time': [], 'creative_id': [], 'click_times': [], 'ad_id': [], 'product_id': [], 'product_category': [], 'advertiser_id': [], 'industry': []}

- 生成skip gram詞向量訓練數據集:對於每個用戶的以下序列,寫入到文件中:

'creative_id'

'ad_id'

'product_id'

'product_category'

'advertiser_id'

'industry'

- 生成joint id詞向量訓練數據集:將jsonl中的'user_id','labels','time','click_times'刪除後,形成joint id數據集。


04 訓練詞向量

- skip gram詞向量:使用gensim,參數為:

`gensim.models.Word2Vec(sentences, size=128, window=20, min_count=1, workers=24, iter=10, sg=1, negative=20, sample=1e-3)。`

- joint id 詞向量:模仿KDD18論文——

arxiv.org/pdf/1712.0828

對creative_id生成128維詞向量,訓練分為兩個階段:第一階段以0.004的學習率訓練5輪,第二階段以0.001的學習率學習3輪。


05 Transformer模型

1)特徵

共使用了6個ID類特徵:

creative_id

ad_id

product_id

advertiser_id

industry

product_category

其中creative_id、ad_id在輸入階段已經轉化成了詞向量embedding特徵。creative_id轉換的特徵有兩個:

joint_in_creative_emb

creative_id_emb

ad_id轉化的特徵為ad_id_emb。以下四個ID使用pytorch預先載入權重:

product_id

advertiser_id

industry

product_category

並且Embedding層也參與訓練。

2)模型結構

每個ID單獨Embedding後使用一層稀疏Transformer模型SinkhornTransformer進行Encoder編碼,形成7個BatchSize * MaxLength * EmbbedingSize的序列。

然後在Embbeding維度Concat到一起,使用兩個新的SinkhornTransformer依次進行Encoder編碼。

最後將Embedding層、3個SinkhornTransformer層分別進行MaxPooling,形成BatchSize * (EmbbedingSize * 28)的矩陣,然後分別接一個2分類和10分類的全連接層。

3)運行參數

- 嵌入維度:128

- 最大序列長度:128

- 批大小:128

- Epoch:3

- 學習率:每個Epoch的學習率分別是1e-4, 6e-5, 1e-5。

- 模型保存:每個Epoch分別每隔10000,8000,4000步保存一次,20折交叉驗證時可取48000步的模型作為最終模型使用。


06 多折結果融合

對20折產生的模型,依次進行預測,將分類結果softmax後,將20個結果相加,取值最大的所在索引,+1後得到最終提交文件。


感謝Embedding團隊的分享。緊張的實戰中技巧常常是取勝的關鍵,這也是Embedding的取勝法寶之一。希望選手們在決賽答辯時也能善於找到自己的優勢,展現出自己的最佳狀態!


8月3日14:00騰訊廣告演算法大賽決賽即將啟幕,演算法王者巔峰對決,為你帶來演算法與技術激烈碰撞的盛筵。快點擊【文末鏈接】,掃描報名頁面底部二維碼,預約線上直播觀賽吧!

同時,歡迎選手們到「官網---個人資訊」頁面上傳簡歷。加入騰訊,就趁現在!


掃碼加入大賽官方QQ群

或搜索群號:1094257162

和小夥伴一起解鎖更多內容

點擊下方鏈接,預約直播觀賽:

2020騰訊廣告演算法大賽​algo.qq.com

Tags: