Skip to content

This project is an educationnal exprimentation of the Self-Adapting Language Models pseudo-implementation

License

Notifications You must be signed in to change notification settings

amdjadouxx/seal_text_classifier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SEAL-inspired Text Classifier đŸ€–

Un pipeline de classification de texte auto-adaptatif inspiré du Self-Adapting Language Model (SEAL) utilisant LoRA pour l'adaptation en temps réel.

Note importante : Ce projet implémente les concepts d'adaptation automatique inspirés du SEAL, mais n'est pas une reproduction exacte du SEAL MIT. Il sert de démonstration éducative des principes d'auto-adaptation avec LoRA.

🎯 Objectif

Ce projet démontre comment un modÚle de classification peut s'adapter automatiquement en temps réel lorsqu'il fait des erreurs, en utilisant la technique LoRA (Low-Rank Adaptation) pour un fine-tuning léger et efficace. Deux modes sont disponibles : basique (éducatif) et avancé (proche du SEAL MIT).

🔬 Fonctionnement

Mode Basique

  1. Classification initiale : Utilise DistilBERT pré-entraßné pour classer des textes
  2. Détection d'erreur : Compare la prédiction avec le vrai label
  3. Adaptation LoRA : Si erreur détectée, fine-tune le modÚle sur cet exemple avec LoRA
  4. Mise à jour : Recharge le modÚle adapté et continue sur l'exemple suivant
  5. Boucle : RépÚte le processus sur tout le dataset

Mode AvancĂ© (SEAL-like) 🧠

  1. Classification avec confiance : Calcule un score de confiance pour chaque prédiction
  2. Décision intelligente : Adapte seulement si erreur + confiance faible
  3. Mémoire adaptative : SystÚme de mémoire avec historique des adaptations
  4. Oubli sélectif : Supprime automatiquement les adaptations obsolÚtes
  5. Priorisation : Classe les exemples par importance d'apprentissage

đŸ—ïž Architecture

📩 seal_text_classifier/
├── 📁 data/                    # Datasets CSV avec colonnes "text", "label"
│   └── sample.csv             # Dataset d'exemple (68 exemples)
├── 📁 model/                   # Poids LoRA sauvegardĂ©s
│   ├── lora_weights_adapt_*   # Adaptations successives
│   └── memory.json            # MĂ©moire adaptative (mode avancĂ©)
├── 📁 src/                     # Code source modulaire
│   ├── utils.py               # Fonctions utilitaires (chargement modùle/tokenizer)
│   ├── classify.py            # Module de prĂ©diction (simple + confiance)
│   ├── adapt.py               # Module d'adaptation LoRA
│   ├── memory.py              # SystĂšme de mĂ©moire adaptative
│   └── loop.py                # Boucles SEAL (basique + avancĂ©e)
├── main.py                    # Point d'entrĂ©e CLI
├── requirements.txt           # DĂ©pendances Python
├── LICENSE                    # Licence MIT
├── EXAMPLES.md                # Guide d'utilisation dĂ©taillĂ©
└── README.md                  # Documentation

🚀 Installation & Usage

Prérequis

  • Python 3.8+
  • 2GB RAM minimum
  • GPU optionnel (CPU supportĂ©)

Installation

# Cloner le repo
git clone https://github.com/amdjadouxx/seal_text_classifier.git
cd seal_text_classifier

# Installer les dépendances
pip install -r requirements.txt

Utilisation basique

# Lancer avec le dataset par défaut (mode simple)
python main.py

# Spécifier un dataset personnalisé
python main.py --data data/mon_dataset.csv

# Spécifier le dossier de sauvegarde LoRA
python main.py --data data/sample.csv --lora model/custom_lora

Mode SEAL AvancĂ© (MIT-like) 🧠

# Mode avancé avec mémoire adaptative et décisions intelligentes
python main.py --advanced

# Avec seuil de confiance personnalisé
python main.py --advanced --confidence-threshold 0.6

# Mode avancé complet
python main.py --advanced --data data/sample.csv --confidence-threshold 0.8 --lora model/advanced_lora

🆚 Comparaison avec le SEAL MIT

Aspect Notre SEAL Basique Notre SEAL Avancé SEAL MIT (Recherche)
Adaptation ✅ LoRA simple sur erreurs 🧠 LoRA intelligent + confiance 🚀 Multi-niveaux + mĂ©ta-learning
MĂ©moire ❌ Aucune ✅ MĂ©moire avec oubli sĂ©lectif 🚀 MĂ©moire hiĂ©rarchique complexe
DĂ©cisions ❌ RĂ©actif (toutes erreurs) ✅ Proactif (seuil confiance) 🚀 Anticipation prĂ©dictive
Oubli ❌ Accumulation simple ✅ Oubli sĂ©lectif basique 🚀 Oubli intelligent multi-critĂšres
ComplexitĂ© 🎯 Simple (Ă©ducatif) 🎯 ModĂ©rĂ©e (proche MIT) 🔬 TrĂšs complexe (recherche)
Performance ⚡ Rapide ⚡ Efficace 🚀 État de l'art

Notre objectif : Fournir une implémentation compréhensible et utilisable des concepts SEAL pour l'apprentissage et l'expérimentation.

🆚 Modes disponibles

Mode Basique

  • Adaptation sur chaque erreur
  • Approche simple et directe
  • Bon pour comprendre les concepts

Mode Avancé (MIT-like)

  • 🧠 MĂ©moire adaptative : SystĂšme de mĂ©moire avec oubli sĂ©lectif
  • 🎯 Adaptation intelligente : DĂ©cisions basĂ©es sur la confiance
  • 📊 Priorisation : Classement des exemples par importance
  • đŸ—‘ïž Oubli sĂ©lectif : Suppression des adaptations obsolĂštes
  • 📈 Statistiques avancĂ©es : MĂ©triques dĂ©taillĂ©es de performance

Format du dataset

Votre fichier CSV doit contenir deux colonnes :

text,label
"J'adore ce film !",positive
"Ce produit est terrible.",negative

🔧 Technologies utilisĂ©es

  • đŸ€— Transformers : Chargement et utilisation de DistilBERT
  • 🎯 PEFT : ImplĂ©mentation LoRA pour l'adaptation efficace
  • 📊 Datasets : Gestion des donnĂ©es
  • đŸ”„ PyTorch : Framework de deep learning
  • đŸŒ Pandas : Manipulation des donnĂ©es CSV
  • 🔱 NumPy : Calculs numĂ©riques pour la mĂ©moire adaptative

📈 Exemples de sortie

Mode Basique

đŸ€– SEAL Text Classifier - Mode Basique
============================================================
🚀 DĂ©marrage SEAL sur device: cpu
📊 Dataset chargĂ©: 68 exemples depuis data/sample.csv

📝 Exemple 1/68
   Texte: J'adore ce film !
   Prédiction: negative | Vrai label: positive
   ❌ Erreur dĂ©tectĂ©e. Adaptation...
   ✅ ModĂšle adaptĂ© et rechargĂ© depuis model/lora_weights_adapt_1

📝 Exemple 2/68
   Texte: Service client trÚs réactif.
   Prédiction: positive | Vrai label: positive
   ✅ Bonne prĂ©diction.

============================================================
📊 STATISTIQUES FINALES
============================================================
Exemples traités: 68
Prédictions correctes initiales: 34
Adaptations effectuées: 34
🎉 Boucle SEAL terminĂ©e avec succĂšs!

Mode Avancé (SEAL-like)

🧠 SEAL Text Classifier - Mode AvancĂ© (MIT-like)
============================================================
💡 Seuil de confiance: 0.7
đŸ’Ÿ MĂ©moire adaptative activĂ©e
🎯 Adaptation intelligente activĂ©e

🚀 DĂ©marrage SEAL sur device: cpu
📊 Dataset: 68 exemples | MĂ©moire: 0 adaptations

📝 Exemple 1/68
   Texte: J'adore ce film !
   Prédiction: negative (confiance: 0.523)
   Vrai label: positive
   ❌ Erreur - Adaptation (prioritĂ©: 0.834)
   🧠 AdaptĂ© et mĂ©morisĂ© (ID: 1)

📝 Exemple 2/68
   Texte: Ce produit est terrible.
   Prédiction: positive (confiance: 0.891)
   Vrai label: negative
   ⏭  Erreur ignorĂ©e (confiance Ă©levĂ©e: 0.891)

============================================================
📊 STATISTIQUES SEAL AVANCÉ
============================================================
Exemples traités: 68
Prédictions correctes: 34
Erreurs détectées: 34
Adaptations intelligentes: 20
Adaptations ignorées: 14
Confiance moyenne: 0.756

🧠 MÉMOIRE ADAPTATIVE:
Total adaptations mémorisées: 20
Taille mémoire: 0.05 MB

🎯 EfficacitĂ© d'adaptation: 58.8%
💡 Économie d'adaptations: 14 Ă©vitĂ©es
🎉 SEAL AvancĂ© terminĂ©!

⚙ Configuration LoRA

Les paramĂštres LoRA peuvent ĂȘtre ajustĂ©s dans src/adapt.py :

lora_config = LoraConfig(
    r=8,                           # Rang (8-64 recommandé)
    lora_alpha=16,                 # Facteur d'échelle  
    target_modules=["q_lin", "v_lin"],  # Couches Ă  adapter
    lora_dropout=0.1,              # Régularisation
    task_type=TaskType.SEQ_CLS     # TĂąche de classification
)

🔬 Principe scientifique

LoRA (Low-Rank Adaptation)

Au lieu de modifier tous les poids du modĂšle, LoRA :

  1. Fige les poids originaux W
  2. Ajoute une dĂ©composition de rang faible : ΔW = A × B
  3. Calcule : output = W×input + A×B×input

Avantages :

  • 98% moins de paramĂštres Ă  entraĂźner
  • 10-100x plus rapide
  • PrĂ©serve les connaissances prĂ©-entraĂźnĂ©es
  • ModularitĂ© (multiples adaptateurs)

đŸ€ Contribution

Les contributions sont les bienvenues ! Pour contribuer :

  1. Fork le projet
  2. Créez une branche (git checkout -b feature/amelioration)
  3. Committez vos changements (git commit -am 'Ajout fonctionnalité')
  4. Poussez vers la branche (git push origin feature/amelioration)
  5. Ouvrez une Pull Request

📄 Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

  • Équipe Hugging Face pour les transformers et PEFT
  • Auteurs du papier LoRA original
  • CommunautĂ© open source

About

This project is an educationnal exprimentation of the Self-Adapting Language Models pseudo-implementation

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages