Metriche di valutazione per la generazione di testo

Deep Learning per il testo con PyTorch

Shubham Jain

Instructor

Valutare la generazione di testo

  • I task di Text Generation creano testo simile a quello umano
  • Metriche standard come accuracy e F1 non bastano per questi task
  • Servono metriche che valutino la qualità del testo generato
  • BLEU e ROUGE

Dalle Chatbot per generazione di testo

Deep Learning per il testo con PyTorch

BLEU (Bilingual Evaluation Understudy)

  • Confronta il testo generato con quello di riferimento
  • Verifica la presenza di n-grammi
  • Nella frase "The cat is on the mat"
    • 1-gram (uni-gram): [the, cat, is, on, the, mat]
    • 2-gram (bi-gram): ["the cat", "cat is", "is on", "on the", "the mat"]
    • e così via per n-grammi
  • Corrispondenza perfetta: punteggio 1,0
    • 0 significa nessuna corrispondenza
Deep Learning per il testo con PyTorch

Calcolare il punteggio BLEU con 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)
Deep Learning per il testo con PyTorch

ROUGE (Recall-Oriented Understudy for Gisting Evaluation)

  • Confronta un testo generato con un testo di riferimento in due modi
  • ROUGE-N: considera gli n-grammi sovrapposti (N=1 per unigrammi, 2 per bigrammi, ecc.) in entrambi i testi
  • ROUGE-L: cerca la Longest Common Subsequence (LCS) tra i testi
  • Metriche ROUGE:
    • F-measure: media armonica di precision e recall
    • Precision: corrispondenze di n-grammi nel testo generato presenti nel riferimento
    • Recall: corrispondenze di n-grammi nel riferimento presenti nel testo generato
  • I prefissi 'rouge1', 'rouge2' e 'rougeL' indicano rispettivamente 1-gram, 2-gram o LCS
Deep Learning per il testo con PyTorch

Calcolare il punteggio ROUGE con 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)
Deep Learning per il testo con PyTorch

Punteggio ROUGE: output

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.)}
Deep Learning per il testo con PyTorch

Considerazioni e limiti

  • Valutano la presenza di parole, non la comprensione semantica
  • Sensibili alla lunghezza del testo generato
  • La qualità del testo di riferimento influisce sui punteggi
Deep Learning per il testo con PyTorch

Esercitiamoci!

Deep Learning per il testo con PyTorch

Preparing Video For Download...