Large Hadron Collider și Odnoklassniki

Continuând tema competițiilor de învățare automată pe Habré, am dori să prezentăm cititorilor încă două platforme. Cu siguranță nu sunt la fel de uriași ca Kaggle, dar cu siguranță merită atenție.

Large Hadron Collider și Odnoklassniki

Personal, nu-mi place prea mult kaggle din mai multe motive:

  • în primul rând, competițiile de acolo durează adesea câteva luni, iar participarea activă necesită mult efort;
  • în al doilea rând, nucleele publice (soluții publice). Adepții Kaggle sfătuiesc să-i trateze cu calmul călugărilor tibetani, dar, în realitate, este destul de păcat când ceva la care ai lucrat de o lună sau două se dovedește brusc a fi așezat pe un platou de argint pentru toată lumea.

Din fericire, competițiile de învățare automată sunt organizate pe alte platforme și vor fi discutate câteva dintre aceste competiții.

IDAO SNA Hackathon 2019
Limba oficiala: engleza,
organizatori: Yandex, Sberbank, HSE
Limba oficiala rusa,
organizatori: Grupul Mail.ru
Runda online: 15 ianuarie — 11 februarie 2019;
Finală la fața locului: 4-6 aprilie 2019
online - din 7 februarie până pe 15 martie;
offline - de la 30 martie până la 1 aprilie.
Folosind un anumit set de date despre o particulă din Large Hadron Collider (traiectorie, impuls și alți parametri fizici destul de complexi), determinați dacă este un muon sau nu
Din această declarație au fost identificate 2 sarcini:
— într-una a trebuit doar să-ți trimiți predicția,
- iar în cealaltă - codul complet și modelul pentru predicție, iar execuția a fost supusă unor restricții destul de stricte privind timpul de rulare și utilizarea memoriei
Pentru competiția SNA Hackathon, au fost colectate jurnalele de afișare de conținut de la grupuri deschise în fluxurile de știri ale utilizatorilor pentru perioada februarie-martie 2018. Setul de testare conține ultima săptămână și jumătate din martie. Fiecare intrare din jurnal conține informații despre ce a fost afișat și cui, precum și cum a reacționat utilizatorul la acest conținut: l-a evaluat, l-a comentat, l-a ignorat sau l-a ascuns din flux.
Esența sarcinilor SNA Hackathon este de a clasa fiecare utilizator al rețelei sociale Odnoklassniki feed-ul său, ridicând cât mai sus posibil acele postări care vor primi o „clasă”.
În etapa online, sarcina a fost împărțită în 3 părți:
1. ierarhizează posturile în funcție de diverse caracteristici de colaborare
2. clasați postările în funcție de imaginile pe care le conțin
3. ierarhizează postările în funcție de textul pe care îl conțin
Valoare personalizată complexă, ceva de genul ROC-AUC ROC-AUC medie pe utilizator
Premii pentru prima etapă - tricouri pentru N locuri, trecere la etapa a doua, unde s-a plătit cazarea și masa în timpul concursului
A doua fază - ??? (Din anumite motive, nu am fost prezent la ceremonia de premiere și nu am putut afla care au fost premiile până la urmă). Ei au promis laptopuri tuturor membrilor echipei câștigătoare
Premii pentru prima etapă - tricouri pentru cei mai buni 100 de participanți, trecere în etapa a doua, unde s-a plătit deplasarea la Moscova, cazare și masă în timpul competiției. De asemenea, spre finalul primei etape au fost anunțate premii pentru cel mai bun din 3 sarcini la etapa 1: toată lumea a câștigat o placă video RTX 2080 TI!
A doua etapă a fost o etapă de echipă, echipe formate din 2 până la 5 persoane, premii:
Locul 1 - 300 de ruble
Locul 2 - 200 de ruble
Locul 3 - 100 de ruble
premiul juriului - 100 de ruble
Grupul oficial de telegramă, ~190 de participanți, comunicare în limba engleză, întrebări a trebuit să aștepte câteva zile pentru un răspuns Grup oficial în telegramă, ~1500 de participanți, discuție activă a sarcinilor între participanți și organizatori
Organizatorii au oferit două soluții de bază, simple și avansate. Simplul necesita mai puțin de 16 GB de RAM, iar memoria avansată nu se potrivea în 16. În același timp, privind puțin înainte, participanții nu au reușit să depășească semnificativ soluția avansată. Nu au fost dificultăți în lansarea acestor soluții. Trebuie remarcat faptul că în exemplul avansat a existat un comentariu cu un indiciu despre unde să începem îmbunătățirea soluției. Au fost furnizate soluții primitive de bază pentru fiecare dintre sarcini, care au fost ușor depășite de către participanți. În primele zile ale competiției, participanții au întâmpinat mai multe dificultăți: în primul rând, datele au fost date în format Apache Parquet și nu toate combinațiile de Python și pachetul de parchet au funcționat fără erori. A doua dificultate a fost descărcarea imaginilor din cloud-ul de e-mail; în momentul de față nu există o modalitate ușoară de a descărca o cantitate mare de date simultan. Drept urmare, aceste probleme au întârziat participanții cu câteva zile.

IDAO. Primul stagiu

Sarcina a fost de a clasifica particulele de muoni/non-muoni în funcție de caracteristicile lor. Caracteristica cheie a acestei sarcini a fost prezența unei coloane de greutate în datele de antrenament, pe care organizatorii înșiși au interpretat-o ​​ca fiind încredere în răspunsul pentru această linie. Problema a fost că destul de multe rânduri conțineau ponderi negative.

Large Hadron Collider și Odnoklassniki

După ce ne-am gândit câteva minute la linia cu indiciu (indicația pur și simplu a atras atenția asupra acestei caracteristici a coloanei de greutate) și am construit acest grafic, am decis să verificăm 3 opțiuni:

1) inversați ținta liniilor cu ponderi negative (și ponderi în consecință)
2) mutați greutățile la valoarea minimă, astfel încât să înceapă de la 0
3) nu utilizați greutăți de șir

A treia variantă s-a dovedit a fi cea mai proastă, dar primele două au îmbunătățit rezultatul, cea mai bună a fost opțiunea nr. 1, care ne-a adus imediat pe actualul loc al doilea în prima sarcină și primul în a doua.
Large Hadron Collider și Odnoklassniki
Următorul nostru pas a fost să examinăm datele pentru valori lipsă. Organizatorii ne-au dat date deja pieptănate, unde lipseau destul de multe valori, iar acestea au fost înlocuite cu -9999.

Am găsit valori lipsă în coloanele MatchedHit_{X,Y,Z}[N] și MatchedHit_D{X,Y,Z}[N] și numai când N=2 sau 3. După cum înțelegem, unele particule nu au treceți toți cei 4 detectoare și opriți fie pe placa a 3-a, fie pe a 4-a. Datele conțineau și coloane Lextra_{X,Y}[N], care aparent descriu același lucru ca MatchedHit_{X,Y,Z}[N], dar folosind un fel de extrapolare. Aceste presupuneri slabe au sugerat că Lextra_{X,Y}[N] ar putea fi înlocuit cu valorile lipsă din MatchedHit_{X,Y,Z}[N] (doar pentru coordonatele X și Y). MatchedHit_Z[N] a fost bine completat cu mediana. Aceste manipulări ne-au permis să ajungem pe locul 1 intermediar în ambele sarcini.

Large Hadron Collider și Odnoklassniki

Având în vedere că nu au dat nimic pentru câștigarea primei etape, ne-am fi putut opri aici, dar am continuat, am făcut niște poze frumoase și am venit cu noi funcții.

Large Hadron Collider și Odnoklassniki

De exemplu, am descoperit că dacă trasăm punctele de intersecție ale unei particule cu fiecare dintre cele patru plăci detectoare, putem vedea că punctele de pe fiecare dintre plăci sunt grupate în 5 dreptunghiuri cu un raport de aspect de 4 la 5 și centrate la punctul (0,0), iar în Nu există puncte în primul dreptunghi.

Nr plăcuță / dimensiuni dreptunghi 1 2 3 4 5
Placa 1 500 × 625 1000 × 1250 2000 × 2500 4000 × 5000 8000 × 10000
Placa 2 520 × 650 1040 × 1300 2080 × 2600 4160 × 5200 8320 × 10400
Placa 3 560 × 700 1120 × 1400 2240 × 2800 4480 × 5600 8960 × 11200
Placa 4 600 × 750 1200 × 1500 2400 × 3000 4800 × 6000 9600 × 12000

După ce am determinat aceste dimensiuni, am adăugat 4 noi caracteristici categorice pentru fiecare particulă - numărul dreptunghiului în care intersectează fiecare placă.

Large Hadron Collider și Odnoklassniki

De asemenea, am observat că particulele păreau să se împrăștie în părțile laterale din centru și a apărut ideea de a evalua cumva „calitatea” acestei împrăștieri. În mod ideal, probabil că ar fi posibil să găsim un fel de parabolă „ideală” în funcție de punctul de decolare și să estimăm abaterea de la acesta, dar ne-am limitat la linia dreaptă „ideală”. După ce am construit astfel de linii drepte ideale pentru fiecare punct de intrare, am putut calcula abaterea standard a traiectoriei fiecărei particule de la această linie dreaptă. Deoarece abaterea medie pentru țintă = 1 a fost 152, iar pentru țintă = 0 a fost 390, am evaluat temporar această caracteristică ca fiind bună. Și într-adevăr, această caracteristică a ajuns imediat în topul celor mai utile.

Am fost încântați și am adăugat abaterea tuturor celor 4 puncte de intersecție pentru fiecare particulă de la linia dreaptă ideală ca 4 caracteristici suplimentare (și, de asemenea, au funcționat bine).

Legăturile către articole științifice pe tema competiției, oferite nouă de organizatori, ne-au determinat ideea că suntem departe de primii care rezolvă această problemă și, poate, există un fel de software specializat. După ce am descoperit un depozit pe github în care au fost implementate metodele IsMuonSimple, IsMuon, IsMuonLoose, le-am transferat pe site-ul nostru cu modificări minore. Metodele în sine erau foarte simple: de exemplu, dacă energia este mai mică decât un anumit prag, atunci nu este un muon, altfel este un muon. Astfel de caracteristici simple, evident, nu ar putea da o creștere în cazul utilizării creșterii gradientului, așa că am adăugat o altă „distanță” semnificativă la prag. Aceste caracteristici au fost, de asemenea, ușor îmbunătățite. Poate că, analizând metodele existente mai amănunțit, a fost posibil să găsim metode mai puternice și să le adăugați la semne.

La sfârșitul competiției, am ajustat ușor soluția „rapidă” pentru a doua problemă; în cele din urmă, a diferit de linia de bază în următoarele puncte:

  1. În rândurile cu greutate negativă, ținta a fost inversată
  2. S-au completat valorile lipsă în MatchedHit_{X,Y,Z}[N]
  3. Adâncime redusă la 7
  4. Rata de învățare redusă la 0.1 (înainte de 0.19)

Drept urmare, am încercat mai multe funcții (nu foarte reușit), am selectat parametri și am antrenat catboost, lightgbm și xgboost, am încercat diferite amestecuri de predicții și înainte de a deschide privatul am câștigat cu încredere la a doua sarcină, iar la prima am fost printre cei mai buni. lideri.

După deschiderea privatului, am fost pe locul 10 pentru prima sarcină și pe locul 1 pentru a doua. Toți liderii s-au amestecat, iar viteza în privat era mai mare decât pe libboard. Se pare că datele erau slab stratificate (sau de exemplu nu existau rânduri cu ponderi negative în privat) și acest lucru a fost puțin frustrant.

SNA Hackathon 2019 - Texte. Primul stagiu

Sarcina a fost de a clasifica postările utilizatorilor de pe rețeaua socială Odnoklassniki pe baza textului pe care îl conțineau; pe lângă text, mai existau câteva caracteristici ale postării (limba, proprietarul, data și ora creării, data și ora vizionării). ).

Ca abordări clasice de lucru cu text, aș evidenția două opțiuni:

  1. Maparea fiecărui cuvânt într-un spațiu vectorial n-dimensional astfel încât cuvinte similare să aibă vectori similari (citiți mai multe în articolul nostru), apoi fie găsirea cuvântului mediu pentru text, fie utilizarea mecanismelor care țin cont de poziția relativă a cuvintelor (CNN, LSTM/GRU).
  2. Folosind modele care pot funcționa imediat cu propoziții întregi. De exemplu, Bert. În teorie, această abordare ar trebui să funcționeze mai bine.

Deoarece aceasta a fost prima mea experiență cu textele, ar fi greșit să predau pe cineva, așa că mă voi învăța singur. Acestea sunt sfaturile pe care mi le-aș da la începutul competiției:

  1. Înainte de a alerga să înveți ceva, uită-te la date! Pe lângă textul în sine, datele aveau mai multe coloane și era posibil să scoți mult mai mult din ele decât am făcut eu. Cel mai simplu lucru este să înseamnă codificare țintă pentru unele dintre coloane.
  2. Nu învăța din toate datele! Erau o mulțime de date (aproximativ 17 milioane de rânduri) și nu era absolut necesar să le folosim pe toate pentru a testa ipoteze. Antrenamentul și preprocesarea au fost destul de lente și, evident, aș fi avut timp să testez ipoteze mai interesante.
  3. <Sfat controversat> Nu este nevoie să cauți un model ucigaș. Am petrecut mult timp să-mi dau seama de Elmo și Bert, sperând că ei mă vor duce imediat într-un loc înalt și, ca urmare, am folosit încorporații pre-antrenate FastText pentru limba rusă. Nu am putut atinge o viteză mai bună cu Elmo și încă nu am avut timp să-mi dau seama cu Bert.
  4. <Sfat controversat> Nu este nevoie să căutați o funcție ucigașă. Privind datele, am observat că aproximativ 1 la sută dintre texte nu conțin de fapt text! Dar au existat link-uri către unele resurse și am scris un parser simplu care a deschis site-ul și a scos titlul și descrierea. Mi s-a părut o idee bună, dar apoi m-am lăsat dus de cap și am decis să analizez toate linkurile pentru toate textele și din nou am pierdut mult timp. Toate acestea nu au furnizat o îmbunătățire semnificativă a rezultatului final (deși mi-am dat seama de stăpânire, de exemplu).
  5. Funcțiile clasice funcționează. Noi Google, de exemplu, „funcțiile textului încurcă”, citim și adăugăm totul. TF-IDF a oferit o îmbunătățire, la fel ca și caracteristicile statistice, cum ar fi lungimea textului, cuvintele și cantitatea de punctuație.
  6. Dacă există coloane DateTime, merită să le analizați în mai multe caracteristici separate (ore, zile ale săptămânii etc.). Caracteristicile care trebuie evidențiate ar trebui analizate folosind grafice/uneori valori. Aici, la un capriciu, am făcut totul corect și am scos în evidență caracteristicile necesare, dar o analiză normală nu ar fi stricat (de exemplu, așa cum am făcut la finală).

Large Hadron Collider și Odnoklassniki

Ca urmare a competiției, am antrenat un model keras cu convoluție de cuvinte și un altul bazat pe LSTM și GRU. Ambele au folosit înglobări FastText pre-antrenate pentru limba rusă (am încercat o serie de alte înglobări, dar acestea au fost cele care au funcționat cel mai bine). După ce am făcut media predicțiilor, am ocupat ultimul loc al 7-lea din 76 de participanți.

După prima etapă a fost publicat articol de Nikolai Anokhin, care a ocupat locul doi (a participat în afara competiției), iar soluția lui până la un moment dat a repetat-o ​​pe a mea, dar a mers mai departe datorită mecanismului de atenție interogare-cheie-valoare.

Etapa a doua OK & IDAO

Etapele secunde ale competițiilor s-au desfășurat aproape consecutiv, așa că am decis să le privesc împreună.

Mai întâi, eu și echipa nou achiziționată am ajuns în biroul impresionant al companiei Mail.ru, unde sarcina noastră a fost să combinăm modelele a trei piese din prima etapă - text, imagini și colaborare. Pentru asta au fost alocate puțin mai mult de 2 zile, ceea ce s-a dovedit a fi foarte puțin. De fapt, am putut doar să ne repetăm ​​rezultatele din prima etapă, fără a primi niciun câștig din fuziune. Până la urmă, am ocupat locul 5, dar nu am putut folosi modelul text. După ce am analizat soluțiile altor participanți, se pare că a meritat să încercăm să grupăm textele și să le adăugați la modelul de colaborare. Un efect secundar al acestei etape a fost noile impresii, întâlnirea și comunicarea cu participanți și organizatori cool, precum și lipsa severă de somn, care ar fi putut afecta rezultatul etapei finale a IDAO.

Sarcina la etapa finală IDAO 2019 a fost să prezică timpul de așteptare pentru o comandă pentru șoferii de taxi Yandex la aeroport. La etapa 2 au fost identificate 3 sarcini = 3 aeroporturi. Pentru fiecare aeroport, sunt oferite date minut cu minut privind numărul de comenzi de taxi pentru șase luni. Și ca date de testare, au fost date luna următoare și datele minut cu minut privind comenzile din ultimele 2 săptămâni. A fost puțin timp (1,5 zile), sarcina a fost destul de specifică, doar o singură persoană din echipă a venit la competiție - și ca urmare, a fost un loc trist spre final. Ideile interesante au inclus încercări de a utiliza date externe: vremea, ambuteiajele și statisticile Yandex privind comenzile de taxi. Deși organizatorii nu au spus care sunt aceste aeroporturi, mulți participanți au presupus că sunt Sheremetyevo, Domodedovo și Vnukovo. Deși această presupunere a fost respinsă după competiție, caracteristicile, de exemplu, din datele meteorologice de la Moscova au îmbunătățit rezultatele atât la validare, cât și la clasament.

Concluzie

  1. Competițiile ML sunt cool și interesante! Aici veți găsi utilizarea abilităților în analiza datelor și în modele și tehnici viclene, iar pur și simplu bunul simț este binevenit.
  2. ML este deja un corp imens de cunoștințe care pare să crească exponențial. Mi-am propus să fac cunoștință cu diferite domenii (semnale, imagini, tabele, text) și deja mi-am dat seama cât de mult este de studiat. De exemplu, după aceste competiții am decis să studiez: algoritmi de clustering, tehnici avansate de lucru cu biblioteci de gradient boosting (în special, lucrul cu CatBoost pe GPU), rețele de capsule, mecanismul de interogare-cheie-valoare.
  3. Nu numai prin chinuri! Există multe alte competiții în care este mai ușor să obții măcar un tricou și sunt mai multe șanse pentru alte premii.
  4. Comunica! Există deja o comunitate mare în domeniul învățării automate și analizei datelor, există grupuri tematice în telegramă, slack, iar oameni serioși de la Mail.ru, Yandex și alte companii răspund la întrebări și îi ajută pe începători și pe cei care își continuă drumul în acest domeniu de cunoaștere.
  5. Îi sfătuiesc pe toți cei care s-au inspirat de punctul anterior să viziteze datafest — o mare conferință gratuită la Moscova, care va avea loc în perioada 10-11 mai.

Sursa: www.habr.com

Adauga un comentariu