Calibrazione di LLM come giudice
Etichetta automaticamente i tuoi dati con uno o più giudici LLM, poi esegui una passata di calibrazione umana alla cieca per misurare accuratezza, accordo ed errore di calibrazione. Risponde alla domanda «posso fidarmi di questo giudice LLM?» con un flusso di lavoro difendibile e riproducibile.
La calibrazione dei giudici etichetta automaticamente i tuoi dati con uno o più giudici LLM, poi li calibra rispetto a etichette umane alla cieca, così da quantificare fino a che punto fidarti di un LLM come giudice. Scrivi un prompt per il giudice, scegli i modelli e Potato campiona ciascuno k volte sui tuoi dati. Poi etichetti alla cieca un campione senza vedere le risposte dei modelli, e Potato riporta l'accuratezza per modello, l'accordo umano↔modello e modello↔modello, l'errore di calibrazione e le matrici di confusione.
Usare un LLM per valutare gli output dei modelli è ormai comune nella valutazione di agenti e modelli, ma un giudice è utile solo se sai quanto bene segue il giudizio umano. La calibrazione è il passaggio di misurazione che rende quella fiducia difendibile.
Come funziona
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
- Generazione — ogni modello viene interrogato k volte per elemento. L'etichetta modale è la predizione; la frazione degli k campioni che concorda con essa è la confidenza del modello. I risultati finiscono in un archivio dedicato, mai mescolato ai dati di annotazione, così le persone non possono vederli.
- Calibrazione umana — Potato estrae un campione casuale o stratificato degli elementi etichettati, e una o più persone li etichettano alla cieca tramite la consueta interfaccia di annotazione.
- Report — le metriche vengono calcolate sulla sovrapposizione umano∩modello e scritte nella directory di output.
Poiché le etichette del modello risiedono in un archivio separato e non vengono mai iniettate nell'interfaccia, la cecità è strutturale e non una questione di disciplina dell'annotatore.
Avvio rapido
Esegui l'esempio incluso dalla radice del repository:
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug- Apri
http://localhost:8000/judge_calibration/adminper configurare ed eseguire. - Al termine della generazione, etichetta il campione alla cieca su
http://localhost:8000/annotate. - Fai clic su Build report, quindi apri
http://localhost:8000/judge_calibration/report.
L'esempio usa un modello Ollama locale, quindi non serve alcuna chiave API. Avvia Ollama ed esegui prima ollama pull llama3.2:3b.
Configurazione
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_outputPuoi sovrascrivere la maggior parte di questi valori nella procedura guidata di amministrazione e rieseguire.
Imposta temperature > 0. Con k_samples > 1 e temperatura 0 i campioni sono identici, la confidenza è sempre 1.0 e il report di calibrazione è privo di senso; in tal caso Potato emette un avviso all'avvio.
Tipi di annotazione supportati
| Tipo | Stato | Metriche |
|---|---|---|
radio / select | Supportato | accuratezza, P/R/F1, Cohen/Fleiss κ, Krippendorff α, ECE, confusione |
likert | Supportato | quanto sopra più MAE e Krippendorff α ordinale |
multiselect | Supportato | P/R/F1 per etichetta, Jaccard medio, accuratezza a corrispondenza esatta, calibrazione |
span | Sperimentale | P/R/F1 abbinati per IoU, IoU medio, accordo span-F1, calibrazione a livello di span |
Il supporto agli span raggruppa gli span con offset di carattere del giudice sugli k campioni e li abbina al riferimento gold tramite intersection over union; le sue euristiche sono direzionali, non esatte.
Cosa contiene il report
- Accuratezza, precisione, recall e F1 di ciascun modello rispetto all'etichetta gold umana.
- κ di Cohen suddiviso in coppie umano↔modello, modello↔modello e umano↔umano.
- κ di Fleiss e α di Krippendorff su tutti i valutatori.
- Expected Calibration Error (ECE), bin di affidabilità e punteggio di Brier, che mostrano quanto bene la confidenza basata sulla frazione di voti segue la correttezza.
- Una matrice di confusione per modello rispetto al gold umano.
Le metriche sono calcolate sulla sovrapposizione: gli elementi etichettati sia dai modelli sia dalle persone, ristretti al campione di calibrazione quando ne è stato estratto uno.
L'output viene scritto sotto output.dir: llm_labels.jsonl (una riga per modello, elemento e schema), report.json e un report.html leggibile da una persona.
Calibrazione dei giudici vs. allineamento dei giudici
La calibrazione dei giudici usa più giudici, confidenza empirica (la frazione di voti sugli k campioni) e mantiene la persona rigorosamente alla cieca. L'allineamento dei giudici calibra un singolo giudice rispetto a etichette gold umane esistenti, mostra il suo verdetto in linea durante l'annotazione ed è costruito attorno all'iterazione su una rubrica. Ricorri alla calibrazione quando valuti giudici candidati; ricorri all'allineamento quando metti a punto un singolo giudice rispetto a un insieme gold fisso.
Correlati
- Allineamento giudice ↔ umano — calibrazione in linea di un singolo giudice
- Modalità solo — etichettatura collaborativa completa umano-LLM
- Guida all'accordo tra annotatori — le metriche kappa e alpha in dettaglio
Per i dettagli implementativi, consulta la documentazione di origine.