Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#909

Что такое метрика ROUGE (ROUGE-1, ROUGE-2, ROUGE-L)? Как она считается и в чем её недостатки для оценки генерации?

Краткий тезис

ROUGE (Recall-Oriented Understudy for Gisting Evaluation) — семейство метрик, измеряющих перекрытие n-грамм и наибольшей общей подпоследовательности между эталонным и сгенерированным текстом. Основное применение — оценка задач суммаризации и машинного перевода. ROUGE ориентирована на полноту (recall) и чувствительна к формальному совпадению лексики, но игнорирует синонимы, перефразирование и глубинный смысл.

2. ROUGE-L: longest common subsequence

ROUGE-L основана на наибольшей общей подпоследовательности (LCS) между эталоном и кандидатом. LCS не требует непрерывности — последовательность символов/слов, идущих в том же порядке, но не обязательно подряд.

Формула:

[ R_{lcs} = \frac{LCS(C, S)}{|S|}, \quad P_{lcs} = \frac{LCS(C, S)}{|C|}, \quad F_{lcs} = \frac{(1+[beta](/wiki/beta)^2) R_{lcs} P_{lcs}}{R_{lcs} + [beta](/wiki/beta)^2 P_{lcs}} ]

Где (LCS(C, S)) — длина наибольшей общей подпоследовательности (в словах). ([beta](/wiki/beta)) часто полагают равным 1.

Преимущество: ROUGE-L учитывает порядок слов на уровне последовательности, но не штрафует за вставки/удаления — только за нарушение порядка. Метрика особенно полезна для оценки фразовых повторов.


3. Пример расчёта

Эталон: "кот сидит на ковре" Генерация: "сидит кот на ковре"

ROUGE-1

  • unigram эталона: {кот, сидит, на, ковре} (4)
  • unigram генерации: {сидит, кот, на, ковре} (4)
  • пересечение: 4 из 4.
  • Recall = 4/4 = 1.0, Precision = 4/4 = 1.0 → ROUGE-1 F1 = 1.0

ROUGE-2

  • bigram эталона: {кот сидит, сидит на, на ковре} (3)
  • bigram генерации: {сидит кот, кот на, на ковре} (3)
  • пересечение: только {на ковре} (1)
  • Recall = 1/3 ≈ 0.333, Precision = 1/3 ≈ 0.333 → ROUGE-2 F1 = 0.333

ROUGE-L

  • LCS = "кот на ковре"? Нет, порядок: в эталоне "кот сидит на ковре", в генерации "сидит кот на ковре". LCS: "кот на ковре" (3 слова) или "сидит на ковре"? Проверим: последовательность "кот" → "на" → "ковре" есть в обоих, но в генерации порядок "кот на ковре" — да, все три идут в том же относительном порядке. Длина LCS = 3.
  • |S| = 4, |C| = 4.
  • R_lcs = 3/4 = 0.75, P_lcs = 3/4 = 0.75 → F_lcs = 0.75

Вывод: ROUGE-1 даёт завышенную оценку, ROUGE-2 — слишком низкую, ROUGE-L — компромисс. Пример показывает слабость ROUGE при перестановке слов.


4. Недостатки: не чувствует смысл, synonymy, word order

  1. Лексическая ограниченность – ROUGE основана на точном совпадении токенов. Синонимы ("кот"/"кошка") или морфологические формы ("на ковре"/"на коврик") дают нулевое пересечение, хотя смысл близок.

  2. Игнорирование семантики – даже полное совпадение n-грамм не гарантирует правильного смысла (например, "не было" vs "было" — разные утверждения). ROUGE не различает утверждения и отрицания.

  3. Чувствительность к порядку только через LCS – ROUGE-N не учитывает порядок вообще. ROUGE-L чувствителен к порядку, но только на уровне последовательности, а не синтаксической структуры. Пример: "кот съел мышь" и "мышь съел кот" – общий LCS "кот съел" (2 слова), оценка завышена.

  4. Проблема с длинными текстами – при большом количестве стоп-слов ROUGE может быть высоким без содержательной близости. Для суммаризации коротких текстов метрика склонна к высокой вариативности.

  5. Ориентация на полноту – в классической формулировке ROUGE — recall-oriented, что может поощрять генерацию длинных текстов, покрывающих много слов эталона, даже с избыточностью. Современные реализации используют F1, но bias остаётся.

  6. Неприменимость для творческих задач – в диалогах, генерации историй или кода совпадение n-грамм не коррелирует с качеством.

Альтернативы: BLEU (больше подходит для машинного перевода), METEOR (учитывает синонимы), BERTScore (семантическое сходство через эмбеддинги), ROUGE-WE (словные векторы).


5. Пет-проект для закрепления

Задача: реализовать скрипт для подсчёта ROUGE-1, ROUGE-2 и ROUGE-L на русском тексте и сравнить с эталоном на задаче суммаризации новостей.

Инструменты:

  • Python 3.8+
  • Библиотеки: nltk (для токенизации), rouge-score (оригинальная реализация Google), datasets (датасет Gazeta с русскими новостями).
  • Свой код для LCS (можно использовать difflib.SequenceMatcher или написать динамическое программирование).

Шаги:

  1. Загрузить датасет Gazeta из datasets – содержит статьи и эталонные краткие пересказы.
  2. Выбрать 10 примеров. Токенизировать тексты по словам (можно nltk.word_tokenize с русским языком).
  3. Реализовать функции:
    • count_ngrams(text, n) – словарь n-грамм с частотами.
    • rouge_n(candidate, reference, n) – precision/recall/F1 с учётом клиппирования.
    • rouge_l(candidate, reference) – через LCS (двунаправленный DP).
  4. Сравнить результаты с библиотечной реализацией rouge_score.RougeScorer.
  5. Для одного примера вручную заменить несколько слов на синонимы (например, "кот" → "кошка") и посмотреть изменение ROUGE.

Ожидаемый результат:

  • Понимание, как малые изменения текста влияют на каждую метрику.
  • Выявление случаев, когда ROUGE плохо коррелирует с человеческой оценкой.
  • Таблица с примерами, иллюстрирующая недостатки (синонимы, перестановки, вставки).

Связь с другими вопросами

ВопросТема
908Основные метрики для оценки NLP-моделей
250Практические подходы к оценке суммаризации

Навигация

  • Предыдущий: 908
  • Следующий: 910
  • Индекс: 00. Индекс разборов