Neuraalikonekäännös (NMT) on vakiotehtävä NLP joka sisältää tekstin kääntämisen lähdekielestä kohdekielelle. BLEU (Bilingual Evaluation Understudy) on pistemäärä, jolla arvioidaan konekääntäjän tekemiä käännöksiä. Tässä artikkelissa näemme BLEU-pisteiden takana olevan matematiikan ja sen toteutuksen Pythonissa.
Sisällysluettelo
- Mikä on BLEU Score?
- BLEU-pisteiden matemaattinen lauseke
- Kuinka laskea BLEU-pisteet?
- BLEU Score -toteutus Pythonissa
Mikä on BLEU Score?
Kuten edellä mainittiin, BLEU Score on konekäännöstehtävien arviointimittari. Se lasketaan vertaamalla n-grammaa konekäännetyistä lauseista ihmisen kääntämien lauseiden n-grammiin. Yleensä on havaittu, että BLEU-pisteet pienenevät lauseen pituuden kasvaessa. Tämä saattaa kuitenkin vaihdella käännöksessä käytetyn mallin mukaan. Seuraavassa on kaavio, joka kuvaa BLEU-pistemäärän vaihtelua lauseen pituuden kanssa.
BLEU-pisteiden matemaattinen lauseke
Matemaattisesti BLEU-pisteet annetaan seuraavasti:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
sivu alas näppäimistöTässä,
- BP tarkoittaa Lyhyys rangaistus
w_i on paino n-gramman tarkkuudella luokkaa i (yleensä painot ovat samat kaikille i:lle)p_i on n-gramman muunnettu tarkkuuspistemäärä luokkaa i.- N on suurin huomioitava n-grammien järjestys (yleensä enintään 4)
Muokattu n-gramman tarkkuus (p_i )
Muokattu tarkkuus
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Tässä,
- Count Clips on toiminto, joka leikkaa yhteensopivien n-grammien määrän (
matches_i )n-grammien enimmäismäärällä kaikissa viitekäännöksissä (ext{max-ref-count}_i .matches_i on kertaluvun i vastaavien n-grammien lukumäärä tarkalleen ehdokaskäännöksen ja minkä tahansa viitekäännöksen välillä.ext{max-ref-count}_i on kustakin yksittäisestä viitekäännöksestä löytämäni kertaluvun tietyn n-grammin esiintymien enimmäismäärä.ext{candidate-n-grams}_i on ehdokaskäännöksessä i:n järjestyksessä olevien n-grammien kokonaismäärä.
Lyhyysrangaistus (BP)
Lyhyys rangaistus rankaisee käännöksiä, jotka ovat lyhyempiä kuin viitekäännökset. Matemaattinen lauseke for Lyhyys rangaistus annetaan seuraavasti:
BP = exp(1- frac{r}{c}) Tässä,
- r on ehdokaskäännöksen pituus
- c on viitekäännösten keskimääräinen pituus.
Kuinka laskea BLEU-pisteet?
Otetaan esimerkki, jotta ymmärrämme paremmin BLEU-pisteen laskennan. Seuraavassa on tapaus käännöksestä ranskasta englanniksi:
- Lähdeteksti (ranska) : olen napsauttanut tätä kuvaa
- Konekäännetty teksti : kuva minun tekemäni
- Viiteteksti-1 : olen napsauttanut tätä kuvaa
- Viiteteksti-2 : klikkasin kuvaa
Näemme selvästi, että koneen tekemä käännös ei ole tarkka. Lasketaan käännöksen BLEU-pisteet.
Unigram Modified Precision
varten n = 1, laskemme Unigram-muokattu tarkkuus:
| Unigram | Laske konekäännöksessä | Enimmäismäärä viitteessä x tai c++ | Leikattu määrä = min (laske MT, maksimimäärä viitteenä) |
|---|---|---|---|
| the | 2 | 1 | 1 |
| kuva | 2 | 1 | 1 |
| kirjoittaja | 1 | 1 | 1 |
| minä | 1 | 1 | 1 |
Tässä unigrammit (kuva, kirjoittaja, minä) on otettu konekäännetystä tekstistä. Count viittaa n-grammien tiheyteen kaikessa konekäännetyssä tekstissä, ja Clipped Count viittaa unigrammien tiheyteen viiteteksteissä kollektiivisesti.
Biggram Modified Precision
varten n = 2 , laskemme Biggram Modified Precision :
| Biggrammit | Laske MT | Enimmäismäärä viitteessä | Leikattu määrä = min (laske MT, maksimimäärä viitteenä) |
|---|---|---|---|
| kuva | 2 | 1 | 1 |
| kuva | 1 | 0 | 0 |
| kuvan tekijä | 1 | 0 | 0 |
| minulta | 1 | 1 | 1 |
konekirjoituskytkin
Trigram Modified Precision
varten n = 3 , laskemme Trigramin muokattu tarkkuus:
| Trigrammi | Laske MT | Enimmäismäärä viitteessä | Leikattu määrä = min (laske MT, maksimimäärä viitteenä) |
|---|---|---|---|
| kuva | 1 | 0 | 0 |
| kuvaa kuva | 1 | 0 | 0 |
| kuvan tekijä | 1 | 0 | 0 |
| kuva minulta | 1 | 0 | 0 |
4 gramman modifioitu tarkkuus
varten n = 4 , laskemme 4 gramman muokattu tarkkuus:
| 4 grammaa | Kreivi | Enimmäismäärä viitteessä | Leikattu määrä = min (laske MT, maksimimäärä viitteenä) |
|---|---|---|---|
| kuva kuva | 1 | 0 | 0 |
| kuva kuvan mukaan | 1 | 0 java yrittää saada kiinni | 0 |
| kuva minulta | 1 | 0 | 0 |
Lyhyyden rangaistus
Nyt olemme laskeneet kaikki tarkkuuspisteet, etsitään käännöksen lyhyysrangaistus:
- Konekäännöstulosten pituus = 6 (konekäännetty teksti: kuva minun kirjoittamani kuva)
- Suurin referenssilähdön pituus = 6 (Viiteteksti-2: klikkasin kuvaa)
BLEU-pisteiden laskeminen
Lopuksi yllä olevan käännöksen BLEU-pisteet saadaan:
Kun arvot korvataan, saamme
Lopuksi olemme laskeneet BLEU-pisteet annetulle käännökselle.
BLEU Score -toteutus Pythonissa
Laskettuaan BLEU-pisteet manuaalisesti, on jo tottunut BLEU-pisteiden matemaattiseen toimintaan. Python kuitenkin NLTK tarjoaa sisäänrakennetun moduulin BLEU-pisteiden laskemiseen. Lasketaan BLEU-pisteet samalle käännösesimerkille kuin yllä, mutta tällä kertaa käyttämällä NLTK:ta.
Koodi:
Python 3
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.>