?
GuideintermédiaireVérifié le 2025-05

LLM-as-judge : évaluation automatisée

Utiliser un LLM comme évaluateur avec des grilles de scoring structurées.

LLM-as-Judge : principe

Utiliser un LLM (généralement plus puissant) pour évaluer les sorties d'un autre LLM. Cette approche permet d'automatiser l'évaluation à grande échelle sans annotateurs humains, avec une corrélation de 80-90% avec le jugement humain.

Pourquoi LLM-as-Judge ?

  • Les métriques traditionnelles (BLEU, ROUGE) ne capturent pas la qualité sémantique
  • L'évaluation humaine ne passe pas à l'échelle
  • Permet d'évaluer des critères subjectifs (ton, clarté, utilité)
  • Feedback rapide pendant le développement

Implémentation basique

from langchain_openai import ChatOpenAI

judge_llm = ChatOpenAI(model="gpt-4o", temperature=0)

judge_prompt = """Évalue la réponse suivante sur une échelle de 1 à 5.

Critères :
- Exactitude (1-5) : L'information est-elle correcte ?
- Complétude (1-5) : La réponse couvre-t-elle tous les aspects ?
- Clarté (1-5) : La réponse est-elle bien structurée et compréhensible ?

Question : {question}
Réponse à évaluer : {answer}
Contexte de référence : {reference}

Retourne un JSON avec les scores et justifications.
"""

Grilles de scoring structurées

Rubric-based evaluation

rubric = {
    5: "Réponse parfaite, complète, sans erreur, bien structurée",
    4: "Réponse correcte avec des détails mineurs manquants",
    3: "Réponse partiellement correcte, manque des éléments importants",
    2: "Réponse avec des erreurs significatives ou très incomplète",
    1: "Réponse incorrecte, hors sujet ou dangereuse"
}

Pairwise comparison

Comparer deux réponses plutôt que noter absolument :

comparison_prompt = """Voici deux réponses à la même question.
Laquelle est meilleure et pourquoi ?

Question: {question}
Réponse A: {answer_a}
Réponse B: {answer_b}

Choisis A, B, ou Égalité. Justifie."""

DeepEval : framework d'évaluation

from deepeval import evaluate
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(
    input="Qu'est-ce que le machine learning ?",
    actual_output="Le ML est une branche de l'IA...",
    retrieval_context=["Le machine learning..."]
)

metric = AnswerRelevancyMetric(threshold=0.7)
metric.measure(test_case)
print(metric.score, metric.reason)

Biais connus du LLM-judge

  • Position bias : Tend à préférer la première réponse dans les comparaisons
  • Verbosity bias : Préfère les réponses plus longues
  • Self-enhancement bias : Le modèle préfère ses propres sorties
  • Mitigation : Randomiser l'ordre, utiliser des rubrics explicites, calibrer sur des exemples humains

Bonnes pratiques

  • Utiliser un modèle plus puissant comme juge (GPT-4o pour juger GPT-3.5)
  • Toujours demander une justification avec le score
  • Calibrer avec 50-100 exemples notés par des humains
  • Monitorer la cohérence inter-évaluations (même question, même réponse = même score)

Sources

evalLLM-judgescoring