====== Ondrův návod, jak pouštět Mosese ====== ===== Instalace ===== **Ptica: pozor, toto je navod na stary moses_playground, novy lezi na [[https://svn.ms.mff.cuni.cz/projects/statmt/]]** svn co https://svn.ms.mff.cuni.cz/svn/treedecode/moses_playground Poznámka Dan: mám to v ''/net/work/people/zeman/moses''. # stahni si srilm, treba takto: cd moses_playground/src ln -s /a/merkur1/bojar/moses_wmt09/src/srilm.tgz ./ Je to tam. # ostatni komponenty jsou bud v svn nebo se stahnou # zkompiluj vse cd moses_playground make workspace Pro jistotu pouštím na ''sol2'', aby měl make podobné 64bitové prostředí, jako bude mít Moses puštěný na clusteru. Zdá se, že to proběhlo bez potíží, řeklo to: ## Don't forget to set your SCRIPTS_ROOTDIR with: export SCRIPTS_ROOTDIR=/export/work/people/zeman/moses/moses_playground/workspace.20081215-1642/bin/scripts-20081215-1646 # vyrobi to podadresar workspace.DATUM-CAS, # nastav cesty v moses_playground/Makefile Nastavuju cesty ''PWD'' a ''WS'' na začátku Makefilu. ''PWD'' vede na právě vytvořený ''moses_playground'', ''WS'' je název právě vytvořeného pracovního prostoru ''workspace.20081215-1642''. ===== Příprava korpusů ===== # priprav korpusy: cd moses_playground/augmented_corpora # co (paralelni) korpus, to adresar # rucne je nutno vyrobit napr.: mujkorpus/cs.gz mujkorpus/en.gz mujkorpus/cs.info mujkorpus/en.info Priklad viz /home/bojar/diplomka/granty/euromatrix/moses_icon08/augmented_corpora/icon-eilmt Nějaké podsložky už tam jsou. Vytvářím novou ''enhi-dan'' a kopíruju do ní Ondrovy příklady souborů .gz a .info. Tím jsem získal kopii anglicko-hindského korpusu EILMT (7000 vět). Korpus je tokenizovaný a spárovaný po větách. **Před dalšími operacemi raději přepínám z tcsh do bashe, který používá Ondra.** Pak nechas vyrobit alignment, bud rucne, nebo napr.: cd augmented_corpora CORP=icon-eilmt \ SRCAUG=en+lcstem4 \ TGTAUG=hi+lcstem4 \ NAME=lcstem4-lcstem4 \ DIRSYM=gdf \ make align (Vystup viz napr. /a/merkur1/bojar/moses_icon08/augmented_corpora/icon-eilmt/lcstem4-lcstem4.gz) Princip je ten, ze pro kazdy korpus K maji vsechny soubory augmented_corpora/K/*.gz mit stejny pocet radek. Mohou mit ruzny pocet tokenu na radce. Cíl ''align'' v příslušném Makefilu nevolá Hunalign, ale Gizu, takže už zřejmě nejde o párování vět, ale tokenů. O Hunalignu (párování vět) se tiše předpokládá, že jsme si ho pustili už dříve sami, nebo že jsme si párování vět zařídili nějak jinak. Viz Ondrova poznámka: paralelní korpusy, které jsme sem nakopírovali, už musí mít na obou stranách stejný počet řádek (= segmentů = vět). Pozor, tady už některé věci vyžadují úpravy, např. se tam přistupuje k ''~/diplomka'', čímž se ale má na mysli zřejmě ''/home/bojar/diplomka''. Taky se tam předpokládá existence příkazu ''qsubmit'', což je jednak Ondrova obálka na ''qsub'', kterou normální lidi nemají v cestě (velmi pravděpodobně je to tohle: ''~bojar/tools/shell/qsubmit''), jednak musíme ''make align'' volat z počítače, ze kterého lze odeslat výpočet na cluster (tedy z ''lrc''). Vyžaduje se také perlový modul ''File::NFSLock'', který normálně nemám v ''@INC'', takže asi není ve standardní ÚFALí distribuci Perlu. Zjistil jsem, že Ondra tuhle knihovnu má v ''/home/bojar/myperl/lib'' (kromě toho má ještě ''/home/bojar/perllib'', tam jsou nějaké další balíčky z CPANu). Protože normálně nepoužívám ''bash'', nedokázal jsem ho rychle přinutit, aby tuhle cestu standardně přidal do ''PERLLIB'' a ''PERL5LIB''. Nakonec jsem raději přidal na začátek ''augment.pl'' řádek ''use lib '/home/bojar/myperl/lib';''. Pak je skript augment.pl, ktery podle navodu z daneho korpusu vyreze potrebne faktory, napr.: cd augmented_corpora ./augment.pl icon-eilmt/hi+form+lcstem4 Pozor: v soucasne dobe stale jeste nefunguji zamky v augment.pl a NFS je debilni. Muze se tedy stat, ze kdyz ma augment vyrobit nejakou novou kombinaci, ktera se sklada z take vyrabenych soucastek, tak se vyrobi neuplne gzipy! To byla priprava. :-) Z tohohle to skoro vypadá, že se augment má pouštět před alignem, a ne až po něm. Z Makefilu je ale vidět, že se volání augmentu předává jako parametr alignu, který si ho zřejmě obsluhuje sám. ===== Pouštění pokusů ===== Samotne pokusy pak pripravuji a spoustim takto: cd moses_playground SRCCORP=icon-eilmt \ SRCAUG=enR+lc \ TGTAUG=hi+form+wc10 \ ALIAUG=enRlcstem4-lcstem4 LMEXPS=0:exp.lm.icon-eilmt+hi+form.3.20081127-1354:::1:exp.lm.icon-eilmt+hi+wc10.10.20081130-1815 \ DECODINGSTEPS=t0-0+g0-1 \ REORDERING=orientation-bidirectional-fe \ REORDFACTORS=0-1 \ make exp.model.prepare Vyrobi timestampovany adresar na zaklade seeds/exp.model a nakonec ti napise, ze mas udelat make exp.model.TIMESTAMP.run Ten to spusti (na gridu). Ty LMEXPS se vyrabeji podobne: CORP=icon-eilmt \ CORPAUG=hi+wc10 \ ORDER=10 \ RUN=yes \ make exp.lm.prepare Kdyz das RUN=yes, tak to i rovnou submitne. Princip tech seeds je, ze seed je bashovy skript, ktery neco obratem pripravi, a zejmena pripravi bashovy skript 'command', no a make exp..run jen ten command spusti. Cili kdyz se nejaky experiment nedari spustit (nebo dokoncit) vlezes do jeho adresare exp.NAZEV.TIMESTAMP, prostudujes ./command, treba si ho spustis rucne atp. Snazim se o to, aby adresare experimentu obsahovaly uplne vsechny vstupy, proto hojne v priprave experimentu pouzivam /home/bojar/tools/shell/wiseln, ktery podle situace dela bud symlink, hardlink, nebo i kopii, a taky tam pripise md5 sumu, abych mohl i zpetne hlidat, ze jsem neco spoustel na tom, na cem jsem to spoustet chtel. Postup pres experimenty je tento: make exp.lm.prepare (vyroba jayzkoveho modelu) make exp.model.prepare (vyroba prekladoveho modelu i mosesovy konfigurace) make exp.mert.prepare (spusteni mertu nad mosesovou konfiguraci) make exp.eval.prepare (vyhodnoceni natrenovaneho mertu nad novymi daty; zatim zastarale) Take byvalo make exp.align.prepare, ale to je ted zastarale. Nejspis se v tom ale nevyznas :-( Dej mi vedet, kdybys zacal citit nejakou nadeji. ===== Výroba jazykového modelu ===== Pokouším se použít výše popsaný Ondrův postup pro korpus ''enhi-dan''. Vynechávám Ondrův parametr ''wc10'' (shlukování na 10 slovních tříd; pro baseline výsledek ale nic takového nechci). Místo toho se zřejmě musí uvést ''form''. Nevím, co znamená ''ORDER=10'', ale když to vyhodím, make si stěžuje, že tam má být nastaven "lm order". Tím se myslí, kolika-gramový model se má vytvořit. 10 je tedy asi moc (sloužilo pro slovní třídy, ale pro celá slova bychom měli použít nižší číslo). Karthik použil pentagram. CORP=enhi-dan \ CORPAUG=hi+form \ ORDER=5 \ RUN=yes \ make exp.lm.prepare Neustále narážím na volání Ondrových nástrojů, které nemám v cestě (např. ''qsubmit'', ''makeargs'', ''mkdiruniq'', ''wiseln''). Pár jsem jich přepsal s plnou cestou, ale je toho moc. Tak si snad raději přidám do ''.bashrc'' rozšíření ''PATH'' o ''/home/bojar/tools/shell''. (Nestačí to nastavit ručně před pouštěním pokusů, protože výpočty se odesílají na cluster a tam běží nový bash s čistým prostředím.) Teď už se jazykový model vyrábí pěkně, ale vycházejí mi jiné (menší) počty n-gramů než Karthikovi. Takže by to chtělo dál pátrat, čím se od něj lišíme. Nejbližší další podezřelý je to kódování WX. ===== Workspace ===== Nemám teď čas prolejzat nahoře, jestli už to tam není napsané, ale rychle si potřebuju poznamenat další Ondřejova moudra :-) //Asi jsem Ti to nikdy nevysvetloval. 'workspace' je podadresare moses_playground, ktery obsahuje zkompilovane vsechny nastroje. Ten adresar vznikne prikazem 'make workspace'. Zamerne ale vznika pod nazvem workspace.DATUM, aby joch mohlo byt vic. Pri uspesnem konci 'make workspace' na zaver napise neco jako: ... a vas novy workspace je workspace.2009-12-12-1212, poznamenejte si to do souboru 'workspace' Cili clovek udela: echo workspace.2009-12-12-1212 > workspace A playground/Makefile (a nove i playground/augmented_corpora/Makefile) se timto souborem ridi pri startu novych experimentu. O.//