====== Moses ====== Moses (Mojžíš) je open-source systém frázového strojového překladu. Přísně vzato, Moses je pouze jedna část překladového systému, i když velmi podstatná: tzv. dekodér. Abyste mohli natrénovat překladový systém a otestovat ho na konkrétních datech, musíte mít k dispozici následující data a nástroje a projít následujícími kroky (zjednodušeno): * Potřebujete trénovací data — paralelní korpus. Data je potřeba tokenizovat, normalizovat a zarovnat po větách, resp. segmentech zhruba o velikosti vět, které si navzájem odpovídají. Běžný formát: co řádek, to segment (věta). Trénovací data mají dva soubory, jeden pro zdrojový jazyk a jeden pro cílový. Oba soubory mají stejný počet řádků a předpokládá se, že i-tý řádek (segment, věta) cílového souboru je překladem i-tého řádku (segmentu, věty) zdrojového souboru. Pokud vaše data nejsou zarovnaná ("alignovaná") po větách, ale třeba jen po dokumentech, zarovnání po větách lze odhadnout pomocí volně dostupného nástroje ''hunalign''. * Dále potřebujete tzv. vývojová data (budou potřeba v určité části trénování) a testovací data, řádově několik set, max 1000 vět každá část, předzpracovaná a zarovnaná stejným způsobem jako trénovací data. * Aby se systém mohl naučit překladový slovník, potřebuje nyní zdrojový a cílový jazyk (trénovací data) zarovnat ještě po slovech. K tomu slouží zejména nástroj ''Giza++''. Umí odhadnout i případy, kdy jedno zdrojové slovo je přeloženo několika cílovými slovy. Neumí však takové větvení provést obousměrně (umí vztahy 1:N, ale neumí M:N). Proto se Giza++ pouští postupně na dvojice zdroj-cíl i cíl-zdroj a výsledné dva soubory s párováním slov se pak spojí do jednoho pomocí tzv. symetrizačních heuristik (potkáte-li např. klíčové slovo "grow-diag-final-and", vězte, že jde o označení symetrizační heuristiky). * Trénovací procedura dále musí ze symetrického párování slov odvodit tzv. //frázovou tabulku.// Jde vlastně o překladový slovník, ale nepřekládáme nutně jen slovo na slovo, na jedné nebo obou stranách mohou být i větší skupiny po sobě jdoucích slov, kterým se říká //fráze.// (Ne vždy tyto fráze odpovídají lingvistickým představám o tom, co je to fráze.) Skript pro extrakci frázové tabulky se dodává přímo s Mosesem. * Frázová tabulka reprezentuje //překladový model.// Jeho úkolem je zajistit, že význam přeložené věty odpovídá významu překládané věty. Strojový překlad ale téměř vždy ještě obsahuje nejméně jednu další složku, a to //jazykový model.// Jeho úkolem je zajistit, že přeložená věta bude pokud možno gramatická, tj. že jednotlivé fráze vytažené z překladového modelu budou jakž takž pasovat dohromady. Jazykový model tedy budujeme pouze pro cílový jazyk. Můžeme ho natrénovat na cílové části trénovacích dat, ale můžeme k němu použít i další texty v cílovém jazyku, pokud je máme k dispozici. K trénování jazykového modelu (a případně i k jeho použití během vlastního překladu) je potřeba nástroj ''SRILM'', který lze získat pro výzkumné účely zadarmo, ale je třeba nejdříve vyjádřit souhlas s licenčními podmínkami. * //Dekodér// je jádro Mosese. Pracuje s natrénovaným překladovým modelem (frázovou tabulkou) a jazykovým modelem. Čte testovací text ve zdrojovém jazyku, pro každou větu zkouší z dostupných frází budovat její překlad, přitom jednotlivé možnosti hodnotí vahami, které jim přisuzuje překladový a jazykový model. Oba modely samy o sobě mají přiřazené váhy, které říkají, jak moc se máme názorem kterého modelu na zkoumanou frázi řídit. * Úspěšnost strojového překladu je obtížné vyhodnotit automaticky, protože jedna věta může mít několik odlišných, ale stejně kvalitních překladů. Přijatelně fungující automatická metrika je nicméně potřeba kvůli objektivnímu hodnocení, bez něhož není možné systém vyladit. Nejrozšířenější metrika používaná pro tento účel se jmenuje //BLEU-score// (navzdory tomu, že vypadá francouzsky, byla vynalezena v USA, kde ji vyslovují stejně jako //blue//, tedy [blu:]). Pro tuto metriku je ideální, když máte k dispozici několik (typicky 4) nezávislých referenčních překladů testovacího textu. Umí nicméně porovnat váš překlad i s jediným referenčním překladem, čísla jsou pak ale z definice nižší. Výstupem srovnání textu a jeho překladu je číslo mezi 0 a 1 (případně vynásobeno 100, jako by šlo o procenta). Čím vyšší číslo, tím lepší překlad; porovnatelná jsou ale pouze čísla získaná na stejných testovacích datech. * Je těžké stanovit poměr vah mezi jazykovým a překladovým modelem, a případných dalších parametrů systému. Pro trochu odlišná data (např. z jiné domény) navíc optimální váhy mohou být úplně jiné. Proto se obvykle tyto váhy vylaďují automaticky na vývojových (development) datech. Tento krok se nazývá //MERT// (minimum error rate training) a logicky se provádí ještě před tím, než pustíte dekodér na testovací data. V kostce obnáší následující: Začnete s vahami, které odhadnete ručně. Pustíte dekodér na vývojová data, přičemž ho necháte vypsat ne jeden překlad, ale N (třeba 300) nejlepších překladů každé věty. Ke každému překladu dekodér vypíše známky, které tomuto překladu dávají jednotlivé složky (překladový a jazykový model). MERT zkouší náhodně hýbat jednotlivými vahami, tím se mu mění hodnocení jednotlivých překladů a na vrchol seznamu se jako nejlepší dostávají různé překladové hypotézy. Potom MERT pro každou změnu vah spočítá BLEU skóre (případně jinou automatickou metriku) celých vývojových dat. Tak zjistí váhy, které dávají nejlepší výsledek pro celý soubor, a s nimi opět pustí dekodér. Celý proces se iterativně opakuje, až nakonec zkonverguje u vah, které už není možné dále vylepšit. Tyto váhy se potom předají dekodéru jako optimální a s nimi dekodér zpracuje testovací data. Poznámka 1: MERT hledá v mnohorozměrném prostoru vah lokální maximum, ale není žádná jistota, že globální maximum neleží úplně jinde. Poznámka 2: vzhledem k náhodnému prvku v MERTU není zaručeno, že dva běhy MERTu na stejných datech dají stejný výsledek. Projděte si tutoriál pro práci s Mosesem na [[user:zeman:tutorial-pro-moses-na-mt-marathon-v-praze-v-lednu-2009-vedeny-joshem-schroederem|této adrese]]. Tutoriál obsahuje i návod, kde získat jednotlivé související nástroje a jak je nainstalovat. Rozchoďte Mosese pro pokusná data uvedená v tutoriálu. Poté dostanete k dispozici paralelní korpus pro jiný jazykový pár. Vaším úkolem bude aplikovat Mosese na tato data, vyhodnotit úspěšnost (BLEU skóre) a analyzovat chyby překladače. Výsledky své práce budete prezentovat ostatním na některé prosincové přednášce. Níže najdete otázky, na které byste při experimentech měli hledat odpověď; do prezentace však zahrňte i další zajímavosti, na které při pokusech narazíte, ať už se týkají technických aspektů práce s překladačem, zajímavostí v datech, se kterými jste pracovali, nebo námětů, jak zlepšit úspěšnost překladače. Odevzdávat budete kromě prezentace také podpůrné skripty, které při experimentech potřebujete. Měly by být spíše v Perlu než v shellu a spíše platformově nezávislé - přestože o samotném Mosesovi tohle říct nelze. V případě potřeby ale můžete využít externí programy běžně dostupné v Linuxu, které nelze snadno nahradit příkazy Perlu (např. gzip). Dokumentace ke skriptům stačí uživatelská, tj. seznam skriptů, ke každému způsob volání a jednou dvěma větami popsáno, k čemu slouží. Odevzdávat budete také Mosesem přeložená testovací data a natrénovanou frázovou tabulku. ===== Poznámky k architektuře ===== Moses a ostatní zmíněné nástroje je směs skriptů v shellu, Perlu a programů v céčku. Lze ho rozchodit pod unixovými systémy, zejména pod Linuxem, ale i na MacIntoshích. Naopak ve Windows to velmi pravděpodobně nejde. ===== Otázky ===== - Jaké je BLEU skóre na vašich testovacích datech? - Jaká je tzv. OOV (out-of-vocabulary rate), tj.: - procento slov (slovních typů a slovních výskytů) cílového jazyka, která se vyskytla v testovacích datech, ale nevyskytla se v trénovacích datech (tj. slova, která Moses neměl šanci vygenerovat, ale požadovalo se to po něm) - procento slov (slovních typů a slovních výskytů) zdrojového jazyka, která se vyskytla v testovacích datech, ale nevyskytla se v trénovacích datech (tj. slova, která Moses nemohl umět přeložit, i když je malá teoretická šance, že se to na kvalitě překladu nepodepíše: např. pokud neumí přeložit "Titanic" a prostě ho jen opíše na správné místo cílové věty, může být výsledek za určitých podmínek v pořádku) - Prohlédněte si frázovou tabulku. Jsou tam nějaké zajímavosti, které stojí za to ukázat ostatním? Jsou tam systémové problémy, z nichž by bylo možné odvodit vylepšení celého překladového systému? - Jaké jsou nejčastější druhy chyb při překladu testovacích dat? Jsou to především neznámá slova (OOV)? Nebo třeba špatně stanovené mluvnické číslo? Vyberte pár příkladů (trojice zdrojová věta - referenční překlad - překlad vygenerovaný systémem), které ukážete ostatním. ===== Data ===== Máte k dispozici paralelní korpus rozdělený na trénovací, vývojovou a testovací část. Každá část obsahuje dva zagzipované soubory označené ISO kódem jazyka (např. en.gz obsahuje angličtinu). Sobě odpovídající soubory jsou už zarovnané po větách, mají stejný počet řádků, co řádek, to segment. Texty jsou tokenizované a kódované v UTF-8. Pozor, s jedním paralelním korpusem lze trénovat dva směry překladu, podle toho, který jazyk použijete jako zdrojový a který jako cílový. Věnujte proto pozornost vašemu osobnímu zadání (i když samozřejmě můžete vyzkoušet oba směry, máte-li na to čas a chuť). Paralelní data si stáhněte zde: * [[http://ufal.mff.cuni.cz/~zeman/vyuka/ukoly/data/moses/en-hi.zip|Angličtina – hindština]] ===== Další informace ===== Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://quest.ms.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán). Termín odevzdání e-mailem je konec listopadu, prezentace programu proběhne v prosinci.