ROUGE i tuoi risultati PNL!

La prossima metrica discussa in questa serie di post sulle metriche utilizzate nell'elaborazione del linguaggio naturale è il Recall-Oriented Understudy for Gisting Evaluation (ROUGE).
ROUGE è una metrica di valutazione utilizzata per valutare la qualità delle attività di PNL come il riepilogo del testo e la traduzione automatica. A differenza di BLEU , ROUGE utilizza sia il richiamo che la precisione per confrontare i riepiloghi generati dal modello noti come candidati con un insieme di riepiloghi generati dall'uomo noti come riferimenti. Misura quanti degli n-grammi nei riferimenti sono nel candidato previsto.
Innanzitutto, calcoliamo il richiamo = Veri positivi/(Veri positivi + Falsi negativi). Qui, i Veri Positivi sono gli n-grammi corrispondenti tra Riferimenti e Candidati. I Falsi Negativi possono essere pensati come gli n-grammi che sono nelle frasi effettive (riferimenti) ma non nel candidato. I Falsi Positivi sono quindi gli n-grammi che sono presenti nel Candidato ma non nei Riferimenti. Dai un'occhiata a questo post sul blog Recall, Precision, F1-Score se hai bisogno di un aggiornamento su concetti come True Positives, False Positives, Recall e Precision ecc.,
Quindi, il richiamo e la precisione possono essere ottenuti come mostrato di seguito:


Il richiamo e la precisione a volte possono essere complementari e quindi è necessario combinarli entrambi per raggiungere un equilibrio. Per questo motivo, il ROUGE viene calcolato come punteggio F1 in Python. Il valore va da 0 a 1 e più il valore è vicino a 1, migliore è la qualità della previsione.
ROUGE-N
Usiamo il modulo di valutazione dal pacchetto "evaluate" di Huggingface e verifichiamo i calcoli passo dopo passo. Si supponga di aver ottenuto dai risultati di un modello di riepilogo il seguente corpus con 2 referenze per ciascun candidato.
!pip install evaluate
!pip install rouge-score
import evaluate
rouge = evaluate.load('rouge')
predictions = ["Transformers Transformers are fast plus efficient",
"Good Morning", "I am waiting for new Transformers"]
references = [
["HuggingFace Transformers are fast efficient plus awesome",
"Transformers are awesome because they are fast to execute"],
["Good Morning Transformers", "Morning Transformers"],
["People are eagerly waiting for new Transformer models",
"People are very excited about new Transformers"]
]
results = rouge.compute(predictions=predictions, references=references)
print(results)
{'rouge1': 0.6659340659340659, 'rouge2': 0.45454545454545453,
'rougeL': 0.6146520146520146, 'rougeLsum': 0.6146520146520146}
Candidate 1: Transformers Transformers are fast plus efficient
Reference 1: HuggingFace Transformers are fast efficient plus awesome
Reference 2: Transformers are awesome because they are fast to execute
Recall = 5/7 = 0.7142857
Precision = 5/6 = 0.8333333
F1-Score = 2 * (0.7142857) * (0.8333333)/(0.7142857 + 0.8333333) = 0.7692307
Candidate 2 and the respective Reference 1: 0.8
Candidate 3 and the respective Reference 1: 0.4285714
Mean F1-Score = (0.7692307 + 0.8 + 0.4285714)/3 = 0.665934
ROUGE-L
Qui, L sta per Longest Common Subsequence (LCS). LCS è definita come la sottosequenza più lunga che si verifica sia nel riferimento che nel candidato. La sottosequenza qui non deve essere continua. Invece di contare il numero di n-grammi corrispondenti, qui misuriamo la lunghezza di LCS. Il vantaggio di questo approccio è che l'ordine delle parole nella frase viene considerato invece di cercare solo gli n-grammi corrispondenti che possono apparire in qualsiasi ordine. Inoltre, non è necessario fornire l'ordine (n) di n-grammi da utilizzare per il calcolo.

Nella formula precedente, X e Y sono rispettivamente il riferimento e il candidato con lunghezze m e n. La beta viene utilizzata per controllare quale sia più importante: richiamo o precisione. Quando è 1, F_lcs è solo la media armonica di Recall(R_lcs) e Precision(P_lcs). A volte, potremmo voler dare la priorità al ricordo, cioè è più importante che la maggior parte degli n-grammi nei riferimenti sia presente nei candidati. Ciò può essere ottenuto aumentando il beta a un valore > 1.
Ora, vediamo questa formula in azione. L'LCS per ciascun set di riferimento candidato è mostrato di seguito:
C1-R1: Transformers are fast plus
C1-R2: Transformers are fast
C2-R1: Good Morning
C2-R2: Morning
C3-R1: waiting for new
C3-R2: new Transformers
Esattamente come nel ROUGE-N consideriamo la referenza con la massima lunghezza tra le due referenze per ogni candidato. Pertanto, calcoliamo il punteggio F1 per la coppia C1-R1 con lunghezza LCS 4. I punteggi per i candidati 2 e 3 sono gli stessi di ROUGE-1. Questo perché la lunghezza dell'LCS tra i riferimenti è la stessa dei conteggi dell'unigramma corrispondente per 2 e 3. L'intero calcolo viene quindi riassunto come:
C1-R1:
Recall = 4/7
Precision = 4/6
ROUGE-L F1 = 2 * (4/7) * (4/6)/((4/6) + (4/7)) = 0.6153846
C2-R1 ROUGE-L F1 = 0.8
C3-R1 ROUGE-L F1 = 0.4285714
Final ROUGE-L F1 = (0.6153846 + 0.8 + 0.4285714)/3 = 0.614652
Vantaggi
- Facile da calcolare e comprendere e viene solitamente utilizzato per valutare i sistemi di riepilogo del testo.
- ROUGE e le sue varianti hanno funzionato bene per la sintesi di singoli documenti e brevi testi.
- ROUGE ha lo stesso problema di BLEU per quanto riguarda i sinonimi. Il significato degli n-grammi non è considerato e quindi “fast” e “quick” non saranno considerati simili.
- Il punteggio dipende fortemente dalla scelta delle parole e dalla struttura dei riferimenti scelti per la valutazione.
Riferimenti
Sono uno studente di Master in Data Science @ TU Dortmund. Sentiti libero di connetterti con me su LinkedIn per qualsiasi feedback sui miei post o qualsiasi comunicazione professionale.