Skip to content

Calibração de LLM como juiz

Rotule seus dados automaticamente com um ou mais juízes LLM e, em seguida, execute uma rodada de calibração humana cega para medir acurácia, concordância e erro de calibração. Responde à pergunta «devo confiar neste juiz LLM?» com um fluxo de trabalho defensável e reproduzível.

A calibração de juízes rotula seus dados automaticamente com um ou mais juízes LLM e depois os calibra contra rótulos humanos cegos, para que você possa quantificar até onde confiar em um LLM como juiz. Você escreve um prompt de juiz, escolhe os modelos, e o Potato amostra cada um k vezes sobre seus dados. Em seguida, você rotula uma amostra às cegas sem ver as respostas dos modelos, e o Potato reporta a acurácia por modelo, a concordância humano↔modelo e modelo↔modelo, o erro de calibração e as matrizes de confusão.

Usar um LLM para avaliar as saídas dos modelos já é comum na avaliação de agentes e modelos, mas um juiz só é útil se você souber o quanto ele acompanha o julgamento humano. A calibração é a etapa de medição que torna essa confiança defensável.

Como funciona

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
  1. Geração — cada modelo é consultado k vezes por item. O rótulo modal é a predição; a fração das k amostras que concorda com ele é a confiança do modelo. Os resultados vão para um repositório dedicado, nunca misturados aos dados de anotação, de modo que as pessoas não podem vê-los.
  2. Calibração humana — o Potato extrai uma amostra aleatória ou estratificada dos itens rotulados, e uma ou mais pessoas os rotulam às cegas pela interface de anotação habitual.
  3. Relatório — as métricas são calculadas sobre a sobreposição humano∩modelo e gravadas no diretório de saída.

Como os rótulos do modelo ficam em um repositório separado e nunca são injetados na interface, a cegueira é estrutural, e não uma questão de disciplina do anotador.

Início rápido

Execute o exemplo incluído a partir da raiz do repositório:

bash
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug
  • Abra http://localhost:8000/judge_calibration/admin para configurar e executar.
  • Quando a geração terminar, rotule a amostra às cegas em http://localhost:8000/annotate.
  • Clique em Build report e abra http://localhost:8000/judge_calibration/report.

O exemplo usa um modelo local do Ollama, então não é necessária chave de API. Inicie o Ollama e execute ollama pull llama3.2:3b primeiro.

Configuração

yaml
judge_calibration:
  enabled: true
  prompt: |                       # supports {text}, {labels}, {description}
    You are an impartial expert annotator. Classify the sentiment as exactly
    one of: positive, negative, neutral.
  models:
    - endpoint_type: openai        # openai | anthropic | ollama | vllm | gemini | openrouter | huggingface
      model: gpt-4o-mini
      api_key: ${OPENAI_API_KEY}   # env-var expansion supported
      temperature: 0.7             # must be > 0 so the k samples vary
    - endpoint_type: ollama
      model: llama3.1:8b
      base_url: http://localhost:11434
      temperature: 0.7
  k_samples: 5                     # samples per model per item
  max_items: 1000                  # cap on items the LLMs label (null = all)
  sampling:
    strategy: stratified           # random | stratified | all
    sample_size: 200               # how many items humans blind-label
    seed: 42
  human:
    num_raters: 1                  # 1 = solo researcher; N adds human-human IAA
    gold: single                   # single | majority
  schemas: [sentiment]             # annotation_scheme names to evaluate ([] = all)
  output:
    dir: judge_calibration_output

Você pode sobrescrever a maioria desses valores no assistente de administração e executar novamente.

Defina temperature > 0. Com k_samples > 1 e temperatura 0, as amostras são idênticas, a confiança é sempre 1.0 e o relatório de calibração não tem sentido; nesse caso, o Potato emite um aviso na inicialização.

Tipos de anotação suportados

TipoStatusMétricas
radio / selectSuportadoacurácia, P/R/F1, Cohen/Fleiss κ, Krippendorff α, ECE, confusão
likertSuportadoo acima mais MAE e Krippendorff α ordinal
multiselectSuportadoP/R/F1 por rótulo, Jaccard médio, acurácia de correspondência exata, calibração
spanExperimentalP/R/F1 pareados por IoU, IoU médio, concordância span-F1, calibração em nível de span

O suporte a spans agrupa os spans com deslocamentos de caractere do juiz ao longo das k amostras e os pareia com o padrão-ouro por interseção sobre união; suas heurísticas são direcionais, não exatas.

O que o relatório contém

  • Acurácia, precisão, recall e F1 de cada modelo em relação ao rótulo-ouro humano.
  • κ de Cohen dividido em pares humano↔modelo, modelo↔modelo e humano↔humano.
  • κ de Fleiss e α de Krippendorff entre todos os avaliadores.
  • Erro de calibração esperado (ECE), bins de confiabilidade e pontuação de Brier, mostrando o quanto a confiança baseada na fração de votos acompanha a correção.
  • Uma matriz de confusão por modelo em relação ao padrão-ouro humano.

As métricas são calculadas sobre a sobreposição: itens rotulados tanto pelos modelos quanto pela(s) pessoa(s), restritos à amostra de calibração quando uma foi extraída.

A saída é gravada sob output.dir: llm_labels.jsonl (uma linha por modelo, item e esquema), report.json e um report.html legível por pessoas.

Calibração de juízes vs. alinhamento de juízes

A calibração de juízes usa vários juízes, confiança empírica (a fração de votos ao longo das k amostras) e mantém a pessoa rigorosamente às cegas. O alinhamento de juízes calibra um único juiz em relação a rótulos-ouro humanos existentes, mostra seu veredito em linha durante a anotação e é construído em torno de iterar sobre uma rubrica. Recorra à calibração quando estiver avaliando juízes candidatos; recorra ao alinhamento quando estiver ajustando um único juiz em relação a um conjunto-ouro fixo.

Relacionado

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