Suur hadronite põrkur ja Odnoklassniki

Jätkates Habré masinõppevõistluste teemat, soovime tutvustada lugejatele veel kahte platvormi. Need pole kindlasti nii suured kui kaggle, kuid väärivad kindlasti tähelepanu.

Suur hadronite põrkur ja Odnoklassniki

Mulle isiklikult kaggle liiga ei meeldi mitmel põhjusel:

  • esiteks kestavad seal võistlused sageli mitu kuud ja aktiivne osalemine nõuab palju pingutust;
  • teiseks avalikud tuumad (avalikud lahendused). Kaggle'i järgijad soovitavad suhtuda neisse tiibeti munkade rahulikkusega, kuid tegelikult on kahju, kui midagi, mille nimel oled kuu või paar töötanud, osutub ootamatult kõigile hõbekandikule laotuks.

Õnneks peetakse masinõppe võistlusi ka teistel platvormidel ja paaril sellisel võistlusel tuleb ka juttu.

IDAO SNA Hackathon 2019
Ametlik keel: inglise,
korraldajad: Yandex, Sberbank, HSE
ametlik vene keel,
korraldajad: Mail.ru Group
Veebivoor: 15. jaanuar – 11. veebruar 2019;
Kohapealne finaal: 4.–6. aprill 2019
Internetis - 7. veebruarist 15. märtsini;
võrguühenduseta – 30. märtsist 1. aprillini.
Tehke kindlaks, kas tegemist on müüoniga või mitte, kasutades teatud andmekogumit osakese kohta suures hadronite põrgatis (trajektoor, impulss ja muud üsna keerulised füüsikalised parameetrid).
Selle avalduse põhjal tuvastati 2 ülesannet:
- ühes pidite lihtsalt oma ennustuse saatma,
- ja teises - ennustamise täielik kood ja mudel ning täitmine allus üsna rangetele tööaja ja mälukasutuse piirangutele
SNA Hackathoni võistluse jaoks koguti kasutajate uudistevoogudes avatud gruppide sisu kuvamise logid 2018. aasta veebruaris-märtsis. Testikomplekt sisaldab märtsi viimast poolteist nädalat. Iga logikirje sisaldab teavet selle kohta, mida ja kellele näidati, samuti selle kohta, kuidas kasutaja sellele sisule reageeris: hindas, kommenteeris, ignoreeris või voos peitis.
SNA Hackathoni ülesannete olemus on järjestada sotsiaalvõrgustiku Odnoklassniki iga kasutaja oma voog, tõstes võimalikult kõrgele need postitused, mis saavad "klassi".
Veebifaasis jagati ülesanne kolmeks osaks:
1. reastage ametikohad erinevate koostöötunnuste järgi
2. järjesta postitused nendes sisalduvate piltide järgi
3. järjesta postitused nendes sisalduva teksti järgi
Keeruline kohandatud mõõdik, näiteks ROC-AUC Keskmine ROC-AUC kasutaja järgi
Esimese etapi auhinnad - N kohale T-särgid, pääs teisele etapile, kus võistluse ajal tasuti majutus ja toitlustus
Teine etapp - ??? (Teatud põhjustel ma autasustamistseremoonial ei viibinud ja ei saanud lõpuks teada, mis auhinnad olid). Nad lubasid kõigile võitnud meeskonna liikmetele sülearvuteid
Esimese etapi auhinnad - T-särgid 100 parimale osalejale, pääs teisele etapile, kus tasuti sõit Moskvasse, majutus ja toitlustus võistluse ajal. Samuti kuulutati esimese etapi lõpupoole välja auhinnad 3. etapi 1 ülesande parimatele: kõik võitsid RTX 2080 TI videokaardi!
Teine etapp oli võistkondlik, võistkonnad koosnesid 2-5 inimesest, auhinnad:
1. koht - 300 000 rubla
2. koht - 200 000 rubla
3. koht - 100 000 rubla
žürii auhind - 100 000 rubla
Ametlik telegrammigrupp, ~190 osalejat, suhtlus inglise keeles, küsimustele tuli vastust oodata mitu päeva Ametlik grupp telegrammis, ~1500 osalejat, aktiivne ülesannete arutelu osalejate ja korraldajate vahel
Korraldajad pakkusid välja kaks põhilahendust, lihtsad ja täiustatud. Lihtne nõudis vähem kui 16 GB muutmälu ja täiustatud mälu ei mahtunud 16-sse. Samas ei suutnud osalejad veidi ettepoole vaadates täiustatud lahendust oluliselt edestada. Nende lahenduste käivitamisel raskusi ei tekkinud. Tuleb märkida, et täiustatud näites oli kommentaar vihjega, kust alustada lahenduse täiustamist. Iga ülesande jaoks pakuti elementaarseid primitiivseid lahendusi, mida osalejad kergesti ületasid. Võistluse algusaegadel puutusid osalejad kokku mitmete raskustega: esiteks olid andmed antud Apache Parquet formaadis ning kõik Pythoni ja parketipaketi kombinatsioonid ei toiminud vigadeta. Teiseks raskuseks oli piltide allalaadimine meilipilvest, hetkel pole lihtsat võimalust suure andmemahu korraga allalaadimiseks. Seetõttu lükkasid need probleemid osalejad paar päeva edasi.

IDAO. Esimene aste

Ülesandeks oli liigitada müon/mittemüoon osakesed nende omaduste järgi. Selle ülesande põhijooneks oli kaaluveeru olemasolu treeningandmetes, mida korraldajad ise tõlgendasid selle rea vastuse kindlustundena. Probleem oli selles, et üsna mitmel real oli negatiivseid kaalusid.

Suur hadronite põrkur ja Odnoklassniki

Mõeldes mõne minuti jooksul vihjega joonele (vihje juhtis lihtsalt tähelepanu sellele kaaluveeru omadusele) ja koostanud selle graafiku, otsustasime kontrollida 3 võimalust:

1) pöörake negatiivse kaaluga (ja vastavalt kaalu) joonte sihtmärk ümber
2) nihutage kaalud miinimumväärtusele nii, et need algaksid nullist
3) ära kasuta nööriraskusi

Kolmas variant osutus halvimaks, kuid kaks esimest parandasid tulemust, parim oli variant nr 1, mis tõi meid kohe esimeses ülesandes praegusele teisele ja teises esimesele kohale.
Suur hadronite põrkur ja Odnoklassniki
Meie järgmine samm oli andmete puuduvate väärtuste ülevaatamine. Korraldajad andsid meile juba kammitud andmed, kus oli päris palju puuduvaid väärtusi ja need asendati -9999-ga.

Leidsime puuduvad väärtused veergudes MatchedHit_{X,Y,Z}[N] ja MatchedHit_D{X,Y,Z}[N] ja ainult siis, kui N=2 või 3. Nagu me mõistame, mõned osakesed seda ei teinud läbima kõik 4 detektorit ja peatunud kas 3. või 4. plaadil. Andmed sisaldasid ka Lextra_{X,Y}[N] veerge, mis ilmselt kirjeldavad sama asja nagu MatchedHit_{X,Y,Z}[N], kuid kasutades mingit ekstrapolatsiooni. Need napid oletused viitasid sellele, et Lextra_{X,Y}[N] võiks asendada MatchedHit_{X,Y,Z}[N] puuduvad väärtused (ainult X ja Y koordinaatide jaoks). MatchedHit_Z[N] oli mediaaniga hästi täidetud. Need manipulatsioonid võimaldasid jõuda mõlemas ülesandes 1. vahekohale.

Suur hadronite põrkur ja Odnoklassniki

Arvestades, et nad ei andnud esimese etapi võidu eest midagi, oleksime võinud sellega peatuda, kuid jätkasime, tegime ilusaid pilte ja mõtlesime välja uusi funktsioone.

Suur hadronite põrkur ja Odnoklassniki

Näiteks leidsime, et kui joonistame osakeste lõikepunktid iga nelja detektorplaadiga, näeme, et iga plaadi punktid on rühmitatud viieks ristkülikuks, mille kuvasuhe on 5 kuni 4 ja mille keskpunkt on punkt (5) ja in Esimeses ristkülikus pole punkte.

Plaadi nr / ristküliku mõõtmed 1 2 3 4 5
1. plaat 500х625 1000х1250 2000х2500 4000х5000 8000х10000
2. plaat 520х650 1040х1300 2080х2600 4160х5200 8320х10400
3. plaat 560х700 1120х1400 2240х2800 4480х5600 8960х11200
4. plaat 600х750 1200х1500 2400х3000 4800х6000 9600х12000

Pärast nende mõõtmete määramist lisasime iga osakese jaoks 4 uut kategoorilist tunnust - ristküliku numbri, milles see iga plaati lõikab.

Suur hadronite põrkur ja Odnoklassniki

Samuti märkasime, et osakesed paistsid keskelt külgedele laiali ja tekkis mõte selle hajumise “kvaliteeti” kuidagi hinnata. Ideaalis oleks ilmselt võimalik välja mõelda mingi “ideaalne” parabool olenevalt sisenemispunktist ja hinnata sellest kõrvalekallet, kuid piirdusime “ideaalse” sirgega. Olles konstrueerinud nii ideaalsed sirged iga sisenemispunkti jaoks, saime arvutada iga osakese trajektoori standardhälbe sellest sirgest. Kuna sihtmärgi = 1 keskmine hälve oli 152 ja sihtmärgi = 0 korral oli see 390, hindasime selle omaduse esialgselt heaks. Ja tõepoolest, see funktsioon jõudis kohe kõige kasulikumate hulka.

Meil oli hea meel ja lisasime 4 täiendava tunnusena iga osakese kõigi 4 ristumispunkti kõrvalekalde ideaalsest sirgjoonest (ja need töötasid ka hästi).

Korraldajate antud lingid konkursiteemalistele teadusartiklitele tekitasid mõtte, et me pole kaugeltki esimesed, kes selle probleemi lahendavad ja võib-olla on olemas mingi spetsiaalne tarkvara. Olles avastanud githubis hoidla, kus rakendati meetodeid IsMuonSimple, IsMuon, IsMuonLoose, kandsime need väikeste muudatustega oma saidile üle. Meetodid ise olid väga lihtsad: näiteks kui energia on mingist läviväärtusest väiksem, siis see ei ole müüon, vastasel juhul on tegu müüoniga. Ilmselgelt ei saanud sellised lihtsad funktsioonid gradiendi võimendamise korral tõusu anda, mistõttu lisasime lävele veel ühe olulise "kauguse". Neid funktsioone on ka veidi täiustatud. Võib-olla õnnestus olemasolevaid meetodeid põhjalikumalt analüüsides leida tugevamaid meetodeid ja lisada need märkidele.

Võistluse lõpus muutsime teise ülesande “kiirlahendust” veidi, lõpuks erines see lähtejoonest järgmiste punktide poolest:

  1. Negatiivse kaaluga ridades pöörati sihtmärk ümber
  2. Täidetud puuduvad väärtused kaustas MatchedHit_{X,Y,Z}[N]
  3. Sügavust vähendatud 7-ni
  4. Vähendati õppimise määra 0.1-ni (oli 0.19)

Selle tulemusel proovisime rohkem funktsioone (mitte väga edukalt), valisime parameetreid ja treenisime catboosti, lightgbm ja xgboost, proovisime erinevaid ennustuste segusid ning enne privaatsuse avamist võitsime kindlalt teise ülesande ning esimeses olime üks parimaid. juhid.

Peale privaatpaari avamist olime 10. ülesande osas 1. kohal ja teise osas 3. kohal. Kõik liidrid läksid sassi ja kiirus eraelus oli suurem kui libboardil. Tundub, et andmed olid halvasti kihistunud (või näiteks privaatses ei olnud negatiivse kaaluga ridu) ja see oli natuke masendav.

SNA Hackathon 2019 – tekstid. Esimene aste

Ülesandeks oli Odnoklassniki sotsiaalvõrgustiku kasutajate postituste järjestamine nendes sisalduva teksti alusel, lisaks tekstile oli veel mõned postituse tunnused (keel, omanik, loomise kuupäev ja kellaaeg, vaatamise kuupäev ja kellaaeg ).

Klassikaliste lähenemisviisidena tekstiga töötamisel tooksin esile kaks võimalust:

  1. Iga sõna kaardistamine n-mõõtmelisse vektorruumi nii, et sarnastel sõnadel on sarnased vektorid (loe lähemalt meie artikkel), siis kas teksti keskmise sõna leidmine või sõnade suhtelist asukohta arvestavate mehhanismide kasutamine (CNN, LSTM/GRU).
  2. Kasutades mudeleid, mis võivad kohe töötada tervete lausetega. Näiteks Bert. Teoreetiliselt peaks see lähenemine paremini toimima.

Kuna see oli minu esimene kogemus tekstidega, oleks vale kedagi õpetada, nii et ma õpetan ise. Sellised näpunäited annaksin endale võistluse alguses:

  1. Enne kui jooksed midagi õpetama, vaata andmeid! Lisaks tekstile endale oli andmetel mitu veergu ja neist oli võimalik palju rohkem välja pigistada kui mina. Lihtsaim on mõne veeru puhul kasutada keskmist sihtkodeeringut.
  2. Ärge õppige kõigist andmetest! Andmeid oli palju (umbes 17 miljonit rida) ja absoluutselt polnud vaja neid kõiki hüpoteeside kontrollimiseks kasutada. Koolitus ja eeltöötlus olid üsna aeglased ning ilmselgelt oleks mul olnud aega ka huvitavamate hüpoteeside testimiseks.
  3. <Vastuoluline nõuanne> Pole vaja otsida tapjamudelit. Nuputasin Elmot ja Bertit pikalt, lootes, et nad viivad mu kohe kõrgele kohale ning selle tulemusena kasutasin vene keele jaoks FastTexti eelkoolitatud manuseid. Elmoga ma paremat kiirust saavutada ei suutnud ja Bertiga ei jõudnud ikka veel aru saada.
  4. <Vastuoluline nõuanne> Pole vaja otsida üht tapvat funktsiooni. Andmeid vaadates märkasin, et umbes 1 protsent tekstidest ei sisalda tegelikult teksti! Kuid seal olid lingid mõnele allikale ja ma kirjutasin lihtsa parseri, mis avas saidi ja tõmbas välja pealkirja ja kirjelduse. See tundus hea mõte, kuid siis läksin ja otsustasin kõigi tekstide jaoks kõik lingid sõeluda ning kaotasin taas palju aega. See kõik ei andnud lõpptulemuses olulist paranemist (kuigi näiteks tuletasin välja).
  5. Klassikalised funktsioonid töötavad. Googeldame näiteks “text features kaggle”, loeme ja lisame kõike. TF-IDF parandas, nagu ka statistilised funktsioonid, nagu teksti pikkus, sõnad ja kirjavahemärkide arv.
  6. Kui DateTime veerge on olemas, tasub need sõeluda mitmeks eraldi funktsiooniks (tunnid, nädalapäevad jne). Milliseid funktsioone tuleks esile tõsta, tuleks analüüsida graafikute/mõningate mõõdikute abil. Siin tegin kapriisil kõik õigesti ja tõstsin vajalikud omadused esile, kuid tavaline analüüs poleks paha olnud (näiteks nagu tegime finaalis).

Suur hadronite põrkur ja Odnoklassniki

Võistluse tulemusena treenisin ühe kerase mudeli sõna käändiga ja teise LSTM-i ja GRU-põhise. Mõlemad kasutasid vene keele jaoks eelnevalt väljaõpetatud FastTexti manustamist (proovisin mitmeid teisi manuseid, kuid need olid need, mis toimisid kõige paremini). Pärast ennustuste keskmistamist sain 7 osaleja seast lõpliku 76. koha.

Pärast esimest etappi see avaldati Nikolai Anokhini artikkel, kes sai teise koha (osales võistlusväliselt) ja tema lahendus kuni mõne etapini kordas minu oma, kuid päringu-võti-väärtuse tähelepanumehhanismi tõttu läks ta kaugemale.

Teine etapp OK & IDAO

Võistluste teised etapid toimusid peaaegu järjest, seega otsustasin neid koos vaadata.

Esiteks sattusime mina ja äsja omandatud meeskond Mail.ru ettevõtte muljetavaldavasse kontorisse, kus meie ülesandeks oli kombineerida esimese etapi kolme raja mudelid - tekst, pildid ja koostöö. Selleks oli eraldatud veidi rohkem kui 2 päeva, mida osutus väga väheks. Tegelikult suutsime oma tulemusi korrata ainult esimesest etapist ilma ühinemisest kasu saamata. Lõpuks saime 5. koha, kuid tekstimudelit kasutada ei saanud. Vaadates teiste osalejate lahendusi, tundub, et tasus proovida tekste rühmitada ja koostöömudelisse lisada. Selle etapi kaasnähuks olid uued muljed, lahedate osalejate ja korraldajatega kohtumine ja suhtlemine, samuti tugev unepuudus, mis võis mõjutada IDAO viimase etapi tulemust.

IDAO 2019 finaaletapi ülesandeks oli ennustada Yandexi taksojuhtide tellimuse ooteaega lennujaamas. 2. etapis määrati kindlaks 3 ülesannet = 3 lennujaama. Iga lennujaama kohta esitatakse minuti-minutilised andmed taksotellimuste arvu kohta kuue kuu jooksul. Ja testandmetena anti järgmise kuu ja minuti kaupa viimase 2 nädala tellimuste andmed. Aega oli vähe (1,5 päeva), ülesanne oli üsna konkreetne, võistkonnast tuli võistlusele vaid üks inimene - ja sellest tulenevalt oli see lõpu poole kurb koht. Huvitavate ideede hulka kuulusid katsed kasutada väliseid andmeid: ilm, liiklusummikud ja Yandexi taksotellimuste statistika. Kuigi korraldajad ei öelnud, mis need lennujaamad on, oletasid paljud osalejad, et need on Šeremetjevo, Domodedovo ja Vnukovo. Kuigi see oletus pärast võistlust ümber lükati, parandasid näiteks Moskva ilmaandmetest saadud tunnused tulemusi nii valideerimisel kui ka edetabelis.

Järeldus

  1. ML võistlused on lahedad ja huvitavad! Siit leiad oskuste kasutamise andmeanalüüsis ning kavalates mudelites ja tehnikates ning teretulnud on lihtsalt terve mõistus.
  2. ML on juba tohutu teadmistepagas, mis näib kasvavat eksponentsiaalselt. Võtsin endale eesmärgiks tutvuda erinevate valdkondadega (signaalid, pildid, tabelid, tekst) ja sain juba aru, kui palju on õppida. Näiteks otsustasin pärast neid võistlusi uurida: rühmitusalgoritme, täiustatud tehnikaid gradiendi võimendamise teekidega töötamiseks (eelkõige CatBoostiga töötamine GPU-s), kapselvõrke, päringu-võtme-väärtuse tähelepanumehhanismi.
  3. Mitte üksi kagglemisega! On palju teisigi võistlusi, kus on lihtsam vähemalt T-särgi hankida ja rohkem võimalusi muudele auhindadele.
  4. Suhtle! Masinõppe ja andmeanalüüsi vallas on juba suur kogukond, telegrammis on temaatilised rühmad, slack ja tõsised inimesed Mail.ru-st, Yandexist ja teistest ettevõtetest vastavad küsimustele ning aitavad nii algajaid kui ka selles valdkonnas oma teed jätkajaid. teadmistest.
  5. Soovitan kõigil, kes eelmisest punktist inspireeritud, külastada datafest — suur tasuta konverents Moskvas, mis toimub 10.–11.

Allikas: www.habr.com

Lisa kommentaar