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.

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.