Skip to content

DavidScanu/oc-ai-engineer-p07-analyse-sentiments-deep-learning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet 7 - Réalisez une analyse de sentiments grùce au Deep Learning

TensorFlow FastAPI Next.js Pytest Deploy to Heroku

🎓 OpenClassrooms ‱ Parcours AI Engineer | 👋 Étudiant : David Scanu

People tweeting

📝 Article dĂ©taillĂ©

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.

🌐 Contexte

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.

⚡ Mission

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 :

  1. ModÚle sur mesure simple : Approche classique (régression logistique) pour une prédiction rapide
  2. ModÚle sur mesure avancé : Utilisation de réseaux de neurones profonds avec différents word embeddings
  3. 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.

🎯 Objectifs pĂ©dagogiques

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.

đŸ—“ïž Plan de travail

  1. Exploration et préparation des données

    • Acquisition des donnĂ©es de tweets Sentiment140
    • Analyse exploratoire et prĂ©traitement des textes
  2. 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
  3. 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
  4. 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)
  5. 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
  6. Communication

    • RĂ©daction de l'article de blog
    • PrĂ©paration du support de prĂ©sentation

📩 Livrables

  1. DépÎt GitHub

  2. 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)
  3. API de prédiction (FastAPI)

    • 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
  4. Interface frontend (Next.js)

    • 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
  5. Article de blog

    • 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
  6. Support de présentation

    • 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

🔧 Technologies utilisĂ©es

  • 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

đŸ›ïž Structure du projet

📩 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

đŸ’» Application de PrĂ©diction de Sentiment pour Tweets (Air Paradis)

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).

đŸ—ïž Architecture

L'application est composée de deux parties principales :

  1. Frontend : Application Next.js avec Bootstrap pour l'interface utilisateur
  2. Backend : API FastAPI qui expose un modĂšle de deep learning pour l'analyse de sentiment

App Mockup

⭐ Fonctionnalités

  • 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

🚀 DĂ©marrer l'application Air Paradis

L'application Air Paradis peut ĂȘtre lancĂ©e de deux façons diffĂ©rentes : en mode dĂ©veloppement local ou via Docker Compose.

Mode développement local

Prérequis
  • Node.js (v18+)
  • npm ou yarn
  • Python 3.8+
  • Environnement virtuel Python (recommandĂ©)
Installation des dépendances
# 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
Lancement de l'application
# 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 dev

Pour lancer les deux serveurs simultanément, en mode local :

./start.sh local

Le backend sera accessible Ă  l'adresse http://localhost:8000 et le frontend Ă  l'adresse http://localhost:3000.

Mode Docker Compose

Pour lancer l'application via Docker Compose (environnement similaire Ă  la production) :

# Depuis la racine du projet
cd app
docker compose up -d

ou alternativement :

./start.sh docker

Cette 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 down

Pour visualiser les logs des conteneurs :

docker compose logs -f
Vérification des variables d'environnement
docker compose exec api sh -c "printenv | sort"
docker compose exec frontend sh -c "printenv | sort"
Vérification de la connection entre le conteneur frontend et api
docker compose exec frontend sh -c "apk add --no-cache curl && curl -v http://api:8000/health"

Note importante

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.

✅ Tests unitaires de l'API FastAPI – Analyse de sentiment

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.

🔍 Tests effectuĂ©s

  • test_health_endpoint
    Vérifie que l'endpoint /health renvoie 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 via lifespan).

  • test_predict_endpoint
    Envoie une requĂȘte POST Ă  l'endpoint /predict avec 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)

▶ Commande pour lancer les tests

Depuis la racine du projet, nous executons :

python -m pytest -v

Le flag -v (verbose) permet d'afficher plus de détails sur les tests exécutés.

Résultat principal

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 ⚠ Mineurs 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 /health et /predict fonctionnent comme prĂ©vu.
  • Le lifespan de l’app est bien gĂ©rĂ© dans les tests.

🚀 DĂ©ploiement sur Heroku

L'API FastAPI d'analyse de sentiment est déployée sur Heroku en utilisant un pipeline CI/CD avec GitHub Actions.

Liens de déploiement

  • 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.

Configuration du déploiement

Le déploiement utilise les technologies suivantes:

  • HĂ©bergement: Heroku (rĂ©gion Europe)
  • CI/CD: GitHub Actions

Pipeline de déploiement continu

Le déploiement est entiÚrement automatisé grùce à GitHub Actions:

  1. Tests automatisés: Exécution des tests unitaires pour valider le bon fonctionnement de l'API.
  2. Déploiement: Si les tests réussissent, l'application est déployée automatiquement sur Heroku.

Configuration de GitHub Actions avec les secrets pour le déploiement sur Heroku

Étape 1: Creation d'un workflow GitHub Actions

  1. Dans votre dépÎt GitHub, créez un dossier .github/workflows/.
  2. Créez un fichier heroku-deploy.yml.

Étape 2: Configuration des secrets GitHub

  1. Dans notre dépÎt GitHub, nous allons dans "Settings" > "Secrets and variables" > "Actions"
  2. Nous cliquons sur "New repository secret"
  3. 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

Configuration Heroku

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

Variables d'environnement

Les variables d'environnement suivantes sont configurées sur Heroku:

  • MLFLOW_TRACKING_URI: URI du serveur MLflow
  • RUN_ID: Identifiant du run MLflow du modĂšle dĂ©ployĂ©
  • APPINSIGHTS_INSTRUMENTATION_KEY: ClĂ© pour Azure Application Insights

Surveillance et monitoring

  • 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)

Vérification du déploiement

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"
}'

A propos

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published