Ce fichier présente différents exemples d'utilisation du SEAL Text Classifier avec ses deux modes : basique et avancé.
# Utilise le dataset par défaut (data/sample.csv)
python main.py
# Avec dataset personnalisé
python main.py --data data/mon_dataset.csv
# Avec dossier LoRA personnalisé
python main.py --data data/critiques.csv --lora model/critiques_lora# Mode avancé avec mémoire adaptative
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# Test du mode basique
python main.py --data data/sample.csv > results_basic.txt
# Test du mode avancé
python main.py --advanced --data data/sample.csv > results_advanced.txt
# Comparer les résultats
diff results_basic.txt results_advanced.txtVotre fichier CSV doit respecter ce format :
text,label
"J'adore ce produit !",positive
"Service client décevant.",negative
"Qualité exceptionnelle.",positive
"N'achetez pas, c'est nul.",negativefrom src.loop import run_seal_loop
# Lance SEAL basique avec les paramètres par défaut
run_seal_loop()
# Avec paramètres personnalisés
run_seal_loop(data_path="data/mon_dataset.csv", lora_path="model/mon_lora")from src.loop import run_advanced_seal_loop
# Lance SEAL avancé avec mémoire adaptative
stats = run_advanced_seal_loop()
# Avec seuil de confiance personnalisé
stats = run_advanced_seal_loop(
data_path="data/sample.csv",
confidence_threshold=0.6
)
# Affiche les statistiques
print(f"Adaptations intelligentes: {stats['smart_adaptations']}")
print(f"Économies réalisées: {stats['skipped_adaptations']}")from src.utils import load_model, load_tokenizer, get_device
from src.classify import classify_with_confidence, should_adapt
# Configuration
device = get_device()
tokenizer = load_tokenizer()
model = load_model(device=device)
# Classification avec score de confiance
text = "Ce film est fantastique !"
prediction, confidence, probs = classify_with_confidence(text, model, tokenizer, device)
print(f"Prédiction: {'positif' if prediction else 'négatif'}")
print(f"Confiance: {confidence:.3f}")
print(f"Probabilités: {probs}")
# Décision d'adaptation intelligente
true_label = 1 # positif
should_adapt_decision, priority = should_adapt(prediction, true_label, confidence)
print(f"Adapter? {should_adapt_decision} (priorité: {priority:.3f})")from src.memory import AdaptationMemory
# Initialise la mémoire
memory = AdaptationMemory()
# Ajoute une adaptation
adaptation_id = memory.add_adaptation(
text="Ce produit est nul",
true_label=0, # négatif
predicted_label=1, # positif (erreur)
confidence_score=0.6,
lora_path="model/adapt_1"
)
# Vérifie les statistiques
stats = memory.get_stats()
print(f"Total adaptations: {stats['total_adaptations']}")
print(f"Confiance moyenne: {stats['avg_confidence']:.3f}")
# Calcule la priorité d'un nouvel exemple
priority = memory.get_adaptation_priority("Film génial!", 1, 0.5)
print(f"Priorité adaptation: {priority:.3f}")if prediction != 1: # Si pas positif adapt_on_example(text, 1, model, tokenizer, "model/adaptation_1", device) # Recharger le modèle adapté model = load_model(lora_weights_path="model/adaptation_1", device=device)
## 📈 Exemples de sortie
### Exécution réussie
🚀 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 en cours... ✅ Modèle adapté et rechargé depuis model/lora_weights_adapt_1
📝 Exemple 2/68 Texte: Ce produit est terrible. Prédiction: positive | Vrai label: negative ❌ Erreur détectée. Adaptation en cours... ✅ Modèle adapté et rechargé depuis model/lora_weights_adapt_2
📝 Exemple 3/68 Texte: Service client très réactif. Prédiction: positive | Vrai label: positive ✅ Bonne prédiction.
Exemples traités: 68 Prédictions correctes initiales: 34 Adaptations effectuées: 34 Taux d'amélioration: 100.0% Adaptations sauvées dans: model/lora_weights_adapt_[1-34] 🎉 Boucle SEAL terminée avec succès!
## 🎛️ Configuration avancée
### Personnaliser les paramètres LoRA
Modifiez `src/adapt.py` :
```python
lora_config = LoraConfig(
r=16, # Rang plus élevé = plus expressif
lora_alpha=32, # Généralement 2×r
target_modules=["q_lin", "v_lin", "k_lin"], # Plus de couches
lora_dropout=0.05, # Moins de dropout
bias="none",
task_type=TaskType.SEQ_CLS,
)
Modifiez src/utils.py :
# Au lieu de DistilBERT
MODEL_NAME = "bert-base-uncased"
# ou
MODEL_NAME = "roberta-base"
# ou
MODEL_NAME = "microsoft/DialoGPT-medium"-
Erreur de mémoire
# Réduisez la taille du batch ou le rang LoRA # Ou utilisez un modèle plus petit
-
Fichier CSV malformé
# Vérifiez que votre CSV a bien les colonnes 'text' et 'label' # Et que les labels sont 'positive' ou 'negative'
-
Permissions d'écriture
# Assurez-vous d'avoir les droits d'écriture dans model/ chmod 755 model/
# Critiques de films
python main.py --data data/films.csv --lora model/films_lora
# Avis produits e-commerce
python main.py --data data/produits.csv --lora model/produits_lora
# Commentaires réseaux sociaux
python main.py --data data/social.csv --lora model/social_loraimport time
start_time = time.time()
run_seal_loop()
execution_time = time.time() - start_time
print(f"Temps d'exécution: {execution_time:.2f}s")Pour contribuer au projet :
- Fork le repository
- Créez une branche feature
- Testez vos modifications
- Soumettez une Pull Request