đ OpenClassrooms âą Parcours AI Engineer | đ Ătudiant : David Scanu
Retrouvez l'article complet đŹâ€ïž Analyse de Sentiments de Tweets grĂące au Deep Learning : Une Approche MLOps qui explique en dĂ©tails chaque Ă©tape du projet.
Dans le cadre de ma formation AI Engineer chez OpenClassrooms, ce projet s'inscrit dans un scĂ©nario professionnel oĂč j'interviens en tant qu'ingĂ©nieur IA chez MIC (Marketing Intelligence Consulting), entreprise de conseil spĂ©cialisĂ©e en marketing digital.
Notre client, Air Paradis (compagnie aérienne), souhaite anticiper les bad buzz sur les réseaux sociaux. La mission consiste à développer un produit IA permettant de prédire le sentiment associé à un tweet, afin d'améliorer la gestion de sa réputation en ligne.
Développer un modÚle d'IA permettant de prédire le sentiment associé à un tweet.
Créer un prototype fonctionnel d'un modÚle d'analyse de sentiments pour tweets selon trois approches différentes :
- ModÚle sur mesure simple : Approche classique (régression logistique) pour une prédiction rapide
- ModÚle sur mesure avancé : Utilisation de réseaux de neurones profonds avec différents word embeddings
- ModÚle avancé BERT : Exploration de l'apport en performance d'un modÚle BERT
Cette mission implique Ă©galement la mise en Ćuvre d'une dĂ©marche MLOps complĂšte :
- Utilisation de MLFlow pour le tracking des expérimentations et le stockage des modÚles.
- Création d'un pipeline de déploiement continu (Git + Github + plateforme Cloud).
- Intégration de tests unitaires automatisés.
- Mise en place d'un suivi de performance en production via Azure Application Insight.
Durant ce projet, je vais :
- Développer des modÚles IA pour la prédiction de sentiment à partir de données textuelles
- Mettre en pratique des méthodologies MLOps pour le déploiement et la gestion continue des modÚles
- Mettre en Ćuvre un pipeline CI/CD intĂ©grant des tests unitaires automatisĂ©s
- Configurer un systĂšme de suivi de la performance du modĂšle en production
- Préparer des supports de présentation pour une audience non technique
- Rédiger un article de blog mettant en valeur le travail de modélisation et la démarche MLOps
Ces compétences sont essentielles pour ma future carriÚre d'ingénieur IA, me permettant de gérer des projets complexes et de délivrer des solutions robustes en environnement réel.
-
Exploration et préparation des données
- Acquisition des données de tweets Sentiment140
- Analyse exploratoire et prétraitement des textes
-
Développement des modÚles
- Implémentation du modÚle classique (régression logistique)
- Conception d'un modÚle avancé utilisant les word embeddings et un réseau LSTM
- Conception d'un modĂšle BERT pour l'analyse de sentiments
- Comparaison des performances via MLFlow
-
Mise en place de la démarche MLOps
- Configuration de MLFlow pour le tracking des expérimentations
- Création du dépÎt Git avec structure de projet appropriée
-
Développement du backend et du frontend de l'application
- Développement de l'API de prédiction avec FastAPI
- Création de l'interface frontend (Next.js)
-
Déploiement et monitoring
- Implémentation des tests unitaires automatisés
- Configuration du pipeline de déploiement continu
- Déploiement sur Heroku
- Configuration du suivi via Azure Application Insight
-
Communication
- Rédaction de l'article de blog
- Préparation du support de présentation
-
- Fichier
README.mdd'explications détaillées - Notebooks des modélisations avec tracking MLFlow pour les trois approches
- Code de déploiement de l'API (FastAPI)
- Code de l'interface utilisateur (Next.js)
- Documentation supplémentaire contenant :
- Fichier
-
Notebooks des trois approches de modélisation
- Intégration avec MLFlow pour le tracking et l'enregistrement des modÚles
- Analyse exploratoire des données : Analyse des données du jeu de données "Sentiment140"
- ModĂšle simple : Bag Of Words + 4 Classificateurs
- ModÚle avancé : Word2vec/GloVe + LSTM (utilisé par l'API en production)
- ModĂšle BERT : EntraĂźnement d'un modĂšle
DistilBertForSequenceClassification(distilbert-base-uncased)
-
- Exposant le ModÚle avancé (LSTM) via FastAPI
- Mise en place d'un pipeline de déploiement continu (CI/CD)
- Test automatisés
- Déploiement sur Heroku (Lien volontaire indisponible sur cette page car il n'est pas protégé par un mécanisme d'authentification)
- Guide d'utilisation de l'API FastAPI
-
- Permettant la saisie d'un tweet
- Affichant la prédiction et demandant un feedback à l'utilisateur
- Envoyant une trace Ă Application Insight en cas de non-validation
- Guide d'utilisation du frontend Next.JS
-
- Comparaison des trois approches de modélisation
- PrĂ©sentation de la dĂ©marche MLOps mise en Ćuvre
- Conception et déploiement de l'API de prédiction et de l'interface utilisateur
- Analyse du suivi de performance en production
-
- Méthodologie et résultats des différents modÚles
- Visualisations MLFlow
- Preuves du pipeline CI/CD (commits, tests unitaires)
- Captures d'écran du monitoring Application Insight
- Langages : Python
- BibliothĂšques ML/DL : Scikit-learn, TensorFlow/Keras, Transformers (BERT)
- MLOps : MLFlow, Git, GitHub Actions
- Backend : FastAPI, Heroku
- Frontend : Next.js / React
- Monitoring : Azure Application Insight
- Traitement texte : NLTK, Word Embeddings
đŠ oc-ai-engineer-p07-analyse-sentiments-deep-learning/
âŁââ đ app/
â âŁââ đ fastapi/ # Backend API de prĂ©diction
â âââ đ frontend/ # Application Next.js
â
âŁââ đ documentation/ # Documentation du projet
â âââ đ guide-app-insights.md # Guide de suivi des feedback utilisateur et des alertes avec Azure Application insights
â
âââ đ notebooks/ # Notebooks Jupyter pour l'analyse et modĂšles
âŁââ đ 01_Analyse_exploratoire.ipynb # Exploration et visualisation des donnĂ©es
âŁââ đ 02_Modele_simple.ipynb # Bag of Words et classificateurs classiques
âŁââ đ 03_Modele_avance_Word2Vec.ipynb # LSTM avec Word2Vec
âââ đ 04_Modele_BERT.ipynb # DistilBERT pour analyse de sentiment
L'application permet d'analyser le sentiment (positif/négatif) des tweets grùce au modÚle développé précedemment. Elle utilise le modÚle avancé (Word2vec et LSTM).
L'application est composée de deux parties principales :
- Frontend : Application Next.js avec Bootstrap pour l'interface utilisateur
- Backend : API FastAPI qui expose un modĂšle de deep learning pour l'analyse de sentiment
- Analyse du sentiment d'un tweet unique
- Comparaison de plusieurs tweets simultanément
- Historique des analyses effectuées
- Exemples de tweets positifs et négatifs
- SystÚme de feedback pour améliorer le modÚle et systÚme d'alerte
- Interface responsive et intuitive
- Mode clair/sombre
L'application Air Paradis peut ĂȘtre lancĂ©e de deux façons diffĂ©rentes : en mode dĂ©veloppement local ou via Docker Compose.
- Node.js (v18+)
- npm ou yarn
- Python 3.8+
- Environnement virtuel Python (recommandé)
# Backend (FastAPI)
cd app/fastapi
python -m venv venv
source venv/bin/activate # Sous Windows: venv\Scripts\activate
pip install -r requirements.txt
# Frontend (Next.js)
cd app/frontend
npm install # ou yarn install# Démarrer le backend
cd app/fastapi
source venv/bin/activate # Sous Windows: venv\Scripts\activate
python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000
# Dans un autre terminal
cd app/frontend
npm run dev # ou yarn devPour lancer les deux serveurs simultanément, en mode local :
./start.sh localLe backend sera accessible Ă l'adresse http://localhost:8000 et le frontend Ă l'adresse http://localhost:3000.
Pour lancer l'application via Docker Compose (environnement similaire Ă la production) :
# Depuis la racine du projet
cd app
docker compose up -dou alternativement :
./start.sh dockerCette commande va construire et démarrer les conteneurs pour le backend et le frontend.
Le backend sera accessible Ă l'adresse http://localhost:8000 et le frontend Ă l'adresse http://localhost:3000.
Pour arrĂȘter les conteneurs :
docker compose downPour visualiser les logs des conteneurs :
docker compose logs -fdocker compose exec api sh -c "printenv | sort"docker compose exec frontend sh -c "printenv | sort"docker compose exec frontend sh -c "apk add --no-cache curl && curl -v http://api:8000/health"Dans l'environnement Docker, le frontend communique avec le backend via l'URL interne http://api:8000, tandis qu'en développement local, il utilise http://localhost:8000. Cette configuration est gérée automatiquement par Docker Compose.
Ce projet inclut des tests unitaires pour valider le bon fonctionnement de lâAPI FastAPI de prĂ©diction de sentiment. Les tests sont Ă©crits avec pytest et vĂ©rifient les endpoints principaux de lâAPI. Les script des tests sont stockĂ©s dans le dossier app/fastapi/tests.
-
test_health_endpoint
Vérifie que l'endpoint/healthrenvoie un statut"ok"lorsque le modÚle est chargé correctement. Ce test s'assure que le cycle de vie de l'application fonctionne (chargement du modÚle vialifespan). -
test_predict_endpoint
Envoie une requĂȘte POST Ă l'endpoint/predictavec un exemple de tweet et vĂ©rifie que :- le code de rĂ©ponse est
200 - les clés attendues sont présentes dans la réponse (
sentiment,confidence,raw_score)
- le code de réponse est
Depuis la racine du projet, nous executons :
python -m pytest -vLe flag -v (verbose) permet d'afficher plus de détails sur les tests exécutés.
test_api.py::test_health_endpoint PASSED
test_api.py::test_predict_endpoint PASSED
| ĂlĂ©ment | Statut | Remarque |
|---|---|---|
| Tests API | â OK | Fonctionnent parfaitement |
| ModĂšle chargĂ© | â OK | Artefacts bien tĂ©lĂ©chargĂ©s et utilisĂ©s |
| Warnings | Pas bloquants pour lâusage actuel |
Les deux tests ont été exécutés et ont réussi sans erreur.
Cela signifie que :
- Notre modÚle a bien été téléchargé et chargé.
- Les endpoints
/healthet/predictfonctionnent comme prĂ©vu. - Le lifespan de lâapp est bien gĂ©rĂ© dans les tests.
L'API FastAPI d'analyse de sentiment est déployée sur Heroku en utilisant un pipeline CI/CD avec GitHub Actions.
- URL de l'API: Volontairement indisponible sur cette page car l'API ne dispose pas d'un mécanisme d'authentification pour le protéger.
Le déploiement utilise les technologies suivantes:
- Hébergement: Heroku (région Europe)
- CI/CD: GitHub Actions
Le déploiement est entiÚrement automatisé grùce à GitHub Actions:
- Tests automatisés: Exécution des tests unitaires pour valider le bon fonctionnement de l'API.
- Déploiement: Si les tests réussissent, l'application est déployée automatiquement sur Heroku.
- Dans votre dépÎt GitHub, créez un dossier
.github/workflows/. - Créez un fichier
heroku-deploy.yml.
- Dans notre dépÎt GitHub, nous allons dans "Settings" > "Secrets and variables" > "Actions"
- Nous cliquons sur "New repository secret"
- Nous ajoutons les secrets suivants:
| Nom du secret | Description | Comment l'obtenir |
|---|---|---|
HEROKU_API_KEY |
Clé API Heroku | Dashboard Heroku > Account settings > API Key |
HEROKU_EMAIL |
Email du compte Heroku | Votre email de connexion Heroku |
MLFLOW_TRACKING_URI |
URI du serveur MLflow | URL de votre serveur MLflow |
RUN_ID |
ID du run MLflow | Via l'interface MLflow ou les logs |
AWS_ACCESS_KEY_ID |
Clé d'accÚs AWS (si nécessaire) | Console AWS IAM |
AWS_SECRET_ACCESS_KEY |
Clé secrÚte AWS (si nécessaire) | Console AWS IAM |
APPINSIGHTS_INSTRUMENTATION_KEY |
Clé Application Insights | Portail Azure > Application Insights |
L'application utilise les fichiers de configuration suivants:
- Procfile: Définit la commande pour démarrer l'API (
web: uvicorn main:app --host=0.0.0.0 --port=${PORT:-8000}) - runtime.txt: Spécifie la version Python (
python-3.10.12) - requirements.txt: Liste toutes les dépendances nécessaires
Les variables d'environnement suivantes sont configurées sur Heroku:
MLFLOW_TRACKING_URI: URI du serveur MLflowRUN_ID: Identifiant du run MLflow du modÚle déployéAPPINSIGHTS_INSTRUMENTATION_KEY: Clé pour Azure Application Insights
- Les logs de l'application peuvent ĂȘtre consultĂ©s via la CLI Heroku:
heroku logs --tail -a air-paradis-sentiment-api- Les performances, erreurs et feedback utilisateur sont suivis dans Azure Application Insights.
- Des alertes sont configurées pour signaler les anomalies (comme un nombre élevé de prédictions incorrectes)
Pour vérifier que l'API est correctement déployée et fonctionne, nous pouvons exécuter:
# Vérifier l'état de santé de l'API
curl https://air-paradis-sentiment-api.herokuapp.com/health
# Tester l'endpoint de prédiction avec un exemple
curl -X 'POST' \
'https://air-paradis-sentiment-api.herokuapp.com/predict' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"text": "I love Air Paradis! #xoxo"
}'Projet développé par David Scanu dans le cadre du parcours AI Engineer d'OpenClassrooms :
Projet 7 - Réalisez une analyse de sentiments grùce au Deep Learning.

