Sentiment Analysis on IMDb Dataset using PyTorch & CI/CD

Ce projet implémente un modèle de classification de sentiments (analyse d'opinion positive/négative) entraîné sur le jeu de données IMDb. Il s'agit d'un réseau de neurones multicouches (MLP) construit avec PyTorch et précédé d'une vectorisation de texte TF-IDF à l'aide de scikit-learn.

L'une des fonctionnalités clés de ce dépôt est l'automatisation complète : à chaque git push sur la branche principale (main), un pipeline CI/CD GitHub Actions entraîne automatiquement le modèle et le déploie sur le Hugging Face Hub.

Dépôts Liés

Architecture du Projet

  • data/ : Contient le jeu de données brut (imdb_top_500.csv).
  • model/ : Dossier contenant les artifacts du modèle après entraînement :
    • model.pt : Poids du réseau de neurones PyTorch.
    • vectorizer.pkl : Vectoriseur TF-IDF scikit-learn sérialisé.
    • config.json : Hyperparamètres et configuration du modèle.
    • metrics.json : Métriques de performance (Accuracy, Loss).
  • train.py : Script de chargement des données, de prétraitement, d'entraînement et d'évaluation.
  • predict.py : Script d'inférence pour tester le modèle sur de nouvelles phrases.
  • requirements.txt : Liste des dépendances Python requises.
  • .github/workflows/train-and-upload.yml : Configuration du pipeline CI/CD GitHub Actions.

Détails Techniques du Modèle

  1. Prétraitement :
    • Nettoyage du texte (suppression des balises HTML <br /> courantes dans IMDb).
    • Mises en minuscules et suppression de la ponctuation.
  2. Représentation du texte :
    • TF-IDF avec un vocabulaire maximum de 5 000 mots les plus fréquents.
  3. Classifieur (Réseau de neurones PyTorch) :
    • Couche d'entrée : 5 000 entrées (une valeur TF-IDF par mot du vocabulaire).
    • Couche cachée 1 : 128 neurones avec activation ReLU + Dropout (0.5).
    • Couche cachée 2 : 32 neurones avec activation ReLU.
    • Couche de sortie : 1 neurone avec fonction d'activation Sigmoïde pour prédire la probabilité de sentiment positif.
    • Optimisation : Loss BCELoss (Binary Cross Entropy) et optimiseur Adam.

Installation et Utilisation en Local

1. Cloner le dépôt et installer les dépendances

git clone https://github.com/MaayZz/IMDB-sentiment.git
cd IMDB-sentiment
pip install -r requirements.txt

2. Entraîner le modèle localement

python3 train.py

Cela va créer le dossier model/ et générer les 4 fichiers d'artifacts (model.pt, vectorizer.pkl, config.json, metrics.json).

3. Tester le modèle (Inférence)

Pour prédire le sentiment d'une phrase par défaut :

python3 predict.py

Ou en spécifiant votre propre phrase :

python3 predict.py "This movie was spectacular, I really enjoyed the acting and the plot."
python3 predict.py "Terrible acting, extremely boring storyline and a waste of time."

Fonctionnement du CI/CD (GitHub Actions)

Lorsqu'un commit est poussé sur la branche main :

  1. Un runner GitHub Actions (Ubuntu) démarre.
  2. Les dépendances Python sont installées depuis requirements.txt.
  3. Le script train.py s'exécute pour ré-entraîner le modèle sur le dataset présent dans le dépôt et générer les artifacts mis à jour.
  4. Les métriques d'entraînement et de test sont affichées dans les logs de l'Action.
  5. Si l'entraînement réussit, le pipeline utilise la bibliothèque huggingface_hub et le secret de dépôt HF_TOKEN pour uploader automatiquement tous les fichiers du dossier model/ ainsi que le README.md vers le Hugging Face Hub MaayZz/imdb-sentiment-nn.
Downloads last month
33
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train MaayZz/imdb-sentiment-nn