Skip to content

Aprendizado Ativo

Use 5 estratégias de aprendizado ativo no Potato — amostragem por incerteza, BADGE, BALD, baseada em diversidade e ensemble híbrido — para reduzir o custo de anotação em até 50%.

O aprendizado ativo ajuda você a anotar de forma mais inteligente, priorizando os exemplos mais informativos. Em vez de anotar aleatoriamente, concentre-se nas instâncias em que o modelo está mais incerto.

Como Funciona

O aprendizado ativo do Potato reordena automaticamente as instâncias de anotação com base nas previsões de aprendizado de máquina:

  1. Coleta Inicial - Reúna um número mínimo de anotações
  2. Treinar - Treine um classificador com as anotações existentes
  3. Prever - Obtenha pontuações de incerteza para as instâncias não anotadas
  4. Reordenar - Priorize as instâncias com maior incerteza
  5. Anotar - Os anotadores rotulam as instâncias priorizadas
  6. Retreinar - Atualize o modelo periodicamente com as novas anotações

Configuração

Configuração 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

Configuração 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_name: sklearn.linear_model.LogisticRegression
  classifier_params:
    C: 1.0
    max_iter: 1000
 
  # Query strategy
  query_strategy: uncertainty  # uncertainty, diversity, badge, bald, hybrid
 
  # 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

Estratégias de Consulta

O Potato oferece suporte a cinco estratégias de consulta para selecionar as instâncias mais informativas:

EstratégiaDescrição
uncertaintySeleciona as instâncias em que o modelo tem menos confiança (padrão)
diversitySeleciona as instâncias mais diferentes dos dados já anotados
badgeBatch Active learning by Diverse Gradient Embeddings
baldBayesian Active Learning by Disagreement
hybridEnsemble que combina várias estratégias
yaml
active_learning:
  query_strategy: uncertainty  # or diversity, badge, bald, hybrid

Classificadores Suportados

Os classificadores são especificados usando seu caminho completo de importação do sklearn por meio de classifier_name:

ClassificadorCaminho do sklearnMelhor ParaVelocidade
Regressão Logísticasklearn.linear_model.LogisticRegressionClassificação binária/multiclasseRápido
Random Forestsklearn.ensemble.RandomForestClassifierPadrões complexosMédio
SVCsklearn.svm.SVCConjuntos de dados pequenosLento
Multinomial NBsklearn.naive_bayes.MultinomialNBClassificação de textoMuito Rápido

Exemplos de Classificadores

yaml
# Logistic Regression (recommended starting point)
classifier_name: sklearn.linear_model.LogisticRegression
classifier_params:
  C: 1.0
  max_iter: 1000
 
# Random Forest
classifier_name: sklearn.ensemble.RandomForestClassifier
classifier_params:
  n_estimators: 100
  max_depth: 10
 
# Support Vector Classifier
classifier_name: sklearn.svm.SVC
classifier_params:
  kernel: rbf
  probability: true
 
# Naive Bayes
classifier_name: sklearn.naive_bayes.MultinomialNB
classifier_params:
  alpha: 1.0

Vetorizadores

VetorizadorDescrição
TfidfVectorizerCaracterísticas ponderadas por TF-IDF (recomendado)
CountVectorizerContagens simples de palavras
HashingVectorizerEficiente em memória para vocabulários 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

Integração com LLM

O aprendizado ativo pode usar opcionalmente LLMs para uma seleção aprimorada de instâncias:

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

Suporte a Múltiplos Esquemas

O aprendizado ativo pode alternar entre vários esquemas de anotação:

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

Persistência de Modelo

Salve e recarregue modelos treinados entre reinicializações do 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

Monitoramento do Progresso

O painel do administrador acompanha as métricas de aprendizado ativo:

  • Acurácia atual do modelo
  • Contagem de ciclos de treinamento
  • Distribuição de incerteza
  • Instâncias restantes
  • Histórico de retreinamento

Acesse em /admin com sua chave de API de administrador.

Boas Práticas

1. Comece com Amostragem Aleatória

Obtenha anotações iniciais antes de habilitar o aprendizado ativo:

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

2. Escolha Classificadores Apropriados

  • LogisticRegression: Rápido, bom padrão para a maioria das tarefas
  • RandomForest: Melhor para padrões complexos, mais lento
  • MultinomialNB: Muito rápido, bom para classificação simples de texto

3. Monitore a Distribuição de Classes

O aprendizado ativo pode criar desequilíbrio de classes. Monitore no painel do administrador e considere a amostragem estratificada.

4. Defina uma Frequência Razoável de Retreinamento

Retreinar com muita frequência desperdiça recursos:

yaml
update_frequency: 100  # Retrain every 100 annotations

5. Habilite a Persistência de Modelo

Salve os modelos para evitar retreinar do zero na reinicialização:

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

Exemplo: Configuração Completa

yaml
annotation_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_name: sklearn.linear_model.LogisticRegression
  classifier_params:
    C: 1.0
    max_iter: 1000
 
  query_strategy: uncertainty
 
  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/"
export_annotation_format: "json"
user_config:
  allow_all_users: true

Combinando com Suporte de IA

Use aprendizado ativo e assistência de LLM ao mesmo tempo:

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

Essa combinação prioriza as instâncias incertas e, ao mesmo tempo, fornece dicas de IA para ajudar os anotadores.

Solução de Problemas

Falhas de Treinamento

  • Garanta um número suficiente de anotações (min_instances_for_training)
  • Verifique a distribuição de classes - são necessários exemplos de todas as classes
  • Confirme que o formato dos dados corresponde ao esquema

Desempenho Lento

  • Reduza max_instances_to_reorder
  • Aumente update_frequency
  • Use HashingVectorizer para vocabulários grandes

O Modelo Não Atualiza

  • Verifique a configuração de update_frequency
  • Confirme que as anotações estão sendo salvas
  • Revise o painel do administrador em busca de erros

Leitura Adicional

Para detalhes de implementação, consulte a documentação de origem.