Neurale machinevertaling (NMT) is een standaardtaak bij NLP waarbij een tekst van een brontaal naar een doeltaal wordt vertaald. BLEU (Tweetalige Evaluatie Understudy) is een score die wordt gebruikt om de vertalingen van een machinevertaler te evalueren. In dit artikel zullen we de wiskunde achter de BLEU-score en de implementatie ervan in Python zien.
Inhoudsopgave
- Wat is BLEU-score?
- Wiskundige uitdrukking voor BLEU-score
- Hoe de BLEU-score berekenen?
- BLEU-score-implementatie in Python
Wat is BLEU-score?
Zoals hierboven vermeld is BLEU Score een evaluatiestatistiek voor machinevertalingstaken. Het wordt berekend door het vergelijken van de n-gram van machinaal vertaalde zinnen tot n-gram door mensen vertaalde zinnen. Meestal wordt waargenomen dat de BLEU-score afneemt naarmate de zinsduur toeneemt. Dit kan echter variëren, afhankelijk van het model dat voor de vertaling wordt gebruikt. Het volgende is een grafiek die de variatie van de BLEU-score weergeeft met de zinlengte.
Wiskundige uitdrukking voor BLEU-score
Wiskundig gezien wordt de BLEU-score als volgt gegeven:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
Java-structuurHier,
- BP betekent Kortheidsstraf
w_i is het gewicht voor n-gram precisie van orde i (doorgaans zijn de gewichten gelijk voor alle i)p_i is de n-gram gemodificeerde precisiescore van orde i.- N is de maximale n-gramvolgorde die in aanmerking moet worden genomen (meestal maximaal 4)
Gewijzigde n-gramprecisie (p_i )
De gewijzigde precisie
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Hier,
- Count Clips is een functie die het aantal overeenkomende n-grammen clipt (
matches_i )door het maximale aantal n-grammen voor alle referentievertalingen (ext{max-ref-count}_i .matches_i is het aantal n-grammen van orde i dat overeenkomt precies tussen de kandidaatvertaling en een van de referentievertalingen.ext{max-ref-count}_i is het maximale aantal keren dat de specifieke n-gram van de orde voorkomt die ik heb gevonden in een enkele referentievertaling.ext{candidate-n-grams}_i is het totale aantal n-grammen van bestelling i aanwezig in de kandidaatvertaling.
Kortheidsstraf (BP)
Kortheidsstraf bestraft vertalingen die korter zijn dan de referentievertalingen. De wiskundige uitdrukking voor Kortheidsstraf wordt als volgt gegeven:
BP = exp(1- frac{r}{c}) Hier,
- r is de lengte van de kandidaatvertaling
- c is de gemiddelde lengte van de referentievertalingen.
Hoe de BLEU-score berekenen?
Laten we een voorbeeld nemen voor een beter begrip van de berekening van de BLEU-score. Hieronder volgt een voorbeeld van een vertaling van het Frans naar het Engels:
- Brontekst (Frans) : deze afbeelding is door mij aangeklikt
- Machine vertaalde tekst : de foto de foto van mij
- Referentietekst-1 : deze foto is door mij aangeklikt
- Referentietekst-2 : de foto is door mij aangeklikt
We kunnen duidelijk zien dat de door de machine gemaakte vertaling niet nauwkeurig is. Laten we de BLEU-score voor de vertaling berekenen.
Unigram-gemodificeerde precisie
Voor n = 1, wij berekenen de Unigram-gemodificeerde precisie:
Java-datum naar tekenreeks
| Unigram | Tel in machinevertaling | Max. aantal in ref | Geknipt aantal = min (aantal in MT, maximum aantal in ref) |
|---|---|---|---|
| de | 2 | 1 | 1 |
| afbeelding | 2 | 1 | 1 |
| door | 1 | 1 | 1 |
| mij | 1 | 1 | 1 |
Hier zijn de unigrammen (de foto, door mij) overgenomen uit de machinaal vertaalde tekst. Count verwijst naar de frequentie van n-grammen in alle machinaal vertaalde tekst, en Clipped Count verwijst naar de frequentie van unigrammen in de referentieteksten gezamenlijk.
Bigram-gemodificeerde precisie
Voor n = 2 , berekenen we de Bigram-gemodificeerde precisie :
| Bigramen | Tel in MT | Max. aantal in ref | Geknipt aantal = min (aantal in MT, maximum aantal in ref) |
|---|---|---|---|
| De foto | 2 | 1 | 1 |
| beeld de | 1 | 0 | 0 |
| foto door | 1 | 0 | 0 |
| door mij | 1 | 1 100 km/u naar mph | 1 |
Trigram-gemodificeerde precisie
Voor n = 3 , berekenen we de Trigram-gemodificeerde precisie:
| Trigram | Tel in MT | Max. aantal in ref | Geknipt aantal = min (aantal in MT, maximum aantal in ref) |
|---|---|---|---|
| de foto de | 1 | 0 | 0 |
| stel je de foto voor | 1 | 0 | 0 |
| de foto door | 1 | 0 | 0 |
| foto van mij | 1 | 0 | 0 |
Gemodificeerde precisie van 4 gram
Voor n=4 , berekenen we de Gemodificeerde precisie van 4 gram:
| 4 gram | Graaf | Max. aantal in ref | Geknipt aantal = min (aantal in MT, maximum aantal in ref) |
|---|---|---|---|
| de foto de foto | 1 | 0 | 0 |
| Stel je de foto voor | 1 | 0 | 0 |
| de foto van mij | 1 | 0 | 0 |
Kortheidsstraf voor computergebruik
Nu we alle precisiescores hebben berekend, gaan we de Brevity Penalty voor de vertaling vinden:
- Uitvoerlengte van machinevertaling = 6 (Machine vertaalde tekst: de foto, de foto van mij)
- Maximale referentie-uitvoerlengte = 6 (Referentietekst-2: ik heb op de foto geklikt)
BLEU-score berekenen
Ten slotte wordt de BLEU-score voor de bovenstaande vertaling gegeven door:
Java-interviewvragen
Als we de waarden vervangen, krijgen we:
Ten slotte hebben we de BLEU-score voor de gegeven vertaling berekend.
BLEU-score-implementatie in Python
Door de BLEU-score handmatig te berekenen, bent u inmiddels gewend aan de wiskundige werking van de BLEU-score. Echter, Python's NLTK biedt een ingebouwde module voor BLEU-scoreberekening. Laten we de BLEU-score berekenen voor hetzelfde vertaalvoorbeeld als hierboven, maar deze keer met behulp van 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.>