= Machine translation = [[https://is.muni.cz/auth/predmet/fi/ia161|IA161 Advanced NLP Course]], Course Guarantee: Aleš Horák Prepared by: Vít Baisa == State of the Art == The Statistical Machine Translation consists of two main parts: a language model for a target language which is responsible for fluency and good-looking output sentences and a translation model which translates source words and phrases into target language. Both models are probability distributions and can be built using a monolingual corpus for language model and a parallel corpus for translation model. === References === Approx 3 current papers (preferably from best NLP conferences/journals, eg. [[https://www.aclweb.org/anthology/|ACL Anthology]]) that will be used as a source for the one-hour lecture: 1. Koehn, Philipp, et al. "Moses: Open source toolkit for statistical machine translation." Proceedings of the 45th annual meeting of the ACL on interactive poster and demonstration sessions. Association for Computational Linguistics, 2007. 1. Koehn, Philipp, Franz Josef Och, and Daniel Marcu. "Statistical phrase-based translation." Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics on Human Language Technology-Volume 1. Association for Computational Linguistics, 2003. 1. Denkowski, Michael, and Alon Lavie. "Meteor 1.3: Automatic metric for reliable optimization and evaluation of machine translation systems." Proceedings of the Sixth Workshop on Statistical Machine Translation. Association for Computational Linguistics, 2011. == Praktická část: generování překladového slovníku z paralelních dat == === Základní instrukce === * stáhněte si archív se skripty a trénovacími daty (příloha) * rozbalte ho do domovského adresáře příkazem {{{tar xzf ia161_mt.tar.gz}}} * vytvoří se podadresář it161_mt === Soubory v archívu === ||czech.words||100 tisíc vět z české části DGT korpusu|| ||czech.lemmas||100 tisíc vět (lemmat) z české části DGT korpusu|| ||english.words||100 tisic vet z anglickeho DGT korpusu|| ||english.lemmas||100 tisic vet (lemmat) z anglickeho DGT korpusu|| ||eval.py||skript na vyhodnoceni pokryti a presnosti vygenerovaneho slovniku vuci malemu anglicko-ceskemu slovniku|| ||gnudfl.txt||maly anglicko-cesky slovnik, filtrovany na jednoslovne vyrazy a na slova obsazena v trenovacich datech|| ||make_dict.py||skript pro vygenerovani slovniku na zaklade kookurenci a frenvencnich seznamu|| ||Makefile||soubor s pravidly pro sestaveni slovniku na zaklade trenovacich dat|| ||par2items.py||soubor pro vygenerovani paru slov (lemmat) z paralelnich dat|| === Popis make === {{{make dict}}} * samotný příkaz použije 1000 řádků trénovacích dat a vygeneruje slovnik na zakladne slovnich tvaru (soubory czech.words a english.words) * je možné zadat alternativní soubory s lemmaty pomocí parametru L1DATA a L2DATA * je také možné změnit počet řádků, které se použijí pro vygenerovaní slovníku * obecně: {{{make dict [L1DATA=] [L2DATA=] [LIMIT=]}}} * konkrétně: {{{make dict L1DATA=english.lemmas L2DATA=czech.lemmas LIMIT=10000}}} {{{make eval}}} Po vygenerování slovníku můžete změřit jeho přesnost a pokrytí pomocí skriptu eval.py. Stačí zavolat {{{make eval}}}. Pokud jste pro vytvoření slovníku používali parametry {{{L1DATA}}} a {{{L2DATA}}}, musíte je pro správné vyhodnocení zadat i při příkazu {{{make eval}}} Například: {{{make dict L1DATA=english.lemmas L2DATA=czech.lemmas}}} {{{make clean}}} Po každé změně vstupních souborů a parametrů, při změně skriptů, vyčistěte dočasné soubory a starý slovník příkazem {{{make clean}}}. == Detailní pohled na skripty a generovaná data == * Cvičně si spusťte implicitní {{{make dict}}} a podívejte se na vytvořené soubory: * czech.words.freq * english.words.freq * english.words-czech.words.cofreq * english.words-czech.words.dict (výsledný slovník) * Podívejte se, jak jsou výsledné soubory veliké (kolik obsahují řádků) a jaké data obsahují. * Podívejte se na skript make_dict.py, který generuje slovník, na klíčových místech obsahuje řetězec TODO, v těchto místech můžete skript upravovat a měnit podmínky tak, aby se výsledné f-score vygenerovaného slovníku co nejíce zvýšilo. == Zadání == Změňte klíčová místa ve skriptech par2items.py, make_dict.py tak, abyste dosáhli co nejvyššího f-score (viz {{{make eval}}}). Do odevzdávárny nahrajte všechny skripty, které změníte (Makefile, *.py) v jednom archívu. Ten vytvoříte příkazem {{{tar czf ia161_mt_.tar.gz Makefile *.py}}}