Large Hadron Collider e Odnoklassniki

Continuando il tema delle competizioni di machine learning su Habré, vorremmo presentare ai lettori altre due piattaforme. Certamente non sono enormi come i Kaggle, ma meritano sicuramente attenzione.

Large Hadron Collider e Odnoklassniki

Personalmente, non mi piace troppo Kaggle per diversi motivi:

  • in primo luogo, le competizioni spesso durano diversi mesi e la partecipazione attiva richiede molto impegno;
  • in secondo luogo, i kernel pubblici (soluzioni pubbliche). I seguaci di Kaggle consigliano di trattarli con la calma dei monaci tibetani, ma in realtà è un vero peccato quando qualcosa su cui hai lavorato per un mese o due si rivela improvvisamente servito su un piatto d'argento per tutti.

Fortunatamente, le gare di machine learning si svolgono su altre piattaforme e ne discuteremo un paio.

IDAO SNA Hackathon 2019
Lingua ufficiale: inglese,
organizzatori: Yandex, Sberbank, HSE
Lingua russa ufficiale,
organizzatori: Gruppo Mail.ru
Turno online: 15 gennaio - 11 febbraio 2019;
Finale in loco: 4-6 aprile 2019
online - dal 7 febbraio al 15 marzo;
offline - dal 30 marzo al 1 aprile.
Utilizzando un certo insieme di dati su una particella nel Large Hadron Collider (traiettoria, quantità di moto e altri parametri fisici piuttosto complessi), determina se si tratta di un muone o meno
Da questa affermazione sono stati individuati 2 compiti:
— in uno dovevi semplicemente inviare la tua previsione,
- e nell'altro - il codice completo e il modello per la previsione, e l'esecuzione era soggetta a restrizioni abbastanza rigide sul tempo di esecuzione e sull'uso della memoria
Per il concorso SNA Hackathon, sono stati raccolti i registri dei contenuti visualizzati dai gruppi aperti nei feed di notizie degli utenti per il periodo febbraio-marzo 2018. Il set di test contiene l'ultima settimana e mezza di marzo. Ogni voce nel registro contiene informazioni su cosa è stato mostrato e a chi, nonché su come l'utente ha reagito a questo contenuto: valutandolo, commentandolo, ignorandolo o nascondendolo dal feed.
L'essenza dei compiti dell'SNA Hackathon è classificare ciascun utente del social network Odnoklassniki nel suo feed, elevando il più in alto possibile quei post che riceveranno una "classe".
Nella fase online, il compito è stato diviso in 3 parti:
1. classificare i post in base alle varie caratteristiche collaborative
2. classifica i post in base alle immagini che contengono
3. classifica i post in base al testo che contengono
Metrica personalizzata complessa, qualcosa come ROC-AUC ROC-AUC medio per utente
Premi prima fase - Magliette per N posti, passaggio alla seconda fase, dove vitto e alloggio sono stati pagati durante la competizione
Seconda fase - ??? (Per vari motivi non ero presente alla cerimonia di premiazione e non sono riuscito a sapere quali fossero i premi alla fine). Hanno promesso laptop a tutti i membri della squadra vincitrice
Premi per la prima fase: magliette per i 100 migliori partecipanti, passaggio alla seconda fase, dove sono stati pagati il ​​viaggio a Mosca, vitto e alloggio durante la competizione. Inoltre, verso la fine della prima fase, sono stati annunciati i premi per il migliore nei 3 compiti della fase 1: tutti hanno vinto una scheda video RTX 2080 TI!
La seconda fase era una fase a squadre, le squadre erano composte da 2 a 5 persone, premi:
1 ° posto: 300 rubli
2 ° posto: 200 rubli
3 ° posto: 100 rubli
premio della giuria: 100 rubli
Gruppo Telegram ufficiale, ~190 partecipanti, comunicazione in inglese, le domande hanno dovuto attendere diversi giorni per una risposta Gruppo ufficiale in Telegram, ~1500 partecipanti, discussione attiva dei compiti tra partecipanti e organizzatori
Gli organizzatori hanno fornito due soluzioni base, semplice e avanzata. La versione semplice richiedeva meno di 16 GB di RAM e la memoria avanzata non rientrava in 16. Allo stesso tempo, guardando un po’ avanti, i partecipanti non sono stati in grado di sovraperformare significativamente la soluzione avanzata. Non ci sono state difficoltà nel lanciare queste soluzioni. Va notato che nell'esempio avanzato era presente un commento con un suggerimento su dove iniziare a migliorare la soluzione. Per ciascuno dei compiti sono state fornite soluzioni primitive di base, che sono state facilmente superate dai partecipanti. Nei primi giorni del concorso i partecipanti hanno incontrato diverse difficoltà: innanzitutto i dati venivano forniti in formato Apache Parquet e non tutte le combinazioni di Python e del pacchetto parquet funzionavano senza errori. La seconda difficoltà è stata scaricare le immagini dal cloud della posta; al momento non esiste un modo semplice per scaricare una grande quantità di dati contemporaneamente. Di conseguenza, questi problemi hanno ritardato i partecipanti per un paio di giorni.

IDAO. Primo stadio

Il compito era classificare le particelle muoniche/non muoniche in base alle loro caratteristiche. La caratteristica fondamentale di questo compito è stata la presenza di una colonna di peso nei dati di allenamento, che gli stessi organizzatori hanno interpretato come fiducia nella risposta a questa linea. Il problema era che parecchie righe contenevano pesi negativi.

Large Hadron Collider e Odnoklassniki

Dopo aver pensato per qualche minuto alla linea con il suggerimento (il suggerimento semplicemente attirava l'attenzione su questa caratteristica della colonna del peso) e dopo aver costruito questo grafico, abbiamo deciso di verificare 3 opzioni:

1) invertire il target delle linee con pesi negativi (e pesi di conseguenza)
2) spostare i pesi al valore minimo in modo che partano da 0
3) non utilizzare pesi sulle corde

La terza opzione si è rivelata la peggiore, ma le prime due hanno migliorato il risultato, la migliore è stata l'opzione n. 1, che ci ha portato subito all'attuale secondo posto nella prima prova e primi nella seconda.
Large Hadron Collider e Odnoklassniki
Il nostro passaggio successivo è stato esaminare i dati per individuare i valori mancanti. Gli organizzatori ci hanno fornito dati già combinati, dove mancavano parecchi valori, e sono stati sostituiti da -9999.

Abbiamo trovato valori mancanti nelle colonne MatchedHit_{X,Y,Z}[N] e MatchedHit_D{X,Y,Z}[N] e solo quando N=2 o 3. Come abbiamo capito, alcune particelle non superare tutti e 4 i rilevatori e si è fermato sulla 3a o sulla 4a piastra. I dati contenevano anche colonne Lextra_{X,Y}[N], che apparentemente descrivono la stessa cosa di MatchedHit_{X,Y,Z}[N], ma utilizzando una sorta di estrapolazione. Queste magre ipotesi suggerivano che Lextra_{X,Y}[N] potesse essere sostituito con i valori mancanti in MatchedHit_{X,Y,Z}[N] (solo per le coordinate X e Y). MatchedHit_Z[N] era ben riempito con la mediana. Queste manipolazioni ci hanno permesso di raggiungere il 1° posto intermedio in entrambe le prove.

Large Hadron Collider e Odnoklassniki

Considerando che non davano nulla per vincere la prima tappa, avremmo potuto fermarci lì, ma abbiamo continuato, disegnato delle bellissime foto e inventato nuove funzionalità.

Large Hadron Collider e Odnoklassniki

Ad esempio, abbiamo scoperto che se tracciamo i punti di intersezione di una particella con ciascuna delle quattro piastre rivelatrici, possiamo vedere che i punti su ciascuna delle piastre sono raggruppati in 5 rettangoli con proporzioni da 4 a 5 e centrati in il punto (0,0) e in Non ci sono punti nel primo rettangolo.

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

Dopo aver determinato queste dimensioni, abbiamo aggiunto 4 nuove caratteristiche categoriche per ciascuna particella: il numero del rettangolo in cui interseca ciascuna piastra.

Large Hadron Collider e Odnoklassniki

Abbiamo anche notato che le particelle sembravano disperdersi ai lati dal centro ed è nata l'idea di valutare in qualche modo la “qualità” di questa dispersione. Idealmente, sarebbe probabilmente possibile elaborare una sorta di parabola “ideale” a seconda del punto di decollo e stimare la deviazione da esso, ma ci siamo limitati alla linea retta “ideale”. Avendo costruito tali linee rette ideali per ciascun punto di ingresso, siamo stati in grado di calcolare la deviazione standard della traiettoria di ciascuna particella da questa linea retta. Poiché la deviazione media per target = 1 era 152 e per target = 0 era 390, abbiamo provvisoriamente valutato questa caratteristica come buona. E in effetti, questa funzionalità è arrivata subito in cima a quelle più utili.

Siamo rimasti molto soddisfatti e abbiamo aggiunto la deviazione di tutti e 4 i punti di intersezione per ciascuna particella dalla linea retta ideale come altre 4 funzionalità (e hanno funzionato bene).

I collegamenti ad articoli scientifici sull'argomento del concorso, forniti dagli organizzatori, hanno fatto pensare che siamo lontani dall'essere i primi a risolvere questo problema e, forse, esiste una sorta di software specializzato. Avendo scoperto un repository su github dove erano implementati i metodi IsMuonSimple, IsMuon, IsMuonLoose, li abbiamo trasferiti sul nostro sito con piccole modifiche. I metodi stessi erano molto semplici: ad esempio, se l'energia è inferiore a una certa soglia, allora non è un muone, altrimenti è un muone. Caratteristiche così semplici ovviamente non potevano dare un aumento in caso di utilizzo del gradient boosting, quindi abbiamo aggiunto un'altra "distanza" significativa alla soglia. Anche queste funzionalità sono state leggermente migliorate. Forse, analizzando più a fondo i metodi esistenti, è stato possibile trovare metodi più forti e aggiungerli ai segni.

Alla fine del concorso, abbiamo leggermente modificato la soluzione “rapida” per il secondo problema; alla fine, differiva dalla base nei seguenti punti:

  1. Nelle righe con peso negativo il target veniva invertito
  2. Compilati i valori mancanti in MatchedHit_{X,Y,Z}[N]
  3. Profondità ridotta a 7
  4. Tasso di apprendimento ridotto a 0.1 (era 0.19)

Di conseguenza, abbiamo provato più funzionalità (senza molto successo), selezionato parametri e addestrato catboost, lightgbm e xgboost, provato diverse combinazioni di previsioni e prima di aprire il privato abbiamo vinto con sicurezza nel secondo compito, e nel primo eravamo tra i capi.

Dopo aver aperto la privata eravamo al 10° posto per la prima prova e al 1° per la seconda. Tutti i leader si sono confusi e la velocità in privato era più alta che sulla libboard. Sembra che i dati fossero poco stratificati (o ad esempio non c'erano righe con pesi negativi nel privato) e questo è stato un po' frustrante.

SNA Hackathon 2019 - Testi. Primo stadio

Il compito era classificare i post degli utenti sul social network Odnoklassniki in base al testo in essi contenuto; oltre al testo, c'erano alcune altre caratteristiche del post (lingua, proprietario, data e ora di creazione, data e ora di visualizzazione ).

Come approccio classico al lavoro con il testo, vorrei evidenziare due opzioni:

  1. Mappare ogni parola in uno spazio vettoriale n-dimensionale in modo tale che parole simili abbiano vettori simili (maggiori informazioni in il nostro articolo), quindi trovando la parola media del testo o utilizzando meccanismi che tengono conto della posizione relativa delle parole (CNN, LSTM/GRU).
  2. Utilizzando modelli che possano funzionare immediatamente con intere frasi. Ad esempio, Bert. In teoria, questo approccio dovrebbe funzionare meglio.

Dato che questa è stata la mia prima esperienza con i testi, sarebbe sbagliato insegnare a qualcuno, quindi insegnerò da solo. Questi sono i consigli che mi darei all’inizio del concorso:

  1. Prima di correre a insegnare qualcosa, guarda i dati! Oltre al testo stesso, i dati avevano diverse colonne ed è stato possibile ricavarne molto di più di me. La cosa più semplice è codificare il target per alcune colonne.
  2. Non imparare da tutti i dati! I dati erano molti (circa 17 milioni di righe) e non era assolutamente necessario utilizzarli tutti per verificare le ipotesi. L'addestramento e la preelaborazione sono stati piuttosto lenti e ovviamente avrei avuto il tempo di testare ipotesi più interessanti.
  3. <Consigli controversi> Non c'è bisogno di cercare un modello killer. Ho passato molto tempo a capire Elmo e Bert, sperando che mi portassero immediatamente in alto, e di conseguenza ho utilizzato gli incorporamenti pre-addestrati FastText per la lingua russa. Non sono riuscito a raggiungere una velocità migliore con Elmo, e non ho ancora avuto il tempo di capirlo con Bert.
  4. <Consigli controversi> Non c'è bisogno di cercare una caratteristica killer. Osservando i dati ho notato che circa l'1% dei testi in realtà non contiene testo! Ma c'erano collegamenti ad alcune risorse e ho scritto un semplice parser che apriva il sito ed estraeva titolo e descrizione. Sembrava una buona idea, ma poi mi sono lasciato trasportare e ho deciso di analizzare tutti i collegamenti per tutti i testi e di nuovo ho perso molto tempo. Tutto ciò non ha comportato un miglioramento significativo del risultato finale (anche se ho capito lo stemming, ad esempio).
  5. Le funzionalità classiche funzionano. Noi di Google, ad esempio, "funzioni di testo kaggle", leggiamo e aggiungiamo tutto. TF-IDF ha fornito un miglioramento, così come caratteristiche statistiche come la lunghezza del testo, le parole e la quantità di punteggiatura.
  6. Se sono presenti colonne DateTime, vale la pena analizzarle in diverse funzionalità separate (ore, giorni della settimana, ecc.). Quali caratteristiche dovrebbero essere evidenziate dovrebbero essere analizzate utilizzando grafici/alcuni parametri. Qui, per capriccio, ho fatto tutto correttamente e ho evidenziato le caratteristiche necessarie, ma un'analisi normale non avrebbe fatto male (ad esempio, come abbiamo fatto in finale).

Large Hadron Collider e Odnoklassniki

Come risultato del concorso, ho addestrato un modello Keras con la convoluzione delle parole e un altro basato su LSTM e GRU. Entrambi utilizzavano incorporamenti FastText pre-addestrati per la lingua russa (ho provato diversi altri incorporamenti, ma questi erano quelli che funzionavano meglio). Dopo aver calcolato la media dei pronostici, su 7 partecipanti ho ottenuto il 76° posto finale.

Dopo la prima fase è stato pubblicato articolo di Nikolai Anokhin, che si è classificato secondo (ha partecipato fuori concorso), e la sua soluzione fino a un certo punto ha ripetuto la mia, ma è andato oltre a causa del meccanismo di attenzione query-chiave-valore.

Seconda fase OK e IDAO

Le seconde fasi delle gare si sono svolte quasi consecutivamente, quindi ho deciso di guardarle insieme.

Per prima cosa, io e il team appena acquisito siamo finiti nell'imponente ufficio dell'azienda Mail.ru, dove il nostro compito era combinare i modelli di tre brani della prima fase: testo, immagini e collaborazione. Per questo sono stati concessi poco più di 2 giorni, il che si è rivelato molto poco. In effetti, siamo riusciti solo a ripetere i risultati della prima fase, senza ottenere alcun vantaggio dalla fusione. Alla fine ci siamo piazzati al 5° posto, ma non siamo riusciti a utilizzare il modello testuale. Dopo aver esaminato le soluzioni degli altri partecipanti, sembra che valesse la pena provare a raggruppare i testi e ad aggiungerli al modello di collaborazione. Un effetto collaterale di questa fase sono state le nuove impressioni, l'incontro e la comunicazione con partecipanti e organizzatori interessanti, nonché una grave mancanza di sonno, che potrebbe aver influenzato il risultato della fase finale dell'IDAO.

Il compito nella fase finale di IDAO 2019 era prevedere il tempo di attesa per un ordine per i tassisti Yandex in aeroporto. Nella fase 2 sono state identificate 3 attività = 3 aeroporti. Per ciascun aeroporto vengono forniti i dati minuto per minuto sul numero di ordini di taxi per sei mesi. E come dati di test, sono stati forniti i dati del mese successivo e minuto per minuto sugli ordini delle ultime 2 settimane. C'era poco tempo (1,5 giorni), il compito era abbastanza specifico, solo una persona della squadra è venuta alla competizione e, di conseguenza, verso la fine il posto era triste. Idee interessanti includevano tentativi di utilizzare dati esterni: meteo, ingorghi e statistiche sugli ordini di taxi Yandex. Sebbene gli organizzatori non abbiano specificato quali fossero questi aeroporti, molti partecipanti presumevano che fossero Sheremetyevo, Domodedovo e Vnukovo. Sebbene questa ipotesi sia stata confutata dopo la competizione, le caratteristiche, ad esempio, dei dati meteorologici di Mosca hanno migliorato i risultati sia nella convalida che nella classifica.

conclusione

  1. Le competizioni ML sono fantastiche e interessanti! Qui troverai l'uso delle competenze nell'analisi dei dati e nell'uso di modelli e tecniche astuti, e semplicemente il buon senso è il benvenuto.
  2. Il machine learning rappresenta già un enorme bagaglio di conoscenze che sembra crescere in modo esponenziale. Mi sono posto l'obiettivo di conoscere diverse aree (segnali, immagini, tabelle, testo) e ho già capito quanto c'è da studiare. Ad esempio, dopo queste competizioni ho deciso di studiare: algoritmi di clustering, tecniche avanzate per lavorare con librerie di potenziamento del gradiente (in particolare, lavorare con CatBoost sulla GPU), reti di capsule, meccanismo di attenzione query-chiave-valore.
  3. Non solo con Kaggle! Ci sono tanti altri concorsi dove è più facile ottenere almeno una maglietta, e ci sono più possibilità di ottenere altri premi.
  4. Comunicare! Esiste già una grande comunità nel campo dell'apprendimento automatico e dell'analisi dei dati, ci sono gruppi tematici in Telegram, Slack e persone serie di Mail.ru, Yandex e altre società rispondono a domande e aiutano i principianti e coloro che continuano il loro percorso in questo campo di conoscenza.
  5. Consiglio a tutti coloro che sono stati ispirati dal punto precedente di visitare datafest - un'importante conferenza gratuita a Mosca, che si svolgerà il 10 e 11 maggio.

Fonte: habr.com

Aggiungi un commento