logo

NLP – BLEU-Score zur Bewertung der neuronalen maschinellen Übersetzung – Python

Neuronale maschinelle Übersetzung (NMT) ist eine Standardaufgabe in NLP Dabei handelt es sich um die Übersetzung eines Textes aus einer Ausgangssprache in eine Zielsprache. BLEU (Bilingual Evaluation Understudy) ist eine Bewertung, die zur Bewertung der von einem Maschinenübersetzer durchgeführten Übersetzungen verwendet wird. In diesem Artikel sehen wir uns die Mathematik hinter dem BLEU-Score und seine Implementierung in Python an.

Inhaltsverzeichnis



Was ist der BLEU-Score?

Wie oben erwähnt ist der BLEU-Score eine Bewertungsmetrik für maschinelle Übersetzungsaufgaben. Es wird durch Vergleich der berechnet n-Gramm von maschinell übersetzten Sätzen bis hin zum N-Gramm von Menschen übersetzten Sätzen. Normalerweise wurde beobachtet, dass der BLEU-Score mit zunehmender Satzlänge abnimmt. Dies kann jedoch je nach dem für die Übersetzung verwendeten Modell variieren. Das folgende Diagramm zeigt die Variation des BLEU-Scores mit der Satzlänge.

Mathematischer Ausdruck für den BLEU-Score

Mathematisch ergibt sich der BLEU-Score wie folgt:

BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))



Beispiel einer Liste in Java

Hier,

  • BP steht für Strafe wegen Kürze
  • w_i ist das Gewicht für die n-Gramm-Präzision der Ordnung i (normalerweise sind die Gewichte für alle i gleich)
  • p_iist der n-Gramm-modifizierte Präzisionswert der Ordnung i.
  • N ist die maximal zu berücksichtigende n-Gramm-Reihenfolge (normalerweise bis zu 4).

Modifizierte n-Gramm-Präzision (p_i)

Die modifizierte Präzisionp_iwird tatsächlich als das Verhältnis zwischen der Anzahl der berechnet N -Gramm in der Kandidatenübersetzung, die genau übereinstimmen N -grams in einer der Referenzübersetzungen, abgeschnitten um die Anzahl N -Gramm in der Kandidatenübersetzung.

p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}



Hier,

  • Count Clips ist eine Funktion, die die Anzahl der übereinstimmenden N-Gramm (matches_i)durch die maximale Anzahl des n-Gramms über alle Referenzübersetzungen ( ext{max-ref-count}_i.
  • matches_iist die Anzahl der n-Gramm der Ordnung i, die übereinstimmen genau zwischen der Kandidatenübersetzung und einer der Referenzübersetzungen.
  • ext{max-ref-count}_iist die maximale Häufigkeit des Vorkommens des spezifischen N-Gramms der Ordnung i, das in einer einzelnen Referenzübersetzung gefunden wurde.
  • ext{candidate-n-grams}_iist die Gesamtzahl der n-Gramm der Ordnung i, die in der Kandidatenübersetzung vorhanden sind.

Kürzestrafe (BP)

Strafe wegen Kürze bestraft Übersetzungen, die kürzer als die Referenzübersetzungen sind. Der mathematische Ausdruck für Strafe wegen Kürze ist wie folgt gegeben:

BP = exp(1- frac{r}{c})

Hier,

  • r ist die Länge der Kandidatenübersetzung
  • c ist die durchschnittliche Länge der Referenzübersetzungen.

Wie berechnet man den BLEU-Score?

Zum besseren Verständnis der Berechnung des BLEU-Scores nehmen wir ein Beispiel. Das Folgende ist ein Fall für die Übersetzung vom Französischen ins Englische:

  • Quelltext (Französisch) : Dieses Bild wurde von mir angeklickt
  • Maschinell übersetzter Text : das Bild das Bild von mir
  • Referenztext-1 : Dieses Bild wurde von mir angeklickt
  • Referenztext-2 : Das Bild wurde von mir angeklickt

Wir können deutlich erkennen, dass die von der Maschine vorgenommene Übersetzung nicht korrekt ist. Berechnen wir den BLEU-Score für die Übersetzung.

Unigramm-modifizierte Präzision

Für n = 1, Wir berechnen das Unigramm-modifizierte Präzision:

Singleton-Designmuster Java
UnigrammZählen Sie in der maschinellen Übersetzung

Maximale Anzahl in Ref

Abgeschnittene Anzahl =
min (Anzahl in MT, maximale Anzahl in Ref)
Die2

1

1
Bild2

1

1
von1

1

1
Mich1

1

1

Hier sind die Unigramme (the, picture, by, me) dem maschinell übersetzten Text entnommen. „Count“ bezieht sich auf die Häufigkeit von N-Grammen im gesamten maschinell übersetzten Text, und „Clipped Count“ bezieht sich auf die Häufigkeit von Unigrammen in den Referenztexten insgesamt.

P_1 = frac{ ext{Clipped Count}}{ ext{Count in MT}} = frac{1+1+1+1}{2+2+1+1} =frac{4}{6} = frac{2}{3}

Bigram modifizierte Präzision

Für n = 2 , wir berechnen das Bigram modifizierte Präzision :

BigrammeZählen Sie in MT

Max. Anzahl in Ref

Abgeschnittene Anzahl =
min (Anzahl in MT, maximale Anzahl in Ref)
das Bild2

1

1
Bild das1

0

0
Bild von1

0

0
von mir1

1

TCP-IP-Modell
1

P_2 = frac{ ext{Clip Count}}{ ext{Count in MT}} = frac{2}{5}

Trigrammmodifizierte Präzision

Für n = 3 , wir berechnen das Trigrammmodifizierte Präzision:

TrigrammZählen Sie in MT

Max. Anzahl in Ref

Abgeschnittene Anzahl =
min (Anzahl in MT, maximale Anzahl in Ref)
das bild die1

0

0
Stellen Sie sich das Bild vor1

0

0
das Bild von1

0

0
Bild von mir1

0

0

P_3 = frac{0+0+0+0}{1+1+1+1} =0.0

4 Gramm modifizierte Präzision

Für n =4 , wir berechnen das 4-Gramm-modifizierte Präzision:

4 GrammZählen

Max. Anzahl in Ref

Abgeschnittene Anzahl =
min (Anzahl in MT, maximale Anzahl in Ref)
das Bild das Bild1

0

0
Stellen Sie sich das Bild vor1

0

0
das Bild von mir1

0

0

P_4 = frac{0+0+0}{1+1+1} =0.0

Berechnung der Kürze-Strafe

Nachdem wir nun alle Präzisionswerte berechnet haben, ermitteln wir den Kürzelwert für die Übersetzung:

Brevity Penalty = min(1, frac{Machine,Translation,Output,Length}{Maximum,Reference,Output,Length})

  • Ausgabelänge der maschinellen Übersetzung = 6 (Maschinenübersetzter Text: das Bild das Bild von mir)
  • Max. Referenzausgangslänge = 6 (Referenztext-2: Das Bild wurde von mir angeklickt)

Brevity Penalty (BP) = min(1, frac{6}{6}) = 1

Berechnen des BLEU-Scores

Schließlich ergibt sich der BLEU-Score für die obige Übersetzung wie folgt:

np.mean

BLEU Score = BP * exp(sum_{n=1}^{4} w_i * log(p_i))

Wenn wir die Werte ersetzen, erhalten wir:

ext{BLEU Score} = 1 * exp(0.25*ln(2/3) + 0.25*ln(2/5) + 0*ln(0) + 0*ln(0))

ext{BLEU Score} = 0.718

Schließlich haben wir den BLEU-Score für die gegebene Übersetzung berechnet.

BLEU-Score-Implementierung in Python

Nachdem man den BLEU-Score manuell berechnet hat, ist man mittlerweile mit der mathematischen Funktionsweise des BLEU-Scores vertraut. Allerdings Pythons NLTK bietet ein integriertes Modul zur BLEU-Score-Berechnung. Berechnen wir den BLEU-Score für dasselbe Übersetzungsbeispiel wie oben, diesmal jedoch unter Verwendung von NLTK.

Code:

Python3

from> nltk.translate.bleu_score>import> sentence_bleu> # Define your desired weights (example: higher weight for bi-grams)> weights>=> (>0.25>,>0.25>,>0>,>0>)># Weights for uni-gram, bi-gram, tri-gram, and 4-gram> # Reference and predicted texts (same as before)> reference>=> [[>'the'>,>'picture'>,>'is'>,>'clicked'>,>'by'>,>'me'>],> >[>'this'>,>'picture'>,>'was'>,>'clicked'>,>'by'>,>'me'>]]> predictions>=> [>'the'>,>'picture'>,>'the'>,>'picture'>,>'by'>,>'me'>]> # Calculate BLEU score with weights> score>=> sentence_bleu(reference, predictions, weights>=>weights)> print>(score)>
     Output:   0.7186082239261684 We can see that the BLEU score computed using Python is the same as the one computed manually. Thus, we have successfully calculated the BLEU score and understood the mathematics behind it.>