Skip to content
此页面尚未提供您所选语言的版本,当前显示英文版本。

Apprendimento Attivo

Usa il campionamento per incertezza per dare priorità all'annotazione degli esempi più utili.

Apprendimento Attivo

L'apprendimento attivo ti aiuta ad annotare in modo più intelligente, dando priorità agli esempi più informativi. Invece di annotare casualmente, concentrati sulle istanze in cui il modello è più incerto.

Come Funziona

L'apprendimento attivo di Potato riordina automaticamente le istanze di annotazione in base alle previsioni del machine learning:

  1. Raccolta Iniziale - Raccogli un numero minimo di annotazioni
  2. Addestramento - Addestra un classificatore sulle annotazioni esistenti
  3. Previsione - Ottieni punteggi di incertezza per le istanze non annotate
  4. Riordinamento - Dai priorità alle istanze con la massima incertezza
  5. Annotazione - Gli annotatori etichettano le istanze prioritarie
  6. Riaddestr. - Aggiorna periodicamente il modello con nuove annotazioni

Configurazione

Impostazione di Base

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment  # Quali schemi di annotazione usare
 
  min_annotations_per_instance: 1
  min_instances_for_training: 20
  update_frequency: 50  # Riaddestra ogni 50 annotazioni
  max_instances_to_reorder: 1000

Configurazione Completa

yaml
active_learning:
  enabled: true
 
  # Quali schemi usare per l'addestramento
  schema_names:
    - sentiment
 
  # Requisiti minimi
  min_annotations_per_instance: 1
  min_instances_for_training: 20
 
  # Frequenza di riaddestr.
  update_frequency: 50
 
  # Quante istanze riordinare
  max_instances_to_reorder: 1000
 
  # Configurazione del classificatore
  classifier:
    type: LogisticRegression
    params:
      C: 1.0
      max_iter: 1000
 
  # Estrazione delle feature
  vectorizer:
    type: TfidfVectorizer
    params:
      max_features: 5000
      ngram_range: [1, 2]
 
  # Persistenza del modello
  model_persistence:
    enabled: true
    save_dir: "models/"
    max_saved_models: 5

Classificatori Supportati

ClassificatoreIdeale PerVelocità
LogisticRegressionClassificazione binaria/multiclasseVeloce
RandomForestClassifierPattern complessiMedia
SVCDataset piccoliLenta
MultinomialNBClassificazione testualeMolto Veloce

Esempi di Classificatori

yaml
# Logistic Regression (punto di partenza consigliato)
classifier:
  type: LogisticRegression
  params:
    C: 1.0
    max_iter: 1000
 
# Random Forest
classifier:
  type: RandomForestClassifier
  params:
    n_estimators: 100
    max_depth: 10
 
# Support Vector Classifier
classifier:
  type: SVC
  params:
    kernel: rbf
    probability: true
 
# Naive Bayes
classifier:
  type: MultinomialNB
  params:
    alpha: 1.0

Vettorizzatori

VettorizzatoreDescrizione
TfidfVectorizerFeature pesate TF-IDF (consigliato)
CountVectorizerConteggi semplici delle parole
HashingVectorizerEfficiente in memoria per vocabolari grandi
yaml
# TF-IDF (consigliato)
vectorizer:
  type: TfidfVectorizer
  params:
    max_features: 5000
    ngram_range: [1, 2]
    stop_words: english
 
# Count Vectorizer
vectorizer:
  type: CountVectorizer
  params:
    max_features: 3000
    ngram_range: [1, 1]
 
# Hashing Vectorizer (per dataset grandi)
vectorizer:
  type: HashingVectorizer
  params:
    n_features: 10000

Integrazione con LLM

L'apprendimento attivo può opzionalmente usare LLM per una selezione delle istanze migliorata:

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment
 
  # Selezione basata su LLM
  llm_integration:
    enabled: true
    endpoint_type: vllm
    base_url: http://localhost:8000/v1
    model: meta-llama/Llama-2-7b-chat-hf
 
    # Modalità mock per i test
    mock_mode: false

Supporto Multi-Schema

L'apprendimento attivo può alternare tra più schemi di annotazione:

yaml
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    labels: [Positive, Negative, Neutral]
 
  - annotation_type: radio
    name: topic
    labels: [Politics, Sports, Tech, Entertainment]
 
active_learning:
  enabled: true
  schema_names:
    - sentiment
    - topic
 
  # Impostazioni per schema specifico
  schema_config:
    sentiment:
      min_instances_for_training: 30
      update_frequency: 50
    topic:
      min_instances_for_training: 50
      update_frequency: 100

Persistenza del Modello

Salva e ricarica i modelli addestrati dopo i riavvii del server:

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment
 
  model_persistence:
    enabled: true
    save_dir: "models/"
    max_saved_models: 5  # Mantieni gli ultimi 5 modelli
 
    # Salva nel database invece che nei file
    use_database: false

Monitoraggio del Progresso

La dashboard di amministrazione tiene traccia delle metriche di apprendimento attivo:

  • Accuratezza attuale del modello
  • Conteggio dei cicli di addestramento
  • Distribuzione dell'incertezza
  • Istanze rimanenti
  • Cronologia del riaddestr.

Accedi tramite /admin con la tua chiave API di amministrazione.

Best Practice

1. Inizia con il Campionamento Casuale

Raccogli annotazioni iniziali prima di abilitare l'apprendimento attivo:

yaml
active_learning:
  enabled: true
  min_instances_for_training: 50  # Attendi 50 annotazioni

2. Scegli Classificatori Appropriati

  • LogisticRegression: Veloce, buona impostazione predefinita per la maggior parte dei compiti
  • RandomForest: Migliore per pattern complessi, più lento
  • MultinomialNB: Molto veloce, buono per la classificazione testuale semplice

3. Monitora la Distribuzione delle Classi

L'apprendimento attivo può creare squilibrio tra le classi. Monitora nella dashboard di amministrazione e considera il campionamento stratificato.

4. Imposta una Frequenza di Riaddestr. Ragionevole

Un riaddestr. troppo frequente spreca risorse:

yaml
update_frequency: 100  # Riaddestra ogni 100 annotazioni

5. Abilita la Persistenza del Modello

Salva i modelli per evitare di riaddestrarli da zero al riavvio:

yaml
model_persistence:
  enabled: true
  save_dir: "models/"

Esempio: Configurazione Completa

yaml
task_name: "Sentiment Analysis with Active Learning"
task_dir: "."
port: 8000
 
data_files:
  - "data/reviews.json"
 
item_properties:
  id_key: id
  text_key: text
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "What is the sentiment?"
    labels:
      - Positive
      - Negative
      - Neutral
 
active_learning:
  enabled: true
  schema_names:
    - sentiment
 
  min_annotations_per_instance: 1
  min_instances_for_training: 30
  update_frequency: 50
  max_instances_to_reorder: 500
 
  classifier:
    type: LogisticRegression
    params:
      C: 1.0
      max_iter: 1000
 
  vectorizer:
    type: TfidfVectorizer
    params:
      max_features: 3000
      ngram_range: [1, 2]
 
  model_persistence:
    enabled: true
    save_dir: "models/"
    max_saved_models: 3
 
output_annotation_dir: "output/"
output_annotation_format: "json"
allow_all_users: true

Combinazione con il Supporto AI

Usa sia l'apprendimento attivo che l'assistenza LLM:

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment
  min_instances_for_training: 30
 
ai_support:
  enabled: true
  endpoint_type: openai
 
  ai_config:
    model: gpt-4
    api_key: ${OPENAI_API_KEY}
 
  features:
    label_suggestions:
      enabled: true

Questa combinazione dà priorità alle istanze incerte fornendo al contempo suggerimenti AI per aiutare gli annotatori.

Risoluzione dei Problemi

Errori di Addestramento

  • Assicurati di avere annotazioni sufficienti (min_instances_for_training)
  • Controlla la distribuzione delle classi - sono necessari esempi di tutte le classi
  • Verifica che il formato dei dati corrisponda allo schema

Prestazioni Lente

  • Riduci max_instances_to_reorder
  • Aumenta update_frequency
  • Usa HashingVectorizer per vocabolari grandi

Modello Non Aggiornato

  • Controlla l'impostazione update_frequency
  • Verifica che le annotazioni vengano salvate
  • Consulta la dashboard di amministrazione per gli errori

Ulteriori Letture

Per i dettagli di implementazione, consulta la documentazione sorgente.