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?
- Espressione matematica per il punteggio BLEU
- Come calcolare il punteggio BLEU?
- Implementazione del punteggio BLEU in Python
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 filigranaQui,
- 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 modificata
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:
| Unigramma | Contare nella traduzione automatica | Conteggio massimo nel rif | Conteggio troncato = min (Conteggio in MT, Conteggio massimo in Rif) |
|---|---|---|---|
| IL | 2 | 1 | 1 |
| immagine | 2 | 1 | 1 |
| di | 1 | 1 | 1 |
| Me | 1 | 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.
Precisione modificata da Bigram
Per n = 2 , calcoleremo il Precisione modificata da Bigram :
| Bigram | Contare in MT | Conteggio massimo nel rif | Conteggio troncato = min (Conteggio in MT, Conteggio massimo in Rif) |
|---|---|---|---|
| la foto | 2 | 1 | 1 |
| immagina il | 1 | 0 | 0 |
| foto di | 1 | 0 come ottenere una data corrente in Java | 0 |
| da me | 1 | 1 | 1 |
Precisione modificata del trigramma
Per n = 3 , calcoleremo il Precisione modificata del trigramma:
| Trigramma | Contare in MT | Conteggio massimo nel rif | Conteggio troncato = min (Conteggio in MT, Conteggio massimo in Rif) |
|---|---|---|---|
| l'immagine il | 1 | 0 | 0 |
| immagina l'immagine | 1 | 0 | 0 |
| la foto di | 1 | 0 | 0 |
| foto da parte mia | 1 | 0 | 0 |
Precisione modificata di 4 grammi
Per n = 4 , calcoleremo il Precisione modificata di 4 grammi:
| 4 grammi | Contare | Conteggio massimo nel rif | Conteggio troncato = min (Conteggio in MT, Conteggio massimo in Rif) |
|---|---|---|---|
| l'immagine l'immagine | 1 | 0 | 0 |
| immagina l'immagine di | 1 | 0 | 0 |
| la foto da parte mia | 1 | 0 | 0 |
Penalità di brevità informatica
Ora che abbiamo calcolato tutti i punteggi di precisione, troviamo la penalità di brevità per la traduzione:
- 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)
Calcolo del punteggio BLEU
Infine, il punteggio BLEU per la traduzione di cui sopra è dato da:
Sostituendo i valori, otteniamo,
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.>