Pular para o conteúdo
Anúncios10 min de leitura

Potato 2.14: treine modelos com as suas próprias anotações

O Potato 2.14 treina modelos com os rótulos de um estudo, com 38 treinadores, pontua cada execução em itens reservados e mostra as predições aos anotadores como pré-rótulos.

Potato Team

O Potato 2.14 treina modelos com as próprias anotações de um estudo. Uma execução ajusta um dos 38 treinadores aos rótulos que os anotadores deram, pontua o modelo em itens reservados do treinamento e grava de volta nos itens as predições do modelo como pré-rótulos que os anotadores confirmam ou corrigem. A versão 2.13.1 tinha um único treinador, sklearn-text. A versão também importa arquivos de diarização RTTM, exporta turnos de fala corrigidos, executa o WhisperX para transcrição local e corrige vários bugs que alteravam números de concordância e exportações, então leia as notas de atualização antes de instalar.

bash
pip install --upgrade potato-annotation

Notas de atualização

Execute potato validate config.yaml --strict em cada configuração primeiro. As mudanças a seguir podem alterar o que um estudo que funciona na 2.13 faz:

  • assignment_strategy: llm_confidence agora ordena a fila. A estratégia serve primeiro o pré-rótulo de menor confiança e depois os itens sem pré-rótulo. As versões anteriores aceitavam o valor e atribuíam os itens ao acaso.
  • model_training é verificado na validação e na inicialização. Uma chave desconhecida em writeback ou auto_retrain, uma divisão com nome diferente de train, val ou test e uma entrada de writeback.schemas que não é um esquema são erros que impedem o servidor de iniciar.
  • A página Training informa uma pontuação em itens reservados. A coluna de pontuação mostrava a acurácia no treinamento. A pontuação de uma execução da 2.13 não é comparável com uma pontuação em itens reservados da 2.14.
  • Links, cadeias e eventos aparecem nas exportações. As respostas de span_link, coreference e event_annotation não apareciam em nenhuma exportação, e CSV e TSV agora acrescentam as colunas <scheme>._links e <scheme>._events.
  • O Potato não lista mais ujson em install_requires. Um script seu que importa ujson do ambiente do Potato precisa de pip install ujson.

Treinamento de modelos

O treinamento de modelos serve a um estudo com mais itens do que os anotadores vão rotular, em que um modelo treinado nos primeiros rótulos pode propor o resto. O ciclo tem três etapas. Primeiro, uma execução resolve os rótulos de cada item em uma resposta e divide os itens em train, val e test. Segundo, o treinador ajusta um modelo na divisão train em um processo separado, e a execução pontua o modelo nos itens val e test. Terceiro, a gravação de volta mostra as predições do modelo aos anotadores como pré-rótulos, e as respostas que os anotadores salvam viram rótulos para a próxima execução.

Para ligar o ciclo em um estudo com um esquema sentiment, adicione este bloco à configuração do estudo:

yaml
model_training:
  enabled: true
  writeback:
    schemas: [sentiment]
    include_unlabeled: true
    min_confidence: 0.6

Os anotadores não veem nada de uma execução até que um esquema seja nomeado em writeback.schemas. include_unlabeled: true faz predições nos itens que ninguém rotulou, e min_confidence mantém fora da página as predições abaixo de 0,6. Reinicie o servidor, abra /admin/training com a chave de administrador, escolha um treinador e um esquema e clique em Train now.

A página Training depois de uma execução de sklearn-text, com o formulário da execução, a tabela Runs com uma pontuação em itens reservados e a lista de treinadores

O projeto de exemplo do Potato em examples/ai-assisted/model-training/ tem 160 avaliações de produtos e executa sklearn-text, que não precisa de GPU nem de nada além de uma instalação simples. A documentação de treinamento de modelos relata uma execução ali, com 120 avaliações rotuladas, que obteve 0,84 de macro-F1 nas avaliações de validação e gravou 80 pré-rótulos. Um novo anotador então vê cada uma dessas avaliações com a resposta do modelo já selecionada:

Uma avaliação na página de anotação com a resposta do modelo selecionada como pré-rótulo

Treine o seu primeiro modelo percorre o exemplo passo a passo.

Treinadores para cada tipo de anotação

A página Training oferece a cada esquema apenas os treinadores que se ajustam a ele. O catálogo de treinadores lista os 38 treinadores com os comandos de instalação, e a lista abaixo nomeia os principais grupos:

  • Texto. hf-text-classification, setfit e sklearn-text classificam itens. hf-token-classification marca trechos, hf-relation liga trechos em relações, eventos e cadeias de correferência, e byt5-gloss segmenta e glosa palavras para a glosa interlinear.
  • Imagens. torchvision-detect e ultralytics-detect treinam detectores, e torchvision-segment, ultralytics-segment e cellpose treinam segmentadores. As execuções de detecção e segmentação dividem em blocos lâminas inteiras e imagens grandes e treinam em planos de microscopia e mapas GeoTIFF. volume-unet segmenta volumes 3D, layoutlmv3 rotula layouts de página e vlm-sft ajusta um modelo de visão e linguagem em legendas, ancoragem e passos de interface gráfica.
  • Áudio e vídeo. whisper-asr ajusta o Whisper em turnos de transcrição corrigidos, diarization treina um modelo de falantes em turnos de fala, hf-audio-tagger marca segmentos de áudio e video-track acompanha objetos entre quadros.
  • LLMs e agentes. llm-sft ajusta em respostas de texto livre, llm-dpo em preferências pareadas, reward-model em respostas pareadas, de ranqueamento e de melhor-pior, e prm-reward em avaliações de passos de traços de agentes.
  • Ciência. rdkit-property prevê respostas sobre moléculas, peak-cnn prevê posições de picos em espectros, signal-cnn rotula intervalos de sinais de séries temporais e episode-model rotula episódios de robôs.

Os treinadores ultralytics são AGPL-3.0, e os pesos do LayoutLMv3 são CC BY-NC-SA 4.0. Uma execução de qualquer um dos dois pede que você aceite a licença primeiro. pip install "potato-annotation[train]" instala o que os treinadores de texto, imagem, áudio e LLM precisam, e o catálogo nomeia as instalações separadas.

Pontuações em itens reservados e pré-rótulos

Cada execução pontua suas predições nos itens val e test com uma métrica adequada ao esquema, como macro-F1 para rótulos, mAP50 para caixas, taxa de erro de palavras para transcrições e Dice para volumes. Um item com rótulo e sem predição conta como erro, e um número de cobertura informa a fração de itens que receberam uma predição. Itens da divisão train nunca recebem um pré-rótulo, e um item que um revisor corrigiu sempre vai para a divisão train das execuções seguintes.

Um pré-rótulo só se torna a resposta do anotador quando o anotador o edita ou passa para o próximo item, e a gravação de volta nunca altera um rótulo humano. A fila de revisão de modelos serve os pré-rótulos do menos confiante para o mais confiante, e o relatório de revisão nomeia a execução por trás de cada pré-rótulo. O modelo no ciclo cobre o fluxo de revisão.

Treinamento em um servidor com GPU ou em um cluster

Uma execução roda em um backend. O backend local treina no servidor do Potato e escolhe CUDA, o Metal da Apple ou a CPU. Um backend ssh inicia a execução em um servidor com GPU que o Potato alcança e transmite de volta o progresso e o modelo. Um backend slurm envia a execução a um nó de computação com sbatch a partir do nó de login e precisa apenas de sbatch, squeue e scancel. Um backend agent atende uma máquina que o Potato não alcança, que executa potato training agent e consulta o servidor em busca de trabalhos. Antes de uma execução em um backend ssh, potato training check <backend> config.yaml informa o Python remoto, as GPUs remotas e os pacotes de treinamento ausentes. Treine em um servidor com GPU, cluster SLURM ou máquina atrás de NAT configura cada backend.

Escolher o que perguntar em seguida

hf-text-classification e hf-image-classification aceitam um parâmetro acquisition que grava uma pontuação em cada predição, por margem, entropia, BALD ou distância de core-set. assignment_strategy: llm_confidence então serve primeiro a pontuação mais alta. auto_retrain inicia uma nova execução a cada 25 novas anotações por padrão, e cada execução repontua os itens não rotulados. O aprendizado ativo compara esse ciclo com o bloco active_learning do Potato.

Modelos que você já tem

Cinco treinadores não ajustam nada e pontuam um modelo que roda em outro lugar: label-studio-ml para um backend de ML do Label Studio, openai-vlm-boxes para um modelo de visão e linguagem atrás de uma API compatível com a OpenAI, hf-inference para um Hugging Face Inference Endpoint, roboflow e cvat-nuclio para uma função serverless do CVAT. As predições desses modelos recebem a mesma pontuação em itens reservados, gravação de volta e revisão que as de um modelo treinado. Pré-rótulos e pontuações em itens reservados de um modelo que você já executa cobre cada ponte.

Publicar um modelo

A página de uma execução envia o modelo ao Hugging Face Hub com um cartão do modelo que nomeia o treinador, o modelo base, os esquemas, os tamanhos das divisões e a pontuação em itens reservados. Você digita o nome do repositório duas vezes, o repositório é privado por padrão e o token vem de uma variável de ambiente no servidor. As predições e os dados de treinamento ficam no servidor. A mesma página guarda a divisão de uma execução e os rótulos humanos da divisão como uma versão do conjunto de dados, para comparar modelos posteriores nos mesmos itens.

Transcrições, importação e exportação

  • WhisperX. potato transcripts --transcribe usa o WhisperX quando ele está instalado, com tempos de palavra do alinhamento forçado em --asr-word-timestamps, e recorre ao faster-whisper caso contrário. Uma execução de whisper-asr grava uma cópia CTranslate2 do modelo ajustado que --asr-model carrega.
  • Importação RTTM. potato import -f rttm transforma um arquivo de diarização, ou uma pasta de arquivos de diarização, em um item por gravação com os turnos de fala a corrigir. --speaker-map renomeia os falantes.
  • Exportação segments. O formato grava uma linha JSONL por segmento de áudio ou vídeo e um arquivo RTTM por anotador.
  • Dependências CoNLL-U. HEAD e DEPREL vêm de um esquema span_link dirigido sobre os trechos exportados. As duas colunas eram sempre _ antes.

Correções que afetam resultados

O changelog lista todas as correções. As correções abaixo poderiam ter alterado números que você relatou:

  • Um empate de ranqueamento escrito como B,D=A,C era lido como um único item chamado D=A, então o tau de Kendall e o footrule de Spearman deixavam de fora os dois itens empatados.
  • Pré-rótulos de slider, de rótulo suave e de escala pareada eram salvos como a resposta do anotador quando a página carregava, então um item contava como concluído antes de qualquer pessoa responder. Abrir um item grounding_eval salvava o item da mesma forma.
  • /admin/iaa listava correferência, links de trechos e eventos como trechos sem pontuação. O relatório agora pontua os três tipos pela média do F1 entre pares.
  • Mesclar ou dividir um código no livro de códigos não reapontava nenhuma codificação, porque nada ligava as anotações salvas aos ids dos códigos.
  • Os manifestos de snapshot congelavam números de concordância nulos e agora registram o kappa e a concordância percentual.
  • A revisão de modelos contava um veredito reject como erro em vez de contá-lo contra o pré-rótulo que o veredito retirou, e a precisão do relatório de revisão saía errada. Um par anotador-item reservado também mantinha o campo de gravação de volta nos dados do item quando writeback.field diferia de pre_annotation.field, e os dados do item para esse par agora omitem os dois campos.

Instalando a 2.14

Atualize, valide cada configuração e instale os treinadores de que você precisa:

bash
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"

Treinamento de modelos é o lugar para começar, e Novidades lista o resto da versão.