Skip to content

Calibration du LLM juge

Étiquetez automatiquement vos données avec un ou plusieurs juges LLM, puis effectuez une passe de calibration humaine en aveugle pour mesurer l'exactitude, l'accord et l'erreur de calibration. Répond à la question « dois-je faire confiance à ce juge LLM ? » par un flux de travail défendable et reproductible.

La calibration des juges étiquette automatiquement vos données avec un ou plusieurs juges LLM, puis les calibre face à des étiquettes humaines en aveugle, afin que vous puissiez quantifier jusqu'où faire confiance à un LLM juge. Vous écrivez un prompt de juge, vous choisissez les modèles, et Potato échantillonne chacun k fois sur vos données. Vous étiquetez ensuite un échantillon en aveugle sans voir les réponses des modèles, et Potato rapporte l'exactitude par modèle, l'accord humain↔modèle et modèle↔modèle, l'erreur de calibration et les matrices de confusion.

Utiliser un LLM pour noter les sorties des modèles est désormais courant dans l'évaluation des agents et des modèles, mais un juge n'est utile que si vous savez à quel point il suit le jugement humain. La calibration est l'étape de mesure qui rend cette confiance défendable.

Fonctionnement

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
  1. Génération — chaque modèle est interrogé k fois par élément. L'étiquette modale est la prédiction ; la fraction des k échantillons qui concordent avec elle est la confiance du modèle. Les résultats sont écrits dans un magasin dédié, jamais mélangés aux données d'annotation, si bien que les humains ne peuvent pas les voir.
  2. Calibration humaine — Potato tire un échantillon aléatoire ou stratifié des éléments étiquetés, et un ou plusieurs humains les étiquettent en aveugle via l'interface d'annotation habituelle.
  3. Rapport — les métriques sont calculées sur le recouvrement humain∩modèle et écrites dans le répertoire de sortie.

Comme les étiquettes des modèles vivent dans un magasin séparé et ne sont jamais injectées dans l'interface, l'aveuglement est structurel plutôt qu'une affaire de discipline de l'annotateur.

Démarrage rapide

Lancez l'exemple fourni depuis la racine du dépôt :

bash
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug
  • Ouvrez http://localhost:8000/judge_calibration/admin pour configurer et exécuter.
  • Une fois la génération terminée, étiquetez l'échantillon en aveugle sur http://localhost:8000/annotate.
  • Cliquez sur Build report, puis ouvrez http://localhost:8000/judge_calibration/report.

L'exemple utilise un modèle Ollama local, donc aucune clé d'API n'est requise. Démarrez Ollama et lancez d'abord ollama pull llama3.2:3b.

Configuration

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

Vous pouvez remplacer la plupart de ces valeurs dans l'assistant d'administration et relancer.

Définissez temperature > 0. Avec k_samples > 1 et une température de 0, les échantillons sont identiques, la confiance vaut toujours 1.0 et le rapport de calibration n'a aucun sens ; dans ce cas, Potato émet un avertissement au démarrage.

Types d'annotation pris en charge

TypeStatutMétriques
radio / selectPris en chargeexactitude, P/R/F1, Cohen/Fleiss κ, Krippendorff α, ECE, confusion
likertPris en chargece qui précède plus MAE et Krippendorff α ordinal
multiselectPris en chargeP/R/F1 par étiquette, Jaccard moyen, exactitude en correspondance exacte, calibration
spanExpérimentalP/R/F1 appariés par IoU, IoU moyen, accord span-F1, calibration au niveau du span

La prise en charge des spans regroupe les spans à décalage de caractères du juge sur les k échantillons et les apparie à la référence via l'intersection sur union ; ses heuristiques sont directionnelles, et non exactes.

Ce que contient le rapport

  • Exactitude, précision, rappel et F1 de chaque modèle face à l'étiquette de référence humaine.
  • κ de Cohen réparti en paires humain↔modèle, modèle↔modèle et humain↔humain.
  • κ de Fleiss et α de Krippendorff sur l'ensemble des évaluateurs.
  • Erreur de calibration attendue (ECE), bins de fiabilité et score de Brier, montrant à quel point la confiance issue de la fraction des votes suit la justesse.
  • Une matrice de confusion par modèle face à la référence humaine.

Les métriques sont calculées sur le recouvrement : les éléments étiquetés à la fois par les modèles et les humains, restreints à l'échantillon de calibration lorsqu'un échantillon a été tiré.

La sortie est écrite sous output.dir : llm_labels.jsonl (une ligne par modèle, élément et schéma), report.json et un report.html lisible par un humain.

Calibration des juges vs. alignement des juges

La calibration des juges utilise plusieurs juges, une confiance empirique (la fraction des votes sur les k échantillons) et garde l'humain strictement en aveugle. L'alignement des juges calibre un seul juge face à des étiquettes de référence humaines existantes, montre son verdict en ligne pendant l'annotation et s'articule autour de l'itération sur une grille d'évaluation. Optez pour la calibration lorsque vous évaluez des juges candidats ; optez pour l'alignement lorsque vous ajustez un seul juge face à un jeu de référence fixe.

Voir aussi

Pour les détails d'implémentation, consultez la documentation source.