Large Hadron Collider och Odnoklassniki

Vi fortsätter med temat maskininlärningstävlingar på Habré och vill introducera läsarna för ytterligare två plattformar. De är verkligen inte lika stora som kaggle, men de förtjänar definitivt uppmärksamhet.

Large Hadron Collider och Odnoklassniki

Personligen gillar jag inte kaggla för mycket av flera anledningar:

  • För det första varar tävlingar där ofta i flera månader, och aktivt deltagande kräver mycket ansträngning;
  • för det andra offentliga kärnor (offentliga lösningar). Kaggle-anhängare råder att behandla dem med de tibetanska munkarnas lugn, men i verkligheten är det ganska synd när något du har arbetat mot i en månad eller två plötsligt visar sig ligga utlagt på ett silverfat för alla.

Lyckligtvis hålls maskininlärningstävlingar på andra plattformar, och ett par av dessa tävlingar kommer att diskuteras.

IDAO SNA Hackathon 2019
Officiellt språk: engelska,
arrangörer: Yandex, Sberbank, HSE
Officiellt ryska språket,
arrangörer: Mail.ru Group
Onlineomgång: 15 januari – 11 februari 2019;
Final på plats: 4–6 april 2019
online - från 7 februari till 15 mars;
offline - från 30 mars till 1 april.
Använd en viss uppsättning data om en partikel i Large Hadron Collider (bana, rörelsemängd och andra ganska komplexa fysiska parametrar), avgör om det är en myon eller inte
Från detta uttalande identifierades 2 uppgifter:
— i en var du bara tvungen att skicka din förutsägelse,
- och i den andra - den kompletta koden och modellen för förutsägelse, och exekveringen var föremål för ganska strikta restriktioner för körtid och minnesanvändning
För SNA Hackathon-tävlingen samlades loggar över innehållsvisningar från öppna grupper i användarens nyhetsflöden för februari-mars 2018. Testsetet innehåller den sista och en halv veckan av mars. Varje post i loggen innehåller information om vad som visades och till vem, samt hur användaren reagerade på detta innehåll: betygsatt det, kommenterat, ignorerat det eller dolt det från flödet.
Kärnan i SNA Hackathons uppgifter är att rangordna varje användare av det sociala nätverket Odnoklassniki sitt flöde, och höja så högt som möjligt de inlägg som kommer att få en "klass".
På onlinestadiet var uppgiften uppdelad i 3 delar:
1. rangordna tjänster enligt olika samarbetsegenskaper
2. ranka inlägg baserat på bilderna de innehåller
3. rangordna inlägg efter texten de innehåller
Komplext anpassat mått, något som ROC-AUC Genomsnittlig ROC-AUC per användare
Priser för första etappen - T-shirts för N platser, övergång till andra etappen, där logi och måltider betalades under tävlingen
Andra fasen - ??? (Av vissa anledningar var jag inte närvarande vid prisutdelningen och kunde inte ta reda på vad priserna var i slutändan). De lovade bärbara datorer till alla medlemmar i det vinnande laget
Priser för första etappen - T-shirts för de 100 bästa deltagarna, passage till andra etappen, där resor till Moskva, boende och måltider under tävlingen betalades. Mot slutet av det första steget tillkännagavs också priser för bäst i tre uppgifter i steg 3: alla vann ett RTX 1 TI-videokort!
Den andra etappen var en teametapp, lagen bestod av 2 till 5 personer, priser:
1: a plats - 300 000 rubel
2: a plats - 200 000 rubel
3: a plats - 100 000 rubel
jurypris - 100 000 rubel
Officiell telegramgrupp, ~190 deltagare, kommunikation på engelska, frågor fick vänta flera dagar på svar Officiell grupp i telegram, ~1500 deltagare, aktiv diskussion av uppgifter mellan deltagare och arrangörer
Arrangörerna gav två grundläggande lösningar, enkla och avancerade. Enkelt krävde mindre än 16 GB RAM, och avancerat minne passade inte in i 16. Samtidigt kunde deltagarna, lite framåt, inte överträffa den avancerade lösningen nämnvärt. Det var inga svårigheter att lansera dessa lösningar. Det bör noteras att i det avancerade exemplet fanns en kommentar med en ledtråd om var man kan börja förbättra lösningen. Grundläggande primitiva lösningar tillhandahölls för var och en av uppgifterna, som lätt överträffades av deltagarna. I början av tävlingen stötte deltagarna på flera svårigheter: för det första gavs data i Apache Parkett-format, och inte alla kombinationer av Python och parkettpaketet fungerade utan fel. Den andra svårigheten var att ladda ner bilder från e-postmolnet; för närvarande finns det inget enkelt sätt att ladda ner en stor mängd data på en gång. Som ett resultat av dessa problem försenade deltagarna ett par dagar.

IDAO. Första stadiet

Uppgiften var att klassificera myon/icke-myonpartiklar efter deras egenskaper. Nyckeldraget i denna uppgift var närvaron av en viktkolumn i träningsdatan, som arrangörerna själva tolkade som förtroende för svaret för denna linje. Problemet var att ganska många rader innehöll negativa vikter.

Large Hadron Collider och Odnoklassniki

Efter att ha funderat några minuter på linjen med ledtråden (tipset uppmärksammade helt enkelt denna funktion i viktkolumnen) och byggt denna graf, bestämde vi oss för att kontrollera tre alternativ:

1) invertera målet för linjer med negativ vikt (och vikt därefter)
2) flytta vikterna till minimivärdet så att de börjar från 0
3) använd inte strängvikter

Det tredje alternativet visade sig vara det sämsta, men de två första förbättrade resultatet, det bästa var alternativ nr 1, som omedelbart förde oss till nuvarande andra plats i första uppgiften och första i andra.
Large Hadron Collider och Odnoklassniki
Vårt nästa steg var att granska data för saknade värden. Arrangörerna gav oss redan kammade data, där det saknades en hel del värden, och de ersattes av -9999.

Vi hittade saknade värden i kolumnerna MatchedHit_{X,Y,Z}[N] och MatchedHit_D{X,Y,Z}[N] och endast när N=2 eller 3. Som vi förstår gjorde vissa partiklar inte det passera alla 4 detektorerna och stannade antingen på den 3:e eller 4:e plattan. Datan innehöll också Lextra_{X,Y}[N] kolumner, som tydligen beskriver samma sak som MatchedHit_{X,Y,Z}[N], men med någon form av extrapolering. Dessa magra gissningar föreslog att Lextra_{X,Y}[N] kunde ersätta de saknade värdena i MatchedHit_{X,Y,Z}[N] (endast för X- och Y-koordinater). MatchedHit_Z[N] var välfylld med medianen. Dessa manipulationer gjorde det möjligt för oss att nå 1:a mellanliggande plats i båda uppgifterna.

Large Hadron Collider och Odnoklassniki

Med tanke på att de inte gav något för att vinna den första etappen kunde vi ha slutat där, men vi fortsatte, ritade några vackra bilder och kom på nya funktioner.

Large Hadron Collider och Odnoklassniki

Till exempel fann vi att om vi plottar skärningspunkterna för en partikel med var och en av de fyra detektorplattorna, kan vi se att punkterna på var och en av plattorna är grupperade i 5 rektanglar med ett bildförhållande på 4 till 5 och centrerade vid punkten (0,0), och i Det finns inga punkter i den första rektangeln.

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

Efter att ha bestämt dessa dimensioner lade vi till fyra nya kategoriska egenskaper för varje partikel - numret på rektangeln där den skär varje platta.

Large Hadron Collider och Odnoklassniki

Vi märkte också att partiklarna verkade spridas åt sidorna från mitten och idén uppstod att på något sätt utvärdera "kvaliteten" av denna spridning. Helst skulle det förmodligen vara möjligt att komma på någon form av "ideal" parabel beroende på startpunkten och uppskatta avvikelsen från den, men vi begränsade oss till den "ideala" räta linjen. Efter att ha konstruerat sådana idealiska räta linjer för varje ingångspunkt kunde vi beräkna standardavvikelsen för varje partikels bana från denna räta linje. Eftersom den genomsnittliga avvikelsen för mål = 1 var 152 och för mål = 0 var den 390, bedömde vi preliminärt denna funktion som bra. Och faktiskt, den här funktionen hamnade omedelbart till toppen av de mest användbara.

Vi blev glada och lade till avvikelsen för alla fyra skärningspunkterna för varje partikel från den ideala räta linjen som ytterligare fyra funktioner (och de fungerade också bra).

Länkar till vetenskapliga artiklar om tävlingens ämne, som gavs till oss av arrangörerna, gav oss tanken att vi är långt ifrån de första att lösa detta problem och att det kanske finns någon form av specialiserad programvara. Efter att ha upptäckt ett arkiv på github där metoderna IsMuonSimple, IsMuon, IsMuonLoose implementerades, överförde vi dem till vår sida med mindre modifieringar. Metoderna i sig var väldigt enkla: till exempel, om energin är mindre än en viss tröskel, så är det inte en myon, annars är det en myon. Sådana enkla funktioner kunde uppenbarligen inte ge en ökning vid användning av gradientförstärkning, så vi lade till ytterligare ett betydande "avstånd" till tröskeln. Dessa funktioner har också förbättrats något. Kanske, genom att analysera befintliga metoder mer ingående, var det möjligt att hitta starkare metoder och lägga till dem i skyltarna.

I slutet av tävlingen finjusterade vi lite den "snabba" lösningen för det andra problemet; i slutändan skilde den sig från baslinjen på följande punkter:

  1. I rader med negativ vikt inverterades målet
  2. Fyllde i saknade värden i MatchedHit_{X,Y,Z}[N]
  3. Minskat djup till 7
  4. Sänkte inlärningshastigheten till 0.1 (var 0.19)

Som ett resultat testade vi fler funktioner (inte särskilt framgångsrikt), valda parametrar och tränade catboost, lightgbm och xgboost, provade olika blandningar av förutsägelser och innan vi öppnade den privata vann vi med säkerhet på den andra uppgiften, och på den första var vi bland de ledare.

Efter att ha öppnat privaten låg vi på 10:e plats för den första uppgiften och 1:e för den andra. Alla ledare blandade ihop sig och hastigheten privat var högre än på libboarden. Det verkar som att uppgifterna var dåligt stratifierade (eller till exempel fanns det inga rader med negativ vikt i det privata) och detta var lite frustrerande.

SNA Hackathon 2019 - Texter. Första stadiet

Uppgiften var att rangordna användarinlägg på det sociala nätverket Odnoklassniki baserat på texten de innehöll; utöver texten fanns det några fler egenskaper hos inlägget (språk, ägare, datum och tid för skapande, datum och tid för visning ).

Som klassiska metoder för att arbeta med text vill jag lyfta fram två alternativ:

  1. Mappa varje ord till ett n-dimensionellt vektorutrymme så att liknande ord har liknande vektorer (läs mer i vår artikel), sedan antingen hitta det genomsnittliga ordet för texten eller använda mekanismer som tar hänsyn till ordens relativa position (CNN, LSTM/GRU).
  2. Använda modeller som omedelbart kan arbeta med hela meningar. Till exempel Bert. I teorin borde detta tillvägagångssätt fungera bättre.

Eftersom det här var min första erfarenhet av texter skulle det vara fel att lära någon, så jag lär mig själv. Det här är tipsen jag skulle ge mig själv i början av tävlingen:

  1. Innan du springer för att lära ut något, titta på data! Utöver själva texten hade data flera kolumner och det gick att pressa ut mycket mer från dem än vad jag gjorde. Det enklaste är att göra menad målkodning för några av kolumnerna.
  2. Lär dig inte av all data! Det fanns mycket data (cirka 17 miljoner rader) och det var absolut inte nödvändigt att använda alla för att testa hypoteser. Träning och förbearbetning gick ganska långsamt, och jag skulle uppenbarligen ha hunnit testa fler intressanta hypoteser.
  3. <Kontroversiell råd> Du behöver inte leta efter en mördande modell. Jag ägnade lång tid åt att lista ut Elmo och Bert, i hopp om att de omedelbart skulle ta mig till en hög plats, och som ett resultat använde jag FastText förtränade inbäddningar för det ryska språket. Jag kunde inte uppnå bättre fart med Elmo, och jag hade fortfarande inte tid att lista ut det med Bert.
  4. <Kontroversiell råd> Du behöver inte leta efter en mördande funktion. När jag tittade på uppgifterna märkte jag att runt 1 procent av texterna faktiskt inte innehåller text! Men det fanns länkar till några resurser, och jag skrev en enkel parser som öppnade webbplatsen och drog ut titeln och beskrivningen. Det verkade som en bra idé, men sedan blev jag medtagen och bestämde mig för att analysera alla länkar för alla texter och förlorade återigen mycket tid. Allt detta gav ingen nämnvärd förbättring av det slutliga resultatet (även om jag t.ex. kom på stemming).
  5. Klassiska funktioner fungerar. Vi Googlar till exempel "textfunktioner kaggle", läser och lägger till allt. TF-IDF gav en förbättring, liksom statistiska funktioner som textlängd, ord och mängden skiljetecken.
  6. Om det finns DateTime-kolumner är det värt att analysera dem i flera separata funktioner (timmar, veckodagar, etc.). Vilka funktioner som ska lyftas fram bör analyseras med hjälp av grafer/vissa mått. Här, på ett infall, gjorde jag allt korrekt och lyfte fram de nödvändiga funktionerna, men en normal analys skulle inte ha skadat (till exempel som vi gjorde i finalen).

Large Hadron Collider och Odnoklassniki

Som ett resultat av tävlingen tränade jag en keras-modell med ordfalsning, och en annan baserad på LSTM och GRU. Båda använde förtränade FastText-inbäddningar för det ryska språket (jag provade ett antal andra inbäddningar, men det var de som fungerade bäst). Efter att ha tagit ett genomsnitt av förutsägelserna tog jag den slutliga 7:e platsen av 76 deltagare.

Efter den första etappen publicerades den artikel av Nikolai Anokhin, som tog andraplatsen (han deltog utanför konkurrensen), och hans lösning fram till något skede upprepade min, men han gick längre på grund av fråge-nyckel-värde-uppmärksamhetsmekanismen.

Andra etappen OK & IDAO

De andra etapperna av tävlingarna ägde rum nästan i följd, så jag bestämde mig för att titta på dem tillsammans.

Först hamnade jag och det nyförvärvade teamet på det imponerande kontoret för företaget Mail.ru, där vår uppgift var att kombinera modellerna av tre spår från första etappen - text, bilder och collab. Lite mer än 2 dagar avsattes för detta, vilket visade sig vara väldigt lite. Faktum är att vi bara kunde upprepa våra resultat från det första steget utan att få några vinster från sammanslagningen. Till slut tog vi en 5:e plats, men vi kunde inte använda textmodellen. Efter att ha tittat på andra deltagares lösningar verkar det som att det var värt att försöka klustera texterna och lägga till dem i collab-modellen. En bieffekt av detta skede var nya intryck, möte och kommunikation med coola deltagare och arrangörer, samt allvarlig sömnbrist, vilket kan ha påverkat resultatet av slutskedet av IDAO.

Uppgiften vid IDAO 2019 slutskedet var att förutsäga väntetiden för en beställning för Yandex taxichaufförer på flygplatsen. I steg 2 identifierades 3 uppgifter = 3 flygplatser. För varje flygplats ges minut för minut uppgifter om antalet taxibeställningar under sex månader. Och som testdata gavs nästa månad och minut för minut data om beställningar för de senaste 2 veckorna. Det blev lite tid (1,5 dagar), uppgiften var ganska specifik, bara en person från laget kom till tävlingen – och som ett resultat blev det en tråkig plats mot slutet. Intressanta idéer inkluderade försök att använda externa data: väder, trafikstockningar och Yandex taxiorderstatistik. Även om arrangörerna inte sa vilka dessa flygplatser var, antog många deltagare att de var Sheremetyevo, Domodedovo och Vnukovo. Även om detta antagande motbevisades efter tävlingen, förbättrade funktioner, till exempel från Moskva väderdata, resultaten både på validering och på resultattavlan.

Slutsats

  1. ML-tävlingar är coola och intressanta! Här hittar du användningen av färdigheter i dataanalys, och i listiga modeller och tekniker, och helt enkelt sunt förnuft är välkommet.
  2. ML är redan en enorm mängd kunskap som verkar växa exponentiellt. Jag satte mig som mål att sätta mig in i olika områden (signaler, bilder, tabeller, text) och insåg redan hur mycket det finns att studera. Till exempel, efter dessa tävlingar bestämde jag mig för att studera: klustringsalgoritmer, avancerade tekniker för att arbeta med gradientförstärkande bibliotek (särskilt att arbeta med CatBoost på GPU), kapselnätverk, fråge-nyckel-värde uppmärksamhetsmekanism.
  3. Inte enbart med kaggling! Det finns många andra tävlingar där det är lättare att få åtminstone en T-shirt, och det finns fler chanser till andra priser.
  4. Kommunicera! Det finns redan ett stort community inom området maskininlärning och dataanalys, det finns tematiska grupper inom telegram, slack och seriösa personer från Mail.ru, Yandex och andra företag svarar på frågor och hjälper nybörjare och de som fortsätter sin väg inom detta område av kunskap.
  5. Jag råder alla som inspirerats av föregående punkt att besöka datafest — en stor gratiskonferens i Moskva, som äger rum den 10-11 maj.

Källa: will.com

Lägg en kommentar