Neural Machine Translation (NMT) je standardním úkolem NLP která zahrnuje překlad textu ze zdrojového jazyka do cílového jazyka. BLEU (Bilingual Evaluation Understudy) je skóre používané k hodnocení překladů provedených strojovým překladačem. V tomto článku uvidíme matematiku za skóre BLEU a jeho implementaci v Pythonu.
Obsah
- Co je BLEU skóre?
- Matematický výraz pro skóre BLEU
- Jak vypočítat skóre BLEU?
- Implementace skóre BLEU v Pythonu
Co je BLEU skóre?
Jak je uvedeno výše, BLEU skóre je hodnotící metrikou pro úlohy strojového překladu. Vypočítá se porovnáním n-gramů strojově přeložených vět na n-gram vět přeložených člověkem. Obvykle bylo pozorováno, že skóre BLEU klesá s rostoucí délkou věty. To se však může lišit v závislosti na modelu použitém pro překlad. Následuje graf znázorňující variaci skóre BLEU s délkou věty.
Matematický výraz pro skóre BLEU
Matematicky je skóre BLEU dáno následovně:
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
pandy a numpyTady,
- BP znamená Trest za krátkost
w_i je hmotnost pro n-gramovou přesnost řádu i (obvykle jsou váhy stejné pro všechna i)p_i je n-gram modifikované skóre přesnosti řádu i.- N je maximální řád n-gramů, který je třeba vzít v úvahu (obvykle až 4)
Upravená n-gramová přesnost (p_i )
Upravená přesnost
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
Tady,
- Count Clips je funkce, která ořízne počet odpovídajících n-gramů (
matches_i )o maximální počet n-gramů ve všech referenčních překladech (ext{max-ref-count}_i .matches_i je počet n-gramů řádu i, které se shodují přesně mezi kandidátským překladem a jakýmkoli referenčním překladem.ext{max-ref-count}_i je maximální počet výskytů konkrétního n-gramu řádu, který jsem našel v každém jednotlivém referenčním překladu.ext{candidate-n-grams}_i je celkový počet n-gramů řádu i přítomných v kandidátském překladu.
Trest za krátkost (BP)
Trest za krátkost penalizuje překlady, které jsou kratší než referenční překlady. Matematický výraz pro Trest za krátkost je dáno následovně:
BP = exp(1- frac{r}{c}) Tady,
- r je délka kandidátského překladu
- c je průměrná délka referenčních překladů.
Jak vypočítat skóre BLEU?
Pro lepší pochopení výpočtu BLEU skóre si uveďme příklad. Následuje příklad překladu z francouzštiny do angličtiny:
- Zdrojový text (francouzština) : na tento obrázek jsem klikl já
- Strojově přeložený text : obrázek obrázek ode mě
- Referenční text-1 : na tento obrázek jsem kliknul já
- Referenční text-2 : na obrázek jsem kliknul já
Jasně vidíme, že překlad provedený strojem není přesný. Vypočítejme skóre BLEU pro překlad.
Unigram upravená přesnost
Pro n = 1, spočítáme si Unigram upravená přesnost:
metody v Javě
| Unigram | Počítání ve strojovém překladu | Max. počet v Ref | Oříznutý počet = min (počet v MT, maximální počet v referencích) |
|---|---|---|---|
| a | 2 | 1 | 1 |
| obrázek | 2 | 1 | 1 |
| podle | 1 | 1 | 1 |
| mě | 1 | 1 | 1 |
Zde jsou unigramy (the, picture, by, me) převzaty ze strojově přeloženého textu. Počet se týká četnosti n-gramů ve všech strojově přeložených textech a počet oříznutí se týká četnosti unigramů v referenčních textech společně.
Bigram upravená přesnost
Pro n = 2 , spočítáme Bigram upravená přesnost :
| Bigramy | Počítejte v MT | Max. počet v Ref | Oříznutý počet = min (počet v MT, maximální počet v referencích) |
|---|---|---|---|
| obrázek | 2 | 1 | 1 |
| obrázek | 1 | 0 | 0 |
| obrázek od | 1 | 0 | 0 |
| mnou | 1 | 1 python seřazená n-tice | 1 |
Trigram upravená přesnost
Pro n = 3 , spočítáme Trigram upravená přesnost:
| Trigram | Počítejte v MT | Maximální počet v Ref | Oříznutý počet = min (počet v MT, maximální počet v referencích) |
|---|---|---|---|
| obrázek | 1 | 0 | 0 |
| obrázek obrázek | 1 | 0 | 0 |
| obrázek od | 1 | 0 | 0 |
| obrázek ode mě | 1 | 0 | 0 |
4gramová modifikovaná přesnost
Pro n = 4 , spočítáme 4 gramy upravená přesnost:
| 4 gramy | Počet | Max. počet v Ref | Oříznutý počet = min (počet v MT, maximální počet v referencích) |
|---|---|---|---|
| obrázek obrázek | 1 | 0 | 0 |
| obrázek podle obrázku | 1 | 0 | 0 |
| obrázek ode mě | 1 | 0 | 0 |
Výpočetní trest za krátkost
Nyní jsme spočítali všechna skóre přesnosti, pojďme najít penalizaci za krátkost překladu:
- Délka výstupu strojového překladu = 6 (strojově přeložený text: obrázek obrázek já)
- Maximální referenční výstupní délka = 6 (Referenční text-2: na obrázek jsem klikl já)
Výpočet skóre BLEU
Nakonec skóre BLEU pro výše uvedený překlad je dáno:
vlk versus liška
Dosazením hodnot dostaneme,
Nakonec jsme spočítali BLEU skóre pro daný překlad.
Implementace skóre BLEU v Pythonu
Po ručním výpočtu skóre BLEU je nyní člověk zvyklý na matematické fungování skóre BLEU. Nicméně Python's NLTK poskytuje vestavěný modul pro výpočet skóre BLEU. Pojďme vypočítat skóre BLEU pro stejný příklad překladu jako výše, ale tentokrát s použitím NLTK.
Kód:
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.>