Skip to content
Guides4 min read

Apprentissage actif : Annotez plus intelligemment, pas plus durement

Comment utiliser l'échantillonnage par incertitude pour prioriser les annotations et réduire l'effort total d'étiquetage jusqu'à 50 %.

Potato Team·

Apprentissage actif : Annotez plus intelligemment, pas plus durement

L'apprentissage actif sélectionne intelligemment les éléments à annoter ensuite, en concentrant l'effort humain là où il compte le plus. Ce guide montre comment réduire l'effort d'annotation jusqu'à 50 % tout en maintenant la qualité du modèle.

Qu'est-ce que l'apprentissage actif ?

Au lieu d'échantillonner aléatoirement les données à annoter, l'apprentissage actif :

  1. Entraîne un modèle sur les annotations actuelles
  2. Identifie les éléments où le modèle est incertain
  3. Priorise ces éléments pour l'annotation humaine
  4. Répète le processus, améliorant continuellement l'efficacité

Pourquoi utiliser l'apprentissage actif ?

  • Réduire le coût d'annotation : Étiquetez moins d'éléments pour la même qualité de modèle
  • Itération plus rapide : Obtenez des modèles utilisables plus tôt
  • Concentrer l'expertise : Attention humaine sur les cas difficiles
  • Meilleure couverture : Assurez-vous que les cas limites sont représentés

Configuration de base de l'apprentissage actif

yaml
annotation_task_name: "Active Learning Classification"
 
data_files:
  - "data/unlabeled_pool.json"
 
# Active learning configuration
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
 
  # Sampling settings
  max_instances_to_reorder: 1000  # Number of instances to reorder by uncertainty
  random_sample_percent: 0.1  # 10% random sampling to maintain diversity
 
annotation_schemes:
  - annotation_type: radio
    name: category
    labels: [Positive, Negative, Neutral]

Comment fonctionne l'échantillonnage par incertitude

L'apprentissage actif de Potato utilise l'échantillonnage par incertitude pour prioriser les éléments où le classifieur est le moins confiant. Le classifieur prédit les étiquettes pour les instances non étiquetées, et celles ayant les scores de confiance les plus bas sont présentées en premier pour l'annotation.

Le champ classifier_name spécifie tout classifieur compatible avec scikit-learn en utilisant son chemin de module complet :

yaml
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"

D'autres options de classifieurs incluent :

  • sklearn.ensemble.RandomForestClassifier
  • sklearn.svm.SVC (avec probability=True)
  • sklearn.naive_bayes.MultinomialNB

Configuration complète

yaml
annotation_task_name: "Active Learning for Sentiment"
 
data_files:
  - "data/reviews.json"
 
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
 
  # Sampling settings
  max_instances_to_reorder: 2000  # Reorder top N by uncertainty
  random_sample_percent: 0.1  # 10% random to maintain diversity
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "Classify the sentiment"
    labels:
      - name: Positive
        key_value: "1"
      - name: Negative
        key_value: "2"
      - name: Neutral
        key_value: "3"
    required: true
 
annotation_guidelines:
  text: |
    ## Sentiment Classification
 
    Items are prioritized by model uncertainty.
    You may see more difficult or ambiguous cases.
 
    Focus on accuracy over speed.

Suivi de la progression

Suivez la progression de l'annotation grâce à la journalisation intégrée de Potato. Le système enregistre quelles instances ont été sélectionnées et leurs scores d'incertitude, vous permettant de surveiller le processus d'apprentissage actif.

Bonnes pratiques

Démarrage à froid

Commencez par un échantillonnage aléatoire diversifié en définissant un random_sample_percent plus élevé :

yaml
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
  random_sample_percent: 0.2  # 20% random for initial diversity

Contrôle de la portée du réordonnancement

Utilisez max_instances_to_reorder pour contrôler combien d'instances sont classées par incertitude. Une valeur plus grande offre une meilleure sélection mais nécessite plus de calcul :

yaml
active_learning:
  max_instances_to_reorder: 5000  # Rank top 5000 by uncertainty

Maintien de la diversité

Le paramètre random_sample_percent garantit que certaines instances échantillonnées aléatoirement sont incluses, empêchant le modèle de ne voir que des cas limites incertains :

yaml
active_learning:
  random_sample_percent: 0.1  # 10% random sampling

Conseils pour réussir

  1. Commencez diversifié : L'échantillon initial aléatoire couvre les cas limites
  2. Surveillez la précision : Suivez les performances du modèle au fil du temps
  3. N'optimisez pas trop : Un certain échantillonnage aléatoire maintient la couverture
  4. Gérez la fatigue des annotateurs : Les éléments difficiles sont fatigants
  5. Sauvegardez les points de contrôle du modèle : Permet le retour en arrière si nécessaire

Prochaines étapes


Documentation complète sur l'apprentissage actif sur /docs/features/active-learning.