Как это работает
Метрика предложена для автоматической оценки резюме текстов [1]. Для каждого варианта считаются precision, recall и их гармоническое среднее F-measure, обычно смотрят на F-measure.
Для русского языка есть ловушка: токенизатор библиотеки rouge-score по умолчанию оставляет только латиницу и цифры, поэтому кириллица теряется. Передайте собственный токенизатор и не включайте английский стеммер.
ROUGE-N recall = (совпавшие n-граммы) / (n-граммы эталона)
Пример
1import re
2from rouge_score import rouge_scorer
3
4class RuTokenizer:
5 def tokenize(self, text):
6 return re.findall(r"\w+", text.lower())
7
8scorer = rouge_scorer.RougeScorer(
9 ["rouge1", "rouge2", "rougeL"], use_stemmer=False, tokenizer=RuTokenizer()
10)
11scores = scorer.score("эталон", "ответ модели") # порядок: (эталон, ответ)Как применять в тестировании ИИ
Подходит для суммаризации и извлечения ключевой информации. В тестировании чат-ботов используйте его как дешёвый вспомогательный сигнал, а не как критерий качества.
Типичные ошибки
- Молча считать ROUGE для русского языка с настройками по умолчанию: метрика теряет смысл.
- Путать порядок аргументов: сначала эталон, затем ответ модели.
- Считать, что высокий ROUGE гарантирует отсутствие галлюцинаций.
Частые вопросы
Как считать ROUGE для русского языка?
Передайте в rouge-score собственный токенизатор (например, по регулярному выражению \w+) и отключите английский стеммер. Токенизатор по умолчанию отбрасывает кириллицу.
Что означают ROUGE-1, ROUGE-2 и ROUGE-L?
ROUGE-1 сравнивает отдельные слова, ROUGE-2 пары слов (чувствительнее к порядку), ROUGE-L использует длиннейшую общую подпоследовательность и допускает пропуски между словами.
Источники
- ROUGE: A Package for Automatic Evaluation of Summaries — Lin C.-Y., Text Summarization Branches Out, 2004