logo

NLP – BLEU Score for Evaluating Neural Machine Translation – Python

Neironu mašīntulkošana (NMT) ir standarta uzdevums NLP kas ietver teksta tulkošanu no avota valodas uz mērķa valodu. BLEU (Bilingual Evaluation Understudy) ir punktu skaits, ko izmanto, lai novērtētu mašīntulkotāja veiktos tulkojumus. Šajā rakstā mēs redzēsim matemātiku aiz BLEU rezultāta un tā ieviešanu Python.

Satura rādītājs



Kas ir BLEU Score?

Kā minēts iepriekš, BLEU Score ir mašīntulkošanas uzdevumu novērtēšanas metrika. To aprēķina, salīdzinot n-grami mašīntulkotu teikumu n-grammā cilvēka tulkoto teikumu. Parasti ir novērots, ka BLEU rādītājs samazinās, palielinoties teikuma garumam. Tomēr tas var atšķirties atkarībā no tulkošanai izmantotā modeļa. Tālāk ir parādīts grafiks, kurā attēlotas BLEU rezultāta variācijas ar teikuma garumu.

Matemātiskā izteiksme BLEU rezultātam

Matemātiski BLEU rezultāts tiek dots šādi:

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



gimp dzēšanas fons

Šeit,

  • BP apzīmē Īsuma sods
  • w_i ir svars n-gramu precizitātei i secībā (parasti svari ir vienādi visiem i)
  • p_iir n-gramu modificēts precizitātes rādītājs i secībā.
  • N ir maksimālā n-gramu secība, kas jāņem vērā (parasti līdz 4)

Modificēta n-gramu precizitāte (p_i)

Modificēta precizitātep_ipatiešām tiek aprēķināta kā attiecība starp skaitu n -grami kandidāta tulkojumā, kas precīzi atbilst n -grami jebkurā atsauces tulkojumā, apgriezti pēc skaita n -grami kandidāta tulkojumā.

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



Šeit,

  • Skaitīt klipus ir funkcija, kas izgriež atbilstošo n-gramu skaitu (matches_i) pēc maksimālā n-gramu skaita visos atsauces tulkojumos ( ext{max-ref-count}_i.
  • matches_iir atbilstošo n-gramu kārtas i skaits tieši tā starp kandidāta tulkojumu un jebkuru no atsauces tulkojumiem.
  • ext{max-ref-count}_iir maksimālais konkrētās kārtas n-gramu gadījumu skaits, ko es atradu jebkurā atsevišķā atsauces tulkojumā.
  • ext{candidate-n-grams}_iir kopējais n-gramu secības i skaits kandidāta tulkojumā.

Īsuma sods (BP)

Īsuma sods uzliek sodu par tulkojumiem, kas ir īsāki par atsauces tulkojumiem. Matemātiskā izteiksme priekš Īsuma sods tiek sniegts šādi:

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

Šeit,

  • r ir kandidāta tulkojuma garums
  • c ir atsauces tulkojumu vidējais garums.

Kā aprēķināt BLEU rezultātu?

Lai labāk izprastu BLEU Score aprēķināšanu, ņemsim piemēru. Tālāk ir sniegts tulkojums franču–angļu valodā:

  • Avotteksts (franču valodā) : uz šī attēla esmu noklikšķinājis es
  • Mašīntulkotais teksts : bilde bilde manis
  • Atsauces teksts-1 : šo attēlu esmu noklikšķinājis es
  • Atsauces teksts-2 : uz bildes noklikšķināju es

Mēs skaidri redzam, ka mašīnas veiktais tulkojums nav precīzs. Aprēķināsim tulkojuma BLEU punktu skaitu.

Unigram modificēta precizitāte

Priekš n = 1, mēs aprēķināsim Unigram modificētā precizitāte:

UnigramSkaitīšana mašīntulkošanā

Maksimālais skaits atsaucē

Apgrieztais skaits =
min (skaits MT, maksimālais skaits atsaucē)
uz2

1

1
bilde2

1

1
autors1

1

1
es1

1

1

Šeit unigrammas (the, picture, by, me) ir ņemtas no mašīntulkotā teksta. Skaits attiecas uz n-gramu biežumu visā mašīntulkotā tekstā, un apgrieztais skaits attiecas uz unigrammu biežumu atsauces tekstos kopumā.

1 līdz 100 romiešu Nr

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}

Biggram modificēta precizitāte

Priekš n = 2 , mēs aprēķināsim Biggram modificēta precizitāte :

BigramsSkaitīt MT

Maksimālais skaits atsaucē

Apgrieztais skaits =
min (skaits MT, maksimālais skaits atsaucē)
bilde2

1

1
attēlu1

0

0
attēlu autors1

0

0
no manis1

1

1

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

Trigram modificēta precizitāte

Priekš n = 3 , mēs aprēķināsim Trigram modificēta precizitāte:

TrigrammaSkaitīt MT

Maksimālais skaits atsaucē

Apgriezto skaits =
min (skaits MT, maksimālais skaits atsaucē)
bilde1

0

0
attēlo attēlu1

0

0
attēlu autors1

0

cast virkni int java
0
manis bilde1

0

0

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

4 gramu modificēta precizitāte

Priekš n = 4 , mēs aprēķināsim 4 gramu modificēta precizitāte:

4 gramiSkaitīt

Maksimālais skaits atsaucē

Apgriezto skaits =
min (skaits MT, maksimālais skaits atsaucē)
bilde bilde1

0

0
attēlo attēlu ar1

0

0
bilde manis1

0

0

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

Īsuma soda aprēķināšana

Tagad mēs esam aprēķinājuši visus precizitātes rādītājus, atradīsim tulkojuma īsuma sodu:

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

  • Mašīntulkojuma izvades garums = 6 (mašīntulkots teksts: attēls ir manis veidots)
  • Maksimālais atsauces izvades garums = 6 (atsauces teksts-2: es noklikšķināju uz attēla)

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

BLEU rezultātu aprēķināšana

Visbeidzot, BLEU punktu iepriekšminētajam tulkojumam nosaka:

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

Aizstājot vērtības, mēs iegūstam,

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

nejauši nav ģeneratora java

ext{BLEU Score} = 0.718

Visbeidzot, mēs esam aprēķinājuši BLEU punktu skaitu dotajam tulkojumam.

BLEU Score ieviešana Python

Manuāli aprēķinot BLEU punktu, tagad cilvēks ir pieradis pie BLEU rezultāta matemātiskās darbības. Tomēr Python NLTK nodrošina iebūvētu moduli BLEU punktu skaita aprēķināšanai. Aprēķināsim BLEU rezultātu tam pašam tulkošanas piemēram, kā minēts iepriekš, bet šoreiz izmantojot NLTK.

Kods:

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.>