Ответ
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 — на том, насколько хорошо он покрывает ключевые идеи референса.