[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

This is an old revision of the document!


Table of Contents

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.


[ Back to the navigation ] [ Back to the content ]