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.
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).
- Classification initiale : Utilise DistilBERT pré-entraîné pour classer des textes
- Détection d'erreur : Compare la prédiction avec le vrai label
- Adaptation LoRA : Si erreur détectée, fine-tune le modèle sur cet exemple avec LoRA
- Mise à jour : Recharge le modèle adapté et continue sur l'exemple suivant
- Boucle : Répète le processus sur tout le dataset
- Classification avec confiance : Calcule un score de confiance pour chaque prédiction
- Décision intelligente : Adapte seulement si erreur + confiance faible
- Mémoire adaptative : Système de mémoire avec historique des adaptations
- Oubli sélectif : Supprime automatiquement les adaptations obsolètes
- Priorisation : Classe les exemples par importance d'apprentissage
📦 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
- Python 3.8+
- 2GB RAM minimum
- GPU optionnel (CPU supporté)
# 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# 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 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| 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.
- Adaptation sur chaque erreur
- Approche simple et directe
- Bon pour comprendre les concepts
- 🧠 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
Votre fichier CSV doit contenir deux colonnes :
text,label
"J'adore ce film !",positive
"Ce produit est terrible.",negative- 🤗 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
🤖 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!
🧠 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é!
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
)Au lieu de modifier tous les poids du modèle, LoRA :
- Fige les poids originaux W
- Ajoute une décomposition de rang faible : ΔW = A × B
- 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)
Les contributions sont les bienvenues ! Pour contribuer :
- Fork le projet
- Créez une branche (
git checkout -b feature/amelioration) - Committez vos changements (
git commit -am 'Ajout fonctionnalité') - Poussez vers la branche (
git push origin feature/amelioration) - Ouvrez une Pull Request
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
- Équipe Hugging Face pour les transformers et PEFT
- Auteurs du papier LoRA original
- Communauté open source