Skip to content

Aprendizaje Activo

Usa muestreo por incertidumbre para priorizar la anotación de ejemplos valiosos.

Aprendizaje Activo

El aprendizaje activo te ayuda a anotar de manera más inteligente priorizando los ejemplos más informativos. En lugar de anotar aleatoriamente, concéntrate en las instancias donde el modelo tiene mayor incertidumbre.

Cómo Funciona

El aprendizaje activo de Potato reordena automáticamente las instancias de anotación basándose en predicciones de aprendizaje automático:

  1. Recolección Inicial - Recopilar un número mínimo de anotaciones
  2. Entrenar - Entrenar un clasificador con las anotaciones existentes
  3. Predecir - Obtener puntuaciones de incertidumbre para instancias no anotadas
  4. Reordenar - Priorizar las instancias con mayor incertidumbre
  5. Anotar - Los anotadores etiquetan las instancias priorizadas
  6. Reentrenar - Actualizar el modelo periódicamente con nuevas anotaciones

Configuración

Configuración Básica

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment  # Which annotation schemes to use
 
  min_annotations_per_instance: 1
  min_instances_for_training: 20
  update_frequency: 50  # Retrain after every 50 annotations
  max_instances_to_reorder: 1000

Configuración Completa

yaml
active_learning:
  enabled: true
 
  # Which schemas to use for training
  schema_names:
    - sentiment
 
  # Minimum requirements
  min_annotations_per_instance: 1
  min_instances_for_training: 20
 
  # Retraining frequency
  update_frequency: 50
 
  # How many instances to reorder
  max_instances_to_reorder: 1000
 
  # Classifier configuration
  classifier:
    type: LogisticRegression
    params:
      C: 1.0
      max_iter: 1000
 
  # Feature extraction
  vectorizer:
    type: TfidfVectorizer
    params:
      max_features: 5000
      ngram_range: [1, 2]
 
  # Model persistence
  model_persistence:
    enabled: true
    save_dir: "models/"
    max_saved_models: 5

Clasificadores Compatibles

ClasificadorIdeal ParaVelocidad
LogisticRegressionClasificación binaria/multiclaseRápida
RandomForestClassifierPatrones complejosMedia
SVCConjuntos de datos pequeñosLenta
MultinomialNBClasificación de textoMuy Rápida

Ejemplos de Clasificadores

yaml
# Logistic Regression (recommended starting point)
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

Vectorizadores

VectorizadorDescripción
TfidfVectorizerCaracterísticas ponderadas por TF-IDF (recomendado)
CountVectorizerConteos simples de palabras
HashingVectorizerEficiente en memoria para vocabularios grandes
yaml
# TF-IDF (recommended)
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 (for large datasets)
vectorizer:
  type: HashingVectorizer
  params:
    n_features: 10000

Integración con LLM

El aprendizaje activo puede usar opcionalmente LLMs para una selección mejorada de instancias:

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment
 
  # LLM-based selection
  llm_integration:
    enabled: true
    endpoint_type: vllm
    base_url: http://localhost:8000/v1
    model: meta-llama/Llama-2-7b-chat-hf
 
    # Mock mode for testing
    mock_mode: false

Soporte Multi-Esquema

El aprendizaje activo puede alternar entre múltiples esquemas de anotación:

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
 
  # Schema-specific settings
  schema_config:
    sentiment:
      min_instances_for_training: 30
      update_frequency: 50
    topic:
      min_instances_for_training: 50
      update_frequency: 100

Persistencia del Modelo

Guarda y recarga modelos entrenados entre reinicios del servidor:

yaml
active_learning:
  enabled: true
  schema_names:
    - sentiment
 
  model_persistence:
    enabled: true
    save_dir: "models/"
    max_saved_models: 5  # Keep last 5 models
 
    # Save to database instead of files
    use_database: false

Monitoreo del Progreso

El panel de administración rastrea las métricas de aprendizaje activo:

  • Precisión actual del modelo
  • Conteo de ciclos de entrenamiento
  • Distribución de incertidumbre
  • Instancias restantes
  • Historial de reentrenamiento

Accede vía /admin con tu clave API de administrador.

Mejores Prácticas

1. Comienza con Muestreo Aleatorio

Obtén anotaciones iniciales antes de habilitar el aprendizaje activo:

yaml
active_learning:
  enabled: true
  min_instances_for_training: 50  # Wait for 50 annotations

2. Elige Clasificadores Apropiados

  • LogisticRegression: Rápido, buena opción predeterminada para la mayoría de tareas
  • RandomForest: Mejor para patrones complejos, más lento
  • MultinomialNB: Muy rápido, bueno para clasificación de texto simple

3. Monitorea la Distribución de Clases

El aprendizaje activo puede crear desbalance de clases. Monitorea en el panel de administración y considera muestreo estratificado.

4. Establece una Frecuencia de Reentrenamiento Razonable

Reentrenar con demasiada frecuencia desperdicia recursos:

yaml
update_frequency: 100  # Retrain every 100 annotations

5. Habilita la Persistencia del Modelo

Guarda los modelos para evitar reentrenar desde cero al reiniciar:

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

Ejemplo: Configuración 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

Combinación con Soporte de IA

Usa tanto aprendizaje activo como asistencia de 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

Esta combinación prioriza instancias inciertas mientras proporciona sugerencias de IA para ayudar a los anotadores.

Solución de Problemas

Fallos de Entrenamiento

  • Asegúrate de tener suficientes anotaciones (min_instances_for_training)
  • Verifica la distribución de clases - necesitas ejemplos de todas las clases
  • Verifica que el formato de datos coincida con el esquema

Rendimiento Lento

  • Reduce max_instances_to_reorder
  • Aumenta update_frequency
  • Usa HashingVectorizer para vocabularios grandes

El Modelo No Se Actualiza

  • Verifica la configuración de update_frequency
  • Verifica que las anotaciones se estén guardando
  • Revisa el panel de administración en busca de errores

Lectura Adicional

Para detalles de implementación, consulta la documentación fuente.