視頻點(diǎn)擊預(yù)測(cè)-TOP1方案

向AI轉(zhuǎn)型的程序員都關(guān)注了這個(gè)號(hào)??????
機(jī)器學(xué)習(xí)AI算法工程?? 公眾號(hào):datayx
移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,催生了海量視頻數(shù)據(jù)的產(chǎn)生,也為用戶(hù)提供了類(lèi)型豐富的視頻數(shù)據(jù)類(lèi)型。面對(duì)如何從海量視頻數(shù)據(jù)類(lèi)型中選擇用戶(hù)喜歡的類(lèi)型的這一難題,作為一家擁有海量視頻素材和用戶(hù)行為的數(shù)據(jù)公司,希望通過(guò)用戶(hù)行為數(shù)據(jù),用戶(hù)特征,以及視頻特征,可以在充足數(shù)據(jù)基礎(chǔ)上精準(zhǔn)的推薦給用戶(hù)喜歡的視頻類(lèi)型。
數(shù)據(jù)說(shuō)明:
第一部分是用戶(hù)在資訊全集上的移動(dòng)端行為數(shù)據(jù)(D)。
訓(xùn)練數(shù)據(jù)包含了抽樣出來(lái)的一定量用戶(hù)在三天之內(nèi)的移動(dòng)端行為數(shù)據(jù)(D),評(píng)分?jǐn)?shù)據(jù)是這些用戶(hù)在之后一天對(duì)子集(P)的點(diǎn)擊數(shù)據(jù)。參賽者要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶(hù)在接下來(lái)一天點(diǎn)擊行為的預(yù)測(cè)結(jié)果。
項(xiàng)目代碼,PPT 獲取方式:
關(guān)注微信公眾號(hào) datayx ?然后回復(fù)?視頻點(diǎn)擊?即可獲取。

最初拿到賽題,進(jìn)行了初步的分析,簡(jiǎn)單的搭建了一個(gè)LGB模型,一股腦把特征塞進(jìn)去, 效果不理想,約 0.53 成績(jī)。
在已經(jīng)建立好模型的基礎(chǔ)上繼續(xù)做 EDA,發(fā)現(xiàn)含有較多稀疏類(lèi)別特征,而且訓(xùn)練集deviceid,newsid 等特征跟測(cè)試集中有很大的的交叉。改用 DeepFM 建模,取得第二名 的成績(jī),約 0.6。

3. 繼續(xù)分析數(shù)據(jù),發(fā)現(xiàn)訓(xùn)練集、測(cè)試集的曝光時(shí)間戳都提供了。這是一個(gè)穿越特征。曝光 時(shí)間戳之間的 gap(后一個(gè) ts 減去當(dāng)前 ts)很能反映用戶(hù)是否點(diǎn)擊觀(guān)看了。我們進(jìn)行 了簡(jiǎn)單的處理,添加一個(gè)時(shí)間穿越特征后達(dá)到 0.65,繼續(xù)修改特征并調(diào)整模型后達(dá)到0.69,再次思考為什么第一名的 baseline 能夠有這么高的分?jǐn)?shù),肯定是某種強(qiáng)特,我 們對(duì)曝光時(shí)間戳 gap 挖掘的還不夠深。那可否用 LSTM 自動(dòng)挖掘序列特征呢?遂依據(jù)曝 光時(shí)間戳 gap 開(kāi)始構(gòu)造時(shí)序數(shù)據(jù)集,每條特征為 gap 序列(當(dāng)前記錄的前后 12 個(gè) gap, 見(jiàn)圖 2),并構(gòu)建 LSTM 模型(見(jiàn)圖 3),線(xiàn)上分?jǐn)?shù)為 0.76+。

圖4 app推薦列表

下載官方app使用后發(fā)現(xiàn)(圖4),app上顯示的是有新聞標(biāo)題或者圖片的,曝光時(shí)間 戳 gap 不能完全反應(yīng)用戶(hù)行為,有可能停留了一段時(shí)間看了會(huì)新聞標(biāo)題或者圖片。使用app 發(fā)現(xiàn)點(diǎn)擊了新聞后,pos 是會(huì)變化的,所以結(jié)合 pos 特征能很好的反應(yīng)用戶(hù)行為。我們把 pos embedding(embedding 長(zhǎng)度為 8)和 gap 進(jìn)行拼接(圖 5),組成序列特征, 模型跟圖 3 相似,不同的是 input 拼接了 pos 的 Embedding(Embedding 長(zhǎng)度為 8)。線(xiàn)上達(dá)到了 0.82+。
之前準(zhǔn)備將原始類(lèi)別特征(比如newsid等等)embedding拼接LSTM的輸出再經(jīng)過(guò)幾層MLP 進(jìn)行點(diǎn)擊預(yù)測(cè)的。理想分?jǐn)?shù)應(yīng)該有所提升,但是沒(méi)有,反而下降了。單獨(dú)使用 LSTM, 或者直接使用原始類(lèi)別特征 embedding 是沒(méi)有問(wèn)題。可能問(wèn)題出現(xiàn)在了網(wǎng)絡(luò)。通過(guò)分析, 我們網(wǎng)絡(luò)有塊地方有問(wèn)題,使用了 dropout 后直接進(jìn)行了 BatchNormal,這樣會(huì)有問(wèn)題, 隨機(jī)dropout后會(huì)導(dǎo)致BatchNormal的輸出分布不穩(wěn)定。解決了這個(gè)bug后,進(jìn)一步增 加了使用 DeepFM 處理類(lèi)別特征,LSTM 的輸出直接拼接到 DeepFM 的 DNN 模塊的輸入進(jìn) 行訓(xùn)練,線(xiàn)上分?jǐn)?shù)達(dá)到了 0.837+。

由于正負(fù)樣本相差太大(圖6),模型中加入了focalloss。線(xiàn)上分?jǐn)?shù)達(dá)到了0.83862。
這時(shí)候服務(wù)器20g內(nèi)存已經(jīng)吃緊了(即使了開(kāi)了虛擬內(nèi)存,但是運(yùn)行太慢了),支撐不 了過(guò)多的特征,比如 CTR 特征,交叉特征等??紤]到內(nèi)存,并且新增特征收益還要大, 只能繼續(xù)構(gòu)造時(shí)序特征。首先將當(dāng)前記錄的前后 12 個(gè) gap 改為當(dāng)前記錄的前后 14 個(gè)gap,并且將 newsid 的 embedding 加入序列特征中。線(xiàn)上達(dá)到了 0.845+。
二、模型說(shuō)明
2.1 特征:
gap(dense feature)、pos(sparse feature)、newsid(sparse feature)組成的 序列特征,作為 LSTM 的 input。
netmodel,device_vendor,device_version,app_version,deviceid,newsid,pos, 這些特征都是 sparse features,作為 DeepFM 的 input。
3. 相同特征名共享Embedding。
2.2 模型:
見(jiàn)圖 7:

首先左邊是 LSTM 模塊,輸入是 pos+gap+newsid 組成的 29 長(zhǎng)度(14+14+1)的序列,shape是 batchsize*29*17(8+1+8:pos,newsid 的 Embedding 長(zhǎng)度都為 8,gap 為 1),LSTM 的 輸出直接拼接 DeepFm DNN 模塊的輸入,最后把 DeepFM 的 DNN logit 輸出和 FM logit 輸出 相加作為最終輸出。感謝淺夢(mèng)大神的 DeepCTR 框架,優(yōu)雅高效,提供了各種 CTR 模型。我們 的 DeepFM 模型直接 copy DeepCTR 的相關(guān)代碼并進(jìn)行了部分修改。
三、相關(guān)經(jīng)驗(yàn)技巧總結(jié)
1、 ?尋找相似的過(guò)往比賽的代碼分享來(lái)學(xué)習(xí),多看論文
2、 ?當(dāng)遇見(jiàn)有較多 ID 重復(fù)出現(xiàn)的數(shù)據(jù)是請(qǐng)思考是否可以做統(tǒng)計(jì)特征和時(shí)序特征
3、 ?對(duì)以 F1 為優(yōu)化指標(biāo)的題目,閾值的選擇也很重要。
4、 ?由于內(nèi)存的限制很多方案沒(méi)有嘗試。
模型上比如:單層 LSTM 增加為多層 LSTM;DeepFM 改成 xDeepFM,NFM,NFFM 等等;
sparse feature 的 Embedding 可能還沒(méi)學(xué)習(xí)到足夠的語(yǔ)義,可以增大 Embedding size(目 前使用的是 8)或者用 w2v(甚至使用 deepwalk 構(gòu)造更多數(shù)據(jù))來(lái)預(yù)熱 Embedding。
特征方面也有不少可以嘗試,比如未使用的 user 表跟 app 表中的特征可以很好的 刻畫(huà)用戶(hù)畫(huà)像,還有之前提到的 CTR 特征、交叉特征等等。模型融合也值得嘗試,相信神經(jīng) 網(wǎng)絡(luò)跟樹(shù)模型融合收益還是很高的。
Pseudo label 在圖像及文本類(lèi)比賽中得到了不錯(cuò)的效果,對(duì)于本次比賽也可以嘗 試下。
參考鏈接
1、 ?DeepFM: A Factorization-Machine based Neural Network for CTR Prediction :
https://arxiv.org/abs/1703.04247
2、 ?DeepCTR:https://github.com/shenweichen/DeepCTR
3、2019 騰訊廣告算法大賽入門(mén)-Part1(競(jìng)賽小白晉升之路):
https://zhuanlan.zhihu.com/p/63718151
機(jī)器學(xué)習(xí)算法AI大數(shù)據(jù)技術(shù)
?搜索公眾號(hào)添加:?datanlp
長(zhǎng)按圖片,識(shí)別二維碼
閱讀過(guò)本文的人還看了以下文章:
TensorFlow 2.0深度學(xué)習(xí)案例實(shí)戰(zhàn)
基于40萬(wàn)表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測(cè)
《基于深度學(xué)習(xí)的自然語(yǔ)言處理》中/英PDF
Deep Learning 中文版初版-周志華團(tuán)隊(duì)
【全套視頻課】最全的目標(biāo)檢測(cè)算法系列講解,通俗易懂!
《美團(tuán)機(jī)器學(xué)習(xí)實(shí)踐》_美團(tuán)算法團(tuán)隊(duì).pdf
《深度學(xué)習(xí)入門(mén):基于Python的理論與實(shí)現(xiàn)》高清中文PDF+源碼
《深度學(xué)習(xí):基于Keras的Python實(shí)踐》PDF和代碼
python就業(yè)班學(xué)習(xí)視頻,從入門(mén)到實(shí)戰(zhàn)項(xiàng)目
2019最新《PyTorch自然語(yǔ)言處理》英、中文版PDF+源碼
《21個(gè)項(xiàng)目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實(shí)踐詳解》完整版PDF+附書(shū)代碼
《深度學(xué)習(xí)之pytorch》pdf+附書(shū)源碼
PyTorch深度學(xué)習(xí)快速實(shí)戰(zhàn)入門(mén)《pytorch-handbook》
【下載】豆瓣評(píng)分8.1,《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼
汽車(chē)行業(yè)完整知識(shí)圖譜項(xiàng)目實(shí)戰(zhàn)視頻(全23課)
李沐大神開(kāi)源《動(dòng)手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計(jì)學(xué)習(xí)方法》最新資源全套!
《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼
將機(jī)器學(xué)習(xí)模型部署為REST API
FashionAI服裝屬性標(biāo)簽圖像識(shí)別Top1-5方案分享
重要開(kāi)源!CNN-RNN-CTC 實(shí)現(xiàn)手寫(xiě)漢字識(shí)別
同樣是機(jī)器學(xué)習(xí)算法工程師,你的面試為什么過(guò)不了?
前海征信大數(shù)據(jù)算法:風(fēng)險(xiǎn)概率預(yù)測(cè)
【Keras】完整實(shí)現(xiàn)‘交通標(biāo)志’分類(lèi)、‘票據(jù)’分類(lèi)兩個(gè)項(xiàng)目,讓你掌握深度學(xué)習(xí)圖像分類(lèi)
VGG16遷移學(xué)習(xí),實(shí)現(xiàn)醫(yī)學(xué)圖像識(shí)別分類(lèi)工程項(xiàng)目
特征工程(二) :文本數(shù)據(jù)的展開(kāi)、過(guò)濾和分塊
如何利用全新的決策樹(shù)集成級(jí)聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
全球AI挑戰(zhàn)-場(chǎng)景分類(lèi)的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線(xiàn)識(shí)別手寫(xiě)中文網(wǎng)站
中科院Kaggle全球文本匹配競(jìng)賽華人第1名團(tuán)隊(duì)-深度學(xué)習(xí)與特征工程
不斷更新資源
深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)分析、python
?搜索公眾號(hào)添加:?datayx??
