Skip to content

Latest commit

 

History

History
270 lines (210 loc) · 7.09 KB

File metadata and controls

270 lines (210 loc) · 7.09 KB

Exemples d'utilisation - SEAL Text Classifier

Ce fichier présente différents exemples d'utilisation du SEAL Text Classifier avec ses deux modes : basique et avancé.

🚀 Utilisation en ligne de commande

Mode Basique (éducatif)

# 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é (SEAL-like MIT) 🧠

# 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

Comparaison des modes

# 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.txt

📊 Format du dataset

Votre 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.",negative

🔧 Utilisation programmatique

Mode Basique

from 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")

Mode Avancé

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']}")

Classification avec confiance (nouveau)

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})")

Système de mémoire adaptative (nouveau)

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}")

Adaptation si erreur

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

🤖 SEAL Text Classifier - Classification auto-adaptative

🚀 Démarrage SEAL sur device: cpu 📊 Dataset chargé: 68 exemples depuis data/sample.csv

============================================================ 🔄 DÉMARRAGE BOUCLE SEAL

📝 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.

============================================================ 📊 STATISTIQUES FINALES

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,
)

Changer le modèle de base

Modifiez src/utils.py :

# Au lieu de DistilBERT
MODEL_NAME = "bert-base-uncased"
# ou
MODEL_NAME = "roberta-base"
# ou
MODEL_NAME = "microsoft/DialoGPT-medium"

🐛 Debugging

Problèmes courants

  1. Erreur de mémoire

    # Réduisez la taille du batch ou le rang LoRA
    # Ou utilisez un modèle plus petit
  2. Fichier CSV malformé

    # Vérifiez que votre CSV a bien les colonnes 'text' et 'label'
    # Et que les labels sont 'positive' ou 'negative'
  3. Permissions d'écriture

    # Assurez-vous d'avoir les droits d'écriture dans model/
    chmod 755 model/

🔬 Expérimentations

Test de différents datasets

# 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_lora

Mesure de performance

import time
start_time = time.time()
run_seal_loop()
execution_time = time.time() - start_time
print(f"Temps d'exécution: {execution_time:.2f}s")

🤝 Contribution

Pour contribuer au projet :

  1. Fork le repository
  2. Créez une branche feature
  3. Testez vos modifications
  4. Soumettez une Pull Request

📚 Références