Gran Col·lisionador d'Hadrons i Odnoklassniki

Continuant amb el tema dels concursos d'aprenentatge automàtic a Habré, ens agradaria presentar als lectors dues plataformes més. Certament no són tan grans com Kaggle, però definitivament mereixen atenció.

Gran Col·lisionador d'Hadrons i Odnoklassniki

Personalment, no m'agrada massa el kaggle per diversos motius:

  • en primer lloc, les competicions solen durar diversos mesos i la participació activa requereix molt d'esforç;
  • en segon lloc, els nuclis públics (solucions públiques). Els seguidors de Kaggle aconsellen tractar-los amb la calma dels monjos tibetans, però en realitat és una vergonya quan alguna cosa en la qual heu estat treballant durant un mes o dos de sobte resulta que es posa en un plat de plata per a tothom.

Afortunadament, les competicions d'aprenentatge automàtic es realitzen en altres plataformes i es parlaran d'un parell d'aquestes competicions.

IDAO SNA Hackathon 2019
Idioma oficial: anglès,
organitzadors: Yandex, Sberbank, HSE
Idioma oficial rus,
organitzadors: Grup Mail.ru
Ronda en línia: del 15 de gener a l'11 de febrer de 2019;
Final in situ: del 4 al 6 d'abril de 2019
en línia - del 7 de febrer al 15 de març;
fora de línia: del 30 de març a l'1 d'abril.
Utilitzant un determinat conjunt de dades sobre una partícula del Gran Col·lisionador d'Hadrons (trajectòria, impuls i altres paràmetres físics força complexos), determineu si és un muó o no.
A partir d'aquesta declaració, es van identificar 2 tasques:
- en un només havíeu d'enviar la vostra predicció,
- i en l'altre - el codi complet i el model de predicció, i l'execució estava subjecta a restriccions força estrictes sobre el temps d'execució i l'ús de la memòria
Per a la competició SNA Hackathon, es van recopilar registres de visualitzacions de contingut de grups oberts als canals de notícies d'usuaris de febrer a març de 2018. El conjunt de proves conté l'última setmana i mitja de març. Cada entrada del registre conté informació sobre què s'ha mostrat i a qui, així com com l'usuari ha reaccionat davant d'aquest contingut: l'ha puntuat, comentat, ignorat o amagat del canal.
L'essència de les tasques de l'SNA Hackathon és classificar cada usuari de la xarxa social Odnoklassniki el seu feed, aixecant el més alt possible aquelles publicacions que rebran una "classe".
A l'etapa en línia, la tasca es va dividir en 3 parts:
1. classificar els llocs segons diverses característiques col·laboratives
2. classifica les publicacions en funció de les imatges que contenen
3. classifica les publicacions segons el text que contenen
Mètrica personalitzada complexa, com ROC-AUC Mitjana ROC-AUC per usuari
Premis de la primera etapa - Samarretes per a N places, pas a la segona etapa, on es pagava l'allotjament i els àpats durant el concurs.
Segona fase -??? (Per certs motius, no vaig estar present a la cerimònia de lliurament de premis i al final no vaig poder esbrinar quins eren els premis). Van prometre ordinadors portàtils a tots els membres de l'equip guanyador
Premis per a la primera etapa: samarretes per als 100 millors participants, pas a la segona etapa, on es pagava el viatge a Moscou, l'allotjament i els àpats durant el concurs. A més, cap al final de la primera etapa, es van anunciar els premis per al millor en 3 tasques a l'etapa 1: tothom va guanyar una targeta de vídeo RTX 2080 TI!
La segona fase va ser una fase per equips, els equips estaven formats per 2 a 5 persones, premis:
1r lloc - 300 rubles
2r lloc - 200 rubles
3r lloc - 100 rubles
premi del jurat - 100 rubles
Grup oficial de Telegram, ~190 participants, comunicació en anglès, preguntes va haver d'esperar diversos dies per obtenir una resposta Grup oficial en telegrama, ~1500 participants, discussió activa de tasques entre participants i organitzadors
Els organitzadors van oferir dues solucions bàsiques, senzilles i avançades. Simple requeria menys de 16 GB de RAM i la memòria avançada no encaixava en 16. Al mateix temps, mirant una mica endavant, els participants no van poder superar significativament la solució avançada. No hi va haver dificultats per llançar aquestes solucions. Cal tenir en compte que a l'exemple avançat hi havia un comentari amb una pista sobre per on començar a millorar la solució. Es van aportar solucions primitives bàsiques per a cadascuna de les tasques, que eren fàcilment superades pels participants. En els primers dies de la competició, els participants van trobar diverses dificultats: en primer lloc, les dades es donaven en format Apache Parquet i no totes les combinacions de Python i el paquet parquet funcionaven sense errors. La segona dificultat va ser baixar imatges del núvol de correu; de moment no hi ha una manera fàcil de descarregar una gran quantitat de dades alhora. Com a conseqüència, aquests problemes van retardar els participants un parell de dies.

IDAO. Primera etapa

La tasca consistia a classificar les partícules de muons/no muons segons les seves característiques. La característica clau d'aquesta tasca va ser la presència d'una columna de pes a les dades d'entrenament, que els mateixos organitzadors van interpretar com a confiança en la resposta d'aquesta línia. El problema era que moltes files contenien pesos negatius.

Gran Col·lisionador d'Hadrons i Odnoklassniki

Després de pensar durant uns minuts sobre la línia amb la pista (la pista simplement va cridar l'atenció sobre aquesta característica de la columna de pes) i construir aquest gràfic, vam decidir comprovar 3 opcions:

1) inverteix l'objectiu de línies amb pesos negatius (i pesos en conseqüència)
2) Canvieu els pesos al valor mínim perquè comencin de 0
3) no utilitzeu pesos de corda

La tercera opció va resultar ser la pitjor, però les dues primeres van millorar el resultat, la millor va ser l'opció número 1, que de seguida ens va portar a l'actual segon lloc en la primera tasca i primers en la segona.
Gran Col·lisionador d'Hadrons i Odnoklassniki
El nostre següent pas va ser revisar les dades per detectar els valors que falten. Els organitzadors ens van donar dades ja pentinats, on hi faltaven força valors, i van ser substituïts per -9999.

Hem trobat valors que falten a les columnes MatchedHit_{X,Y,Z}[N] i MatchedHit_D{X,Y,Z}[N], i només quan N=2 o 3. Com entenem, algunes partícules no ho van fer. passar els 4 detectors i aturar-se a la 3a o 4a placa. Les dades també contenien columnes Lextra_{X,Y}[N], que aparentment descriuen el mateix que MatchedHit_{X,Y,Z}[N], però utilitzant algun tipus d'extrapolació. Aquestes minses conjectures van suggerir que Lextra_{X,Y}[N] es podria substituir pels valors que falten a MatchedHit_{X,Y,Z}[N] (només per a les coordenades X i Y). MatchedHit_Z[N] estava ben omplert amb la mitjana. Aquestes manipulacions ens van permetre assolir el 1r lloc intermedi en ambdues tasques.

Gran Col·lisionador d'Hadrons i Odnoklassniki

Tenint en compte que no van donar res per guanyar la primera etapa, ens hauríem pogut aturar aquí, però vam continuar, vam dibuixar unes imatges precioses i vam proposar novetats.

Gran Col·lisionador d'Hadrons i Odnoklassniki

Per exemple, vam trobar que si tracem els punts d'intersecció d'una partícula amb cadascuna de les quatre plaques detectores, podem veure que els punts de cadascuna de les plaques s'agrupen en 5 rectangles amb una relació d'aspecte de 4 a 5 i centrats a el punt (0,0), i en No hi ha punts al primer rectangle.

Núm. placa / dimensions del rectangle 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

Un cop determinats aquestes dimensions, hem afegit 4 noves característiques categòriques per a cada partícula: el número del rectangle en què talla cada placa.

Gran Col·lisionador d'Hadrons i Odnoklassniki

També vam notar que les partícules semblaven dispersar-se cap als costats des del centre i va sorgir la idea d'avaluar d'alguna manera la "qualitat" d'aquesta dispersió. Idealment, probablement seria possible trobar algun tipus de paràbola "ideal" en funció del punt d'enlairament i estimar-ne la desviació, però ens vam limitar a la línia recta "ideal". Després d'haver construït aquestes línies rectes ideals per a cada punt d'entrada, vam poder calcular la desviació estàndard de la trajectòria de cada partícula a partir d'aquesta recta. Com que la desviació mitjana per a l'objectiu = 1 era de 152, i per a l'objectiu = 0 era de 390, vam valorar provisionalment aquesta característica com a bona. I, de fet, aquesta funció va arribar immediatament a la part superior de les més útils.

Ens va encantar i vam afegir la desviació dels 4 punts d'intersecció de cada partícula de la línia recta ideal com a 4 característiques addicionals (i també van funcionar bé).

Els enllaços a articles científics sobre el tema del concurs, que ens van donar els organitzadors, van fer pensar que no som els primers a resoldre aquest problema i, potser, hi ha algun tipus de programari especialitzat. Després d'haver descobert un repositori a github on es van implementar els mètodes IsMuonSimple, IsMuon, IsMuonLoose, els vam transferir al nostre lloc amb petites modificacions. Els mètodes en si eren molt senzills: per exemple, si l'energia és inferior a un determinat llindar, no és un muó, en cas contrari és un muó. Òbviament, aquestes funcions tan senzilles no podrien augmentar en el cas d'utilitzar l'augment del gradient, de manera que vam afegir una altra "distància" significativa al llindar. Aquestes característiques també s'han millorat lleugerament. Potser, analitzant els mètodes existents més a fons, va ser possible trobar mètodes més forts i afegir-los als signes.

Al final de la competició, vam ajustar lleugerament la solució "ràpida" per al segon problema; al final, es va diferenciar de la línia de base en els punts següents:

  1. A les files amb pes negatiu, l'objectiu es va invertir
  2. S'han completat els valors que falten a MatchedHit_{X,Y,Z}[N]
  3. Redueix la profunditat a 7
  4. S'ha reduït la taxa d'aprenentatge a 0.1 (era 0.19)

Com a resultat, vam provar més funcions (no gaire amb èxit), vam seleccionar paràmetres i vam entrenar catboost, lightgbm i xgboost, vam provar diferents combinacions de prediccions i abans d'obrir el privat vam guanyar amb confiança en la segona tasca, i en la primera vam estar entre els líders.

Després d'obrir el privat vam quedar en 10è lloc per a la 1a tasca i 3r per a la segona. Tots els líders es van barrejar, i la velocitat en privat era més alta que a la pissarra. Sembla que les dades estaven mal estratificades (o per exemple no hi havia files amb pesos negatius a la privada) i això era una mica frustrant.

SNA Hackathon 2019 - Textos. Primera etapa

La tasca era classificar les publicacions dels usuaris a la xarxa social Odnoklassniki en funció del text que contenien; a més del text, hi havia algunes característiques més de la publicació (idioma, propietari, data i hora de creació, data i hora de visualització). ).

Com a enfocaments clàssics del treball amb text, destacaria dues opcions:

  1. Mapejar cada paraula en un espai vectorial n-dimensional de manera que paraules similars tinguin vectors similars (llegiu més a el nostre article), després o bé trobar la paraula mitjana per al text o utilitzar mecanismes que tinguin en compte la posició relativa de les paraules (CNN, LSTM/GRU).
  2. Ús de models que poden funcionar immediatament amb frases senceres. Per exemple, Bert. En teoria, aquest enfocament hauria de funcionar millor.

Com que aquesta va ser la meva primera experiència amb textos, seria incorrecte ensenyar a algú, així que m'ensenyaré jo mateix. Aquests són els consells que em donaria a l'inici del concurs:

  1. Abans de córrer a ensenyar alguna cosa, mira les dades! A més del text en si, les dades tenien diverses columnes i era possible extreure'n molt més que jo. El més senzill és fer la codificació objectiu per a algunes de les columnes.
  2. No aprenguis de totes les dades! Hi havia moltes dades (uns 17 milions de files) i no era absolutament necessari utilitzar-les totes per provar hipòtesis. La formació i el preprocessament van ser bastant lents i, òbviament, hauria tingut temps de provar hipòtesis més interessants.
  3. <Consell polèmic> No cal buscar un model assassí. Vaig passar molt de temps esbrinant l'Elmo i el Bert, amb l'esperança que em portarien immediatament a un lloc alt i, com a resultat, vaig utilitzar incrustacions pre-entrenadas de FastText per a l'idioma rus. No vaig poder aconseguir una millor velocitat amb Elmo, i encara no vaig tenir temps d'esbrinar-ho amb Bert.
  4. <Consell polèmic> No cal buscar una funció assassina. Mirant les dades, em vaig adonar que al voltant de l'1 per cent dels textos en realitat no contenen text! Però hi havia enllaços a alguns recursos i vaig escriure un senzill analitzador que va obrir el lloc i va treure el títol i la descripció. Em va semblar una bona idea, però després em vaig deixar portar i vaig decidir analitzar tots els enllaços de tots els textos i vaig tornar a perdre molt de temps. Tot això no va suposar una millora significativa en el resultat final (tot i que em vaig adonar de la derivació, per exemple).
  5. Les funcions clàssiques funcionen. Google, per exemple, "caglen les funcions de text", llegim i afegim tot. TF-IDF va aportar una millora, igual que les característiques estadístiques com ara la longitud del text, les paraules i la quantitat de puntuació.
  6. Si hi ha columnes DateTime, val la pena analitzar-les en diverses funcions separades (hores, dies de la setmana, etc.). Quines característiques s'han de destacar s'han d'analitzar mitjançant gràfics/algunes mètriques. Aquí, per caprici, ho vaig fer tot correctament i vaig destacar les característiques necessàries, però una anàlisi normal no hauria fet mal (per exemple, com vam fer a la final).

Gran Col·lisionador d'Hadrons i Odnoklassniki

Com a resultat de la competició, vaig entrenar un model de keras amb convolució de paraules i un altre basat en LSTM i GRU. Tots dos van utilitzar incrustacions FastText prèviament entrenadas per a l'idioma rus (vaig provar altres incrustacions, però aquestes van ser les que van funcionar millor). Després de fer la mitjana de les prediccions, vaig ocupar el setè lloc final de 7 participants.

Després de la primera etapa es va publicar article de Nikolai Anokhin, que va ocupar el segon lloc (va participar fora de competició), i la seva solució fins a algun moment va repetir la meva, però va anar més enllà a causa del mecanisme d'atenció consulta-clau-valor.

Segona etapa OK i IDAO

Les segones fases de les competicions es van fer gairebé consecutives, així que vaig decidir mirar-les junts.

Primer, jo i l'equip recentment adquirit vam acabar a la impressionant oficina de l'empresa Mail.ru, on la nostra tasca era combinar els models de tres pistes de la primera etapa: text, imatges i col·laboració. Es van destinar una mica més de 2 dies per a això, que va resultar ser molt poc. De fet, només vam poder repetir els nostres resultats des de la primera etapa sense rebre cap benefici de la fusió. Al final, vam aconseguir el 5è lloc, però no vam poder utilitzar el model de text. Després de mirar les solucions d'altres participants, sembla que valia la pena intentar agrupar els textos i afegir-los al model de col·laboració. Un efecte secundari d'aquesta etapa van ser les noves impressions, la reunió i la comunicació amb participants i organitzadors interessants, així com una greu falta de son, que podria haver afectat el resultat de l'etapa final d'IDAO.

La tasca de l'etapa final de l'IDAO 2019 va ser predir el temps d'espera per a una comanda per als taxistes de Yandex a l'aeroport. A l'etapa 2, es van identificar 3 tasques = 3 aeroports. Per a cada aeroport, es donen dades minut a minut sobre el nombre de comandes de taxi durant sis mesos. I com a dades de prova, es van donar dades del mes següent i minut a minut sobre les comandes de les dues darreres setmanes. Hi va haver poc temps (2 dies), la tasca era força concreta, només una persona de l'equip va venir a la competició i, per tant, va ser un lloc trist cap al final. Les idees interessants van incloure intents d'utilitzar dades externes: temps, embussos de trànsit i estadístiques de comandes de taxi de Yandex. Tot i que els organitzadors no van dir quins eren aquests aeroports, molts participants van suposar que eren Sheremetyevo, Domodedovo i Vnúkovo. Tot i que aquesta suposició es va refutar després de la competició, les característiques, per exemple, de les dades meteorològiques de Moscou van millorar els resultats tant en validació com en la classificació.

Conclusió

  1. Les competicions de ML són genials i interessants! Aquí trobareu l'ús de les habilitats en l'anàlisi de dades, i en models i tècniques astuts, i simplement el sentit comú és benvingut.
  2. ML ja és un gran cos de coneixement que sembla estar creixent de manera exponencial. Em vaig marcar com a objectiu familiaritzar-me amb diferents àmbits (senyals, imatges, taules, text) i ja em vaig adonar de quant hi ha per estudiar. Per exemple, després d'aquests concursos vaig decidir estudiar: algorismes de clustering, tècniques avançades per treballar amb biblioteques de gradient boosting (en particular, treballant amb CatBoost a la GPU), xarxes de càpsules, el mecanisme d'atenció de consulta-clau-valor.
  3. No només per pessigo! Hi ha molts altres concursos on és més fàcil aconseguir almenys una samarreta, i hi ha més possibilitats per a altres premis.
  4. Comunicar-se! Ja hi ha una gran comunitat en el camp de l'aprenentatge automàtic i l'anàlisi de dades, hi ha grups temàtics en telegram, slack i gent seriosa de Mail.ru, Yandex i altres empreses responen preguntes i ajuden als principiants i als que segueixen el seu camí en aquest camp. del coneixement.
  5. Aconsello a tothom que s'hagi inspirat en el punt anterior que visiti datafest — una important conferència gratuïta a Moscou, que tindrà lloc del 10 a l'11 de maig.

Font: www.habr.com

Afegeix comentari