Pointer le dépôt vers l'organisation Forgejo openclassroom-ai.

This commit is contained in:
Grégoire Mureau 2026-09-09 23:41:00 +02:00
parent ddbade7f24
commit 5350a90a8c
3 changed files with 143 additions and 143 deletions

View file

@ -50,7 +50,7 @@ jobs:
run: | run: |
set -eu set -eu
REGISTRY="${GITHUB_SERVER_URL#https://}" REGISTRY="${GITHUB_SERVER_URL#https://}"
IMAGE="${REGISTRY}/grgmro/oc-p07-sentiment-api" IMAGE="${REGISTRY}/openclassroom-ai/oc-p07-sentiment-api"
SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)" SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)"
# Client docker statique sans plugin buildx → builder classique. # Client docker statique sans plugin buildx → builder classique.
export DOCKER_BUILDKIT=0 export DOCKER_BUILDKIT=0
@ -75,7 +75,7 @@ jobs:
fi fi
echo "${DOCKER_HUB_TOKEN}" | docker login docker.io -u "${DOCKER_HUB_USER}" --password-stdin echo "${DOCKER_HUB_TOKEN}" | docker login docker.io -u "${DOCKER_HUB_USER}" --password-stdin
SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)" SHORT_SHA="$(echo "${GITHUB_SHA}" | cut -c1-12)"
SRC="${GITHUB_SERVER_URL#https://}/grgmro/oc-p07-sentiment-api" SRC="${GITHUB_SERVER_URL#https://}/openclassroom-ai/oc-p07-sentiment-api"
DST="docker.io/${DOCKER_HUB_USER}/sentiment_api" DST="docker.io/${DOCKER_HUB_USER}/sentiment_api"
docker tag "${SRC}:latest" "${DST}:latest" docker tag "${SRC}:latest" "${DST}:latest"
docker tag "${SRC}:latest" "${DST}:${SHORT_SHA}" docker tag "${SRC}:latest" "${DST}:${SHORT_SHA}"

View file

@ -1,71 +1,71 @@
# Projet Air Paradis – Analyse de sentiments # Projet Air Paradis – Analyse de sentiments
📘 Ce projet est également disponible en [anglais 🇬🇧](./README.md) 📘 Ce projet est également disponible en [anglais 🇬🇧](./README.md)
Ce dépôt contient les notebooks et le code source du projet d'analyse de sentiments sur des tweets, réalisé dans le cadre du programme OpenClassrooms **"Air Paradis"**. Ce dépôt contient les notebooks et le code source du projet d'analyse de sentiments sur des tweets, réalisé dans le cadre du programme OpenClassrooms **"Air Paradis"**.
**Source de vérité** : [Forgejo](https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api) (auto-hébergé). **Source de vérité** : [Forgejo](https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api) (auto-hébergé).
```bash ```bash
git clone https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api.git
git clone https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api.git
``` ```
--- ---
## Contexte métier ## Contexte métier
L'objectif est de prédire si un tweet (ou une courte expression écrite) est perçu comme **positif ou négatif**, dans le contexte d'une compagnie aérienne. L'objectif est de prédire si un tweet (ou une courte expression écrite) est perçu comme **positif ou négatif**, dans le contexte d'une compagnie aérienne.
Le projet repose sur le jeu de données public **Sentiment140**. Le projet repose sur le jeu de données public **Sentiment140**.
--- ---
## Description du projet ## Description du projet
Le projet vise à développer un système complet d'analyse de sentiments, comprenant : Le projet vise à développer un système complet d'analyse de sentiments, comprenant :
- Une analyse exploratoire des données textuelles, - Une analyse exploratoire des données textuelles,
- Une comparaison rigoureuse de 10+ modèles de classification (classiques ML, LSTM + word embeddings, DistilBERT), - Une comparaison rigoureuse de 10+ modèles de classification (classiques ML, LSTM + word embeddings, DistilBERT),
- Le déploiement d'une API REST FastAPI exposant le meilleur modèle avancé (LSTM + Word2Vec), - Le déploiement d'une API REST FastAPI exposant le meilleur modèle avancé (LSTM + Word2Vec),
- La mise en place d'un pipeline MLOps complet : MLFlow, CI/CD (GitHub Actions), monitoring, - La mise en place d'un pipeline MLOps complet : MLFlow, CI/CD (GitHub Actions), monitoring,
- Un hébergement local sur serveur NAS pour garantir la souveraineté des données. - Un hébergement local sur serveur NAS pour garantir la souveraineté des données.
📖 **Pour des informations détaillées sur les expérimentations menées et les résultats obtenus, consultez [docs/blog.fr.md](./docs/blog.fr.md).** 📖 **Pour des informations détaillées sur les expérimentations menées et les résultats obtenus, consultez [docs/blog.fr.md](./docs/blog.fr.md).**
--- ---
## Structure du dépôt ## Structure du dépôt
- `notebooks/` : notebooks d'analyse exploratoire et de modélisation, - `notebooks/` : notebooks d'analyse exploratoire et de modélisation,
- `deployment/` : code de l'API FastAPI, tests unitaires, Dockerfile et configuration déploiement, - `deployment/` : code de l'API FastAPI, tests unitaires, Dockerfile et configuration déploiement,
- `docs/` : documentation détaillée (blog.fr.md), diagrammes, captures d'écran, - `docs/` : documentation détaillée (blog.fr.md), diagrammes, captures d'écran,
- `presentation/` : support de présentation du projet (PDF), - `presentation/` : support de présentation du projet (PDF),
- `.github/workflows/` : CI (Forgejo Actions sur le runner homelab ; même YAML côté GitHub), - `.github/workflows/` : CI (Forgejo Actions sur le runner homelab ; même YAML côté GitHub),
- `fetch-data.sh` : où récupérer Sentiment140 (dataset **hors** git). - `fetch-data.sh` : où récupérer Sentiment140 (dataset **hors** git).
--- ---
## Entraînement des modèles ## Entraînement des modèles
Les phases d'entraînement ont principalement été réalisées sur **Google Colab**, afin de bénéficier de ressources GPU nécessaires aux modèles de deep learning. Les phases d'entraînement ont principalement été réalisées sur **Google Colab**, afin de bénéficier de ressources GPU nécessaires aux modèles de deep learning.
--- ---
## Utilisation ## Utilisation
Les notebooks détaillent les étapes d'analyse et d'entraînement. Les notebooks détaillent les étapes d'analyse et d'entraînement.
L'API est disponible dans le dossier `deployment/api` avec interface Streamlit de test. L'API est disponible dans le dossier `deployment/api` avec interface Streamlit de test.
Pour tester l'API en production : https://api.gregoiremureau.com/ml/sentiment/ Pour tester l'API en production : https://api.gregoiremureau.com/ml/sentiment/
--- ---
## Remarques ## Remarques
- Les fichiers `requirements.txt` dans `notebooks/` proviennent des environnements Google Colab et peuvent contenir des dépendances peu optimisées pour un usage local. - Les fichiers `requirements.txt` dans `notebooks/` proviennent des environnements Google Colab et peuvent contenir des dépendances peu optimisées pour un usage local.
- Le fichier `.env`, exclu du dépôt, contient les variables d'environnement nécessaires (configuration MLFlow, MinIO, alerting). - Le fichier `.env`, exclu du dépôt, contient les variables d'environnement nécessaires (configuration MLFlow, MinIO, alerting).
- Données d'entraînement : `./fetch-data.sh` (Sentiment140 n'est **pas** dans git). - Données d'entraînement : `./fetch-data.sh` (Sentiment140 n'est **pas** dans git).
--- ---
**Projet réalisé dans le cadre du parcours "Data Scientist – Projet 7" d'OpenClassrooms** **Projet réalisé dans le cadre du parcours "Data Scientist – Projet 7" d'OpenClassrooms**

142
README.md
View file

@ -1,72 +1,72 @@
# Air Paradis Project – Sentiment Analysis # Air Paradis Project – Sentiment Analysis
📘 This project is also available in [French 🇫🇷](./README.fr.md) 📘 This project is also available in [French 🇫🇷](./README.fr.md)
This repository contains the notebooks and source code for the sentiment analysis project on tweets, conducted as part of the OpenClassrooms **"Air Paradis"** program. This repository contains the notebooks and source code for the sentiment analysis project on tweets, conducted as part of the OpenClassrooms **"Air Paradis"** program.
**Source of truth** : [Forgejo](https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api) (self-hosted). GitHub, when mirrored, is the public shop window. **Source of truth** : [Forgejo](https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api) (self-hosted). GitHub, when mirrored, is the public shop window.
```bash ```bash
git clone https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api.git
# HTTPS (Cloudflare, fine for clone) : # HTTPS (Cloudflare, fine for clone) :
git clone https://git.gregoiremureau.com/grgmro/oc-p07-sentiment-api.git git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p07-sentiment-api.git
``` ```
--- ---
## Business Context ## Business Context
The objective is to predict whether a tweet (or short written expression) is perceived as **positive or negative**, in the context of an airline company. The objective is to predict whether a tweet (or short written expression) is perceived as **positive or negative**, in the context of an airline company.
The project is based on the public **Sentiment140** dataset. The project is based on the public **Sentiment140** dataset.
--- ---
## Project Description ## Project Description
The project aims to develop a complete sentiment analysis system, including: The project aims to develop a complete sentiment analysis system, including:
- Exploratory analysis of textual data, - Exploratory analysis of textual data,
- Rigorous comparison of 10+ classification models (classical ML, LSTM + word embeddings, DistilBERT), - Rigorous comparison of 10+ classification models (classical ML, LSTM + word embeddings, DistilBERT),
- Deployment of a FastAPI REST API exposing the best advanced model (LSTM + Word2Vec), - Deployment of a FastAPI REST API exposing the best advanced model (LSTM + Word2Vec),
- Implementation of a complete MLOps pipeline: MLFlow, CI/CD (GitHub Actions), monitoring, - Implementation of a complete MLOps pipeline: MLFlow, CI/CD (GitHub Actions), monitoring,
- Local hosting on NAS server to ensure data sovereignty. - Local hosting on NAS server to ensure data sovereignty.
📖 **For detailed information on experiments conducted and results obtained, see [docs/blog.md](./docs/blog.md).** 📖 **For detailed information on experiments conducted and results obtained, see [docs/blog.md](./docs/blog.md).**
--- ---
## Repository Structure ## Repository Structure
- `notebooks/`: exploratory analysis and modeling notebooks, - `notebooks/`: exploratory analysis and modeling notebooks,
- `deployment/`: FastAPI API code, unit tests, Dockerfile and deployment configuration, - `deployment/`: FastAPI API code, unit tests, Dockerfile and deployment configuration,
- `docs/`: detailed documentation (blog.md), diagrams, screenshots, - `docs/`: detailed documentation (blog.md), diagrams, screenshots,
- `presentation/`: project presentation slides (PDF), - `presentation/`: project presentation slides (PDF),
- `.github/workflows/`: CI (Forgejo Actions on the homelab runner; same YAML on GitHub), - `.github/workflows/`: CI (Forgejo Actions on the homelab runner; same YAML on GitHub),
- `fetch-data.sh`: where to get Sentiment140 (dataset **not** in git). - `fetch-data.sh`: where to get Sentiment140 (dataset **not** in git).
--- ---
## Model Training ## Model Training
Training phases were primarily conducted on **Google Colab** to leverage GPU resources required for deep learning models. Training phases were primarily conducted on **Google Colab** to leverage GPU resources required for deep learning models.
--- ---
## Usage ## Usage
Notebooks detail the analysis and training steps. Notebooks detail the analysis and training steps.
The API is available in the `deployment/api` folder with Streamlit testing interface. The API is available in the `deployment/api` folder with Streamlit testing interface.
To test the production API: https://api.gregoiremureau.com/ml/sentiment/ To test the production API: https://api.gregoiremureau.com/ml/sentiment/
--- ---
## Notes ## Notes
- The `requirements.txt` files in `notebooks/` come from Google Colab environments and may contain dependencies not optimized for local use. - The `requirements.txt` files in `notebooks/` come from Google Colab environments and may contain dependencies not optimized for local use.
- The `.env` file, excluded from the repository, contains necessary environment variables (MLFlow, MinIO, alerting configuration). - The `.env` file, excluded from the repository, contains necessary environment variables (MLFlow, MinIO, alerting configuration).
- Training data: run `./fetch-data.sh` (Sentiment140 is **not** stored in git). - Training data: run `./fetch-data.sh` (Sentiment140 is **not** stored in git).
--- ---
**Project completed as part of OpenClassrooms "Data Scientist – Project 7" program** **Project completed as part of OpenClassrooms "Data Scientist – Project 7" program**