ROUGE Twoje wyniki NLP!

Następną metryką omawianą w tej serii postów na temat metryk używanych w przetwarzaniu języka naturalnego jest Understudy zorientowany na pamięć dla Gisting Evaluation (ROUGE).
ROUGE to metryka ewaluacyjna używana do oceny jakości zadań NLP, takich jak streszczanie tekstu i tłumaczenie maszynowe. W przeciwieństwie do BLEU , ROUGE wykorzystuje zarówno pamięć, jak i precyzję, aby porównać podsumowania wygenerowane przez model, znane jako kandydaci, z zestawem podsumowań wygenerowanych przez człowieka, zwanych referencjami. Mierzy, ile n-gramów w referencjach znajduje się w przewidywanym kandydacie.
Najpierw obliczmy wycofanie = Prawdziwie pozytywne/(Prawdziwie pozytywne + Fałszywe negatywne). Tutaj Prawdziwie Pozytywne to pasujące n-gramy między Referencjami a Kandydatami. Fałszywe negatywy można traktować jako n-gramy, które znajdują się w rzeczywistych zdaniach (referencjach), ale nie w kandydacie. Wyniki fałszywie dodatnie to zatem n-gramy, które są obecne u Kandydata, ale nie w Referencjach. Sprawdź ten wpis na blogu Recall, Precision, F1-Score , jeśli potrzebujesz odświeżenia pojęć, takich jak True Positives, False Positives, Recall i Precision itp.,
W związku z tym wycofanie i precyzję można uzyskać, jak pokazano poniżej:


Przywołanie i Precyzja mogą czasami się uzupełniać, dlatego konieczne jest połączenie obu tych umiejętności, aby osiągnąć równowagę. Z tego powodu ROUGE jest obliczany jako wynik F1 w Pythonie. Wartość waha się od 0 do 1, a im wartość jest bliższa 1, tym lepsza jakość predykcji.
ROUGE-N
Skorzystajmy z modułu oceny z pakietu „ocena” Huggingface i zweryfikujmy krok po kroku obliczenia. Załóżmy, że z wyników modelu podsumowującego uzyskano następujący korpus z 2 referencjami dla każdego kandydata.
!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
Tutaj L oznacza najdłuższą wspólną sekwencję (LCS). LCS definiuje się jako najdłuższą podsekwencję występującą zarówno w referencji, jak i kandydacie. Podciąg tutaj nie musi być ciągły. Zamiast liczyć liczbę pasujących n-gramów, mierzymy tutaj długość LCS. Zaletą tego podejścia jest to, że uwzględniana jest kolejność wyrazów w zdaniu, a nie tylko szukanie pasujących n-gramów, które mogą występować w dowolnej kolejności. Ponadto nie musimy również podawać kolejności (n) n-gramów do wykorzystania w obliczeniach.

W powyższym wzorze X i Y są odpowiednio odniesieniem i kandydatem o długościach m i n. Beta służy do kontrolowania, co jest ważniejsze — przywołanie czy precyzja. Kiedy wynosi 1, F_lcs jest po prostu średnią harmoniczną Recall(R_lcs) i Precision(P_lcs). Czasami możemy chcieć nadać priorytet przypominaniu, tj. ważniejsze jest, aby większość n-gramów w referencjach była obecna u kandydatów. Można to osiągnąć poprzez zwiększenie beta do wartości > 1.
Zobaczmy teraz tę formułę w działaniu. LCS dla każdego zestawu referencyjnego kandydata pokazano poniżej:
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
Podobnie jak w przypadku ROUGE-N, dla każdego kandydata uwzględniamy referencję z maksymalną długością pomiędzy dwoma referencjami. Dlatego obliczamy Wynik F1 dla pary C1-R1 o długości LCS 4. Wyniki dla Kandydatów 2 i 3 są takie same jak dla ROUGE-1. Dzieje się tak, ponieważ długość LCS między odniesieniami jest taka sama, jak liczba pasujących unigramów dla 2 i 3. Całe obliczenie jest następnie podsumowane jako:
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
Zalety
- Łatwy do obliczenia i zrozumienia i jest zwykle używany do oceny systemów podsumowania tekstu.
- ROUGE i jego warianty sprawdziły się przy streszczaniu pojedynczych dokumentów i krótkich tekstów.
- ROUGE ma ten sam problem co BLEU, jeśli chodzi o synonimy. Znaczenie n-gramów nie jest brane pod uwagę, a zatem „szybki” i „szybki” nie będą uważane za podobne.
- Wynik jest silnie zależny od doboru słów i struktury odniesień wybranych do oceny.
Bibliografia
Jestem studentem Masters in Data Science @ TU Dortmund. Zapraszam do kontaktu ze mną na LinkedIn w celu uzyskania opinii na temat moich postów lub profesjonalnej komunikacji.