大型強子對撞機和 Odnoklassniki

延續 Habré 機器學習競賽的主題,我們想向讀者介紹另外兩個平台。 它們當然不像 Kaggle 那麼龐大,但它們絕對值得關注。

大型強子對撞機和 Odnoklassniki

就我個人而言,我不太喜歡kaggle,原因如下:

  • 首先,那裡的比賽往往持續數月,積極參與需要付出很大的努力;
  • 其次,公共核心(公共解決方案)。 Kaggle 的追隨者建議像西藏僧侶一樣冷靜地對待他們,但實際上,當你努力了一兩個月的事情突然變成了所有人都可以得到的東西時,這是相當遺憾的。

幸運的是,機器學習競賽也在其他平台上舉辦,我們將討論其中的一些競賽。

伊達奧 2019 年 SNA 黑客馬拉松
官方語言: 英語,
主辦單位:Yandex、Sberbank、HSE
官方俄語,
主辦單位:Mail.ru Group
線上輪:15年11月2019日—XNUMX月XNUMX日;
現場決賽:4年6月2019-XNUMX日
線上——7月15日至XNUMX月XNUMX日;
線下 - 30月1日至XNUMX月XNUMX日。
使用大型強子對撞機中某個粒子的一組特定資料(軌跡、動量和其他相當複雜的物理參數),確定它是否為μ介子
根據該聲明,確定了 2 項任務:
- 在其中你只需發送你的預測,
- 另一方面 - 用於預測的完整程式碼和模型,並且執行受到運行時間和記憶體使用相當嚴格的限制
對於 SNA 黑客馬拉鬆比賽,收集了 2018 年 XNUMX 月至 XNUMX 月用戶動態消息中開放群組的內容顯示日誌。 測試集包含三月的最後一周半。 日誌中的每個條目都包含有關顯示內容和向誰顯示的信息,以及用戶對此內容的反應:對其進行評級、評論、忽略它或將其從提要中隱藏。
SNA 黑客馬拉松任務的本質是對社交網路 Odnoklassniki 的每個用戶的提要進行排名,盡可能提高那些將獲得「類別」的貼文。
線上階段,任務分為3部分:
1.根據各種協作特性對帖子進行排序
2.根據貼文包含的圖片對貼文進行排名
3.根據貼文包含的文字對貼文進行排名
複雜的自訂指標,例如 ROC-AUC 按使用者劃分的平均 ROC-AUC
第一階段獎品-N個名額T卹,進入第二階段,比賽期間住宿及膳食自理
第二階段-??? (由於某些原因,我沒有出席頒獎典禮,無法得知最終的獎項是什麼)。 他們承諾向獲勝團隊的所有成員提供筆記型電腦
第一階段的獎品 - 為 100 名最佳參賽者頒發 T 卹,進入第二階段,支付前往莫斯科的旅費、比賽期間的住宿和膳食。 此外,在第一階段即將結束時,還宣布了第一階段 3 項任務中的最佳獎品:每個人都贏得了 RTX 1 TI 顯示卡!
第二階段為團隊賽,團隊由2至5人組成,獎品:
第一名 - 1 萬盧布
第一名 - 2 萬盧布
第一名 - 3 萬盧布
評審團獎 - 100 盧布
官方電報群,約190人參與,英文交流,問題需等幾天才能得到答复 telegram 官方群組,約 1500 名參與者,參與者和組織者之間積極討論任務
組織者提供了兩種基本解決方案,簡單的和進階的。 簡單需要小於 16 GB 的 RAM,而高階記憶體則無法容納 16 GB。 同時,稍微展望一下,參與者並不能顯著優於先進的解決方案。 推出這些解決方案沒有任何困難。 應該指出的是,在高級範例中,有一條註釋暗示了從哪裡開始改進解決方案。 每個任務都提供了基本的原始解決方案,這些解決方案很容易被參與者超越。 在比賽初期,參賽者遇到了幾個困難:首先,數據是以 Apache Parquet 格式給出的,並不是所有 Python 和 parquet 套件的組合都能毫無錯誤地工作。 第二個困難是從郵件雲下載圖片,目前還沒有簡單的方法可以一次下載大量資料。 結果,這些問題耽誤了參與者幾天的時間。

愛達奧。 第一階段

任務是根據μ子/非μ子粒子的特性對它們進行分類。 這項任務的關鍵特徵是訓練資料中存在權重列,組織者自己將其解釋為對此行答案的信心。 問題是相當多的行包含負權重。

大型強子對撞機和 Odnoklassniki

在思考帶有提示的線條(提示只是提醒人們注意權重列的這一功能)並建立此圖表後,我們決定檢查 3 個選項:

1)反轉具有負權重的線的目標(以及相應的權重)
2)將權重移至最小值,使其從0開始
3)不要使用弦權重

第三個選項結果是最差的,但是前兩個選項改善了結果,最好的是選項1,它立即使我們在第一個任務中排名第二,在第二個任務中排名第一。
大型強子對撞機和 Odnoklassniki
我們的下一步是檢查資料中是否有缺失值。 主辦單位給了我們已經梳理好的數據,其中有不少缺失值,用-9999代替。

我們發現MatchedHit_{X,Y,Z}[N]和MatchedHit_D{X,Y,Z}[N]欄位中存在缺失值,並且僅當N=2或3時才存在。據我們了解,有些粒子沒有通過所有4 個探測器,並停在第3 或第4 塊板上。 資料還包含 Lextra_{X,Y}[N] 列,這些欄位顯然描述了與 MatchedHit_{X,Y,Z}[N] 相同的內容,但使用了某種外推法。 這些微不足道的猜測表明 Lextra_{X,Y}[N] 可以取代 MatchedHit_{X,Y,Z}[N] 中缺少的值(僅適用於 X 和 Y 座標)。 MatchedHit_Z[N] 很好地填入了中位數。 這些操作使我們在這兩項任務中都達到了第一中間位置。

大型強子對撞機和 Odnoklassniki

考慮到他們沒有為贏得第一階段做出任何貢獻,我們本可以就此打住,但我們繼續,畫了一些漂亮的圖畫並提出了新功能。

大型強子對撞機和 Odnoklassniki

例如,我們發現,如果我們繪製一個粒子與四個探測器板中每一個的交點,我們可以看到每個板上的點被分成 5 個長寬比為 4 到 5 的矩形,中心位於點(0,0),且在第一個矩形中沒有點。

板數/矩形尺寸 1 2 3 4 5
板1 500h625 1000h1250 2000h2500 4000h5000 8000h10000
板2 520h650 1040h1300 2080h2600 4160h5200 8320h10400
板3 560h700 1120h1400 2240h2800 4480h5600 8960h11200
板4 600h750 1200h1500 2400h3000 4800h6000 9600h12000

確定這些尺寸後,我們為每個粒子添加了 4 個新的分類特徵——它與每個板相交的矩形的數量。

大型強子對撞機和 Odnoklassniki

我們還注意到,粒子似乎從中心散射到兩側,並且產生了以某種方式評估這種散射的“質量”的想法。 理想情況下,可能可以根據起飛點得出某種“理想”拋物線並估計與它的偏差,但我們將自己限制在“理想”直線上。 在為每個入口點建構了這樣的理想直線後,我們就能夠計算出每個粒子的軌跡與這條直線的標準差。 由於目標 = 1 的平均偏差為 152,目標 = 0 的平均偏差為 390,因此我們初步評估此功能良好。 事實上,這個功能立即躋身最有用功能的榜首。

我們很高興,並將每個粒子的所有 4 個交點與理想直線的偏差添加為額外的 4 個特徵(它們也運作良好)。

組織者給我們提供了有關競賽主題的科學文章的鏈接,這讓我們意識到我們遠不是第一個解決這個問題的人,也許有某種專門的軟體。 在 github 上發現了實作 IsMuonSimple、IsMuon、IsMuonLoose 方法的儲存庫後,我們將它們轉移到我們的網站並進行了一些小的修改。 這些方法本身非常簡單:例如,如果能量小於某個閾值,那麼它就不是μ子,否則它就是μ子。 這樣簡單的特徵顯然無法在使用梯度提升的情況下提供增加,因此我們在閾值上添加了另一個顯著的「距離」。 這些功能也得到了輕微改進。 也許,透過更徹底地分析現有方法,可以找到更強的方法並將其添加到符號中。

比賽結束後,我們對第二個問題的「快速」解決方案進行了稍微調整,最終與基線有以下幾點不同:

  1. 在權重為負的行中,目標被反轉
  2. 填入MatchedHit_{X,Y,Z}[N]中的缺失值
  3. 深度減少至 7
  4. 將學習率降低至 0.1(原為 0.19)

結果,我們嘗試了更多的功能(不是很成功),選擇了參數並訓練了catboost、lightgbm 和xgboost,嘗試了不同的預測混合,在打開私有之前,我們自信地贏得了第二項任務,而在第一項任務中,我們躋身於領導人。

開放私人後,我們在第一個任務中排名第十,在第二個任務中排名第三。 各位領導都混了,私下的速度比libboard上還快。 資料似乎分層得很差(或例如,私有中沒有負權重的行),這有點令人沮喪。

SNA 黑客馬拉松 2019 - 文本。 第一階段

任務是根據用戶帖子所包含的文本對 Odnoklassniki 社交網絡上的用戶帖子進行排名;除了文本之外,帖子還有一些其他特徵(語言、所有者、創建日期和時間、查看日期和時間) )。

作為處理文字的經典方法,我會強調兩個選項:

  1. 將每個單字映射到 n 維向量空間,使得相似的單字具有相似的向量(更多內容請參閱 我們的文章),然後找到文字的平均單字或使用考慮單字相對位置的機制(CNN、LSTM/GRU)。
  2. 使用可以立即處理整個句子的模型。 例如,伯特. 理論上,這種方法應該會效果更好。

因為這是我第一次接觸文本,所以教別人是錯的,所以我會教自己。 這些是我在比賽開始時給自己的提示:

  1. 在你開始教東西之前,先看看數據! 除了文字本身之外,數據還有幾列,並且可以從它們中擠出比我更多的內容。 最簡單的事情是對某些列進行平均目標編碼。
  2. 不要從所有數據中學習! 數據量很大(大約 17 萬行),絕對沒有必要使用所有數據來檢驗假設。 訓練和預處理非常慢,而且我顯然有時間測試更有趣的假設。
  3. <有爭議的建議> 無需尋找殺手級型號。 我花了很長時間弄清楚 Elmo 和 Bert,希望他們能立即把我帶到一個更高的地方,結果我使用了 FastText 預訓練的俄語嵌入。 我無法與 Elmo 一起實現更好的速度,而且我仍然沒有時間與 Bert 一起解決這個問題。
  4. <有爭議的建議> 無需尋找一項殺手級功能。 查看數據,我注意到大約 1% 的文字實際上不包含文字! 但是有一些資源的鏈接,我編寫了一個簡單的解析器來打開該網站並提取標題和描述。 這似乎是個好主意,但後來我得意忘形,決定解析所有文本的所有鏈接,並再次浪費了很多時間。 所有這些並沒有對最終結果產生顯著的改善(例如,儘管我想出了詞幹提取)。
  5. 經典功能有效。 例如,我們用谷歌搜尋“text features kaggle”,閱讀並添加所有內容。 TF-IDF 提供了改進,文字長度、單字和標點符號數量等統計特徵也得到了改進。
  6. 如果存在 DateTime 列,則值得將它們解析為幾個單獨的功能(小時、星期幾等)。 應使用圖表/一些指標來分析應突出顯示哪些功能。 在這裡,一時興起,我正確地做了所有事情並突出了必要的功能,但正常的分析不會有什麼壞處(例如,正如我們在決賽中所做的那樣)。

大型強子對撞機和 Odnoklassniki

比賽的結果,我訓練了一個帶有單字卷積的 keras 模型,以及另一個基於 LSTM 和 GRU 的模型。 他們都使用了針對俄語的預訓練 FastText 嵌入(我嘗試了許多其他嵌入,但這些是效果最好的)。 在預測進行平均後,我在 7 名參與者中最終獲得了第七名。

第一階段發布後 尼古拉·阿諾欣的文章,誰獲得了第二名(他沒有參加比賽),他的解決方案在某種程度上重複了我的解決方案,但由於查詢鍵值注意機制,他走得更遠。

第二階段 OK & IDAO

第二階段的比賽幾乎是連續進行的,所以我決定一起看。

首先,我和新收購的團隊來到了 Mail.ru 公司令人印象深刻的辦公室,我們的任務是結合第一階段的三個曲目的模型 - 文字、圖片和協作。 為此分配了兩天多一點的時間,結果發現時間非常短。 事實上,我們只是重複了第一階段的成果,並沒有從合併中獲得任何利益。 最終我們獲得了第五名,但是我們無法使用文字模型。 在查看其他參與者的解決方案後,似乎值得嘗試對文字進行聚類並將其添加到協作模型中。 這一階段的一個副作用是新的印象,與酷的參與者和組織者的會面和交流,以及嚴重缺乏睡眠,這可能影響了IDAO最後階段的結果。

IDAO 2019 決賽階段的任務是預測 Yandex 計程車司機在機場等待訂單的時間。 在第 2 階段,確定了 3 個任務 = 3 個機場。 對於每個機場,給出了六個月內出租車訂單數量的每分鐘數據。 作為測試數據,給出了下個月和過去兩週訂單的分鐘數據。 時間很少(2天),任務也很具體,隊裡只有一個人來參加比賽-結果,最後是一個悲傷的地方。 有趣的想法包括嘗試使用外部數據:天氣、交通擁堵和 Yandex 計程車訂單統計數據。 儘管主辦單位沒有透露這些機場是什麼,但許多參與者認為它們是謝列梅捷沃、多莫傑多沃和伏努科沃。 儘管這一假設在比賽後被駁斥,但莫斯科天氣數據等特徵改善了驗證和排行榜的結果。

結論

  1. ML 比賽很酷又很有趣! 在這裡,您將發現數據分析技能以及巧妙的模型和技術的使用,並歡迎簡單的常識。
  2. 機器學習已經是一個龐大的知識體系,而且似乎正在呈指數級增長。 我為自己設定了一個目標,要熟悉不同的領域(訊號、圖片、表格、文字),並且已經意識到有多少東西需要學習。 例如,在這些比賽之後,我決定學習:聚類演算法、使用梯度提升庫的高級技術(特別是在 GPU 上使用 CatBoost)、膠囊網路、查詢鍵值注意機制。
  3. 不僅僅是kaggle! 還有許多其他比賽更容易獲得至少一件 T 卹,並且有更多機會獲得其他獎品。
  4. 交流! 機器學習和資料分析領域已經有一個很大的社區,telegram、slack 都有專題小組,還有來自 Mail.ru、Yandex 等公司的認真人士解答問題,幫助初學者和繼續在該領域發展的人的知識。
  5. 我建議所有受到上一點啟發的人去參觀一下 數據節 — 將於 10 月 11 日至 XNUMX 日在莫斯科舉行的大型自由會議。

來源: www.habr.com

添加評論