BLEU, ROUGE, BERT-score - блеу, руж, берт-скор - метрики качества перевода и перефразировок в NLP

Как померить близость текстов? Такое часто встречается если у вас задача сравнить эталонный перевод с полученным, перефразировку или суммаризацию, сделанную LLM или другим алгоритмом с эталонной.

Вообще есть более простые способы, чем BLEU и ROUGE и начнем мы с них, чтобы подойти к более сложному с пониманием дела.

Представим ситуацию - у вас есть алгоритм, который решает задачу преобразования текстов, например машинный перевод с русского на английский, или перефразировка диалога с пользователем в поисковый вопрос, или аннотация статьи 3-мя предложениями и т.д.

Вы составили тестовый датасет для алгортима из 100 примеров, где у вас есть входной текст и эталонный текст. Алгоритм содал вам кандидатные тексты. И теперь вам надо сравнить кандитатов и эталоны.

Методология светофорчик

Хорошо - плохо

Самый простой способ - это посмотреть глазами. Например, если вы считаете что кандидат хороший и похож на эталон - ставим 1, если плохой и не похож - ставим 0.

Это просто, но требует ручной работы. И это сложно, если несколко человек делают это или вы делаете в разное время с разным настроением. Где граница между похож и не похож? Где граница между хорошо и плохо? Ее надо описать. Иначе вы будете получать несогласованные результаты.

Можно делать это разными людьми и считать среднюю оценку. Но это все стоит времени и денег.

Баллы

Можно записать критерии, ввести баллы по нескольким шкалам и размечать людьми.

Самый простой светофорчик:

  • баллы
    • 0 - плохо
    • 1 - средне
    • 2- хорошо
  • шкалы
    • форма
    • содержание

Далее люди оценивают по критериям, ставя баллы по шкалам и вы получаете среднюю оценку по каждой шкале.

Но что делать если алгоритм немного поменялся, вы подбираете параметры. На каждый чих переоценивать людьми? Очень долго и очень дорого. Не масштабируемо, не автоматизируемо.

Мера Жаккара

А давайте посчитаем похожесть текстов автоматически. Есть ли такие способы? Конечно есть.

Часто достаточно полезно при работе с текстами снизить вариативность, например нам не критично для пониманию общей ситуации о чем идет речь:

  • кошка
  • кошки
  • кошке
  • ... суффиксы, окончания

детали не важны, мы понимаем, что разговор про кошку.

Для анализа текстов часто делают лемматизацию или стемминг. Это разные операции, но смысл примерно одинаков - мы снижаем шум и вариативность.

  • Лемматизация - слово приводится к некоторой канонической форме. Напрмер кошками → кошка
  • Стемминг - более грубый способ снизить вариативноть - у слова по таблице правил отбрасывается окончание или суффикс, ну или даже слова, например, усекаются до первых 4-х символов кошками → кошк

Но мера Жаккара не очень хорошо коррелирует с ручной оценкой людьми. Поэтому потребовалось что-то похитрее.

BLEU

BLEU (Bilingual Evaluation Understudy) — это алгоритм для оценки качества текста, который был машинно переведен с одного естественного языка на другой. Качество считается соответствием между выходом машины и переводом человека: "чем ближе машинный перевод к профессиональному человеческому переводу, тем он лучше" — это центральная идея за BLEU. Изобретенный в IBM в 2001 году, BLEU был одним из первых метрик, заявивших о высокой корреляции с человеческими суждениями о качестве, и остается одной из самых популярных автоматизированных и недорогих метрик.

Оценки вычисляются для отдельных переведенных сегментов — обычно предложений — путем их сравнения с набором качественных эталонных переводов (т.е. к каждому фрагменту оригинала предлагается несколько вариантов перевода на целевом языке - как если бы мы могли сказать об обном и том же разными словами). Затем эти оценки усредняются по всему корпусу, чтобы получить оценку общего качества перевода. Понятность или грамматическая правильность не учитываются.

Выход BLEU всегда является числом между 0 и 1. Это значение указывает, насколько похож кандидатный текст на эталонные тексты, причем значения, близкие к 1, представляют более похожие тексты. Лишь немногие человеческие переводы достигнут оценки 1, так как это указывало бы на то, что кандидат идентичен одному из эталонных переводов. Поэтому для хорошего перевода не обязательно достигать оценки 1. Добавление дополнительных эталонных переводов увеличит оценку BLEU, так как будет больше возможностей для совпадения.

Математическое определение

Основная установка

Первоначальная попытка определения оценки BLEU принимает два аргумента: кандидатную строку \(\displaystyle {\hat {y}}\) и список эталонных строк \(\displaystyle (y^{(1)},...,y^{(N)})\). Идея заключается в том, что \(\displaystyle BLEU({\hat {y}};y^{(1)},...,y^{(N)})\) должно быть близко к 1, когда \(\displaystyle {\hat {y}}\) похож на \(\displaystyle y^{(1)},...,y^{(N)}\), и близко к 0, если нет.

По аналогии, оценка BLEU похожа на учителя языка, который пытается оценить качество студенческого перевода \(\displaystyle {\hat {y}}\) , проверяя, насколько он следует эталонным ответам \(\displaystyle y^{(1)},...,y^{(N)}\).

BLEU — это метрика оценки качества машинного перевода, которая основывается на сравнении отдельных слов (unigrams) и их сочетаний (n-grams) в переводе и эталонном тексте (группе текстов). Сначала считается, сколько таких совпадений есть в переводе, и это число делится на общее количество слов и сочетаний в самом переводе — получая так называемую точность (precision). Чтобы не завышать оценку для слишком коротких или неполных переводов, к результату применяется поправка — штраф за краткость (brevity penalty).

Основная идея BLEU

BLEU смотрит, сколько слов и сочетаний слов из перевода встречаются в эталонном тексте. Это называется n-gram precision.

Затем BLEU применяет штраф за краткость, чтобы не награждать слишком короткие переводы.

Как вычисляется BLEU: пошагово

Шаг 1: Подготовка

У нас есть:

  • Машинный перевод (candidate) — то, что перевёл компьютер.
  • Эталонный перевод (reference) — хороший перевод, например, сделанный человеком. Или несколько вариантов перевода

Пример:

  • Машинный перевод: the cat is on the mat
  • Эталонный перевод: the cat is lying on the mat

Шаг 2: Посчитать n-граммы

n-грамма — это последовательность из n слов.

Для BLEU обычно используют n = 1 до 4, т.е. унитраммы (unigrams), биграммы (bigrams), триграммы (trigrams), четырёхграммные сочетания.

Рассчитаем для unigram и bigram:

Unigrams (n=1):

В переводе: the, cat, is, on, the, mat В эталоне: the, cat, is, lying, on, the, mat

Сколько слов из перевода есть в эталоне? Практически все, кроме одного слова: lying. То есть 6 слов в переводе, 5 совпали → точность: 5/6 ≈ 0.83

Bigrams (n=2):

Перевод: the cat, cat is, is on, on the, the mat Эталон: the cat, cat is, is lying, lying on, on the, the mat

Совпадающие биграммы: the cat, cat is, on the, the mat → 4 совпадения из 5 → точность: 4/5 = 0.8

Шаг 3: Среднее геометрическое точностей

BLEU использует среднее геометрическое всех точностей (обычно для n=1 до n=4). Упрощённо:

\[ \text{BLEU} = \left( p_1 \times p_2 \times \dots \times p_n \right)^{\frac{1}{n}}\]

Например, если только unigram и bigram:

\[ \text{BLEU} = \left( 0.83 \times 0.8 \right)^{\frac{1}{2}} \approx 0.815\]

Шаг 4: Штраф за краткость (Brevity Penalty)

Если машинный перевод короче, чем эталон, BLEU штрафует его, потому что он может быть неполным.

Формула штрафа:

BP = 1, если длина перевода ≥ длина эталона
BP = exp(1 - длина эталона / длина перевода), если перевод короче

Пример:

  • Длина перевода: 6 слов
  • Длина эталона: 7 слов

Тогда:

\[ BP = \exp\left(1 - \frac{7}{6}\right) = \exp(-0.1667) \approx 0.85\]

Итоговый BLEU:

Final_BLEU = BP × среднее геометрическое точностей
Final_BLEU = 0.85 × 0.815 ≈ 0.69 или ~69 баллов

Итог

Шаг Что делается
1 Берём перевод и эталон
2 Считаем точность (precision) по n-граммам (unigram, bigram и т.д.)
3 Находим среднее геометрическое этих точностей
4 Применяем штраф за краткость, если перевод слишком короткий
5 Получаем финальную оценку BLEU от 0 до 1 (или 0–100)



Зачем нужен BLEU?

  • Он позволяет быстро и автоматически сравнивать качество разных моделей перевода.
  • Показывает, насколько близок машинный перевод к человеческому.
  • Но не идеален: не учитывает синонимы или структуру предложений.

В целом в практике считается, что BLEU хорошо коррелирует с человеческими оценками. Однако существует ряд нюансов, например BLEU не может справляться с языками, не имеющими границ слов. Спроектированный для использования с несколькими эталонными переводами, на практике он чаще используется только с одним.

BLEU зависит от техники токенизации, и оценки, достигнутые с разными техниками, например с лемматизацией текстов, стеммингом, в исходном виде, с учетом пуктуации и т.д. - могут быть существенно разными.

ROUGE

ROUGE бывают разные: ROUGE-1, ROUGE-2, ..., ROUGE-N и ROUGE-L

ROUGE — это набор метрик для оценки качества текста (например, машинного перевода или суммаризации), которые сравнивают машинный результат (candidate) с эталонным текстом (reference).

В отличие от BLEU, которая ориентируется на precision (точность), ROUGE больше фокусируется на recall — то есть насколько много информации из эталона содержится в машинном результате.

Основные виды метрик ROUGE

Название Описание
ROUGE-1 Считает совпадения отдельных слов (unigrams) между кандидатом и эталоном
ROUGE-2 Считает совпадения пар последовательно идущих слов (bigrams)
ROUGE-N Обобщение для n-грамм (обычно N=1, 2 или 3)
ROUGE-L Учитывает самую длинную общую подпоследовательность слов (Longest Common Subsequence, LCS)

ROUGE-N основана на количестве совпадающих n-грамм между кандидатом и эталоном.

Формула:

\[ \text{ROUGE-N} = \frac{\text{Число совпадающих n-грамм}}{\text{Общее число n-грамм в эталоне}}\]

То есть это recall: сколько из эталонных n-грамм нашлось в кандидате.

Пример:

  • Candidate (C): the cat is on the mat
  • Reference (R): the cat is lying on the mat

Шаг 1: Выберем ROUGE-1 (unigrams)

Разобьём оба предложения на unigrams (слова):

  • C: the, cat, is, on, the, mat
  • R: the, cat, is, lying, on, the, mat

Посчитаем пересечение (сколько слов из эталона встречается в кандидате):

  • Совпадают: the, cat, is, on, the, mat → 6 совпадений
  • Всего слов в эталоне: 7

\[ \text{ROUGE-1} = \frac{6}{7} \approx 0.857\]

Таким образом, ROUGE-1 ≈ 0.857

Шаг 2: Теперь посчитаем ROUGE-2 (bigrams)

Bigrams — пары соседних слов.

  • Candidate:
    • the cat, cat is, is on, on the, the mat
  • Reference:
    • the cat, cat is, is lying, lying on, on the, the mat
  • Совпадающие bigrams:
    • the cat, cat is, on the, the mat → 4 совпадения

Всего bigrams в эталоне: 6

\[ \text{ROUGE-2} = \frac{4}{6} = 0.667\]

Таким образом, ROUGE-2 = 0.667

ROUGE-L

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

Это позволяет учитывать синтаксическую структуру предложений лучше, чем простое сравнение n-грамм.

Пример:

  • Candidate (C): the cat is on the mat
  • Reference (R): the cat is lying on the mat

Ищем LCS (наибольшая общая подпоследовательность):

Можно найти следующую цепочку:

  • the cat is on the mat – полностью совпадает с частью эталона

То есть длина LCS = 6

Длина эталона = 7 Длина кандидата = 6

Формула ROUGE-L:

\[ \text{ROUGE-L} = \frac{LCS(C, R)}{\max(\text{длина эталона}, \text{длина кандидата})}\]

Подставляем значения:

\[ \text{ROUGE-L} = \frac{6}{7} \approx 0.857\]

Таким образом, ROUGE-L ≈ 0.857

Итого получилось

Метрика Значение Что считается
ROUGE-1 ≈ 0.857 Совпадающие слова (unigrams)
ROUGE-2 ≈ 0.667 Совпадающие пары слов (bigrams)
ROUGE-L ≈ 0.857 Наибольшая общая подпоследовательность
  • ROUGE-1 и ROUGE-2 считаются легко и быстро, но чувствительны к точному порядку и сочетаниям слов.
  • ROUGE-L более гибкая, учитывает структуру предложения и работает с неточными совпадениями.
  • Все варианты ROUGE фокусируются на recall, то есть насколько полно кандидат воспроизводит информацию из эталона.

F-score precision-recall

Хотя BLEU и ROUGE работают по-разному, можно использовать F1 для комбинации precision (из BLEU) и recall (из ROUGE) .

Для примера возьмём ранее вычисленные значения: Из предыдущих вычислений:

    Precision (например, из BLEU-1): 
    p1​​≈0.83 

    Recall (например, из ROUGE-1): 
    r1​​≈0.857      

Теперь посчитаем F1-score :

\[ F1 = 2 \cdot \frac{0.83 \cdot 0.857}{0.83 + 0.857} = 2 \cdot \frac{0.711}{1.687} \approx 2 \cdot 0.421 \approx 0.842\]

Таким образом, F1 ≈ 0.842

Также можно строить сводный показатель например, брать среднее из ROUGE-1 и ROUGE-2 и строить F-меру со значением BLEU-2.

Такой показатель позволит учитывать не только точность, но и полноту кандидатного текста по отношению к эталону.

Но все равно мы остаемся ограничены употребленными словами, если кандидатный текст использует синонимы, которые не сводятся к общим токенам через стемминг и лемматизацию, то мера будет низкой, даже для близких по смыслу текстов.

Чтобы работать уже с семантической а не пословной близостью, используют метрики на основе семантических эмбеддингов, например BERT-score.

BERT-score

BERTScore — это современная и мощная метрика оценки качества текста (например, машинного перевода, суммаризации), которая использует предобученные языковые модели, такие как BERT, для более точного сравнения кандидат-текста с эталонным.

BERTScore — это автоматическая метрика, которая:

  • Использует контекстные векторы слов из моделей типа BERT, RoBERTa, XLM-RoBERTa и др.
  • Сравнивает смысловую похожесть слов в кандидате и эталоне, учитывая их семантический смысл, а не только буквальное совпадение.
  • Позволяет лучше оценивать переводы или суммаризации, где используются синонимы или разные формулировки одной мысли.

В отличие от BLEU и ROUGE, которые работают с точными совпадениями n-грамм, BERTScore:

  1. Кодирует слова из кандидата и эталона в векторы при помощи BERT.
  2. Для каждого слова в кандидате находит наиболее похожее слово в эталоне (и наоборот).
  3. Считает косинусное сходство между ними.
  4. Из этих сходств вычисляются precision, recall и F1-score.

Пример:

  • Candidate (C): The cat is on the mat
  • Reference (R): The cat is lying on the mat

Шаг 1: Токенизация

Разбиваем оба предложения на токены (слова):

  • C: ['The', 'cat', 'is', 'on', 'the', 'mat']
  • R: ['The', 'cat', 'is', 'lying', 'on', 'the', 'mat']

Шаг 2: Получить эмбеддинги слов

С помощью предобученной модели BERT получаем векторы (эмбеддинги) для каждого слова в обоих предложениях.

Эти векторы учитывают контекст использования слова, то есть "мат" в значении "коврик" и "мат" в значении "ругательства" будут представлены разными векторами.

Шаг 3: Считаем сходство между парами слов

Для каждого слова в кандидате считаем косинусное сходство со всеми словами в эталоне и выбираем наибольшее значение.

Например:

  • Для слова "lying" в эталоне может быть близко слово "is" или "on" в кандидате, но точного совпадения нет.
  • Но семантически оно может быть близко к чему-то вроде "resting" или "sitting", если бы они были в кандидате.

Таким образом, даже если слово не совпадает буквально, BERTScore может его оценить.

Пусть:

  • \(C = \{c_1, c_2, ..., c_m\}\) — слова в кандидате
  • \(R = \{r_1, r_2, ..., r_n\}\) — слова в эталоне
  • \(s_{ij} = \cos(\text{BERT}(c_i), \text{BERT}(r_j))\) — косинусное сходство между i-м словом в кандидате и j-м в эталоне

Precision:

\[ P = \frac{1}{m} \sum_{i=1}^{m} \max_{j} s_{ij}\]

(сколько слов из кандидата найдено в эталоне)

Recall:

\[ R = \frac{1}{n} \sum_{j=1}^{n} \max_{i} s_{ij}\]

(сколько слов из эталона покрыто кандидатом)

F1-Score:

\[ F1 = 2 \cdot \frac{P \cdot R}{P + R}\]

Пример расчёта (упрощённый)

Слово в Candidate Наиболее похожее в Reference Сходство
The The 0.95
cat cat 0.98
is is 0.97
on on 0.96
the the 0.94
mat mat 0.99

Precision = среднее по этим значениям ≈ (0.95+0.98+0.97+0.96+0.94+0.99)/6 ≈ 0.965

Теперь делаем то же самое в обратную сторону (Recall):

Слово в Reference Наиболее похожее в Candidate Сходство
The The 0.95
cat cat 0.98
is is 0.97
lying on (или is) ~0.4
on on 0.96
the the 0.94
mat mat 0.99

Recall ≈ (0.95+0.98+0.97+0.4+0.96+0.94+0.99)/7 ≈ 0.884

Теперь посчитаем F1:

\[ F1 = 2 \cdot \frac{0.965 \cdot 0.884}{0.965 + 0.884} \approx 2 \cdot \frac{0.853}{1.849} \approx 0.923\]

Таким образом, BERTScore ≈ 0.923

Преимущества BERTScore

Плюс Объяснение
✔ Учитывает семантику Может понять, что «running» и «jogging» похожи
✔ Не требует точных совпадений Работает с синонимами и перефразировками
✔ Лучше коррелирует с человеком Часто показывает более реалистичные оценки
✔ Поддерживает несколько языков Если используется мультиязычная модель (например, mBERT или XLM-R)

Если надо посчитать BERTScore программно, например в Python, можно использовать библиотеку bert_score.

Но применять эту метрику тоже надо осторожно. BERTScore оценивает, насколько два текста похожи по словам и смыслу, учитывая контекст. Однако эта метрика не проверяет, совпадают ли факты в текстах. Например, если в двух инструкциях одинаковый стиль и обе говорят о приготовлении супа, BERTScore не заметит, что ингредиенты или порядок действий различаются.

Аналогично им не стоит проверять ответы чат бота с конкретными техническими деталями - все инструкции по сборке шкафа будут в этой метрике на одно лицо, только по неправильной инструкции шкаф не соберется.

Что же делать?

В целом на практике можно использовать все приведенные метрики

  • BLEU-2 по леммам и в исходном тексте
  • ROUGE-1, ROUGE-2 и ROUGE-L по леммам и в исходном тексте
  • F-score BLEU-ROUGE
  • BERT-score
  • Cos-similarity на основе общего эмбеддинга текста (Sentence-Transformers с моделью, обученной на Similarity-text-search)
  • подбирать из этого всего какую-то усредняющую метрику, которая будет максимально коррелировать с ручной оценкой людьми именно на вашей задаче.

По крайней мере посчитайте все эти метрики, разметьте руками несколько десятков примеров в три градации - плохо, средне, хорошо. И посчитайте корреляции. Это поможет вам выбрать ту метрику, которая коррелирует с вашей бизнес-задачей. А возможно вы выберете 2-3 разных метрики и определите способ как их усреднить, чтобы это еще лучше коррелировало с вашей ручной разметкой.