Grand collisionneur de hadrons et Odnoklassniki

Poursuivant le thème des concours d'apprentissage automatique sur Habré, nous aimerions présenter aux lecteurs deux autres plateformes. Ils ne sont certainement pas aussi énormes que Kaggle, mais ils méritent certainement qu’on s’y intéresse.

Grand collisionneur de hadrons et Odnoklassniki

Personnellement, je n'aime pas trop kaggle pour plusieurs raisons :

  • premièrement, les compétitions y durent souvent plusieurs mois et une participation active demande beaucoup d'efforts ;
  • deuxièmement, les noyaux publics (solutions publiques). Les adeptes de Kaggle conseillent de les traiter avec le calme des moines tibétains, mais en réalité, c'est vraiment dommage quand quelque chose sur lequel vous travaillez depuis un mois ou deux se révèle soudainement disposé sur un plateau d'argent pour tout le monde.

Heureusement, des concours d'apprentissage automatique sont organisés sur d'autres plateformes, et quelques-uns de ces concours seront abordés.

IDAO Hackathon SNA 2019
Langue officielle : anglais,
organisateurs : Yandex, Sberbank, HSE
Langue russe officielle,
organisateurs : Groupe Mail.ru
Tour en ligne : du 15 janvier au 11 février 2019 ;
Finale sur place : 4-6 avril 2019
en ligne - du 7 février au 15 mars ;
hors ligne - du 30 mars au 1er avril.
À l'aide d'un certain ensemble de données sur une particule dans le Grand collisionneur de hadrons (trajectoire, impulsion et autres paramètres physiques plutôt complexes), déterminez s'il s'agit d'un muon ou non.
A partir de cette déclaration, 2 tâches ont été identifiées :
— dans l'un d'entre eux, il suffisait d'envoyer votre prédiction,
- et dans l'autre - le code complet et le modèle de prédiction, et l'exécution était soumise à des restrictions assez strictes sur le temps d'exécution et l'utilisation de la mémoire
Pour le concours SNA Hackathon, des journaux d'affichage de contenu de groupes ouverts dans les fils d'actualité des utilisateurs pour février-mars 2018 ont été collectés. L'ensemble de tests contient la dernière semaine et demie du mois de mars. Chaque entrée du journal contient des informations sur ce qui a été montré et à qui, ainsi que sur la façon dont l'utilisateur a réagi à ce contenu : l'a noté, commenté, ignoré ou masqué du flux.
L'essence des tâches du SNA Hackathon est de classer chaque utilisateur du réseau social Odnoklassniki dans son flux, en élevant le plus haut possible les messages qui recevront une « classe ».
Au stade en ligne, la tâche était divisée en 3 parties :
1. classer les publications en fonction de diverses caractéristiques collaboratives
2. classer les publications en fonction des images qu'elles contiennent
3. classer les publications en fonction du texte qu'elles contiennent
Métrique personnalisée complexe, quelque chose comme ROC-AUC ROC-AUC moyenne par utilisateur
Prix ​​​​pour la première étape - T-shirts pour N places, passage à la deuxième étape, où l'hébergement et les repas ont été payés pendant la compétition
Seconde phase - ??? (Pour certaines raisons, je n'étais pas présent à la cérémonie de remise des prix et je n'ai finalement pas pu savoir quels étaient les prix). Ils ont promis des ordinateurs portables à tous les membres de l'équipe gagnante
Prix ​​​​pour la première étape - T-shirts pour les 100 meilleurs participants, passage à la deuxième étape, où le voyage à Moscou, l'hébergement et les repas pendant la compétition ont été payés. De plus, vers la fin de la première étape, des prix ont été annoncés pour les meilleurs dans 3 tâches de l'étape 1 : tout le monde a gagné une carte vidéo RTX 2080 TI !
La deuxième étape était une étape par équipe, les équipes étaient composées de 2 à 5 personnes, des prix :
1ère place - 300 000 roubles
2ère place - 200 000 roubles
3ère place - 100 000 roubles
prix du jury - 100 000 roubles
Groupe de télégramme officiel, ~190 participants, communication en anglais, les questions ont dû attendre plusieurs jours pour obtenir une réponse Groupe officiel en télégramme, ~1500 participants, discussion active des tâches entre participants et organisateurs
Les organisateurs ont proposé deux solutions de base, simple et avancée. Le simple nécessitait moins de 16 Go de RAM, et la mémoire avancée ne rentrait pas dans 16. Dans le même temps, en regardant un peu vers l'avenir, les participants n'ont pas été en mesure de surpasser de manière significative la solution avancée. Il n'y a eu aucune difficulté à lancer ces solutions. Il convient de noter que dans l'exemple avancé, il y avait un commentaire indiquant par où commencer à améliorer la solution. Des solutions primitives de base ont été fournies pour chacune des tâches, qui ont été facilement surpassées par les participants. Au début du concours, les participants ont rencontré plusieurs difficultés : premièrement, les données étaient fournies au format Apache Parquet, et toutes les combinaisons de Python et du package parquet ne fonctionnaient pas sans erreurs. La deuxième difficulté était le téléchargement d'images à partir du cloud de messagerie ; pour le moment, il n'existe pas de moyen simple de télécharger une grande quantité de données à la fois. En conséquence, ces problèmes ont retardé les participants de quelques jours.

IDAO. Première étape

La tâche consistait à classer les particules muoniques/non muoniques en fonction de leurs caractéristiques. La caractéristique clé de cette tâche était la présence d'une colonne de poids dans les données d'entraînement, que les organisateurs eux-mêmes ont interprétée comme une confiance dans la réponse à cette ligne. Le problème était qu’un certain nombre de lignes contenaient des pondérations négatives.

Grand collisionneur de hadrons et Odnoklassniki

Après avoir réfléchi quelques minutes à la ligne avec l'indice (l'indice a simplement attiré l'attention sur cette caractéristique de la colonne de poids) et construit ce graphique, nous avons décidé de vérifier 3 options :

1) inverser la cible des lignes avec des poids négatifs (et les poids en conséquence)
2) déplacer les poids à la valeur minimale pour qu'ils partent de 0
3) n'utilisez pas de poids à cordes

La troisième option s'est avérée être la pire, mais les deux premières ont amélioré le résultat, la meilleure était l'option n°1, qui nous a immédiatement amenés à la deuxième place actuelle dans la première tâche et première dans la seconde.
Grand collisionneur de hadrons et Odnoklassniki
Notre étape suivante consistait à examiner les données pour détecter les valeurs manquantes. Les organisateurs nous ont fourni des données déjà pesées, où il manquait pas mal de valeurs, et elles ont été remplacées par -9999.

Nous avons trouvé des valeurs manquantes dans les colonnes MatchedHit_{X,Y,Z}[N] et MatchedHit_D{X,Y,Z}[N], et seulement lorsque N=2 ou 3. Comme nous l'avons compris, certaines particules n'ont pas été détectées. passer les 4 détecteurs et s'arrêter soit sur la 3ème ou la 4ème plaque. Les données contenaient également des colonnes Lextra_{X,Y}[N], qui décrivent apparemment la même chose que MatchedHit_{X,Y,Z}[N], mais en utilisant une sorte d'extrapolation. Ces maigres suppositions suggèrent que Lextra_{X,Y}[N] pourrait remplacer les valeurs manquantes dans MatchedHit_{X,Y,Z}[N] (pour les coordonnées X et Y uniquement). MatchedHit_Z[N] était bien rempli avec la médiane. Ces manipulations nous ont permis d'atteindre la 1ère place intermédiaire dans les deux tâches.

Grand collisionneur de hadrons et Odnoklassniki

Sachant qu’ils n’ont rien donné pour remporter la première étape, nous aurions pu nous arrêter là, mais nous avons continué, fait de belles images et imaginé de nouvelles fonctionnalités.

Grand collisionneur de hadrons et Odnoklassniki

Par exemple, nous avons constaté que si nous traçons les points d'intersection d'une particule avec chacune des quatre plaques détectrices, nous pouvons voir que les points sur chacune des plaques sont regroupés en 5 rectangles avec un rapport d'aspect de 4 à 5 et centrés à le point (0,0), et dans Il n'y a aucun point dans le premier rectangle.

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

Après avoir déterminé ces dimensions, nous avons ajouté 4 nouvelles caractéristiques catégorielles pour chaque particule - le numéro du rectangle dans lequel elle coupe chaque plaque.

Grand collisionneur de hadrons et Odnoklassniki

Nous avons également remarqué que les particules semblaient se disperser sur les côtés à partir du centre et l'idée est née d'évaluer d'une manière ou d'une autre la « qualité » de cette diffusion. Idéalement, il serait probablement possible de proposer une sorte de parabole « idéale » en fonction du point de décollage et d'estimer l'écart par rapport à celui-ci, mais nous nous sommes limités à la ligne droite « idéale ». Après avoir construit de telles lignes droites idéales pour chaque point d’entrée, nous avons pu calculer l’écart type de la trajectoire de chaque particule à partir de cette ligne droite. Étant donné que l'écart moyen pour la cible = 1 était de 152 et pour la cible = 0, il était de 390, nous avons provisoirement évalué cette fonctionnalité comme étant bonne. Et en effet, cette fonctionnalité s’est immédiatement hissée en tête des plus utiles.

Nous avons été ravis et avons ajouté la déviation des 4 points d'intersection de chaque particule par rapport à la ligne droite idéale comme 4 caractéristiques supplémentaires (et elles ont également bien fonctionné).

Les liens vers des articles scientifiques sur le thème du concours, qui nous ont été fournis par les organisateurs, ont fait penser que nous sommes loin d'être les premiers à résoudre ce problème et qu'il existe peut-être une sorte de logiciel spécialisé. Ayant découvert un dépôt sur github où les méthodes IsMuonSimple, IsMuon, IsMuonLoose ont été implémentées, nous les avons transférées sur notre site avec des modifications mineures. Les méthodes elles-mêmes étaient très simples : par exemple, si l'énergie est inférieure à un certain seuil, alors ce n'est pas un muon, sinon c'est un muon. Des fonctionnalités aussi simples ne pourraient évidemment pas donner une augmentation dans le cas de l'utilisation du gradient boosting, nous avons donc ajouté une autre « distance » significative au seuil. Ces fonctionnalités ont également été légèrement améliorées. Peut-être qu’en analysant plus en profondeur les méthodes existantes, il aurait été possible de trouver des méthodes plus efficaces et de les ajouter aux panneaux.

A la fin du concours, nous avons légèrement modifié la solution « rapide » pour le deuxième problème ; au final, elle différait de la solution de base sur les points suivants :

  1. Dans les lignes avec un poids négatif, la cible a été inversée
  2. Rempli les valeurs manquantes dans MatchedHit_{X,Y,Z}[N]
  3. Profondeur réduite à 7
  4. Taux d'apprentissage réduit à 0.1 (au lieu de 0.19)

En conséquence, nous avons essayé plus de fonctionnalités (pas avec beaucoup de succès), sélectionné des paramètres et entraîné catboost, lightgbm et xgboost, essayé différents mélanges de prédictions et avant d'ouvrir le privé, nous avons gagné en toute confiance sur la deuxième tâche, et sur la première nous étions parmi les dirigeants.

Après avoir ouvert le privé nous étions à la 10ème place pour la 1ère tâche et 3ème pour la seconde. Tous les dirigeants se sont mélangés et la vitesse en privé était plus élevée que sur le libboard. Il semble que les données étaient mal stratifiées (ou par exemple il n'y avait pas de lignes avec des poids négatifs dans le secteur privé) et c'était un peu frustrant.

Hackathon SNA 2019 - Textes. Première étape

La tâche consistait à classer les publications des utilisateurs sur le réseau social Odnoklassniki en fonction du texte qu'elles contenaient ; en plus du texte, il y avait quelques caractéristiques supplémentaires de la publication (langue, propriétaire, date et heure de création, date et heure de visualisation ).

En tant qu'approches classiques du travail avec du texte, je soulignerais deux options :

  1. Cartographier chaque mot dans un espace vectoriel à n dimensions de telle sorte que les mots similaires aient des vecteurs similaires (pour en savoir plus, consultez notre article), puis soit en trouvant le mot moyen du texte, soit en utilisant des mécanismes prenant en compte la position relative des mots (CNN, LSTM/GRU).
  2. Utiliser des modèles capables de fonctionner immédiatement avec des phrases entières. Par exemple, Bert. En théorie, cette approche devrait mieux fonctionner.

Comme c’était ma première expérience avec les textes, ce serait une erreur d’enseigner à quelqu’un, alors j’apprendrai moi-même. Voici les conseils que je me donnerais en début de concours :

  1. Avant de courir pour enseigner quelque chose, regardez les données ! En plus du texte lui-même, les données comportaient plusieurs colonnes et il était possible d'en extraire beaucoup plus que moi. Le plus simple est de faire un codage cible moyen pour certaines colonnes.
  2. N'apprenez pas de toutes les données ! Il y avait beaucoup de données (environ 17 millions de lignes) et il n'était absolument pas nécessaire de toutes les utiliser pour tester des hypothèses. La formation et le prétraitement étaient assez lents, et j'aurais évidemment eu le temps de tester des hypothèses plus intéressantes.
  3. <Des conseils controversés> Pas besoin de chercher un modèle qui tue. J'ai passé beaucoup de temps à découvrir Elmo et Bert, en espérant qu'ils m'emmèneraient immédiatement à un endroit élevé, et j'ai donc utilisé des intégrations pré-entraînées FastText pour la langue russe. Je ne pouvais pas atteindre une meilleure vitesse avec Elmo, et je n'avais toujours pas le temps de la comprendre avec Bert.
  4. <Des conseils controversés> Pas besoin de rechercher une fonctionnalité qui tue. En regardant les données, j’ai remarqué qu’environ 1 pour cent des textes ne contiennent pas réellement de texte ! Mais il y avait des liens vers certaines ressources, et j'ai écrit un simple analyseur qui a ouvert le site et en a extrait le titre et la description. Cela semblait être une bonne idée, mais ensuite je me suis laissé emporter et j'ai décidé d'analyser tous les liens pour tous les textes et j'ai encore perdu beaucoup de temps. Tout cela n'a pas apporté d'amélioration significative du résultat final (même si j'ai compris le stemming, par exemple).
  5. Les fonctionnalités classiques fonctionnent. Nous recherchons par exemple sur Google « les caractéristiques du texte kaggle », lisons et ajoutons tout. TF-IDF a apporté une amélioration, tout comme les fonctionnalités statistiques telles que la longueur du texte, les mots et la quantité de ponctuation.
  6. S'il existe des colonnes DateTime, cela vaut la peine de les analyser en plusieurs fonctionnalités distinctes (heures, jours de la semaine, etc.). Les fonctionnalités qui doivent être mises en évidence doivent être analysées à l’aide de graphiques/certaines mesures. Ici, sur un coup de tête, j'ai tout fait correctement et mis en évidence les caractéristiques nécessaires, mais une analyse normale n'aurait pas fait de mal (par exemple, comme nous l'avons fait en finale).

Grand collisionneur de hadrons et Odnoklassniki

À la suite du concours, j'ai formé un modèle keras avec convolution de mots et un autre basé sur LSTM et GRU. Tous deux utilisaient des intégrations FastText pré-entraînées pour la langue russe (j'ai essayé un certain nombre d'autres intégrations, mais ce sont celles qui fonctionnaient le mieux). Après avoir fait la moyenne des pronostics, j'ai pris la 7ème place finale sur 76 participants.

Après la première étape, il a été publié article de Nikolaï Anokhin, qui a pris la deuxième place (il a participé hors compétition), et sa solution a répété la mienne jusqu'à un certain stade, mais il est allé plus loin grâce au mécanisme d'attention requête-clé-valeur.

Deuxième étape OK & IDAO

Les deuxièmes étapes des compétitions se sont déroulées presque consécutivement, j'ai donc décidé de les regarder ensemble.

Tout d'abord, moi et l'équipe nouvellement acquise nous sommes retrouvés dans l'impressionnant bureau de la société Mail.ru, où notre tâche consistait à combiner les modèles de trois pistes de la première étape - texte, images et collaboration. Un peu plus de 2 jours ont été prévus pour cela, ce qui s'est avéré très peu. En fait, nous n’avons pu que répéter les résultats de la première étape sans tirer aucun bénéfice de la fusion. Au final, nous avons pris la 5ème place, mais nous n'avons pas pu utiliser le modèle texte. Après avoir examiné les solutions des autres participants, il semble que cela valait la peine d'essayer de regrouper les textes et de les ajouter au modèle de collaboration. Un effet secondaire de cette étape a été de nouvelles impressions, des rencontres et des communications avec des participants et des organisateurs sympas, ainsi qu'un grave manque de sommeil, ce qui a pu affecter le résultat de l'étape finale de l'IDAO.

La tâche lors de l'étape finale de l'IDAO 2019 était de prédire le temps d'attente pour une commande pour les chauffeurs de taxi Yandex à l'aéroport. A l'étape 2, 3 tâches = 3 aéroports ont été identifiés. Pour chaque aéroport, des données minute par minute sur le nombre de commandes de taxi sur six mois sont fournies. Et comme données de test, le mois suivant et les données minute par minute sur les commandes des 2 dernières semaines ont été fournies. Il y avait peu de temps (1,5 jours), la tâche était assez spécifique, une seule personne de l'équipe est venue à la compétition - et par conséquent, c'était un endroit triste vers la fin. Des idées intéressantes comprenaient des tentatives d'utilisation de données externes : météo, embouteillages et statistiques de commandes de taxi Yandex. Bien que les organisateurs n'aient pas précisé quels étaient ces aéroports, de nombreux participants ont supposé qu'il s'agissait de Sheremetyevo, Domodedovo et Vnukovo. Bien que cette hypothèse ait été réfutée après la compétition, des caractéristiques, par exemple des données météorologiques de Moscou, ont amélioré les résultats tant au niveau de la validation que du classement.

Conclusion

  1. Les compétitions ML sont cool et intéressantes ! Ici, vous trouverez l'utilisation de compétences en analyse de données et en modèles et techniques astucieux, et le simple bon sens est le bienvenu.
  2. Le ML représente déjà un énorme corpus de connaissances qui semble croître de façon exponentielle. Je me suis fixé pour objectif de me familiariser avec différents domaines (signaux, images, tableaux, textes) et j'ai déjà réalisé combien il y avait à étudier. Par exemple, après ces concours, j'ai décidé d'étudier : les algorithmes de clustering, les techniques avancées pour travailler avec des bibliothèques de boosting de gradient (en particulier, travailler avec CatBoost sur le GPU), les réseaux de capsules, le mécanisme d'attention requête-clé-valeur.
  3. Pas par Kaggle seul ! Il existe de nombreux autres concours où il est plus facile d'obtenir au moins un t-shirt et où il y a plus de chances d'obtenir d'autres prix.
  4. Communiquer! Il existe déjà une grande communauté dans le domaine de l'apprentissage automatique et de l'analyse de données, il existe des groupes thématiques dans Telegram, Slack et des personnes sérieuses de Mail.ru, Yandex et d'autres sociétés répondent aux questions et aident les débutants et ceux qui poursuivent leur chemin dans ce domaine. de connaissance.
  5. Je conseille à tous ceux qui ont été inspirés par le point précédent de visiter festival de données — une grande conférence gratuite à Moscou, qui aura lieu les 10 et 11 mai.

Source: habr.com

Ajouter un commentaire