Skip to main content

Projet Catégorie 2 : Classification de Texte avec RNNs

Objectif Spécifique

L'objectif de ce projet est de résoudre un problème de classification de texte en utilisant des Réseaux de Neurones Récurrents (RNNs). Vous travaillerez sur un jeu de données textuel qui vous sera fourni (parmi une sélection ci-dessous). Votre tâche principale sera de prétraiter le texte, de construire et de comparer différentes architectures RNN (SimpleRNN, LSTM, GRU), et d'analyser leurs performances pour la tâche de classification donnée.

(Rappel : Référez-vous aux Consignes Générales pour les modalités de soumission, de documentation des expérimentations, d'auto-apprentissage, les contraintes techniques et les modalités de l'examen oral.)

Jeux de Données Possibles

Votre groupe travaillera sur un seul des jeux de données suivants. Vous devrez utiliser les outils appropriés (tensorflow_datasets, API Kaggle, pandas.read_csv depuis un lien direct) pour charger les données dans votre notebook.

  1. IMDB Movie Reviews (Analyse de Sentiments)

    • Tâche : Classifier les critiques de films comme étant positives (1) ou négatives (0).
    • Type : Classification Binaire.
    • Source : Facilement accessible via tf.keras.datasets.imdb ou tensorflow_datasets. Contient 25 000 critiques pour l'entraînement et 25 000 pour le test.
    • Considérations : Un classique pour l'analyse de sentiments. Le vocabulaire peut être assez large.
  2. SMS Spam Collection (Détection de Spam)

    • Tâche : Classifier les messages SMS comme étant du spam (1) ou non (ham - 0).
    • Type : Classification Binaire.
    • Source : Couramment disponible sur Kaggle (ex: https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset) ou le dépôt UCI ML. Contient environ 5 500 messages.
    • Considérations : Le jeu de données est déséquilibré (beaucoup moins de spam que de ham), ce qui nécessitera une attention particulière lors de l'évaluation (ne pas se fier uniquement à l'accuracy). Le texte est court et informel.
  3. BBC News Classification (Catégorisation de Nouvelles)

    • Tâche : Classifier des articles de presse en 5 catégories (business, entertainment, politics, sport, tech).
    • Type : Classification Multiclasse.
    • Source : Disponible sur Kaggle (ex: https://www.kaggle.com/datasets/yufengdev/bbc-fulltext-and-category). Contient 2 225 articles.
    • Considérations : Texte plus long et formel que les SMS. Moins de données que IMDB.
  4. AG News Classification (Catégorisation de Nouvelles - Variante)

    • Tâche : Classifier des articles de presse en 4 catégories (World, Sports, Business, Sci/Tech).
    • Type : Classification Multiclasse.
    • Source : Disponible via tensorflow_datasets (ag_news_subset). Contient 120 000 articles d'entraînement et 7 600 de test.
    • Considérations : Beaucoup plus de données que BBC News, ce qui peut permettre d'entraîner des modèles plus complexes mais pourrait dépasser la contrainte de temps si le prétraitement/entraînement n'est pas optimisé.

(L'énoncé final de votre projet confirmera le jeu de données exact que votre groupe devra utiliser.) N'oubliez pas de préciser dans le tabbleur le sujet que vous avez choisi.

Tâches Détaillées

  1. Chargement et Exploration des Données Fournies

    • Chargez le jeu de données assigné.
    • Explorez-le : structure, distribution des classes, exemples de textes/étiquettes, analyse de la longueur des textes (min/max/moyenne/distribution pour le padding).
  2. Prétraitement Spécifique au Texte (Étapes Clés)

    • Nettoyage (Optionnel mais recommandé) : Si pertinent pour le dataset (ex: balises HTML, caractères spéciaux). Justifiez.
    • Tokenisation : Convertissez en séquences de mots/tokens (tf.keras.preprocessing.text.Tokenizer). Définissez une taille de vocabulaire maximale (justifiez ce choix).
    • Conversion en Séquences d'Entiers.
    • Padding : Uniformisez la longueur des séquences (tf.keras.preprocessing.sequence.pad_sequences). Justifiez la longueur maximale choisie et la stratégie de padding/truncating ('pre' ou 'post').
    • Préparation Finale : Séparez en ensembles d'entraînement, de validation et de test.
  3. Expérimentation et Comparaison d'Architectures RNN (Obligatoire)

    • Couche d'Embedding (Obligatoire) : Commencez tous les modèles par tf.keras.layers.Embedding. Testez au moins deux dimensions d'embedding (output_dim) différentes et analysez l'impact.
    • Modèles à Comparer (minimum) : Construisez, entraînez et comparez rigoureusement :
      • Modèle 1 : Basé sur tf.keras.layers.SimpleRNN.
      • Modèle 2 : Basé sur tf.keras.layers.LSTM.
      • Modèle 3 : Basé sur tf.keras.layers.GRU.
    • Exploration Architecturale (pour chaque type de RNN) : Testez et documentez l'impact de :
      • Nombre d'unités RNN (units).
      • Empilement de couches RNN (utilisation de return_sequences=True).
      • Ajout de Dropout après l'embedding et/ou après les couches RNN.
      • Ajout de couches Dense après le RNN.
      • (Optionnel) Utilisation de tf.keras.layers.Bidirectional.
    • Couche de Sortie : Adaptée à la tâche (1 neurone + sigmoid pour binaire, N neurones + softmax pour multiclasse).
  4. Entraînement et Compilation

    • Compilez chaque modèle testé (Optimiseur Adam, Perte binary_crossentropy ou sparse_categorical_crossentropy, Métriques accuracy et si pertinent/possible Precision, Recall).
    • Entraînez avec callbacks (EarlyStopping, ModelCheckpoint).
  5. Évaluation Comparative et Analyse

    • Évaluez les meilleures variantes de chaque type de RNN (SimpleRNN, LSTM, GRU) sur l'ensemble de test.
    • Comparez leurs performances (Accuracy, Perte, autres métriques). Utilisez des tableaux/graphiques.
    • Analysez : Quelle architecture RNN est la plus adaptée ? Pourquoi (théorie vs pratique) ? Limites observées ? Analyse des courbes d'apprentissage (surapprentissage ?).

Exploration Guidée Attendue (Auto-Apprentissage)

  • Prétraitement de Texte :
    • Tokenizer: Gestion vocabulaire, OOV token.
    • pad_sequences: maxlen, padding, truncating.
    • Embedding : Rôle vs One-Hot, impact output_dim.
  • Architectures RNN :
    • Limitations SimpleRNN.
    • Rôle des portes LSTM/GRU.
    • Intérêt de Bidirectional.
  • Métriques de Classification : Comprendre Precision, Recall, F1-score, surtout si le dataset est déséquilibré (comme le spam).

Livrable Attendu (dans le Notebook Jupyter)

  • Exploration du dataset assigné.
  • Code et justifications détaillées du prétraitement texte.
  • Code et documentation rigoureuse des expérimentations comparant SimpleRNN, LSTM, GRU et l'exploration architecturale.
  • Tableaux/graphiques comparatifs clairs des performances finales sur l'ensemble de test.
  • Analyse critique comparative des architectures RNN pour cette tâche.
  • Section de conclusion (travail, apprentissages, difficultés).
  • Liste des dépendances.