logo

PNL – Punteggio BLEU per la valutazione della traduzione automatica neurale – Python

Traduzione automatica neurale (NMT) è un compito standard in PNL che comporta la traduzione di un testo da una lingua di partenza a una lingua di destinazione. BLEU (studente di valutazione bilingue) è un punteggio utilizzato per valutare le traduzioni eseguite da un traduttore automatico. In questo articolo vedremo la matematica dietro il punteggio BLEU e la sua implementazione in Python.

Tabella dei contenuti



Cos'è il punteggio BLEU?

Come affermato in precedenza, il punteggio BLEU è una metrica di valutazione per le attività di traduzione automatica. Si calcola confrontando il n-grammi di frasi tradotte automaticamente all’n-grammo di frasi tradotte da esseri umani. Solitamente si è osservato che il punteggio BLEU diminuisce all’aumentare della lunghezza della frase. Questo, tuttavia, potrebbe variare a seconda del modello utilizzato per la traduzione. Quello che segue è un grafico che illustra la variazione del punteggio BLEU con la lunghezza della frase.

Espressione matematica per il punteggio BLEU

Matematicamente, il punteggio BLEU è dato come segue:

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



gimp rimuove la filigrana

Qui,

  • BP sta per Penalità di brevità
  • w_i è il peso per la precisione di n grammi di ordine i (tipicamente i pesi sono uguali per tutti i)
  • p_iè il punteggio di precisione modificato in n grammi di ordine i.
  • N è l'ordine massimo di n-grammi da considerare (solitamente fino a 4)

Precisione n-grammi modificata (p_i)

La precisione modificatap_iè infatti calcolato come il rapporto tra il numero di N -grammi nella traduzione candidata che corrispondono esattamente N -grammi in una qualsiasi delle traduzioni di riferimento, ritagliati dal numero di N -grammi nella traduzione del candidato.

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



Qui,

  • Count Clips è una funzione che ritaglia il numero di n-grammi corrispondenti (matches_i)per il conteggio massimo degli n-grammi in tutte le traduzioni di riferimento ( ext{max-ref-count}_i.
  • matches_iè il numero di n-grammi di ordine i che corrispondono esattamente tra la traduzione candidata e una qualsiasi delle traduzioni di riferimento.
  • ext{max-ref-count}_iè il numero massimo di occorrenze dello specifico n-grammo dell'ordine che ho trovato in ogni singola traduzione di riferimento.
  • ext{candidate-n-grams}_iè il numero totale di n grammi dell'ordine i presenti nella traduzione candidata.

Penalità di brevità (BP)

Penalità di brevità penalizza le traduzioni più brevi delle traduzioni di riferimento. L'espressione matematica per Penalità di brevità è dato come segue:

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

Qui,

  • r è la lunghezza della traduzione candidata
  • c è la lunghezza media delle traduzioni di riferimento.

Come calcolare il punteggio BLEU?

Per meglio comprendere il calcolo del BLEU Score facciamo un esempio. Di seguito è riportato un caso di traduzione dal francese all'inglese:

  • Testo originale (francese) : questa immagine è stata cliccata da me
  • Testo tradotto automaticamente : la foto la foto fatta da me
  • Testo di riferimento-1 : questa immagine è stata scattata da me
  • Testo di riferimento-2 : la foto è stata scattata da me

Possiamo vedere chiaramente che la traduzione effettuata dalla macchina non è accurata. Calcoliamo il punteggio BLEU per la traduzione.

primavera mvc

Precisione modificata unigrammo

Per n = 1, calcoleremo il Precisione modificata unigrammo:

UnigrammaContare nella traduzione automatica

Conteggio massimo nel rif

Conteggio troncato =
min (Conteggio in MT, Conteggio massimo in Rif)
IL2

1

1
immagine2

1

1
di1

1

1
Me1

1

1

Qui gli unigrammi (la, foto, di, me) sono presi dal testo tradotto automaticamente. Il conteggio si riferisce alla frequenza di n grammi in tutto il testo tradotto automaticamente, mentre il conteggio ritagliato si riferisce alla frequenza degli unigrammi nei testi di riferimento collettivamente.

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}

Precisione modificata da Bigram

Per n = 2 , calcoleremo il Precisione modificata da Bigram :

BigramContare in MT

Conteggio massimo nel rif

Conteggio troncato =
min (Conteggio in MT, Conteggio massimo in Rif)
la foto2

1

1
immagina il1

0

0
foto di1

0

come ottenere una data corrente in Java
0
da me1

1

1

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

Precisione modificata del trigramma

Per n = 3 , calcoleremo il Precisione modificata del trigramma:

TrigrammaContare in MT

Conteggio massimo nel rif

Conteggio troncato =
min (Conteggio in MT, Conteggio massimo in Rif)
l'immagine il1

0

0
immagina l'immagine1

0

0
la foto di1

0

0
foto da parte mia1

0

0

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

Precisione modificata di 4 grammi

Per n = 4 , calcoleremo il Precisione modificata di 4 grammi:

4 grammiContare

Conteggio massimo nel rif

Conteggio troncato =
min (Conteggio in MT, Conteggio massimo in Rif)
l'immagine l'immagine1

0

0
immagina l'immagine di1

0

0
la foto da parte mia1

0

0

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

Penalità di brevità informatica

Ora che abbiamo calcolato tutti i punteggi di precisione, troviamo la penalità di brevità per la traduzione:

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

  • Lunghezza dell'output della traduzione automatica = 6 (Testo tradotto automaticamente: l'immagine l'immagine fatta da me)
  • Lunghezza massima dell'uscita di riferimento = 6 (Testo di riferimento-2: l'immagine è stata cliccata da me)

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

Calcolo del punteggio BLEU

Infine, il punteggio BLEU per la traduzione di cui sopra è dato da:

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

Sostituendo i valori, otteniamo,

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

Infine, abbiamo calcolato il punteggio BLEU per la traduzione data.

Implementazione del punteggio BLEU in Python

Avendo calcolato manualmente il punteggio BLEU, si è ormai abituati al funzionamento matematico del punteggio BLEU. Tuttavia, Python NLTK fornisce un modulo integrato per il calcolo del punteggio BLEU. Calcoliamo il punteggio BLEU per lo stesso esempio di traduzione di cui sopra ma questa volta utilizzando NLTK.

sostituisci tutto nella stringa java

Codice:

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