Pour accompagner nos nouveaux utilisateurs dans leurs premiers pas sur Saagie, nos équipes ont développé un projet complet de détection de sentiments exprimés au sein de critiques de films. Celui-ci repose sur une interaction forte entre des jobs en Python, Bash, AWS Glue et des applications Docker comme VSCode, MLflow et Dash pour démontrer comment des data engineers et data scientists peuvent orchestrer des cas d’usage utilisant du Machine Learning dans un environnement cloud.
Le pipeline au cœur du projet se compose de 5 jobs distincts :
- Collecte des données avec “Data Preparation” (Python)
- Nettoyage des données avec “Clean Data with Glue” (AWS Glue)
- Entrainement du modèle avec “Finetune a pretrained model” (Python)
- Déploiement du modèle sur un serveur Flask avec “Model deployment” (Bash)
- Test des prédictions avec “Inference Handler” (Python)
1. Préparation des donnés : Python & AWS S3
Un premier job en Python va télécharger depuis Huggingface un jeu de données souvent utilisé pour de la classification binaire de sentiments. Il comprend un large volume de critiques de films en anglais issues d’IMDb et déjà labellisées en “positive” ou “negative”. Ce dataset est divisé en deux sous-ensembles, avec 25000 entrées pour l’entraînement et 25000 pour le test. Après avoir converti les listes d’objets en DataFrame, le job va stocker les données sur un bucket AWS S3.
2. Nettoyage des données : AWS Glue
a technologie externe AWS Glue est ensuite utilisée pour nettoyer les données d’entraînement et de test. Un workflow de transformation est créé au sein du service de data preparation pour retirer les caractères spéciaux et mettre l’ensemble du texte en minuscule.
Cette succession de tâches, paramétrée sur un environnement AWS, est ensuite intégrée à notre pipeline en tant que job externe, pour la lancer depuis Saagie à la demande.
3 : Affiner un modèle pré-entraîné : Python
Nous réutilisons Python pour télécharger depuis Huggingface le modèle bert-tiny, une version allégée du modèle BERT de Google, référence en Natural Language Processing (NLP). L’avantage d’utiliser un langage pré-entraîné est de réduire les phases d’entraînement en ne se contentant que d’opérer du finetuning du modèle, c’est-à-dire d’entraîner un modèle existant sur un jeu de données spécifique afin de le spécialiser.
Nos data scientists peuvent modifier manuellement tous les hyperparamètres pour le finetuning (nb_train_epochs, train_batchsize, train_subset_size, seed, etc.) et enregistrer chaque session d’entraînement comme un experiment au sein d’une application MLflow Server, déployée sur Saagie et générant à chaque session une nouvelle version du modèle. Ils peuvent alors consulter des metrics d’entraînement (Best_epoch, Best_val_f1, Train_loss) et comparer différents experiments pour en déduire les hyperparamètres d’apprentissage optimaux.
4 : Déploiement du modèle : Bash
Ce job en Bash va avoir pour fonction d’identifier la ou les versions du modèle ayant les valeurs les plus optimales sur des metrics donnés (par exemple Best_val_f1 ou Val_f1_weighted) et de les déployer pour les utiliser en tant que service. Ces modèles sont récupérés depuis MLflow et déployés en mémoire grâce à l’API de MLFlask Server, afin de pouvoir les interroger pour de l’inférence.
5 : Gestionnaire d'inférences : Python
Un dernier job en Python permet de tester les prédictions du modèle. L’utilisateur peut entrer du texte à tester via les paramètres du job ou au sein d’un fichier CSV et le job interroge l’API de MLFlask Server pour obtenir les prédictions correspondantes. Les résultats sont affichés dans les logs d’exécution du job pour vérifier la précision du modèle.
6 : Application : Dash
En complément du pipeline d’apprentissage, une application développée grâce au framework Dash offre une interface visuelle pour déployer et utiliser le modèle, en alternative aux jobs 4 et 5. Exposable à des utilisateurs extérieurs à Saagie, elle permet à des audiences moins techniques d’interagir graphiquement avec le modèle. Ils peuvent indiquer grâce à un menu déroulant le metric à utiliser pour sélectionner la meilleure version du modèle, le déployer et réaliser des prédictions sur du texte en direct.
Project sample en vidéo !
Si une image vaut mille mots, une vidéo devrait vous en apprendre encore davantage sur ce projet :