Malaking Hadron Collider at Odnoklassniki

Sa pagpapatuloy ng tema ng mga kumpetisyon sa machine learning sa HabrΓ©, gusto naming ipakilala sa mga mambabasa ang dalawa pang platform. Tiyak na hindi sila kasing laki ng kaggle, ngunit tiyak na nararapat silang pansinin.

Malaking Hadron Collider at Odnoklassniki

Sa personal, hindi ko masyadong gusto ang kaggle dahil sa ilang kadahilanan:

  • una, ang mga kumpetisyon doon ay madalas na tumatagal ng ilang buwan, at ang aktibong pakikilahok ay nangangailangan ng maraming pagsisikap;
  • pangalawa, pampublikong kernels (mga pampublikong solusyon). Pinapayuhan ng mga tagasunod ng Kaggle na tratuhin sila nang may katahimikan ng mga monghe sa Tibet, ngunit sa totoo lang ay nakakahiya kapag ang isang bagay na pinaghirapan mo sa loob ng isang buwan o dalawa ay biglang lumabas na inilagay sa isang plato na pilak para sa lahat.

Sa kabutihang palad, ang mga kumpetisyon sa pag-aaral ng makina ay gaganapin sa iba pang mga platform, at tatalakayin ang dalawa sa mga kumpetisyon na ito.

IDAO SNA Hackathon 2019
Opisyal na wika: Ingles,
organizers: Yandex, Sberbank, HSE
Opisyal na wikang Ruso,
mga tagapag-ayos: Mail.ru Group
Online Round: Ene 15 β€” Peb 11, 2019;
On-Site Final: Abr 4-6, 2019
online - mula Pebrero 7 hanggang Marso 15;
offline - mula Marso 30 hanggang Abril 1.
Gamit ang isang tiyak na hanay ng data tungkol sa isang particle sa Large Hadron Collider (trajectory, momentum, at iba pang medyo kumplikadong mga pisikal na parameter), tukuyin kung ito ay isang muon o hindi
Mula sa pahayag na ito, 2 gawain ang natukoy:
β€” sa isa kailangan mo lang ipadala ang iyong hula,
- at sa iba pa - ang kumpletong code at modelo para sa hula, at ang pagpapatupad ay napapailalim sa medyo mahigpit na mga paghihigpit sa oras ng pagpapatakbo at paggamit ng memorya
Para sa kompetisyon ng SNA Hackathon, nakolekta ang mga log ng content na ipinapakita mula sa mga bukas na grupo sa mga news feed ng user para sa Pebrero-Marso 2018. Ang set ng pagsubok ay naglalaman ng huling linggo at kalahati ng Marso. Ang bawat entry sa log ay naglalaman ng impormasyon tungkol sa kung ano ang ipinakita at kanino, pati na rin kung paano tumugon ang user sa nilalamang ito: ni-rate ito, nagkomento, hindi pinansin, o itinago ito mula sa feed.
Ang kakanyahan ng mga gawain ng SNA Hackathon ay ang pagraranggo sa bawat gumagamit ng social network na Odnoklassniki sa kanyang feed, na itataas hangga't maaari ang mga post na makakatanggap ng isang "klase".
Sa online na yugto, ang gawain ay nahahati sa 3 bahagi:
1. ranggo ng mga post ayon sa iba't ibang katangian ng pagtutulungan
2. ranggo ng mga post batay sa mga larawang nilalaman nito
3. ranggo ang mga post ayon sa nilalamang teksto
Kumplikadong custom na sukatan, tulad ng ROC-AUC Average na ROC-AUC ayon sa user
Mga premyo para sa unang yugto - Mga T-shirt para sa N na lugar, pagpasa sa ikalawang yugto, kung saan binayaran ang tirahan at pagkain sa panahon ng kumpetisyon
Ikalawang yugto - ??? (Para sa ilang kadahilanan, hindi ako nakadalo sa seremonya ng paggawad at hindi ko nalaman kung ano ang mga premyo sa huli). Nangako sila ng mga laptop sa lahat ng miyembro ng nanalong koponan
Mga premyo para sa unang yugto - Mga T-shirt para sa 100 pinakamahusay na kalahok, pagpasa sa ikalawang yugto, kung saan binayaran ang paglalakbay sa Moscow, tirahan at pagkain sa panahon ng kumpetisyon. Gayundin, sa pagtatapos ng unang yugto, ang mga premyo ay inihayag para sa pinakamahusay sa 3 gawain sa yugto 1: lahat ay nanalo ng RTX 2080 TI video card!
Ang pangalawang yugto ay isang yugto ng koponan, ang mga koponan ay binubuo ng 2 hanggang 5 tao, mga premyo:
Unang lugar - 1 rubles
Unang lugar - 2 rubles
Unang lugar - 3 rubles
premyo ng hurado - 100 rubles
Opisyal na grupo ng telegrama, ~190 kalahok, komunikasyon sa Ingles, ang mga tanong ay kailangang maghintay ng ilang araw para sa isang sagot Opisyal na grupo sa telegrama, ~1500 kalahok, aktibong talakayan ng mga gawain sa pagitan ng mga kalahok at organizer
Nagbigay ang mga organizer ng dalawang pangunahing solusyon, simple at advanced. Ang simple ay nangangailangan ng mas mababa sa 16 GB ng RAM, at ang advanced na memorya ay hindi magkasya sa 16. Kasabay nito, tumingin sa unahan ng kaunti, ang mga kalahok ay hindi nagawang higit na madaig ang advanced na solusyon. Walang mga kahirapan sa paglulunsad ng mga solusyong ito. Dapat pansinin na sa advanced na halimbawa mayroong isang komento na may pahiwatig kung saan magsisimulang mapabuti ang solusyon. Ang mga pangunahing primitive na solusyon ay ibinigay para sa bawat isa sa mga gawain, na madaling nalampasan ng mga kalahok. Sa mga unang araw ng kumpetisyon, ang mga kalahok ay nakaranas ng ilang mga paghihirap: una, ang data ay ibinigay sa Apache Parquet na format, at hindi lahat ng mga kumbinasyon ng Python at ang parquet package ay gumana nang walang mga error. Ang pangalawang kahirapan ay ang pag-download ng mga larawan mula sa mail cloud; sa ngayon ay walang madaling paraan upang mag-download ng malaking halaga ng data nang sabay-sabay. Bilang resulta, naantala ng mga problemang ito ang mga kalahok sa loob ng ilang araw.

IDAO. Unang yugto

Ang gawain ay upang uriin ang muon/non-muon particle ayon sa kanilang mga katangian. Ang pangunahing tampok ng gawaing ito ay ang pagkakaroon ng isang haligi ng timbang sa data ng pagsasanay, na ang mga tagapag-ayos mismo ay binibigyang kahulugan bilang kumpiyansa sa sagot para sa linyang ito. Ang problema ay medyo ilang row ang naglalaman ng mga negatibong timbang.

Malaking Hadron Collider at Odnoklassniki

Pagkatapos mag-isip ng ilang minuto tungkol sa linyang may pahiwatig (ang pahiwatig ay nakakuha lang ng pansin sa feature na ito ng column ng timbang) at pagbuo ng graph na ito, nagpasya kaming suriin ang 3 opsyon:

1) baligtarin ang target ng mga linya na may mga negatibong timbang (at mga timbang nang naaayon)
2) ilipat ang mga timbang sa pinakamababang halaga upang magsimula sila sa 0
3) huwag gumamit ng mga string weights

Ang ikatlong opsyon ay naging pinakamasama, ngunit ang unang dalawa ay nagpabuti ng resulta, ang pinakamahusay ay ang opsyon No. 1, na agad na nagdala sa amin sa kasalukuyang pangalawang lugar sa unang gawain at una sa pangalawa.
Malaking Hadron Collider at Odnoklassniki
Ang aming susunod na hakbang ay suriin ang data para sa mga nawawalang halaga. Binigyan kami ng mga organizer ng combed data na, kung saan medyo may mga nawawalang value, at pinalitan sila ng -9999.

Nakakita kami ng mga nawawalang value sa mga column ng MatchedHit_{X,Y,Z}[N] at MatchedHit_D{X,Y,Z}[N], at kapag N=2 o 3 lang. Gaya ng naiintindihan namin, ang ilang particle ay hindi ipasa ang lahat ng 4 na detector , at huminto sa alinman sa ika-3 o ika-4 na plato. Naglalaman din ang data ng mga column ng Lextra_{X,Y}[N], na tila naglalarawan ng parehong bagay sa MatchedHit_{X,Y,Z}[N], ngunit gumagamit ng ilang uri ng extrapolation. Iminungkahi ng kaunting mga hula na ito na maaaring palitan ang Lextra_{X,Y}[N] para sa mga nawawalang value sa MatchedHit_{X,Y,Z}[N] (para sa X at Y coordinates lang). Ang MatchedHit_Z[N] ay napuno ng median. Ang mga manipulasyong ito ay nagbigay-daan sa amin na maabot ang 1st intermediate place sa parehong mga gawain.

Malaking Hadron Collider at Odnoklassniki

Isinasaalang-alang na hindi sila nagbigay ng anuman para sa pagkapanalo sa unang yugto, maaari sana kaming tumigil doon, ngunit nagpatuloy kami, gumuhit ng ilang magagandang larawan at nakabuo ng mga bagong tampok.

Malaking Hadron Collider at Odnoklassniki

Halimbawa, nalaman namin na kung i-plot namin ang mga intersection point ng isang particle sa bawat isa sa apat na detector plate, makikita namin na ang mga punto sa bawat isa sa mga plate ay pinagsama-sama sa 5 rectangles na may aspect ratio na 4 hanggang 5 at nakasentro sa ang punto (0,0), at sa Walang mga puntos sa unang parihaba.

Mga sukat ng plate no. / parihaba 1 2 3 4 5
Plato 1 500Ρ…625 1000Ρ…1250 2000Ρ…2500 4000Ρ…5000 8000Ρ…10000
Plato 2 520Ρ…650 1040Ρ…1300 2080Ρ…2600 4160Ρ…5200 8320Ρ…10400
Plato 3 560Ρ…700 1120Ρ…1400 2240Ρ…2800 4480Ρ…5600 8960Ρ…11200
Plato 4 600Ρ…750 1200Ρ…1500 2400Ρ…3000 4800Ρ…6000 9600Ρ…12000

Nang matukoy ang mga dimensyong ito, nagdagdag kami ng 4 na bagong tampok na kategorya para sa bawat particle - ang bilang ng parihaba kung saan ito nagsa-intersect sa bawat plato.

Malaking Hadron Collider at Odnoklassniki

Napansin din namin na ang mga particle ay tila nakakalat sa mga gilid mula sa gitna at ang ideya ay lumitaw na kahit papaano ay suriin ang "kalidad" ng pagkalat na ito. Sa isip, posibleng makabuo ng ilang uri ng "ideal" na parabola depende sa take-off point at tantiyahin ang paglihis mula dito, ngunit nilimitahan namin ang aming sarili sa "ideal" na tuwid na linya. Ang pagkakaroon ng pagbuo ng mga perpektong tuwid na linya para sa bawat punto ng pagpasok, nagawa naming kalkulahin ang karaniwang paglihis ng tilapon ng bawat particle mula sa tuwid na linyang ito. Dahil ang average na paglihis para sa target = 1 ay 152, at para sa target = 0 ito ay 390, pansamantala naming tinasa ang tampok na ito bilang mahusay. At sa katunayan, ang tampok na ito ay agad na nakarating sa tuktok ng mga pinaka-kapaki-pakinabang.

Natuwa kami at idinagdag namin ang deviation ng lahat ng 4 na intersection point para sa bawat particle mula sa perpektong tuwid na linya bilang karagdagang 4 na feature (at gumana rin sila nang maayos).

Ang mga link sa mga artikulong pang-agham sa paksa ng kumpetisyon, na ibinigay sa amin ng mga organizer, ay nag-udyok sa ideya na kami ay malayo sa una upang malutas ang problemang ito at, marahil, mayroong ilang uri ng dalubhasang software. Nang matuklasan ang isang repositoryo sa github kung saan ipinatupad ang mga pamamaraan na IsMuonSimple, IsMuon, IsMuonLoose, inilipat namin ang mga ito sa aming site na may maliliit na pagbabago. Ang mga pamamaraan mismo ay napaka-simple: halimbawa, kung ang enerhiya ay mas mababa sa isang tiyak na threshold, kung gayon ito ay hindi isang muon, kung hindi man ito ay isang muon. Ang ganitong mga simpleng feature ay malinaw na hindi makapagbibigay ng pagtaas sa kaso ng paggamit ng gradient boosting, kaya nagdagdag kami ng isa pang makabuluhang "distansya" sa threshold. Ang mga tampok na ito ay bahagyang napabuti din. Marahil, sa pamamagitan ng pagsusuri ng mga umiiral na pamamaraan nang mas lubusan, posible na makahanap ng mas malakas na mga pamamaraan at idagdag ang mga ito sa mga palatandaan.

Sa pagtatapos ng kumpetisyon, bahagyang binago namin ang "mabilis" na solusyon para sa pangalawang problema; sa huli, naiiba ito sa baseline sa mga sumusunod na punto:

  1. Sa mga hilera na may negatibong timbang ay nabaligtad ang target
  2. Napunan ng mga nawawalang value sa MatchedHit_{X,Y,Z}[N]
  3. Nabawasan ang lalim sa 7
  4. Binawasan ang rate ng pagkatuto sa 0.1 (ay 0.19)

Bilang resulta, sinubukan namin ang higit pang mga tampok (hindi masyadong matagumpay), napiling mga parameter at sinanay na catboost, lightgbm at xgboost, sinubukan ang iba't ibang mga paghahalo ng mga hula at bago buksan ang pribado ay kumpiyansa kaming nanalo sa pangalawang gawain, at sa una ay kabilang kami sa mga mga pinuno.

Matapos buksan ang pribado ay nasa 10th place kami para sa 1st task at 3rd para sa pangalawa. Ang lahat ng mga pinuno ay nagkahalo, at ang bilis sa pribado ay mas mataas kaysa sa libboard. Mukhang hindi maganda ang pagkaka-stratified ng data (o halimbawa walang mga row na may negatibong timbang sa pribado) at medyo nakakadismaya ito.

SNA Hackathon 2019 - Mga Teksto. Unang yugto

Ang gawain ay ang pagraranggo ng mga post ng gumagamit sa Odnoklassniki social network batay sa tekstong nilalaman nito; bilang karagdagan sa teksto, mayroong ilang higit pang mga katangian ng post (wika, may-ari, petsa at oras ng paglikha, petsa at oras ng pagtingin ).

Bilang klasikal na diskarte sa pagtatrabaho sa teksto, iha-highlight ko ang dalawang opsyon:

  1. Pagma-map sa bawat salita sa isang n-dimensional na vector space upang ang mga katulad na salita ay may katulad na mga vector (magbasa nang higit pa sa ang aming artikulo), pagkatapos ay alinman sa paghahanap ng karaniwang salita para sa teksto o paggamit ng mga mekanismo na isinasaalang-alang ang kaugnay na posisyon ng mga salita (CNN, LSTM/GRU).
  2. Gumagamit ng mga modelo na maaaring gumana kaagad sa buong mga pangungusap. Halimbawa, si Bert. Sa teorya, ang diskarte na ito ay dapat gumana nang mas mahusay.

Dahil ito ang una kong karanasan sa mga teksto, mali ang magturo sa isang tao, kaya tuturuan ko ang aking sarili. Ito ang mga tip na ibibigay ko sa aking sarili sa simula ng kumpetisyon:

  1. Bago ka tumakbo upang magturo ng isang bagay, tingnan ang data! Bilang karagdagan sa mismong teksto, ang data ay may ilang mga hanay at posible na pisilin ang higit pa mula sa kanila kaysa sa ginawa ko. Ang pinakasimpleng bagay ay ang ibig sabihin ng pag-encode ng target para sa ilan sa mga column.
  2. Huwag matuto mula sa lahat ng data! Nagkaroon ng maraming data (humigit-kumulang 17 milyong mga hilera) at talagang hindi kinakailangang gamitin ang lahat ng ito upang subukan ang mga hypotheses. Ang pagsasanay at preprocessing ay medyo mabagal, at maliwanag na magkakaroon ako ng oras upang subukan ang mas kawili-wiling mga hypotheses.
  3. <Kontrobersyal na payo> Hindi na kailangang maghanap ng mamamatay na modelo. Matagal kong inisip sina Elmo at Bert, umaasa na dadalhin nila ako kaagad sa mataas na lugar, at bilang resulta, gumamit ako ng FastText na pre-trained na mga embedding para sa wikang Ruso. Hindi ko makamit ang mas mahusay na bilis kasama si Elmo, at wala pa akong oras upang malaman ito kasama si Bert.
  4. <Kontrobersyal na payo> Hindi na kailangang maghanap ng isang tampok na mamamatay. Sa pagtingin sa data, napansin ko na humigit-kumulang 1 porsiyento ng mga teksto ay hindi talaga naglalaman ng teksto! Ngunit may mga link sa ilang mga mapagkukunan, at nagsulat ako ng isang simpleng parser na nagbukas ng site at nakuha ang pamagat at paglalarawan. Tila isang magandang ideya, ngunit pagkatapos ay nadala ako at nagpasyang i-parse ang lahat ng mga link para sa lahat ng mga teksto at muli akong nawalan ng maraming oras. Ang lahat ng ito ay hindi nagbigay ng makabuluhang pagpapabuti sa huling resulta (bagaman naisip ko ang stemming, halimbawa).
  5. Gumagana ang mga klasikong tampok. Kami sa Google, halimbawa, "mga tampok ng teksto kaggle", basahin at idagdag ang lahat. Nagbigay ang TF-IDF ng pagpapabuti, gayundin ang mga tampok na istatistika tulad ng haba ng teksto, mga salita, at dami ng bantas.
  6. Kung mayroong mga column ng DateTime, sulit na i-parse ang mga ito sa ilang magkakahiwalay na feature (oras, araw ng linggo, atbp.). Aling mga feature ang dapat i-highlight ang dapat suriin gamit ang mga graph/ilang sukatan. Dito, sa isang kapritso, ginawa ko ang lahat ng tama at na-highlight ang mga kinakailangang tampok, ngunit ang isang normal na pagsusuri ay hindi nasaktan (halimbawa, tulad ng ginawa namin sa pangwakas).

Malaking Hadron Collider at Odnoklassniki

Bilang resulta ng kompetisyon, nagsanay ako ng isang hard model na may word convolution, at isa pa batay sa LSTM at GRU. Pareho silang gumamit ng mga pre-trained na FastText na pag-embed para sa wikang Ruso (sinubukan ko ang ilang iba pang mga pag-embed, ngunit ito ang mga pinakamahusay na gumana). Matapos i-average ang mga hula, nakuha ko ang panghuling ika-7 puwesto sa 76 na kalahok.

Matapos ang unang yugto ay nai-publish ito artikulo ni Nikolai Anokhin, na kumuha ng pangalawang puwesto (lumahok siya sa labas ng kumpetisyon), at ang kanyang solusyon hanggang sa ilang yugto ay paulit-ulit sa akin, ngunit mas napunta siya dahil sa mekanismo ng atensyon ng query-key-value.

Ikalawang yugto OK & IDAO

Halos magkasunod na naganap ang ikalawang yugto ng mga kumpetisyon, kaya nagpasya akong tingnan ang mga ito nang magkasama.

Una, ako at ang bagong nakuha na koponan ay napunta sa kahanga-hangang opisina ng kumpanya ng Mail.ru, kung saan ang aming gawain ay pagsamahin ang mga modelo ng tatlong mga track mula sa unang yugto - teksto, mga larawan at collab. Higit sa 2 araw ang inilaan para dito, na naging napakaliit. Sa katunayan, naulit lang namin ang aming mga resulta mula sa unang yugto nang hindi nakatanggap ng anumang mga pakinabang mula sa pagsasama. Sa huli, nakuha namin ang 5th place, ngunit hindi namin nagamit ang text model. Matapos tingnan ang mga solusyon ng iba pang kalahok, tila sulit na subukang i-cluster ang mga teksto at idagdag ang mga ito sa collab model. Ang isang side effect ng yugtong ito ay ang mga bagong impression, pakikipagpulong at pakikipag-usap sa mga cool na kalahok at organizer, pati na rin ang matinding kakulangan sa tulog, na maaaring nakaapekto sa resulta ng huling yugto ng IDAO.

Ang gawain sa IDAO 2019 Final stage ay hulaan ang oras ng paghihintay para sa isang order para sa mga driver ng Yandex taxi sa airport. Sa stage 2, 3 gawain = 3 airport ang natukoy. Para sa bawat paliparan, ibinibigay ang minuto-by-minutong data sa bilang ng mga order ng taxi sa loob ng anim na buwan. At bilang data ng pagsubok, ibinigay ang susunod na buwan at minutong data sa mga order sa nakalipas na 2 linggo. Nagkaroon ng kaunting oras (1,5 araw), ang gawain ay medyo tiyak, isang tao lamang mula sa koponan ang dumating sa kumpetisyon - at bilang isang resulta, ito ay isang malungkot na lugar sa pagtatapos. Kasama sa mga kawili-wiling ideya ang mga pagtatangka na gumamit ng panlabas na data: lagay ng panahon, mga traffic jam at mga istatistika ng order ng taxi ng Yandex. Bagaman hindi sinabi ng mga tagapag-ayos kung ano ang mga paliparan na ito, maraming kalahok ang nag-akala na sila ay Sheremetyevo, Domodedovo at Vnukovo. Bagama't ang pagpapalagay na ito ay pinabulaanan pagkatapos ng kumpetisyon, ang mga tampok, halimbawa, mula sa data ng lagay ng panahon ng Moscow ay nagpabuti ng mga resulta kapwa sa pagpapatunay at sa leaderboard.

Konklusyon

  1. Ang mga kumpetisyon sa ML ay cool at kawili-wili! Dito makikita mo ang paggamit ng mga kasanayan sa pagsusuri ng data, at sa mga tusong modelo at diskarte, at simpleng sentido komun ay malugod na tinatanggap.
  2. Ang ML ay isa nang malaking kalipunan ng kaalaman na tila lumalaki nang husto. Itinakda ko ang aking sarili ng isang layunin na maging pamilyar sa iba't ibang mga lugar (mga signal, larawan, talahanayan, teksto) at natanto ko kung gaano karaming dapat pag-aralan. Halimbawa, pagkatapos ng mga kumpetisyon na ito, nagpasya akong mag-aral: mga algorithm ng clustering, mga advanced na diskarte para sa pagtatrabaho sa mga library ng gradient boosting (sa partikular, pagtatrabaho sa CatBoost sa GPU), mga capsule network, ang mekanismo ng atensyon ng query-key-value.
  3. Hindi sa pamamagitan ng kaggle nag-iisa! Maraming iba pang mga kumpetisyon kung saan mas madaling makakuha ng kahit isang T-shirt, at mas maraming pagkakataon para sa iba pang mga premyo.
  4. Makipag-usap! Mayroon nang malaking komunidad sa larangan ng machine learning at data analysis, may mga thematic na grupo sa telegrama, slack, at seryosong tao mula sa Mail.ru, Yandex at iba pang kumpanya na sumagot ng mga tanong at tumulong sa mga nagsisimula at sa mga nagpapatuloy sa kanilang landas sa larangang ito. ng kaalaman.
  5. Pinapayuhan ko ang lahat na naging inspirasyon ng nakaraang punto na bisitahin datafest β€” isang pangunahing libreng kumperensya sa Moscow, na magaganap sa Mayo 10-11.

Pinagmulan: www.habr.com

Magdagdag ng komento