[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
user:zeman:eman [2012/03/09 17:51]
zeman Značkování kroků.
user:zeman:eman [2013/01/23 15:39] (current)
zeman harvest.pl
Line 1: Line 1:
 ====== Eman ====== ====== Eman ======
  
-Ondrův e-mail z 4.2.2011:+===== Instalace =====
  
-musim se pochlubit, ze (az na jeste par muchmam ukazku pouziti emana pro preklad i pro tykdo to jeste vubec nezkouseli:+<code bash>git clone https://daniel.zeman@redmine.ms.mff.cuni.cz/eman.git eman 
 +git clone https://daniel.zeman@redmine.ms.mff.cuni.cz/ufal-smt-playground.git statmt 
 +export PATH=$PATH:`pwd`/eman/bin 
 +cd statmt/playground</code> 
 + 
 +Mělo by to jít vybalit i bez toho uživatelského jména (''daniel.zeman@'' apod., vyžaduje samozřejmě heslo), ale bude to pak bez práva ukládat změny zpět na server pomocí ''git push''
 + 
 +Příkaz ''<nowiki>eman --man</nowiki>'' ukáže příručku s&nbsp;nápovědou. 
 + 
 +Ondrův příklad pro rychlý start (říjen 2012): 
 +<code bash>eman clone (--dry-run) < eman.samples/cs-en-mini.traceback</code> 
 + 
 +==== Archiv ==== 
 + 
 +Eman z SVN dle Ondrova e-mailu z&nbsp;4.2.2011:
  
 <code bash>svn co https://svn.ms.mff.cuni.cz/svn/statmt/trunk statmt <code bash>svn co https://svn.ms.mff.cuni.cz/svn/statmt/trunk statmt
Line 14: Line 28:
 SKIP_IRSTLM=yes eman clone --start < eman.samples/cs-en-mini.traceback</code> SKIP_IRSTLM=yes eman clone --start < eman.samples/cs-en-mini.traceback</code>
  
-Prikaz: +[[Přechod z SVN/Trac na Git/Redmine]] (podzim 2012)
- +
-eman --man +
- +
-ukaze manualovou stranku+
  
 ===== Tvorba šablon (nové druhy kroků, seeds) ===== ===== Tvorba šablon (nové druhy kroků, seeds) =====
Line 144: Line 154:
 ===== Parametry clusteru ===== ===== Parametry clusteru =====
  
-Pokud Eman běží na clusteru, odesílá zpracování kroků (''eman.command'') jako clusterové úlohy. V&nbsp;opačném případě se pokouší pouštět místní procesy, které na sebe čekají. Někdy potřebujeme vznést konkrétní požadavky na stroj, na který plánovač clusteru naši úlohu umístí. Zejména jde o požadavky na operační paměť. V&nbsp;Emanovi momentálně nelze nastavit výchozí paměťové požadavky daného typu kroku (šablony). Musíme proto o paměť požádat explicitně pokaždé, když spouštíme konkrétní krok. Např. takto si řekneme o stroj, na kterém je dostupných 20&nbsp;GB:+Pokud Eman běží na clusteru, odesílá zpracování kroků (''eman.command'') jako clusterové úlohy. V&nbsp;opačném případě se pokouší pouštět místní procesy, které na sebe čekají. Někdy potřebujeme vznést konkrétní požadavky na stroj, na který plánovač clusteru naši úlohu umístí. Zejména jde o požadavky na operační paměť. V&nbsp;Emanovi momentálně nelze nastavit výchozí paměťové požadavky daného typu kroku (šablony). Musíme proto o paměť požádat explicitně pokaždé, když spouštíme konkrétní krok. Např. takto si řekneme o stroj, na kterém je dostupných 20&nbsp;GB a který má alespoň 50&nbsp;GB volného místa v&nbsp;''/mnt/h/tmp'':
  
-<code bash>eman start danalign --mem 20g</code>+<code bash>eman start danalign --mem 20g --disk 50g</code> 
 + 
 +Některé druhy kroků (např. ''mert'' a ''translate'') samy generují paralelní úlohy pro cluster. Výše uvedený způsob nastaví požadavky pouze pro hlavní úlohu daného kroku, ale o případných dceřinných úlohách nic neví. To je potřeba zařídit pomocí parametrů kroku. Např. šablony obou uvedených druhů kroků počítají s&nbsp;proměnnou ''GRIDFLAGS'', ve které můžeme uvést doplňkové volby pro příkaz ''qsub''. Bohužel to musíme udělat už při inicializaci kroku. Takže když dodatečně zjistíme, že krok nedoběhl kvůli nedostatku paměti nebo místa na disku pro některou jeho podúlohu, nemůžeme jednoduše zavolat ''eman continue s.mert... --mem 30g'', musíme vytvořit nový krok pomocí ''eman redo'': 
 + 
 +<code bash>GRIDFLAGS="-hard -l mf=30g -l act_mem_free=30g -l h_vmem=30g" eman redo s.mert... --start</code>
  
 ===== Navazování kroků ===== ===== Navazování kroků =====
Line 178: Line 192:
 Dvě veličiny nás u každého kroku budou zajímat velmi často: stav kroku (''--status'' nebo ''eman status <kroky>'') a hodnoty proměnných, které ho definují (''--vars'' nebo ''eman vars <kroky>''). Třetí veličina, která je doplňuje, je tzv. značka neboli //tag// (''--tag'' nebo ''eman tag <kroky>''). Jde o stručný popis pokud možno na jeden řádek, který nám pomůže rychle identifikovat mezi desítkami např. jazykových modelů „ten náš“. Často budeme chtít do značky zahrnout vybrané hodnoty proměnných, např. kódy jazyků a faktorů, použitých korpusů apod. Dvě veličiny nás u každého kroku budou zajímat velmi často: stav kroku (''--status'' nebo ''eman status <kroky>'') a hodnoty proměnných, které ho definují (''--vars'' nebo ''eman vars <kroky>''). Třetí veličina, která je doplňuje, je tzv. značka neboli //tag// (''--tag'' nebo ''eman tag <kroky>''). Jde o stručný popis pokud možno na jeden řádek, který nám pomůže rychle identifikovat mezi desítkami např. jazykových modelů „ten náš“. Často budeme chtít do značky zahrnout vybrané hodnoty proměnných, např. kódy jazyků a faktorů, použitých korpusů apod.
  
-Značky jsou dvou druhů: ruční a automatické. Ruční značku můžeme přidat ke každému kroku zvlášť a je uložena ve složce daného kroku v&nbsp;souboru ''eman.tag''. Můžeme do něj psát přímo a pak zavolat ''eman reindex'', nebo rovnou zavolat **''eman add-tag <značka> <krok>''**. V&nbsp;praxi ovšem tento příkaz často volá už šablona kroku, takže značka je opět tvořena více méně automaticky (to je zřejmě relikt z&nbsp;doby, kdy automatické značky v&nbsp;dnešním smyslu neexistovaly).+Značky jsou dvou druhů: ruční a automatické. Ruční značku můžeme přidat ke každému kroku zvlášť a je uložena ve složce daného kroku v&nbsp;souboru ''eman.tag''. Můžeme do něj psát přímo a pak zavolat ''eman reindex'', nebo rovnou zavolat **''eman add-tag <značka> <krok>''**. V&nbsp;praxi ovšem tento příkaz často volá už šablona kroku, takže značka je opět tvořena více méně automaticky (to je zřejmě relikt z&nbsp;doby, kdy automatické značky v&nbsp;dnešním smyslu neexistovaly). **//(Ale pozor: Ondra potvrdil, že toto chování šablon je zastaralé a nyní se doporučuje, aby příkaz ''eman add-tag'' byl vyhrazen pro ruční volání uživatelem.)//**
  
 Automatické značky kroku vznikají z&nbsp;hodnot proměnných na základě pravidel (regulárních výrazů) v&nbsp;souboru ''eman.autotags'', který je jeden pro celé hřiště a musíme si ho vytvořit, v&nbsp;repozitáři jsou pouze ukázky. Kromě toho každý krok automaticky zdědí automatické značky svých předchůdců (kroků, na kterých závisí). Automatické značky kroku vznikají z&nbsp;hodnot proměnných na základě pravidel (regulárních výrazů) v&nbsp;souboru ''eman.autotags'', který je jeden pro celé hřiště a musíme si ho vytvořit, v&nbsp;repozitáři jsou pouze ukázky. Kromě toho každý krok automaticky zdědí automatické značky svých předchůdců (kroků, na kterých závisí).
Line 240: Line 254:
 ln -s /net/data/augmented_corpora/newstest2010-v6b/es.factors/stc.gz es-stc.gz ln -s /net/data/augmented_corpora/newstest2010-v6b/es.factors/stc.gz es-stc.gz
 ln -s /net/data/augmented_corpora/newstest2010-v6b/fr.factors/stc.gz fr-stc.gz</code> ln -s /net/data/augmented_corpora/newstest2010-v6b/fr.factors/stc.gz fr-stc.gz</code>
 +
 +==== Alignment ====
 +
 +Zarovnání (alignment) je taky svého druhu korpus. Má stejný počet řádků jako texty v&nbsp;jednotlivých jazycích a tyto řádky si navzájem odpovídají. Čtvrtý sloupec ''corpman.info'', který u textových částí korpusu obsahuje kód jazyka, u alignmentu popisuje oba jazyky, faktory použité pro výpočet zarovnání a také použitou symetrizační heuristiku: symetrizace – zdrojový jazyk – zdrojový faktor – cílový jazyk – cílový faktor. Naopak pátý sloupec, který u textových částí popisuje dostupné faktory, u alignmentu vždy obsahuje kód ''ali'' (vlastně je to specifický faktor). Příklad ''corpman.info'' vygenerovaného krokem typu ''align'':
 +
 +<code>alignment.gz    1       un.fr-en        gdf-fr-lemma-en-lemma   ali     10788000
 +alignment.gz    2       un.fr-en        revgdf-fr-lemma-en-lemma        ali     10788000
 +alignment.gz    3       un.fr-en        gdfa-fr-lemma-en-lemma  ali     10788000
 +alignment.gz    4       un.fr-en        revgdfa-fr-lemma-en-lemma       ali     10788000
 +alignment.gz    5       un.fr-en        left-fr-lemma-en-lemma  ali     10788000
 +alignment.gz    6       un.fr-en        right-fr-lemma-en-lemma ali     10788000
 +alignment.gz    7       un.fr-en        int-fr-lemma-en-lemma   ali     10788000
 +alignment.gz    8       un.fr-en        union-fr-lemma-en-lemma ali     10788000</code>
 +
 +Zarovnání obvykle vyrábí krok typu ''align''. Ten ale volá Gizu a trvá dost dlouho, pro opravdu velké korpusy třeba i několik dní. Pokud se náš paralelní korpus skládá z&nbsp;několika menších korpusů, můžeme trochu slevit na kvalitě výsledného zarovnání a zarovnat každý dílčí korpus zvlášť. Potom zarovnání spojíme za sebe do jednoho souboru. Bude asi bezpečnější, když dáme spojenému korpusu nové jednoznačné jméno, které nebude obsahovat ''+'', aby ''corpman'' nepoznal, že jde o kombinaci několika menších korpusů, a nepokoušel se odvozené faktory taky získávat z&nbsp;dílčích korpusů.
 +
 +Všimněte si, že proměnná ''COMMAND'' obsahuje úplné cesty ke krokům s&nbsp;dílčími zarovnáními (zde prostřednictvím proměnné ''STATMT'', kterou mám ve svém prostředí vždy nastavenou). To je nutné, protože příkaz se nebude vykonávat v&nbsp;hlavní složce hřiště, ale o úroveň níž, ve složce nového korpusového kroku.
 +
 +<code bash># Předpokládáme, že dílčí alignmenty obsahují stejné symetrizace ve stejném pořadí.
 +# Takže se sice ptáme na gdfa, ale do cílového souboru zkopírujeme všechny sloupce.
 +ALISTEPNEWSEURO=(`corpman news-europarl-v7.fr-en/gdfa-fr-lemma-en-lemma+ali`)
 +ALISTEPUNCORPUS=(`corpman un.fr-en/gdfa-fr-lemma-en-lemma+ali`)
 +COMMAND="zcat $STATMT/playground/${ALISTEPNEWSEURO[0]}/${ALISTEPNEWSEURO[1]} $STATMT/playground/${ALISTEPUNCORPUS[0]}/${ALISTEPUNCORPUS[1]}"
 +LINES=`$COMMAND | wc -l`
 +OUTCORP=news-euro-un.fr-en \
 +  OUTFACTS=ali \
 +  OUTLANG=gdfa-fr-lemma-en-lemma \
 +  OUTLINECOUNT=$LINES \
 +  TAKE_FROM_COMMAND=$COMMAND \
 +  eman init corpus --start
 +# Problém: Takto založený krok zaregistruje pouze zarovnání se symetrizací gdfa, navíc pro všechny sloupce souboru.
 +# Opíšeme tedy popis sloupců od jednoho z dílčích korpusů. Musíme to ale dělat až po dokončení spojeného korpusu.
 +NEWSTEP=(`corpman news-euro-un.fr-en/gdfa-fr-lemma-en-lemma+ali`)
 +mv ${NEWSTEP[0]}/corpus.txt.gz ${NEWSTEP[0]}/alignment.gz
 +perl -e 'my $i = 1; foreach my $sym qw(gdf revgdf gdfa revgdfa left right int union) { print("alignment.gz\t$i\tnews-euro-un.fr-en\t$sym-fr-lemma-en-lemma\tali\t'$LINES'\n"); $i++ }' > ${NEWSTEP[0]}/corpman.info
 +corpman reindex
 +ALISTEPNEWSEURO=(`corpman news-europarl-v7.fr-en/gdfa-en-lemma-fr-lemma+ali`)
 +ALISTEPUNCORPUS=(`corpman un.fr-en/gdfa-en-lemma-fr-lemma+ali`)
 +COMMAND="zcat $STATMT/playground/${ALISTEPNEWSEURO[0]}/${ALISTEPNEWSEURO[1]} $STATMT/playground/${ALISTEPUNCORPUS[0]}/${ALISTEPUNCORPUS[1]}"
 +LINES=`$COMMAND | wc -l`
 +OUTCORP=news-euro-un.fr-en \
 +  OUTFACTS=ali \
 +  OUTLANG=gdfa-en-lemma-fr-lemma \
 +  OUTLINECOUNT=$LINES \
 +  TAKE_FROM_COMMAND=$COMMAND \
 +  eman init corpus --start
 +# Teď ještě pod novým názvem publikovat i slepené textové části korpusů.
 +STEPNEWSCOMM=(`corpman news-commentary-v7.fr-en/fr+form+lemma+tag`)
 +STEPEUROPARL=(`corpman europarl-v7.fr-en/fr+form+lemma+tag`)
 +STEPUNCORPUS=(`corpman un.fr-en/fr+form+lemma+tag`)
 +COMMAND="zcat $STATMT/playground/${STEPNEWSCOMM[0]}/${STEPNEWSCOMM[1]} $STATMT/playground/${STEPEUROPARL[0]}/${STEPEUROPARL[1]} $STATMT/playground/${STEPUNCORPUS[0]}/${STEPUNCORPUS[1]}"
 +LINES=`$COMMAND | wc -l`
 +OUTCORP=news-euro-un.fr-en \
 +  OUTLANG=fr \
 +  OUTFACTS=form+lemma+tag \
 +  OUTLINECOUNT=$LINES \
 +  TAKE_FROM_COMMAND=$COMMAND \
 +  eman init corpus --start
 +STEPNEWSCOMM=(`corpman news-commentary-v7.fr-en/en+form+lemma+tag`)
 +STEPEUROPARL=(`corpman europarl-v7.fr-en/en+form+lemma+tag`)
 +STEPUNCORPUS=(`corpman un.fr-en/en+form+lemma+tag`)
 +COMMAND="zcat $STATMT/playground/${STEPNEWSCOMM[0]}/${STEPNEWSCOMM[1]} $STATMT/playground/${STEPEUROPARL[0]}/${STEPEUROPARL[1]} $STATMT/playground/${STEPUNCORPUS[0]}/${STEPUNCORPUS[1]}"
 +LINES=`$COMMAND | wc -l`
 +OUTCORP=news-euro-un.fr-en \
 +  OUTLANG=en \
 +  OUTFACTS=form+lemma+tag \
 +  OUTLINECOUNT=$LINES \
 +  TAKE_FROM_COMMAND=$COMMAND \
 +  eman init corpus --start</code>
  
 ===== Vyhodnocovací kroky a sklizeň výsledků ===== ===== Vyhodnocovací kroky a sklizeň výsledků =====
Line 245: Line 328:
 V&nbsp;současnosti je k&nbsp;dispozici několik různých šablon pro vyhodnocení výsledků překladu na testovacích datech. Šablona ''eval'' pouští Ondrův program ''testbleu'', šablona ''evaluator'' pouští vyhodnocovací program Mosese upravený Matoušem Macháčkem, který umí několik různých metrik včetně BLEU, šablona ''daneval'' spolupracuje s&nbsp;Joshuou. V&nbsp;současnosti je k&nbsp;dispozici několik různých šablon pro vyhodnocení výsledků překladu na testovacích datech. Šablona ''eval'' pouští Ondrův program ''testbleu'', šablona ''evaluator'' pouští vyhodnocovací program Mosese upravený Matoušem Macháčkem, který umí několik různých metrik včetně BLEU, šablona ''daneval'' spolupracuje s&nbsp;Joshuou.
  
-Eman umí projít všechny kroky s&nbsp;výsledky a spojit je v&nbsp;jednom výstupu. K&nbsp;tomu slouží příkaz **''eman collect''**, který na základě ''eman.results.conf'' vyrobí ''eman.results''. Ukázkový a funkční konfigurační soubor je ''eman.results.conf.sample-wmt12''Výstup ''eman.results'' lze pak ještě dále vylepšit pomocí ''make bleu'' (make bleu vlastně ten collect samo volá). +Eman umí projít všechny kroky s&nbsp;výsledky a spojit je v&nbsp;jednom výstupu. K&nbsp;tomu slouží příkaz **''eman collect''**, který na základě ''eman.results.conf'' vyrobí ''eman.results''. Ukázkový a funkční konfigurační soubor je ''eman.results.conf.sample''Já používám jako obálku skript **''harvest.pl > harvest.txt''**, který výsledky zformátuje tak, jak chci (seskupí podle jazykových párů a seřadí podle skóre).
- +
-(Podle Ondřeje make bleu ještě možná závisí na skriptu ./sitename, který je tam pro konsolidaci výsledků z&nbsp;mnoha hřišť.)+
  
 ===== Kombinace dvou a více hřišť ===== ===== Kombinace dvou a více hřišť =====
Line 272: Line 353:
  
 Jestliže stěhujete kroky, které jsou ve stavu FAILED, na novém hřišti je pravděpodobně nebudete moci spustit pomocí ''eman continue'', protože jejich ''eman.command'' (který už se znova nepřegeneruje) nejspíš obsahuje cesty na staré hřiště (a např. když zavoláte corpman starého hřiště, bude vám hledat korpusy tam, ne tady). Můžete ale použít ''eman redo --start'', čímž se na novém hřišti vytvoří kopie kroku s&nbsp;novým ''eman.command'', bez přegenerování všech kroků, na kterých krok závisí. Jestliže stěhujete kroky, které jsou ve stavu FAILED, na novém hřišti je pravděpodobně nebudete moci spustit pomocí ''eman continue'', protože jejich ''eman.command'' (který už se znova nepřegeneruje) nejspíš obsahuje cesty na staré hřiště (a např. když zavoláte corpman starého hřiště, bude vám hledat korpusy tam, ne tady). Můžete ale použít ''eman redo --start'', čímž se na novém hřišti vytvoří kopie kroku s&nbsp;novým ''eman.command'', bez přegenerování všech kroků, na kterých krok závisí.
 +

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