Skip to content
Guides7 min read

Puoi fidarti del tuo giudice LLM? Calibrare LLM-as-Judge rispetto agli umani

Usare un LLM per valutare gli output di un modello è facile. Sapere se crederci è la parte difficile. Una panoramica della calibrazione umana in cieco di Potato 2.6: voto su k campioni, kappa di Cohen e di Fleiss, ed errore di calibrazione atteso.

Potato Team

Usare un grande modello linguistico per valutare gli output di altri modelli è diventata la mossa predefinita nella valutazione. Scrivi una rubrica, chiedi a GPT-4o o a Claude di assegnare un punteggio a mille risposte e leggi un numero di accuratezza. È veloce, è economico e scala ben oltre qualsiasi cosa un team umano possa etichettare a mano.

Dà però per scontato, in silenzio, proprio ciò che hai più bisogno di verificare: che il giudice concordi con le persone. Un LLM come giudice che sbaglia con sicurezza produce una classifica dall'aspetto pulito ma costruita sulla sabbia. Prima di fidarti dei verdetti di un giudice, devi misurare quanto seguono il giudizio umano. Questo passaggio di misurazione è la calibrazione, e Potato 2.6 aggiunge un flusso di lavoro apposito.

Questo articolo tratta Judge Calibration (calibrazione del giudice): come campiona i modelli, come mantiene onesto il passaggio umano e cosa ti dice davvero il report. La documentazione di riferimento contiene l'elenco completo delle opzioni.

Il verdetto di un giudice LLM mostrato accanto a un'annotazione umana, con un kappa calcolato in tempo realeCalibrazione del giudice in linea in Potato

La forma del problema

Un giudice può fallire in due modi diversi, e vuoi coglierli entrambi.

Il primo è il disaccordo: il giudice definisce "corrette" cose che una persona attenta definirebbe "sbagliate". È ciò che misurano le metriche di accuratezza e di accordo.

Il secondo è la falsa fiducia: il giudice dice di essere sicuro al 95% e ha ragione il 60% delle volte. Un giudice può avere un'accuratezza discreta ed essere comunque mal calibrato, cosa che conta nel momento in cui inizi a usare la sua fiducia per smistare il lavoro o impostare soglie. È ciò che misura l'errore di calibrazione.

Il passaggio di calibrazione di Potato è fatto per far emergere entrambi in una volta sola.

Come funziona

Il flusso di lavoro gira come una breve macchina a stati:

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED

Generazione (Generating). Ogni modello viene interrogato k volte per elemento. L'etichetta modale tra questi k campioni è la previsione del modello, e la frazione di campioni che vi concordano è la sua fiducia. Campionare k volte invece di una sola è ciò che ti dà un segnale di fiducia empirico anziché un numero che il modello si è inventato su sé stesso. Questi risultati vanno in un archivio dedicato e non vengono mai scritti nei dati di annotazione.

Calibrazione umana (Human calibration). Potato estrae un campione casuale o stratificato degli elementi e lo instrada a una o più persone, che lo etichettano tramite la normale interfaccia di annotazione, senza mai vedere le risposte del modello.

Report (Report). Le metriche sono calcolate sulla sovrapposizione tra ciò che hanno etichettato i modelli e ciò che hanno etichettato le persone, poi scritte su disco.

La cecità è qui il punto importante. Poiché le etichette del modello vivono in un archivio separato e non vengono mai iniettate nell'interfaccia, la persona non può esserne ancorata, nemmeno per caso. La cecità è strutturale, non una questione di chiedere agli annotatori di distogliere lo sguardo.

La pipeline di calibrazione: voto del modello su k campioni, un passaggio umano in cieco e un report di confrontoCome Potato calibra un giudice rispetto a etichette umane in cieco

Configurazione

Una calibrazione del giudice è un unico blocco di configurazione. Scrivi il prompt del giudice, elenchi i modelli e imposti quante volte campionare ciascuno:

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 | ...
      model: gpt-4o-mini
      api_key: ${OPENAI_API_KEY}
      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]
  output:
    dir: judge_calibration_output

Warning: Imposta temperature > 0. Con k_samples > 1 e temperatura 0, i campioni sono identici, la fiducia resta inchiodata a 1.0 e il report di calibrazione non significa nulla. Potato emette un avviso all'avvio quando rileva questa combinazione.

Puoi elencare più di un modello e calibrarli affiancati, che è il modo naturale di scegliere tra un giudice locale economico e uno ospitato costoso.

Provarlo senza chiave API

L'esempio incluso usa un modello Ollama locale, così puoi eseguire l'intero ciclo offline. Avvia Ollama, scarica il modello e lancia:

bash
ollama pull llama3.2:3b
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug

Apri http://localhost:8000/judge_calibration/admin per configurare ed eseguire, etichetta in cieco il campione su /annotate, poi genera il report e leggilo su /judge_calibration/report.

Cosa ti dice il report

Il report è fatto per rispondere a "dovrei fidarmi di questo giudice?" con numeri che puoi mettere in una sezione metodi:

  • Accuratezza, precisione, richiamo e F1 di ciascun modello rispetto all'etichetta gold umana.
  • κ di Cohen scomposto in coppie umano↔modello, modello↔modello e umano↔umano, così da vedere se il giudice concorda con le persone tanto quanto le persone concordano tra loro.
  • κ di Fleiss e α di Krippendorff su tutti i valutatori.
  • Errore di calibrazione atteso (ECE), bin di affidabilità e un punteggio di Brier: la risposta alla modalità di fallimento della falsa fiducia.
  • Una matrice di confusione per modello, che di solito racconta la storia vera: un giudice valido sulle classi facili che crolla su una distinzione difficile.

Tutto è calcolato sulla sovrapposizione: gli elementi etichettati sia dai modelli sia dalle persone, limitati al campione di calibrazione. L'output finisce sotto output.dir come llm_labels.jsonl, report.json e un report.html leggibile.

Cosa gestisce

La calibrazione è pienamente supportata sugli schemi categoriali usati dalla maggior parte dei giudici e si spinge in tipi più ardui:

TipoStatoMetriche
radio / selectSupportatoaccuratezza, P/R/F1, κ di Cohen/Fleiss, α di Krippendorff, ECE, confusione
likertSupportatoquanto sopra più MAE e α di Krippendorff ordinale
multiselectSupportatoP/R/F1 per etichetta, Jaccard medio, accuratezza di corrispondenza esatta, calibrazione
spanSperimentaleP/R/F1 abbinati per IoU, IoU medio, span-F1, calibrazione a livello di span

La calibrazione degli span raggruppa gli span a offset di carattere del giudice sui k campioni e li abbina al gold tramite intersection-over-union; tratta i suoi numeri come indicativi anziché esatti.

Calibrazione contro allineamento

Potato include un secondo flusso di lavoro, affine, facile da confondere con questo. Judge Alignment (allineamento del giudice) calibra un singolo giudice rispetto a un set gold umano esistente, mostra il suo verdetto in linea durante l'annotazione ed è pensato per iterare su una rubrica finché l'accordo non sale.

La regola pratica: ricorri alla calibrazione quando stai vagliando giudici candidati e vuoi un numero di fiducia empirico e in cieco; ricorri all'allineamento quando ti sei deciso su un giudice e ne stai mettendo a punto la rubrica rispetto a un set gold fisso. I due sono trattati insieme in Chiudere il cerchio (Closing the Loop).

I giudici LLM non spariranno; c'è troppo da valutare e troppo poche persone per farlo a mano. Lo scopo della calibrazione non è sostituire il giudice con le persone, ma sapere, con un numero, esattamente fin dove ci si può fidare del giudice prima che debba intervenire una persona.

La documentazione di Judge Calibration copre ogni opzione, e la guida all'accordo tra annotatori spiega in profondità le metriche kappa e alpha.