====== 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.//