В чем разница между метриками BLEU и ROUGE?

«В чем разница между метриками BLEU и ROUGE?» — вопрос из категории NLP и трансформеры, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

BLEU и ROUGE — это автоматические метрики для оценки качества сгенерированного текста (машинного перевода, суммаризации) путем сравнения с эталонными (референсными) текстами.

Критерий BLEU (Bilingual Evaluation Understudy) ROUGE (Recall-Oriented Understudy for Gisting Evaluation)
Основная идея Точность (Precision): Какая доля n-грамм из сгенерированного текста есть в референсе? Полнота (Recall): Какая доля n-грамм из референса есть в сгенерированном тексте?
Типичное применение Оценка машинного перевода. Оценка автоматической суммаризации.
Ключевой компонент Штраф за краткость (Brevity Penalty), наказывает за слишком короткий вывод. Разные варианты: ROUGE-N (по n-граммам), ROUGE-L (по самой длинной общей подпоследовательности).
Интерпретация Выше = лучше. Идеальное совпадение = 1.0. Выше = лучше. Идеальное совпадение = 1.0.

Пример вычисления BLEU для перевода:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction
reference = [['the', 'cat', 'is', 'on', 'the', 'mat']]
candidate = ['the', 'cat', 'sat', 'on', 'the', 'mat']
# Используем сглаживание для коротких предложений
smoothie = SmoothingFunction().method4
score = sentence_bleu(reference, candidate, smoothing_function=smoothie)
print(f"BLEU score: {score:.4f}")  # ~0.59

Пример вычисления ROUGE для суммаризации:

# Установка: pip install rouge
from rouge import Rouge
rouge = Rouge()
hypothesis = "the cat is on the mat"
reference = "the cat sat on the mat"
scores = rouge.get_scores(hypothesis, reference)
# Обращаем внимание на ROUGE-L (F1-score)
print(f"ROUGE-L F1: {scores[0]['rouge-l']['f']:.4f}")  # ~0.8889

Вывод: BLEU фокусируется на точности сгенерированного текста, ROUGE — на том, насколько хорошо он покрывает ключевые идеи референса.