Polydesk-logotype
Polydesk.ai — Header

BLEU Score

Le BLEU (Bilingual Evaluation Understudy) est une métrique d’évaluation automatique qui mesure la qualité d’un texte généré par une machine en comparant le chevauchement de n-grammes entre la traduction candidate et une ou plusieurs traductions de référence humaines.

Introduit en 2002 par Kishore Papineni et son équipe chez IBM, le BLEU score a révolutionné la recherche en traduction automatique en offrant une alternative rapide et reproductible à l’évaluation humaine. Avant BLEU, comparer deux systèmes de traduction nécessitait des semaines de travail humain. Avec BLEU, la même comparaison prend quelques secondes. Bien que ses limites soient bien connues (il ne comprend pas le sens, ignore les synonymes, et ne capture pas la fluidité), il reste la métrique de référence la plus citée en NLP pour la traduction et la génération de texte.

Fiche rapide : BLEU
Nom complet
Bilingual Evaluation Understudy
Type
Métrique d’évaluation automatique basée sur les n-grammes
Auteurs
Kishore Papineni, Salim Roukos, Todd Ward, Wei-Jing Zhu (IBM, 2002)
Papier
« BLEU: a Method for Automatic Evaluation of Machine Translation » (ACL 2002)
Plage
0 à 1 (souvent exprimé en 0 à 100). Plus haut = meilleur.
Usage principal
Traduction automatique, génération de texte, résumé, image captioning
Limites
Pas de compréhension sémantique, pénalise les synonymes, ignore la fluidité
Verdict
Métrique historique incontournable, mais à compléter avec COMET, chrF ou BERTScore pour une évaluation fiable.

L’intuition : compter les mots en commun

L’idée centrale de BLEU est simple : une bonne traduction partage beaucoup de mots et de groupes de mots avec une traduction humaine de référence. Plus il y a de n-grammes en commun, meilleure est la traduction.

Prenons un exemple concret :

Référence : "Le chat noir dort sur le canapé"
Candidat A : "Le chat noir dort sur le canapé"     → BLEU parfait
Candidat B : "Le chat dort sur le sofa"              → BLEU élevé (beaucoup de chevauchement)
Candidat C : "Un félin sombre sommeille sur le divan" → BLEU faible (peu de mots communs)
Candidat D : "Chat le sur canapé dort noir le"       → BLEU modéré (mêmes mots, mauvais ordre)

Le candidat C est une excellente traduction (peut-être même plus élégante que la référence), mais BLEU le pénalise car il utilise des synonymes (« félin » au lieu de « chat », « divan » au lieu de « canapé »). C’est la limite fondamentale de BLEU : il compare des chaînes de caractères, pas des significations.

Comment BLEU est calculé

Étape 1 : Précision des n-grammes

Un n-gramme est une séquence de n mots consécutifs. Pour la phrase « le chat dort » :

Unigrammes (1-gram) : "le", "chat", "dort"
Bigrammes (2-gram)  : "le chat", "chat dort"
Trigrammes (3-gram) : "le chat dort"

BLEU calcule la précision de chaque ordre de n-gramme : quelle proportion des n-grammes du candidat apparaît dans la référence ?

Précision n-gram = (n-grammes du candidat présents dans la référence) / (total des n-grammes du candidat)

Étape 2 : Précision modifiée (clipped precision)

La précision brute a un défaut : un candidat qui répète un seul mot (« le le le le le le le ») obtiendrait une précision de 100 % si « le » apparaît dans la référence. Pour éviter cela, BLEU utilise une précision « clippée » : chaque n-gramme du candidat ne peut être compté qu’autant de fois qu’il apparaît dans la référence.

Référence : "Le chat est sur le tapis"
Candidat  : "le le le le le le le"

Précision brute des unigrammes : 7/7 = 100 % (faux positif !)
Précision clippée : "le" apparaît 2 fois dans la référence → 2/7 = 28.6 %

Cette modification est essentielle pour empêcher les traductions dégénérées d’obtenir des scores artificiellement élevés.

Étape 3 : Brevity Penalty (pénalité de brièveté)

La précision favorise naturellement les traductions courtes : un candidat d’un seul mot bien choisi aura une précision parfaite. Pour contrebalancer, BLEU applique une pénalité de brièveté qui pénalise les traductions plus courtes que la référence :

BP = {
    1                    si c > r    (candidat plus long que la référence)
    exp(1 - r/c)         si c ≤ r    (candidat plus court)
}

# c = longueur du candidat, r = longueur de la référence

Si le candidat fait la moitié de la longueur de la référence, BP = exp(1 – 2) = exp(-1) ≈ 0.37, ce qui réduit le score de 63 %. Si le candidat est aussi long ou plus long que la référence, il n’y a pas de pénalité (BP = 1).

Étape 4 : Score final

Le BLEU score combine les précisions des n-grammes de 1 à N (typiquement N = 4) avec la brevity penalty :

BLEU = BP · exp( Σₙ₌₁ᴺ wₙ · log(pₙ) )

Où pₙ est la précision modifiée pour les n-grammes d’ordre n, et wₙ est le poids (par défaut, wₙ = 1/N, soit des poids uniformes). Pour BLEU-4 (le standard), c’est la moyenne géométrique des précisions unigramme, bigramme, trigramme et 4-gramme, multipliée par la brevity penalty.

Exemple de calcul complet

Référence  : "The cat sat on the mat"
Candidat   : "The cat on the mat"

# Précisions clippées :
p₁ (unigrammes) : 5 matchs sur 5 mots = 5/5 = 1.00
   ("The", "cat", "on", "the", "mat" → tous présents)
p₂ (bigrammes)  : "The cat", "cat on", "on the", "the mat"
   "The cat" ✓, "cat on" ✗, "on the" ✓, "the mat" ✓ → 3/4 = 0.75
p₃ (trigrammes) : "The cat on", "cat on the", "on the mat"
   "The cat on" ✗, "cat on the" ✗, "on the mat" ✓ → 1/3 = 0.33
p₄ (4-grammes)  : "The cat on the", "cat on the mat"
   "The cat on the" ✗, "cat on the mat" ✗ → 0/2 = 0.00

# Brevity Penalty :
c = 5 (longueur candidat), r = 6 (longueur référence)
BP = exp(1 - 6/5) = exp(-0.2) ≈ 0.819

# BLEU-4 (avec p₄ = 0, le BLEU-4 est 0 car log(0) = -∞)
# En pratique, on utilise un lissage (smoothing) pour éviter ce cas
Le problème du zéro Si un seul ordre de n-gramme a une précision de 0, le BLEU score tombe à 0 (car la moyenne géométrique d’un zéro est zéro). C’est fréquent pour les phrases courtes évaluées en BLEU-4. Des techniques de lissage (smoothing) sont utilisées pour éviter ce cas. La plus courante est le lissage de Chen & Cherry (method 1 dans nltk), qui ajoute un petit epsilon aux précisions nulles.

Interpréter un score BLEU

BLEU Score Interprétation
< 10 Traduction quasiment inutilisable
10 – 20 L’idée générale est perceptible, mais la traduction est difficile à comprendre
20 – 30 Traduction compréhensible mais contenant des erreurs significatives
30 – 40 Bonne traduction, quelques erreurs mineures
40 – 50 Traduction de haute qualité
50 – 60 Excellente traduction, proche du niveau humain
> 60 Rare : souvent supérieur à ce qu’un humain produirait par rapport à la référence

Ces seuils sont indicatifs et varient selon la paire de langues, le domaine (technique, littéraire, médical) et le nombre de références disponibles. Un BLEU de 40 en traduction anglais-allemand n’est pas comparable à un BLEU de 40 en anglais-japonais.

BLEU scores : souvent exprimés sur 100 Historiquement, BLEU est un nombre entre 0 et 1. Mais de nombreux papiers et outils rapportent le score multiplié par 100 (comme un pourcentage). Un « BLEU de 35.4 » signifie en réalité 0.354. Vérifiez toujours l’échelle utilisée dans les comparaisons.

Implémentation en Python

Avec NLTK

from nltk.translate.bleu_score import sentence_bleu, corpus_bleu
from nltk.translate.bleu_score import SmoothingFunction

# BLEU pour une seule phrase
reference = [["le", "chat", "noir", "dort", "sur", "le", "canapé"]]
candidate = ["le", "chat", "dort", "sur", "le", "sofa"]

# BLEU-4 avec lissage (recommandé pour les phrases courtes)
smoother = SmoothingFunction().method1
score = sentence_bleu(reference, candidate, smoothing_function=smoother)
print(f"BLEU-4 : {score:.4f}")

# BLEU sur un corpus entier
references_corpus = [
    [["le", "chat", "dort"]],
    [["il", "fait", "beau", "aujourd'hui"]]
]
candidates_corpus = [
    ["le", "chat", "dort"],
    ["il", "fait", "beau"]
]
corpus_score = corpus_bleu(references_corpus, candidates_corpus)
print(f"BLEU corpus : {corpus_score:.4f}")

Avec SacreBLEU (recommandé)

SacreBLEU standardise le calcul du BLEU en fixant la tokenisation, ce qui garantit des scores reproductibles entre les études :

import sacrebleu

refs = ["Le chat noir dort sur le canapé."]
hyps = ["Le chat dort sur le sofa."]

bleu = sacrebleu.corpus_bleu(hyps, [refs])
print(f"BLEU : {bleu.score:.1f}")
print(f"Détail : {bleu}")  # affiche les précisions par n-gramme + BP

Avec Hugging Face Evaluate

import evaluate

bleu_metric = evaluate.load("bleu")
results = bleu_metric.compute(
    predictions=["Le chat dort sur le sofa."],
    references=[["Le chat noir dort sur le canapé."]]
)
print(f"BLEU : {results['bleu']:.4f}")

Forces et limites du BLEU

Ce qui fait la valeur de BLEU

Rapidité. Calculable en millisecondes, même sur de grands corpus. C’est ce qui a permis aux chercheurs de comparer des centaines de configurations de systèmes de traduction en quelques heures.

Reproductibilité. Avec SacreBLEU et une tokenisation standardisée, les scores sont exactement reproductibles entre les études. C’est essentiel pour le benchmarking.

Corrélation avec le jugement humain au niveau corpus. Sur des corpus suffisamment grands, BLEU corrèle bien avec les évaluations humaines de la qualité de traduction. C’est moins vrai au niveau de la phrase individuelle.

Indépendance linguistique. BLEU fonctionne pour toute paire de langues sans modification. Pas besoin de ressources linguistiques spécifiques.

Largement adopté. C’est la métrique que tout le monde comprend et rapporte. Cela facilite les comparaisons entre papiers et entre systèmes.

Les limites bien connues

Aucune compréhension sémantique. BLEU traite les mots comme des chaînes de caractères. « Chat » et « félin » sont aussi différents que « chat » et « voiture ». Une paraphrase parfaite qui n’utilise aucun mot de la référence obtient un BLEU de 0.

Insensibilité à l’ordre des mots (au niveau unigramme). Les unigrammes ne capturent pas l’ordre. « Le chat mange la souris » et « La souris mange le chat » ont le même score unigramme. Les n-grammes d’ordre supérieur atténuent ce problème, mais ne l’éliminent pas.

Pénalise les traductions valides mais différentes. Plus la traduction s’éloigne de la référence (même si elle est correcte), plus le BLEU baisse. C’est particulièrement problématique avec les systèmes NMT modernes qui produisent des traductions fluides mais non littérales.

Faible fiabilité au niveau de la phrase. BLEU est conçu pour évaluer un corpus, pas une phrase isolée. Le score d’une seule phrase est très bruité et peu fiable.

Dépendance au nombre de références. Plus il y a de traductions de référence, plus le BLEU est élevé (car le candidat a plus de chances de matcher). Les scores ne sont comparables que si le nombre de références est le même.

BLEU et ses alternatives modernes

Métrique Principe Avantage sur BLEU Usage
ROUGE Rappel n-gramme (plutôt que précision) Mieux adapté au résumé Résumé automatique
METEOR Alignement mot à mot avec synonymes et stemming Gère les synonymes et la morphologie Traduction, génération
chrF F-score sur les n-grammes de caractères Plus robuste aux variations morphologiques Traduction (langues morphologiquement riches)
BERTScore Similarité cosinus d’embeddings contextuels Capture la sémantique Toute génération de texte
COMET Modèle entraîné sur des évaluations humaines Meilleure corrélation avec le jugement humain Traduction (état de l’art)
MetricX Modèle d’erreur appris (Google) Très haute corrélation humaine, reference-free possible Traduction (production chez Google)

Recommandation pratique : rapportez toujours le BLEU (pour la comparabilité historique), mais complétez-le avec COMET ou BERTScore pour une évaluation plus fiable de la qualité réelle. Pour les systèmes en production, les métriques apprises (COMET, MetricX) corrèlent nettement mieux avec les évaluations humaines que BLEU.

BLEU au-delà de la traduction

Bien que conçu pour la traduction, BLEU est utilisé (parfois abusivement) pour d’autres tâches de génération :

Image captioning : comparer les légendes générées aux légendes de référence. BLEU est l’une des métriques standards sur les benchmarks COCO et Flickr30k.

Résumé automatique : utilisé occasionnellement, mais ROUGE est préféré car il mesure le rappel (les informations clés sont-elles couvertes ?) plutôt que la précision.

Dialogue et chatbots : utilisé pour évaluer la similarité des réponses avec des réponses de référence, mais très limité car les dialogues ont une grande variabilité (beaucoup de réponses valides très différentes).

Évaluation de code : le CodeBLEU adapte BLEU à l’évaluation de la génération de code en ajoutant des critères syntaxiques (AST) et de flux de données.

Bonnes pratiques

1. Utilisez SacreBLEU. La tokenisation affecte significativement le score. SacreBLEU standardise le processus et garantit la reproductibilité. C’est le standard de fait dans les publications récentes.

2. Rapportez le score au niveau corpus, pas phrase. Le BLEU d’une phrase individuelle est trop bruité pour être significatif. Évaluez toujours sur un corpus de test de taille raisonnable (au moins quelques centaines de phrases).

3. Ne comparez que dans des conditions identiques. Même paire de langues, même jeu de test, même nombre de références, même tokenisation. Un BLEU anglais-français n’est pas comparable à un BLEU anglais-chinois.

4. Complétez avec une métrique sémantique. BLEU + COMET (ou BERTScore) donne une image beaucoup plus complète de la qualité qu’une seule métrique.

5. Ne sur-interprétez pas les petites différences. Un écart de 0.5 point BLEU n’est généralement pas significatif. Les papiers sérieux rapportent des intervalles de confiance ou utilisent des tests de significativité statistique (bootstrap resampling).


Questions fréquentes sur le BLEU score

Qu’est-ce qu’un « bon » BLEU score ?

Il n’y a pas de seuil universel. En traduction automatique, un BLEU supérieur à 30 est généralement considéré comme une traduction compréhensible, et au-dessus de 40, la qualité est bonne. Mais ces seuils varient fortement selon la paire de langues (l’anglais-français est « plus facile » que l’anglais-japonais), le domaine (technique vs littéraire), et le nombre de traductions de référence. Ne comparez les scores BLEU que dans des conditions strictement identiques.

Quelle est la différence entre BLEU et ROUGE ?

BLEU mesure la précision (quelle proportion des n-grammes du candidat apparaît dans la référence ?), tandis que ROUGE mesure le rappel (quelle proportion des n-grammes de la référence apparaît dans le candidat ?). BLEU pénalise les traductions qui ajoutent du contenu inexistant. ROUGE pénalise les résumés qui omettent des informations clés. C’est pourquoi BLEU est standard en traduction et ROUGE en résumé automatique.

Pourquoi BLEU pénalise-t-il les synonymes ?

BLEU compare les mots comme des chaînes de caractères exactes. « Chat » et « félin » sont traités comme deux mots complètement différents, sans aucune correspondance. C’est la limite fondamentale des métriques basées sur les n-grammes. Des métriques comme METEOR (qui utilise des dictionnaires de synonymes et le stemming) ou BERTScore (qui compare des embeddings sémantiques) adressent directement ce problème.

Peut-on utiliser BLEU pour évaluer les LLMs ?

BLEU est peu adapté à l’évaluation des LLMs conversationnels (ChatGPT, Claude, Gemini) car les réponses valides sont extrêmement variées. Il n’y a pas de « référence » unique pour une réponse conversationnelle. Pour les LLMs, on préfère la perplexité (pour la modélisation du langage), les benchmarks de tâches (MMLU, HumanEval), et les évaluations humaines ou LLM-as-Judge (Chatbot Arena). BLEU reste pertinent pour les tâches de traduction spécifiques où une référence existe.

Que signifie « BLEU-4 » ?

BLEU-4 est le score BLEU standard qui combine les précisions des n-grammes de 1 à 4 (unigrammes, bigrammes, trigrammes et 4-grammes) avec des poids égaux. C’est le défaut dans la plupart des implémentations. BLEU-1 n’utilise que les unigrammes (capture le vocabulaire mais pas l’ordre), BLEU-2 ajoute les bigrammes (capture partiellement l’ordre), etc. BLEU-4 est le compromis standard entre granularité et fiabilité.

Polydesk.ai — Footer