Метрики оценки генерации текста

Глубокое обучение для работы с текстом на PyTorch

Shubham Jain

Instructor

Оценка генерации текста

  • Задачи генерации текста создают текст, похожий на человеческий
  • Стандартные метрики (accuracy, F1) плохо подходят для таких задач
  • Нужны метрики, оценивающие качество сгенерированного текста
  • BLEU и ROUGE

Чат-бот Dalle для генерации текста

Глубокое обучение для работы с текстом на PyTorch

BLEU (Bilingual Evaluation Understudy)

  • Сравнивает сгенерированный текст с эталонным
  • Проверяет совпадение n-грамм
  • В предложении «The cat is on the mat»
    • 1-граммы (uni-gram): [the, cat, is, on, the, mat]
    • 2-граммы (bi-gram): ["the cat", "cat is", "is on", "on the", "the mat"]
    • и так далее для n-грамм
  • Полное совпадение: оценка 1,0
    • 0 — совпадений нет
Глубокое обучение для работы с текстом на PyTorch

Вычисление метрики BLEU с помощью PyTorch

from torchmetrics.text import BLEUScore

generated_text = ['the cat is on the mat'] real_text = [['there is a cat on the mat', 'a cat is on the mat']]
bleu = BLEUScore() bleu_metric = bleu(generated_text, real_text) print("BLEU Score: ", bleu_metric.item())
BLEU Score: tensor(0.7598)
Глубокое обучение для работы с текстом на PyTorch

ROUGE (Recall-Oriented Understudy for Gisting Evaluation)

  • Сравнивает сгенерированный текст с эталонным двумя способами
  • ROUGE-N: учитывает совпадающие n-граммы (N=1 для uni-gram, 2 для bigrams и т. д.) в обоих текстах
  • ROUGE-L: ищет наибольшую общую подпоследовательность (LCS) между текстами
  • Метрики ROUGE:
    • F-мера: среднее гармоническое точности и полноты
    • Точность: совпадения n-грамм сгенерированного текста с эталонным
    • Полнота: совпадения n-грамм эталонного текста в сгенерированном
  • Префиксы rouge1, rouge2 и rougeL соответствуют 1-граммам, 2-граммам и LCS
Глубокое обучение для работы с текстом на PyTorch

Вычисление метрики ROUGE с помощью PyTorch

from torchmetrics.text import  ROUGEScore

generated_text='Hello, how are you doing?' real_text= "Hello, how are you?"
rouge = ROUGEScore()
rouge_score = rouge([generated_text], [[real_text]]) print("ROUGE Score:", rouge_score)
Глубокое обучение для работы с текстом на PyTorch

Метрика ROUGE: вывод

ROUGE Score: {'rouge1_fmeasure': tensor(0.8889), 
              'rouge1_precision': tensor(0.8000), 
              'rouge1_recall': tensor(1.),

'rouge2_fmeasure': tensor(0.8571), 'rouge2_precision': tensor(0.7500), 'rouge2_recall': tensor(1.),
'rougeL_fmeasure': tensor(0.8889), 'rougeL_precision': tensor(0.8000), 'rougeL_recall': tensor(1.),
'rougeLsum_fmeasure': tensor(0.8889), 'rougeLsum_precision': tensor(0.8000), 'rougeLsum_recall': tensor(1.)}
Глубокое обучение для работы с текстом на PyTorch

Ограничения и особенности применения

  • Оценивают наличие слов, но не семантику
  • Чувствительны к длине сгенерированного текста
  • Качество эталонного текста влияет на результаты
Глубокое обучение для работы с текстом на PyTorch

Давайте потренируемся!

Глубокое обучение для работы с текстом на PyTorch

Preparing Video For Download...