This is an old revision of the document!
Table of Contents
Ondrův návod, jak pouštět Mosese
Instalace
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.