Metryki ewaluacji dla generowania tekstu

Uczenie głębokie dla tekstu z PyTorch

Shubham Jain

Instructor

Ewaluacja generowania tekstu

  • Zadania generowania tekstu tworzą tekst podobny do ludzkiego
  • Standardowe metryki, takie jak dokładność czy F1, są tu niewystarczające
  • Potrzebne są metryki oceniające jakość wygenerowanego tekstu
  • BLEU i ROUGE

Chatbot Dalle do generowania tekstu

Uczenie głębokie dla tekstu z PyTorch

BLEU (Bilingual Evaluation Understudy)

  • Porównuje wygenerowany tekst z tekstem referencyjnym
  • Sprawdza występowanie n-gramów
  • W zdaniu "The cat is on the mat"
    • 1-gramy (unigramy): [the, cat, is, on, the, mat]
    • 2-gramy (bigramy): ["the cat", "cat is", "is on", "on the", "the mat"]
    • i tak dalej dla n-gramów
  • Idealne dopasowanie: wynik 1,0
    • 0 oznacza brak dopasowania
Uczenie głębokie dla tekstu z PyTorch

Obliczanie wyniku BLEU w 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)
Uczenie głębokie dla tekstu z PyTorch

ROUGE (Recall-Oriented Understudy for Gisting Evaluation)

  • Porównuje wygenerowany tekst z referencyjnym na dwa sposoby
  • ROUGE-N: uwzględnia nakładające się n-gramy (N=1 dla unigramów, 2 dla bigramów itd.)
  • ROUGE-L: analizuje najdłuższy wspólny podciąg (LCS) między tekstami
  • Metryki ROUGE:
    • Miara F: średnia harmoniczna precyzji i pokrycia
    • Precyzja: dopasowania n-gramów z wygenerowanego tekstu w tekście referencyjnym
    • Pokrycie: dopasowania n-gramów z tekstu referencyjnego w wygenerowanym tekście
  • Prefiksy rouge1, rouge2 i rougeL odnoszą się odpowiednio do 1-gramu, 2-gramu lub LCS
Uczenie głębokie dla tekstu z PyTorch

Obliczanie wyniku ROUGE w 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)
Uczenie głębokie dla tekstu z PyTorch

Wynik ROUGE: wyjście

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.)}
Uczenie głębokie dla tekstu z PyTorch

Uwagi i ograniczenia

  • Oceniają obecność słów, nie rozumienie semantyczne
  • Wrażliwe na długość wygenerowanego tekstu
  • Jakość tekstu referencyjnego wpływa na wyniki
Uczenie głębokie dla tekstu z PyTorch

Czas na ćwiczenia!

Uczenie głębokie dla tekstu z PyTorch

Preparing Video For Download...