Что такое ROUGE?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
ROUGE: Метрика для оценки текстового суммирования
Определение
ROUGE (Recall-Oriented Understudy for Gisting Evaluation) - это метрика для оценки качества автоматически сгенерированного текста путём сравнения с эталонным текстом.
Основная идея: насколько хорошо сгенерированный текст совпадает с эталонным?
История
2004: Lin создаёт ROUGE для оценки систем автоматического суммирования
2016-2024: Становится стандартом для NLP задач
Типы ROUGE
Существует несколько вариантов ROUGE, работающих на разных уровнях:
1. ROUGE-N (N-граммы)
ROUGE-1: одиночные слова (unigrams) ROUGE-2: двусловия (bigrams) ROUGE-3, ROUGE-4: и так далее
Формула: ROUGE-N = Σ(count(n-gram)_match) / Σ(count(n-gram)_ref)
где:
count(n-gram)_match = количество n-грамм в сгенерированном,
совпадающих с эталонным
count(n-gram)_ref = всего n-грамм в эталонном
Пример ROUGE-1:
Эталон: "кот сидит на коврике"
Сгенерированный: "кот сидит на окне"
Эталон unigrams: {кот: 1, сидит: 1, на: 1, коврике: 1}
Сгенерированный: {кот: 1, сидит: 1, на: 1, окне: 1}
Пересечение: {кот, сидит, на} = 3
Всего в эталоне: 4
ROUGE-1 = 3/4 = 0.75
Пример ROUGE-2:
Эталон bigrams:
{кот сидит: 1, сидит на: 1, на коврике: 1}
Сгенерированный bigrams:
{кот сидит: 1, сидит на: 1, на окне: 1}
Пересечение: {кот сидит, сидит на} = 2
Всего в эталоне: 3
ROUGE-2 = 2/3 = 0.67
2. ROUGE-L (Longest Common Subsequence)
Найди самую длинную общую подпоследовательность между текстами.
Формула:
Precision = LCS / length(generated)
Recall = LCS / length(reference)
F1 = 2 * (Precision * Recall) / (Precision + Recall)
где LCS = Longest Common Subsequence
Пример:
Эталон: "The cat sat on the mat"
Сгенерированный: "The cat is on the mat"
LCS: "The cat on the mat" (длина 8 слов)
Recall = 8 / 9 = 0.89 (из эталона)
Precision = 8 / 8 = 1.0 (из сгенерированного)
F1 = 2 * (0.89 * 1.0) / (0.89 + 1.0) = 0.94
3. ROUGE-S (Skip-gram Co-occurrence)
Использует биграммы с пропусками (skip-grams).
Например, в "The quick brown fox":
- Skip-bigrams с расстоянием 1: (The, quick), (The, brown), (quick, brown), (quick, fox), (brown, fox)
- Skip-bigrams с расстоянием 2: (The, brown), (The, fox), (quick, fox)
Подходит для более гибкого сравнения.
Практический пример
from rouge_score import rouge_scorer
# Определи метрики
scorer = rouge_scorer.RougeScorer(
['rouge1', 'rouge2', 'rougeL'], # какие использовать
use_stemmer=True # нормализовать слова
)
# Эталонный текст
reference = (
"The quick brown fox jumps over the lazy dog. "
"This sentence contains all letters of the alphabet."
)
# Сгенерированный текст
generated = (
"A quick brown fox jumps over the lazy dog. "
"This text has all alphabet letters."
)
# Вычисли ROUGE
scores = scorer.score(reference, generated)
for metric, score in scores.items():
print(f"{metric}:")
print(f" Precision: {score.precision:.3f}")
print(f" Recall: {score.recall:.3f}")
print(f" F1: {score.fmeasure:.3f}")
# Выпуск:
# rouge1:
# Precision: 0.892
# Recall: 0.923
# F1: 0.907
# rouge2:
# Precision: 0.714
# Recall: 0.750
# F1: 0.732
# rougeL:
# Precision: 0.857
# Recall: 0.889
# F1: 0.873
Что означают значения?
ROUGE F1 Score:
> 0.9 = Отличное совпадение
0.8-0.9 = Хорошее совпадение
0.7-0.8 = Приемлемое совпадение
0.6-0.7 = Слабое совпадение
< 0.6 = Плохое совпадение
Реальный пример: системы суммирования
import numpy as np
from rouge_score import rouge_scorer
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'])
# Статья о искусственном интеллекте
article = """
Искусственный интеллект (ИИ) - это одна из самых быстро развивающихся
областей техники. Машины теперь могут распознавать образы, переводить языки
и даже генерировать текст. Трансформеры произвели революцию в NLP.
Embedding-модели меняют способ, как мы обрабатываем данные.
"""
# Три разные системы суммирования
sum_system1 = "Искусственный интеллект - быстро развивающаяся область. Машины могут распознавать образы и переводить языки. Трансформеры произвели революцию в NLP."
sum_system2 = "ИИ быстро развивается. Машины теперь могут делать многое."
sum_system3 = "Искусственный интеллект это очень важно для нас всех и мы должны его развивать."
# Оценка
print("System 1 (хорошая)")
scores1 = scorer.score(article, sum_system1)
print(f" ROUGE-1 F1: {scores1['rouge1'].fmeasure:.3f}")
print(f" ROUGE-2 F1: {scores1['rouge2'].fmeasure:.3f}")
print(f" ROUGE-L F1: {scores1['rougeL'].fmeasure:.3f}")
# Результаты: 0.8-0.85 (хорошее совпадение)
print("\nSystem 2 (слабая)")
scores2 = scorer.score(article, sum_system2)
print(f" ROUGE-1 F1: {scores2['rouge1'].fmeasure:.3f}")
print(f" ROUGE-2 F1: {scores2['rouge2'].fmeasure:.3f}")
print(f" ROUGE-L F1: {scores2['rougeL'].fmeasure:.3f}")
# Результаты: 0.5-0.6 (слабое совпадение)
print("\nSystem 3 (галлюцинация)")
scores3 = scorer.score(article, sum_system3)
print(f" ROUGE-1 F1: {scores3['rouge1'].fmeasure:.3f}")
print(f" ROUGE-2 F1: {scores3['rouge2'].fmeasure:.3f}")
print(f" ROUGE-L F1: {scores3['rougeL'].fmeasure:.3f}")
# Результаты: 0.3-0.4 (плохое совпадение)
Precision, Recall и F1 в контексте ROUGE
ROUGE Recall: насколько полно сгенерированный текст покрывает эталон
- Высокий recall = модель включила важные части эталона
- Низкий recall = модель пропустила важные части
ROUGE Precision: насколько точен сгенерированный текст
- Высокий precision = всё в сгенерированном тексте было в эталоне
- Низкий precision = модель добавила лишнего
F1 = гармоническое среднее между Precision и Recall
Когда использовать ROUGE
Используй ROUGE когда:
- Оцениваешь системы суммирования текста
- Оцениваешь машинный перевод
- Оцениваешь системы вопрос-ответ
- Есть эталонные ответы для сравнения
НЕ используй ROUGE когда:
- Нет эталонных текстов для сравнения
- Текст может быть сгенерирован несколькими способами
- Нужна семантическая оценка (один текст может означать то же, но звучать по-другому)
- Работаешь с творческими текстами (стихи, рассказы)
Ограничения ROUGE
1. N-граммы игнорируют синонимы
"большой" и "огромный" считаются разными
2. Чувствительна к порядку слов
"кот сидит" и "сидит кот" - разные для ROUGE
3. Не понимает семантику
"модель хорошая" и "модель плохая" имеют похожий ROUGE
4. Требует эталонный текст
Невозможно оценить если нет reference
Современные альтернативы
BERTScore: использует BERT для семантического сравнения
METEOR: учитывает синонимы и паraphrase
CIDEr: специально для описания изображений
BLEU: похожа на ROUGE, для машинного перевода
Заключение
ROUGE - это стандартная метрика для оценки качества автоматически сгенерированного текста. Она основана на сравнении n-грамм и subsequence между сгенерированным и эталонным текстами. Хотя ROUGE имеет ограничения (не понимает семантику), она остаётся одной из самых используемых метрик в NLP для объективной оценки.