Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
user:zeman:eman [2012/01/31 14:54] zeman Hodnoty proměnných v eman select se z nějakého důvodu musí schovat do uvozovek. |
user:zeman:eman [2013/01/23 15:39] (current) zeman harvest.pl |
====== Eman ====== | ====== Eman ====== |
| |
Ondrův e-mail z 4.2.2011: | ===== Instalace ===== |
| |
musim se pochlubit, ze (az na jeste par much) mam ukazku pouziti emana pro preklad i pro ty, kdo 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 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 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 |
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) ===== |
SRC=en TGT=cs eman init dandata</code> | SRC=en TGT=cs eman init dandata</code> |
| |
===== Spuštění kroku ===== | ===== Spuštění a opakované spuštění kroku ===== |
| |
Spuštění kroku znamená, že se vygeneruje jeho skript (pustí se ''eman.seed'' a z něj vypadne ''eman.command'') a odešle se jako úloha na cluster. Provádí se pomocí ''eman start'', např. | Spuštění kroku znamená, že se vygeneruje jeho skript (pustí se ''eman.seed'' a z něj vypadne ''eman.command'') a odešle se jako úloha na cluster. Provádí se pomocí ''eman start'', např. |
Step s.dandata.038e9f18.20120118-2212 submitted as job 2160759</code> | Step s.dandata.038e9f18.20120118-2212 submitted as job 2160759</code> |
| |
Druhou možností je příkaz ''eman redo''. Ten ale vyrobí kopii stávajícího kroku a tu spustí. Jestliže předcházející běh kroku neskončil úspěšně (je ve stavu ''FAILED''), můžeme zkusit ''eman continue'', který pracuje v původní složce kroku a pokusí se krok dotáhnout do stavu ''DONE''. | Druhou možností je příkaz **''eman redo''**. Ten ale vyrobí kopii stávajícího kroku a tu spustí. |
| |
| Jestliže jsme úspěšně prošli stavy ''INITED'' a ''PREPARED'' a nepotřebujeme měnit základní nastavení kroku (zejména hodnoty proměnných), ale krok přesto skončil ve stavu ''FAILED'' (např. proto, že došlo místo na disku), můžeme zavolat **''eman continue''**, který pracuje v původní složce kroku a pokusí se krok dotáhnout do stavu ''DONE''. Continue pouze znova pustí skript ''eman.command'' ve složce kroku. Tento skript můžeme nejdřív podle potřeby upravit, např. zakomentovat řádky, které při předcházejícím pokusu doběhly úspěšně a jejich výsledek už ve složce kroku leží. |
| |
==== Spuštění mnoha příbuzných kroků najednou ==== | ==== Spuštění mnoha příbuzných kroků najednou ==== |
===== Parametry clusteru ===== | ===== Parametry clusteru ===== |
| |
Pokud Eman běží na clusteru, odesílá zpracování kroků (''eman.command'') jako clusterové úlohy. V 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 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 GB: | Pokud Eman běží na clusteru, odesílá zpracování kroků (''eman.command'') jako clusterové úlohy. V 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 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 GB a který má alespoň 50 GB volného místa v ''/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 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ů ===== |
| |
V tomto konkrétním případě bych se také místo hledání hodnoty proměnné mohl spokojit s hledáním kroku podle značky (tagu), ale to zatím eman neumožňuje, alespoň podle manuálových stránek. | V tomto konkrétním případě bych se také místo hledání hodnoty proměnné mohl spokojit s hledáním kroku podle značky (tagu), ale to zatím eman neumožňuje, alespoň podle manuálových stránek. |
| |
| ===== Značkování kroků ===== |
| |
| 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 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 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 doby, kdy automatické značky v 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 hodnot proměnných na základě pravidel (regulárních výrazů) v souboru ''eman.autotags'', který je jeden pro celé hřiště a musíme si ho vytvořit, v 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í). |
| |
| Ve výpisu ''eman tag'' jsou značky seřazené podle abecedy. |
| |
===== Korpusové kroky ===== | ===== Korpusové kroky ===== |
| |
Některé kroky připravují části korpusů, které jsou pro experiment potřeba. Takový krok asi typicky bude přímo zasvěcen přípravě korpusu, ale není ani vyloučeno, že korpus bude vedlejším produktem jiné činnosti. Každopádně pokud je výsledkem nebo jedním z výsledků kroku korpus, je vhodné ve složce daného kroku založit soubor ''corpman.info'', který popisuje, jaký korpus nám to tady vznikl. Skript pro tvorbu korpusů ho potom může využít při tvorbě kombinovaných korpusů, jiných faktorů apod. | Některé kroky připravují části korpusů, které jsou pro experiment potřeba. Takový krok asi typicky bude přímo zasvěcen přípravě korpusu (a je pak obvykle typu ''corpus''), ale není ani vyloučeno, že korpus bude vedlejším produktem jiné činnosti. (Za zvláštní druh korpusového souboru se v tomto případě považuje i soubor se zarovnáním slov.) Každopádně pokud je výsledkem nebo jedním z výsledků kroku korpus, je vhodné ve složce daného kroku založit soubor ''corpman.info'', který popisuje, jaký korpus nám to tady vznikl. Skript pro tvorbu korpusů ho potom může využít při tvorbě kombinovaných korpusů, jiných faktorů apod. |
| |
| Soubor ''corpman.info'' lze také vytvořit pomocí příkazu ''corpman register''. Nástroj corpman je součástí hřiště a umožňuje také vyhledat podle zadaných parametrů (název korpusu, jazyk a faktory) krok emana, ve kterém už je daný korpus vytvořen. |
| |
| ==== Ondrův návod, jak převzít existující augmented corpus ==== |
| |
| Dříve se k práci s korpusy používala složka ''augmented_corpora'' a nástroj ''augment.pl''. Pokud už v této složce máme připravený korpus se spoustou jazyků a hotových faktorů (např. ve složce ''augmented_corpora/newstest2010-v6b'') a chceme ho zapojit do práce s emanem, lze to zařídit tak, že mu vytvoříme falešný krok emana, který na něj bude odkazovat: |
| |
| udelej si v playgroundu uplne prazdny adresar ''s.podvod.12345678.20120229-2355'' |
| |
| v nem udelej |
| |
| <code bash>echo DONE > eman.status |
| echo fake > eman.seed |
| echo fake > eman.command |
| touch eman.vars |
| touch eman.deps</code> |
| |
| a pak v nem vyrob symlinky na vse, co potrebujes, cili treba: |
| |
| <code bash>ln -s /net/data/augmented_corpora/newstest2010-v6b/cs.gz ./ |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/de.gz ./ |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/en.gz ./ |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/es.gz ./ |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/fr.gz ./</code> |
| |
| Nakonec rucne vyrob corpman.info: |
| cs.gz TAB -1 TAB wmt10v6b TAB cs TAB form|lemma|tag TAB 2489 TAB 0 |
| de.gz TAB -1 TAB wmt10v6b TAB de TAB form|lemma|tag TAB 2489 TAB 0 |
| ... |
| |
| (DZ: Položky na každém řádku v ''corpman.info'' mají následující význam: |
| - Název souboru (cs.gz) |
| - Číslo sloupce v tomto souboru (-1, pokud v souboru nerozlišujeme sloupce) |
| - Název korpusu (wmt10v6b) |
| - Kód jazyka (cs); může zahrnovat i identifikaci dalšího zpracování (csNm), protože platí, že všechny soubory jednoho korpusu mají stejný počet řádků a všechny soubory jednoho korpusu a jazyka mají stejný počet tokenů. |
| - Názvy a pořadí faktorů, ze kterých se skládá každý token (form|lemma|tag) |
| - Počet řádků souboru (2489) |
| - Informace, zda je tento korpus automaticky odvozen z jiného korpusu (0 nebo 1)) |
| |
| Pak dej ''./corpman reindex'' |
| A pak over, ze to funguje: |
| |
| <code bash>./corpman wmt10v6b/cs+stc |
| # vypise asi dva kroky, kterymi to samo vyrobi stc.</code> |
| |
| Kdybys chtel pouzit i sve stc, muzes ho taky symlinknout a pridat radek: |
| cs-stc.gz TAB -1 TAB wmt10v6b TAB cs TAB stc TAB 2489 TAB 0 |
| |
| <code bash>ln -s /net/data/augmented_corpora/newstest2010-v6b/cs.factors/stc.gz cs-stc.gz |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/de.factors/stc.gz de-stc.gz |
| ln -s /net/data/augmented_corpora/newstest2010-v6b/en.factors/stc.gz en-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> |
| |
| ==== Alignment ==== |
| |
| Zarovnání (alignment) je taky svého druhu korpus. Má stejný počet řádků jako texty v 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 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 dílčích korpusů. |
| |
| Všimněte si, že proměnná ''COMMAND'' obsahuje úplné cesty ke krokům s 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 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ů ===== |
| |
| V současnosti je k 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 Joshuou. |
| |
| Eman umí projít všechny kroky s výsledky a spojit je v jednom výstupu. K 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). |
| |
| ===== Kombinace dvou a více hřišť ===== |
| |
| Normálně hledá Eman kroky pouze na aktuálním hřišti (v aktuální složce). Typicky má každý uživatel (nejméně jedno) svoje hřiště (playground), které leží v podstromu jeho pracovní kopie repozitáře StatMT. Co když ale chceme naklonovat pokus (se všemi závislostmi) nějakého kolegy? Můžeme připojit jeho hřiště k našemu. Obě složky zůstanou na svých místech, ale Eman bude vědět, že má od nynějška sledovat a indexovat obě. Uvidíme všechny kroky ve vzdáleném hřišti, budeme je moci klonovat a tvořit kroky na nich závislé. Tato operace je jednosměrná, tj. pokud současně nepřipojíme naše hřiště ke vzdálenému, tak ve vzdáleném hřišti to naše vidět nebude. |
| |
| Je dobré si uvědomit, že spolu s krokem, o který nám jde, možná získáme stovky dalších kroků, které nás nezajímají a možná nám znepřehlední situaci na hřišti. Navíc připojení vzdáleného hřiště v současné době nejde nijak jednoduše odvolat. Z těchto důvodů je možná lepší vytvořit si nové prázdné hřiště a připojit k němu jak naše stávající hřiště, tak vzdálené hřiště. |
| |
| Připojení vzdáleného hřiště se provede příkazem **''eman addremote DIR ALIAS''**, např. |
| |
| <code bash>eman addremote /net/tmp/bojar/wmt12-bojar/playground obo</code> |
| |
| ===== Stěhování hřiště za chodu ===== |
| |
| Příklad ze života: hřiště mám na ''/net/work/people/zeman'', jenže pokusy generují stále více souborů a kvůli kvótě se tam nevejdu. Chci to celé přestěhovat na ''/net/cluster/TMP''. Problém je, že prakticky neustále některé kroky běží a nemůžu jim ani jejich závislostem stěhovat půdu pod nohama. Takhle zjistím seznam kroků, které běží (na clusteru jim patří nějaká úloha) nebo na nich ty běžící závisí. (Všimněte si toho ''grep -v'' ke konci. Eman bohužel odmítne pokračovat, jestliže se mu k nějakému číslu úlohy nepodaří přiřadit existující krok. Proto explicitně vyřazuju čísla, o kterých vím, že tento problém mají.) |
| |
| <code bash>eman ls > steps-all.txt |
| eman traceback --no-tree `qstat | grep zeman | grep -P '\ss\.' | cut -d' ' -f1 | grep -v 4296093` | sort -u > steps-tabu.txt |
| perl -e 'open(TABU, "steps-tabu.txt") or die; while(<TABU>) { $tabu{$_}++ } open(ALL, "steps-all.txt") or die; while(<ALL>) { print unless($tabu{$_}) }' > steps-free.txt |
| for i in `cat steps-free.txt` ; do echo $i ; cp -r $i /net/cluster/TMP/zeman/statmt/playground ; done |
| for i in `cat steps-free.txt` ; do echo $i ; rm -rf $i ; done</code> |
| |
| Je dobré si uvědomit, že stěhování existujícího hřiště má ještě jednu další nevýhodu. Mnoho Ondřejových kroků vytváří hardlinky na existující soubory s korpusy. Při stěhování na jiný souborový systém se z těchto hardlinků zřejmě stanou samostatné soubory a hřiště bude zabírat mnohem více místa než to stávající. Lze si pomoci skriptem ''find_hardlinks.pl'', který se pokouší hardlinky najít a znova pospojovat. Ale pozor! Tento skript není obecný a spoléhá na strukturu hřiště a na to, že hardlinky jsou v něm řádně označeny (mají v názvu ''.hardlink'') a vedle nich leží buď původní soubor, nebo symbolický odkaz na něj. Navíc skript obsahuje některé cesty specifické pro Danův případ, takže pokud nejste já, musíte si ho nejdříve upravit! |
| |
===== Sestavování experimentu jako posloupnosti kroků ===== | 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 novým ''eman.command'', bez přegenerování všech kroků, na kterých krok závisí. |
| |
Pokusit se alespoň zpočátku využít existující kroky pro alignment, jazkový model apod. a nekonvertovat ty svoje. Vytvořit nějakou šablonu ''joshua'', která jednou bude instalovat Joshuu, ale v tuto chvíli pouze vyrobí symlinky na moji existující instalaci. Potom určitě budu potřebovat alespoň tyto kroky: | |
* binarizace korpusu a alignmentu | |
* extrakce gramatiky pro vývojová i testovací data (jeden, nebo dva různé kroky?); analogicky ke kroku ''tm'', který vyrábí frázovou tabulku pro Mosese, by se tento krok mohl jmenovat třeba ''joshtm''. | |
* volání dekodéru Joshuy (''translate''?) s příslušnými modely a konfiguračním souborem s vahami | |
* asi i nějaká úprava mertu, byť současný eman už samozřejmě obsahuje konfiguraci mertu pro Mosese | |