====== Giza++ ======
Giza++ je nástroj pro slovní párování (alignment) paralelních textů. Autorem je Franz Och a další. Tahle stránka uchovává poznámky o instalaci a pouštění Gizy na ÚFALu. Je primárně založena na tutoriálu pro Moses z MT Marathonu 2009. Spolu s Gizou potřebujeme ještě program ''mkcls''.
Zdroje:
* http://www.fjoch.com/GIZA++.html
* http://www.fjoch.com/mkcls.html
* http://giza-pp.googlecode.com/ - projekt v rámci Google Code, kde se udržuje kód Gizy
wget http://giza-pp.googlecode.com/files/giza-pp-v1.0.2.tar.gz
tar -xzvf giza-pp-v1.0.2.tar.gz
cd giza-pp
make
Po přeložení pravděpodobně nepotřebujeme nic víc než tři spustitelné binární soubory, které si můžeme zkopírovat na nějaké místo v cestě, kde máme nástroje.
setenv NASTROJE /home/zeman/nastroje/preklad
cp GIZA++-v2/GIZA++ $NASTROJE
cp GIZA++-v2/snt2cooc.out $NASTROJE
cp mkcls-v2/mkcls $NASTROJE
Zdá se, že nástroje přeložené na 32bitové pracovní stanici s Ubuntu lze spustit i na clusteru.
===== Příprava dat =====
Viz [[Příprava paralelního korpusu|zde]].
===== Volání Gizy =====
Než zavoláme Gizu, musíme mít z nějakého důvodu hotový [[SRILM|jazykový model]]!
Pro konkrétní pokusy s hindštinou už mám upravené volání Gizy++ nachystané ve skriptu ''~zeman/projekty/hindstina/align_tides.csh'' (volá se bez parametrů a dá se odeslat na cluster).
Moses obsahuje skript, který hezky obaluje volání mkcls a Gizy++ a generuje frázové a přeskládávací tabulky, které potřebuje dekodér. Volá se takhle (pozor, cesta k jazykovému modelu musí být **absolutní**):
nohup nice $MOSES/tools/moses-scripts/scripts-20090128-1534/training/train-factored-phrase-model.perl \
-scripts-root-dir $MOSES/tools/moses-scripts/scripts-20090128-1534/ \
-root-dir . \
-corpus ./train.lowercased -f en -e hi \
-alignment grow-diag-final-and \
-reordering msd-bidirectional-fe \
-lm 0:3:/net/work/people/zeman/hindstina/lm/train.lowercased.hi.lm \
>& training.out &
Uvedený skript se mi zasekl krátce před vytvořením vlastního symetrického párování, protože nějak špatně odkazoval na jiné skripty uvnitř vygenerované složky (měl v cestě "training/training" tam, kde měl mít jenom "training"). Prozatím jsem to fixnul ručně a vyrobil jsem soubor ''model/aligned.grow-diag-final-and'', jehož obsah vypadá podobně jako vzorová data u Joshuy, tj. asi mám připravená data pro Joshuu.
Uvedený trénovací skript Mosese má na starosti mnohem více úkonů než jen volání Gizy. Úkony jsou rozdělené do kroků a můžeme provést jen některé kroky. Kroky jsou následující:
- prepare() - pracuje s faktory, nahrazuje slova v korpusu číselnými odkazy do slovníku, volá ''mkcls'' (make classes)
- run_giza() - pustí paralelně 2 alignovací procesy, ze zdroje na cíl a z cíle na zdroj
- word_align() - zkombinuje výsledky obou Giz, aby získal jedno slovní párování. Volá ''symal''. Tady se uplatní symetrizační heuristika (např. //grow-diag-final-and//)
- get_lexical_factored()
- extract_phrase_factored()
- score_phrase_factored()
- get_reordering_factored()
- get_generation_factored()
- create_ini()
Pokud to děláme kvůli Joshuovi, potřebujeme pustit jen prvních pár kroků.
**Pozor!** Jestliže pustíme Gizu opakovaně ve stejné složce, bude mít tendenci využít staré mezisoubory a nevytvářet je znova, aby ušetřila čas. To ale není vždy žádoucí! Jestliže jsme např. měli vedle sebe dvě verze korpusu, train.lowercased (50000 vět na každé straně) a train.clean (podmnožina 42737 vět na každé straně), nejdříve jsme pustili Gizu na train.lowercased a pak jsme si vzpomněli, že jsme vlastně chtěli train.clean, nestačí pustit Gizu znova se správnými parametry. Giza nepozná, že její mezisoubory (zejména ty ve složkách giza*) byly vytvořeny nad jinou verzí korpusu. Klidně použije mezisoubory znova, protože vypadají použitelně, takže bude s prací rychle hotová a vy dostanete znova párování pro train.lowercased.