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