Large Hadron Collider og Odnoklassniki

I forlængelse af temaet maskinlæringskonkurrencer på Habré vil vi gerne introducere læserne for yderligere to platforme. De er bestemt ikke så store som kaggle, men de fortjener bestemt opmærksomhed.

Large Hadron Collider og Odnoklassniki

Personligt kan jeg ikke lide kaggle for meget af flere grunde:

  • For det første varer konkurrencer der ofte i flere måneder, og aktiv deltagelse kræver en stor indsats;
  • for det andet offentlige kerner (offentlige løsninger). Kaggle-tilhængere råder til at behandle dem med tibetanske munkes ro, men i virkeligheden er det ret ærgerligt, når noget, du har arbejdet hen imod i en måned eller to, pludselig viser sig at være lagt på et sølvfad til alle.

Heldigvis afholdes maskinlæringskonkurrencer på andre platforme, og et par af disse konkurrencer vil blive diskuteret.

IDAO SNA Hackathon 2019
Officielt sprog: engelsk,
arrangører: Yandex, Sberbank, HSE
Officielt russisk sprog,
arrangører: Mail.ru Group
Online runde: 15. januar - 11. februar 2019;
Finale på stedet: 4.-6. april 2019
online - fra 7. februar til 15. marts;
offline - fra 30. marts til 1. april.
Ved hjælp af et bestemt sæt data om en partikel i Large Hadron Collider (bane, momentum og andre ret komplekse fysiske parametre) kan du bestemme, om det er en myon eller ej
Ud fra denne erklæring blev der identificeret 2 opgaver:
- i en skulle du bare sende din forudsigelse,
- og i den anden - den komplette kode og model til forudsigelse, og udførelsen var underlagt ret strenge restriktioner for køretid og hukommelsesbrug
Til SNA Hackathon-konkurrencen blev der indsamlet logs over indholdsvisninger fra åbne grupper i brugernes nyhedsfeeds for februar-marts 2018. Testsættet indeholder den sidste halvanden uge af marts. Hver post i loggen indeholder information om, hvad der blev vist og til hvem, samt hvordan brugeren reagerede på dette indhold: bedømte det, kommenterede, ignorerede det eller skjulte det fra feedet.
Essensen af ​​SNA Hackathons opgaver er at rangere hver bruger af det sociale netværk Odnoklassniki sit feed, og hæve så højt som muligt de indlæg, der vil modtage en "klasse".
På online-stadiet var opgaven opdelt i 3 dele:
1. rangordne stillinger efter forskellige samarbejdskarakteristika
2. rangordne indlæg baseret på de billeder, de indeholder
3. rangordne indlæg efter den tekst, de indeholder
Kompleks brugerdefineret metrisk, noget som ROC-AUC Gennemsnitlig ROC-AUC efter bruger
Præmier til første etape - T-shirts til N pladser, gennemgang til anden etape, hvor overnatning og forplejning blev betalt under konkurrencen
Anden fase - ??? (Af visse grunde var jeg ikke til stede ved prisoverrækkelsen og var ikke i stand til at finde ud af, hvad præmierne var i sidste ende). De lovede bærbare computere til alle medlemmer af det vindende hold
Præmier til første etape - T-shirts til de 100 bedste deltagere, passage til anden etape, hvor rejser til Moskva, overnatning og forplejning under konkurrencen blev betalt. Mod slutningen af ​​den første fase blev der også annonceret præmier til den bedste i 3 opgaver på fase 1: alle vandt et RTX 2080 TI-videokort!
Anden etape var en holdfase, holdene bestod af 2 til 5 personer, præmier:
1. plads - 300 rubler
2. plads - 200 rubler
3. plads - 100 rubler
jurypræmie - 100 rubler
Officiel telegramgruppe, ~190 deltagere, kommunikation på engelsk, spørgsmål måtte vente flere dage på svar Officiel gruppe i telegram, ~1500 deltagere, aktiv diskussion af opgaver mellem deltagere og arrangører
Arrangørerne leverede to grundlæggende løsninger, enkle og avancerede. Simpel krævede mindre end 16 GB RAM, og avanceret hukommelse passede ikke ind i 16. Samtidig kunne deltagerne, set lidt fremad, ikke udkonkurrere den avancerede løsning væsentligt. Der var ingen vanskeligheder med at lancere disse løsninger. Det skal bemærkes, at der i det avancerede eksempel var en kommentar med et hint om, hvor man kunne begynde at forbedre løsningen. Der blev givet grundlæggende primitive løsninger til hver af opgaverne, som let blev overgået af deltagerne. I de tidlige dage af konkurrencen stødte deltagerne på flere vanskeligheder: For det første blev dataene givet i Apache Parket-format, og ikke alle kombinationer af Python og parketpakken fungerede uden fejl. Den anden vanskelighed var at downloade billeder fra mailskyen; i øjeblikket er der ingen nem måde at downloade en stor mængde data på én gang. Som følge heraf forsinkede disse problemer deltagerne i et par dage.

IDAO. Første etape

Opgaven var at klassificere muon/non-myon partikler efter deres egenskaber. Nøgletræk ved denne opgave var tilstedeværelsen af ​​en vægtkolonne i træningsdataene, som arrangørerne selv fortolkede som tillid til svaret for denne linje. Problemet var, at en del rækker indeholdt negative vægte.

Large Hadron Collider og Odnoklassniki

Efter at have tænkt et par minutter over linjen med hintet (hintet henledte blot opmærksomheden på denne funktion i vægtkolonnen) og opbygget denne graf, besluttede vi at kontrollere 3 muligheder:

1) inverter målet for linjer med negative vægte (og vægter i overensstemmelse hermed)
2) flyt vægtene til minimumsværdien, så de starter fra 0
3) Brug ikke strengvægte

Den tredje mulighed viste sig at være den værste, men de to første forbedrede resultatet, den bedste var mulighed nr. 1, som straks bragte os til den nuværende andenplads i første opgave og først i anden.
Large Hadron Collider og Odnoklassniki
Vores næste skridt var at gennemgå dataene for manglende værdier. Arrangørerne gav os allerede kæmmede data, hvor der manglede en del værdier, og de blev erstattet af -9999.

Vi fandt manglende værdier i kolonnerne MatchedHit_{X,Y,Z}[N] og MatchedHit_D{X,Y,Z}[N], og kun når N=2 eller 3. Som vi forstår, gjorde nogle partikler det ikke passere alle 4 detektorer, og stoppet enten på 3. eller 4. plade. Dataene indeholdt også Lextra_{X,Y}[N] kolonner, som tilsyneladende beskriver det samme som MatchedHit_{X,Y,Z}[N], men ved hjælp af en form for ekstrapolation. Disse sparsomme gæt foreslog, at Lextra_{X,Y}[N] kunne erstatte de manglende værdier i MatchedHit_{X,Y,Z}[N] (kun for X- og Y-koordinater). MatchedHit_Z[N] var godt fyldt med medianen. Disse manipulationer gjorde det muligt for os at nå 1. mellemplads i begge opgaver.

Large Hadron Collider og Odnoklassniki

I betragtning af, at de ikke gav noget for at vinde første etape, kunne vi have stoppet der, men vi fortsatte, tegnede nogle smukke billeder og kom med nye funktioner.

Large Hadron Collider og Odnoklassniki

For eksempel fandt vi ud af, at hvis vi plotter skæringspunkterne for en partikel med hver af de fire detektorplader, kan vi se, at punkterne på hver af pladerne er grupperet i 5 rektangler med et aspektforhold på 4 til 5 og centreret ved punktet (0,0), og i Der er ingen punkter i det første rektangel.

Plade nr. / rektangel dimensioner 1 2 3 4 5
Plade 1 500 × 625 1000 × 1250 2000 × 2500 4000 × 5000 8000 × 10000
Plade 2 520 × 650 1040 × 1300 2080 × 2600 4160 × 5200 8320 × 10400
Plade 3 560 × 700 1120 × 1400 2240 × 2800 4480 × 5600 8960 × 11200
Plade 4 600 × 750 1200 × 1500 2400 × 3000 4800 × 6000 9600 × 12000

Efter at have bestemt disse dimensioner tilføjede vi 4 nye kategoriske træk for hver partikel - nummeret på det rektangel, hvori den skærer hver plade.

Large Hadron Collider og Odnoklassniki

Vi bemærkede også, at partiklerne så ud til at sprede sig til siderne fra midten, og ideen opstod til på en eller anden måde at evaluere "kvaliteten" af denne spredning. Ideelt set ville det nok være muligt at komme med en slags "ideal" parabel afhængigt af indgangspunktet og estimere afvigelsen fra den, men vi begrænsede os til den "ideelle" lige linje. Efter at have konstrueret sådanne ideelle rette linjer for hvert indgangspunkt, var vi i stand til at beregne standardafvigelsen af ​​hver partikels bane fra denne lige linje. Da den gennemsnitlige afvigelse for mål = 1 var 152, og for mål = 0 var den 390, vurderede vi foreløbigt denne funktion som god. Og faktisk kom denne funktion straks til toppen af ​​de mest nyttige.

Vi var glade og tilføjede afvigelsen af ​​alle 4 skæringspunkter for hver partikel fra den ideelle lige linje som yderligere 4 funktioner (og de fungerede også godt).

Links til videnskabelige artikler om emnet for konkurrencen, givet til os af arrangørerne, fik os til at tro, at vi er langt fra de første til at løse dette problem, og måske er der en form for specialiseret software. Efter at have opdaget et lager på github, hvor metoderne IsMuonSimple, IsMuon, IsMuonLoose blev implementeret, overførte vi dem til vores side med mindre ændringer. Selve metoderne var meget enkle: hvis energien for eksempel er mindre end en vis tærskel, så er det ikke en myon, ellers er det en myon. Sådanne enkle funktioner kunne åbenbart ikke give en stigning i tilfælde af brug af gradientboosting, så vi tilføjede endnu en betydelig "afstand" til tærsklen. Disse funktioner er også blevet en smule forbedret. Måske var det ved at analysere eksisterende metoder mere grundigt muligt at finde stærkere metoder og tilføje dem til skiltene.

I slutningen af ​​konkurrencen justerede vi lidt den "hurtige" løsning til det andet problem; i sidste ende adskilte den sig fra basislinjen på følgende punkter:

  1. I rækker med negativ vægt blev målet vendt
  2. Udfyldte manglende værdier i MatchedHit_{X,Y,Z}[N]
  3. Reduceret dybde til 7
  4. Reduceret indlæringsrate til 0.1 (var 0.19)

Som et resultat prøvede vi flere funktioner (ikke særlig succesfuldt), udvalgte parametre og trænede catboost, lightgbm og xgboost, prøvede forskellige blandinger af forudsigelser, og før vi åbnede den private vandt vi trygt på den anden opgave, og på den første var vi blandt de ledere.

Efter at have åbnet den private var vi på 10. pladsen til 1. opgave og 3. til anden. Alle lederne blev blandet sammen, og hastigheden privat var højere end på libboardet. Det ser ud til, at dataene var dårligt stratificeret (eller for eksempel var der ingen rækker med negative vægte i det private), og det var lidt frustrerende.

SNA Hackathon 2019 - Tekster. Første etape

Opgaven var at rangere brugerindlæg på det sociale netværk Odnoklassniki baseret på den tekst, de indeholdt; ud over teksten var der et par flere karakteristika ved indlægget (sprog, ejer, dato og tidspunkt for oprettelse, dato og tidspunkt for visning ).

Som klassiske tilgange til at arbejde med tekst vil jeg fremhæve to muligheder:

  1. Kortlægning af hvert ord i et n-dimensionelt vektorrum, således at lignende ord har lignende vektorer (læs mere i vores artikel), derefter enten at finde det gennemsnitlige ord for teksten eller bruge mekanismer, der tager hensyn til ordenes relative position (CNN, LSTM/GRU).
  2. Brug af modeller, der umiddelbart kan arbejde med hele sætninger. For eksempel Bert. I teorien burde denne tilgang fungere bedre.

Da dette var min første oplevelse med tekster, ville det være forkert at undervise nogen, så jeg vil undervise mig selv. Dette er de tips, jeg ville give mig selv i begyndelsen af ​​konkurrencen:

  1. Før du løber for at lære noget, så se på dataene! Ud over selve teksten havde dataene flere kolonner, og det var muligt at presse meget mere ud af dem, end jeg gjorde. Den enkleste ting er at lave en gennemsnitlig målkodning for nogle af kolonnerne.
  2. Lær ikke af alle data! Der var en masse data (ca. 17 millioner rækker), og det var absolut ikke nødvendigt at bruge dem alle til at teste hypoteser. Træning og forbehandling gik ret langsomt, og jeg ville selvfølgelig have haft tid til at teste mere interessante hypoteser.
  3. <Kontroversielle råd> Ingen grund til at lede efter en mordermodel. Jeg brugte lang tid på at finde ud af Elmo og Bert i håbet om, at de straks ville tage mig til et højt sted, og som et resultat brugte jeg FastText fortrænede indlejringer til det russiske sprog. Jeg kunne ikke opnå bedre fart med Elmo, og jeg havde stadig ikke tid til at finde ud af det med Bert.
  4. <Kontroversielle råd> Ingen grund til at lede efter en dræber funktion. Når jeg så på dataene, bemærkede jeg, at omkring 1 procent af teksterne faktisk ikke indeholder tekst! Men der var links til nogle ressourcer, og jeg skrev en simpel parser, der åbnede webstedet og trak titlen og beskrivelsen ud. Det virkede som en god idé, men så blev jeg revet med og besluttede at parse alle links til alle teksterne og mistede igen en masse tid. Alt dette gav ikke en væsentlig forbedring af det endelige resultat (selvom jeg f.eks. fandt ud af at stamme).
  5. Klassiske funktioner virker. Vi Googler for eksempel "tekstfunktioner kaggle", læser og tilføjer alt. TF-IDF gav en forbedring, det samme gjorde statistiske funktioner såsom tekstlængde, ord og mængden af ​​tegnsætning.
  6. Hvis der er DateTime-kolonner, er det værd at parse dem i flere separate funktioner (timer, ugedage osv.). Hvilke funktioner der skal fremhæves bør analyseres ved hjælp af grafer/nogle metrics. Her gjorde jeg på et indfald alt korrekt og fremhævede de nødvendige funktioner, men en normal analyse ville ikke have skadet (for eksempel som vi gjorde ved finalen).

Large Hadron Collider og Odnoklassniki

Som et resultat af konkurrencen trænede jeg en keras-model med ordfoldning og en anden baseret på LSTM og GRU. Begge brugte forudtrænede FastText-indlejringer til det russiske sprog (jeg prøvede en række andre indlejringer, men det var dem, der fungerede bedst). Efter gennemsnittet af forudsigelserne tog jeg den endelige 7. plads ud af 76 deltagere.

Efter den første fase blev den udgivet artikel af Nikolai Anokhin, som tog andenpladsen (han deltog uden for konkurrencen), og hans løsning indtil et trin gentog min, men han gik videre på grund af query-key-value opmærksomhedsmekanismen.

Anden fase OK & IDAO

De anden etape af konkurrencerne fandt sted næsten fortløbende, så jeg besluttede at se på dem sammen.

Først endte jeg og det nyerhvervede team på det imponerende kontor i firmaet Mail.ru, hvor vores opgave var at kombinere modellerne af tre spor fra første fase - tekst, billeder og collab. Der blev afsat lidt mere end 2 dage til dette, hvilket viste sig at være meget lidt. Faktisk var vi kun i stand til at gentage vores resultater fra første fase uden at få nogen gevinster fra fusionen. Til sidst tog vi 5. pladsen, men vi kunne ikke bruge tekstmodellen. Efter at have set på andre deltageres løsninger ser det ud til, at det var værd at prøve at gruppere teksterne og tilføje dem til kollaborationsmodellen. En bivirkning af denne fase var nye indtryk, møde og kommunikation med seje deltagere og arrangører, samt alvorlig mangel på søvn, som kan have påvirket resultatet af slutfasen af ​​IDAO.

Opgaven på IDAO 2019 Final fase var at forudsige ventetiden på en ordre til Yandex taxachauffører i lufthavnen. På trin 2 blev 3 opgaver = 3 lufthavne identificeret. For hver lufthavn oplyses minut-for-minut-data om antallet af taxabestillinger i seks måneder. Og som testdata blev den næste måned og minut-for-minut data om ordrer for de seneste 2 uger givet. Der var kort tid (1,5 dag), opgaven var ret specifik, kun én person fra holdet kom til konkurrencen - og som følge heraf var det et trist sted hen mod slutningen. Interessante ideer inkluderede forsøg på at bruge eksterne data: vejr, trafikpropper og Yandex taxa-ordrestatistikker. Selvom arrangørerne ikke sagde, hvad disse lufthavne var, antog mange deltagere, at de var Sheremetyevo, Domodedovo og Vnukovo. Selvom denne antagelse blev tilbagevist efter konkurrencen, forbedrede funktioner, for eksempel fra Moskva vejrdata, resultaterne både på validering og på ranglisten.

Konklusion

  1. ML konkurrencer er fede og interessante! Her finder du brugen af ​​færdigheder i dataanalyse, og i snedige modeller og teknikker, og ganske enkelt sund fornuft er velkommen.
  2. ML er allerede en enorm viden, der ser ud til at vokse eksponentielt. Jeg satte mig et mål om at stifte bekendtskab med forskellige områder (signaler, billeder, tabeller, tekst) og var allerede klar over, hvor meget der er at studere. For eksempel, efter disse konkurrencer besluttede jeg mig for at studere: klyngealgoritmer, avancerede teknikker til at arbejde med gradientforstærkende biblioteker (især arbejde med CatBoost på GPU'en), kapselnetværk, forespørgsels-nøgle-værdi opmærksomhedsmekanismen.
  3. Ikke ved kaggle alene! Der er mange andre konkurrencer, hvor det er nemmere at få mindst en T-shirt, og der er flere chancer for andre præmier.
  4. Kommunikere! Der er allerede et stort fællesskab inden for maskinlæring og dataanalyse, der er tematiske grupper i telegram, slack, og seriøse mennesker fra Mail.ru, Yandex og andre virksomheder svarer på spørgsmål og hjælper begyndere og dem, der fortsætter deres vej på dette område af viden.
  5. Jeg råder alle, der var inspireret af det foregående punkt, at besøge datafest — en stor gratis konference i Moskva, som finder sted den 10.-11. maj.

Kilde: www.habr.com

Tilføj en kommentar