This is an old revision of the document!
Moses na questu
Toto jsou moje poznámky, jak obalit Mosese a Emana webovou aplikací. Varování ministra informatiky: Cílem tohoto postupu není udělat to správně. Cílem je co nejrychleji a s co nejmenším úsilím rozchodit alespoň něco. Je tam proto řada velmi brutálních hacků. Až bude více času, nahradíme je lepším řešením. Zcela se zde ignoruje MT Monkey (určen přímo pro poskytování překladu jako webové služby) a minicluster, na který by se takovéto úlohy měly z questu odesílat.
Někde na vnitřní síti mám hřiště pro Emana. Cestu k němu označím PLAY. Na questu mám připravenou podsložku ve složce pro CGI skripty (např. /usr/lib/cgi-bin/zeman/preklad
), označím si ji QCGI. V ní mám složku eman, kam jsem si z Gitu vybalil emana, a dále složku ufal-smt-playground, kam jsem si vybalil čisté hřiště se skripty a šablonami. Složku $QCGI/ufal-smt-playground/playground
(čili to hřiště na questu) si označím QPLAY.
Na hřišti PLAY si najdu kroky s modely, které chci na questu zpřístupnit. Můžu se např. podívat do harvest.txt a vypsat kroky evaluator, které mě zajímají; potom pomocí est tb najít jim odpovídající kroky translate a mert. Z nějakého důvodu mi pro en-cs stačily tyto dva kroky, ale pro ostatní jazykové páry nestačí, protože krok mert neobsahuje jazykový ani překladový model, jsou tam jen symbolické odkazy. Takže musím přidat i kroky lm a tm. Cílový jazyk je u mých pokusů vždy čeština, čili jazykové modely jsou vždy stejné a můžu dokonce převzít ty, které už jsem získal v kroku mert pro en-cs. Vybral jsem tyto kroky:
Jazyky | BLEU | Evaluator | Translate | Mert | Tm | Lm |
de-cs | 0.1532 | s.evaluator.91754 | s.translate.b83a4 | s.mert.fb673 | s.tm.c45f4 | s.lm.9e583 s.lm.51815 |
es-cs | 0.1614 | s.evaluator.75a32 | s.translate.5ad59 | s.mert.ebae4 | s.tm.f0b0d | s.lm.9e583 s.lm.51815 |
fr-cs | 0.1441 | s.evaluator.1e6bb | s.translate.32442 | s.mert.dfbd0 | s.tm.78273 | s.lm.9e583 s.lm.51815 |
Vybrané kroky je třeba zkopírovat na quest:
ssh zen cd $PLAY zip -ry pro_quest.zip všechny_výše_vybrané_kroky ssh quest cd $QPLAY scp zen:$PLAY/pro_quest.zip . unzip pro_quest.zip
Zkopírované kroky jsou plné symbolických odkazů na jazykové a překladové modely, ale tyto odkazy na questu nefungují. Musíme je opravit:
# de-cs cd s.translate.b83a43c4.20131223-0735 rm lmodel-file.1.gz lmodel-file.2.gz ttable-file.1.gz moses ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.1.gz . ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.2.gz . ln -s ../s.tm.c45f438c.20131221-0815/model/phrase-table.0-0.gz ./ttable-file.1.gz ln -s moses.hardlink moses cd .. # es-cs cd s.translate.5ad5995f.20131223-0739 rm lmodel-file.1.gz lmodel-file.2.gz ttable-file.1.gz moses ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.1.gz . ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.2.gz . ln -s ../s.tm.f0b0d576.20131221-0816/model/phrase-table.0-0.gz ./ttable-file.1.gz ln -s moses.hardlink moses cd .. # fr-cs cd s.translate.32442a28.20131223-0742 rm lmodel-file.1.gz lmodel-file.2.gz ttable-file.1.gz moses ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.1.gz . ln -s ../s.mert.20cd7b2b.20130418-1358/lmodel-file.2.gz . ln -s ../s.tm.78273296.20131221-0816/model/phrase-table.0-0.gz ./ttable-file.1.gz ln -s moses.hardlink moses cd ..
Frázová tabulka je pro quest příliš velká. Její filtrování pro konkrétní test set trvá nepřijatelně dlouho (klidně přes čtvrt hodiny) a výsledná tabulka je stejně tak velká, že se nevejde do paměti. Proto je potřeba ji prořezat. Samozřejmě bychom měli fráze na vyhození vybírat nějak inteligentně a u těch zbývajících přepočítat pravděpodobnosti. Rychlá metoda hrubé síly je tato: Pokud mají zdrojová a cílová fráze dohromady větší než předem stanovený počet tokenů, vyhodit. Dlouhý příkaz níže stanovuje maximální počet tokenů na 7.
gunzip -c ttable-file.1.gz | perl -e 'use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; while(<>) {if(m/^(.*?\|\|\|.*?\|\|\|)/){my $prefix = $1; my @preftokens = split(/\s+/, $prefix); if(scalar(@preftokens)>7){next;}} print;}' | gzip -c > ttable-xxx.gz
O spuštění Mosese se správným modelem se stará skript $QCGI/moses-envelope.pl. (Teď nevím, jestli mám jeho kopii i někde mimo quest, potažmo v nějakém repozitáři.) Tento skript zatím sahal automaticky pro angličtinu. Nyní ho budeme muset upravit, aby podle volby vstupního jazyka vybral správný model. Zevnitř se mj. volá tohle:
date ; $traindir/filter-model-given-input.pl $wdir/filtered $translatedir/filtered-for-eval/moses.ini $wdir/corpus.src ; date
Sahá se tam do složky filtered-for-eval
, kde je symbolický odkaz na správnou frázovou tabulku a konfigurační soubor moses.ini
, ve kterém jsou rovněž cesty k jazykovým a překladovým modelům. Jde o absolutní cesty z vnitřní sítě, takže je potřebujeme opravit, aby fungovaly na questu! Mělo by stačit nahradit všechny výskyty cesty /a/LRC_TMP/zeman/statmt/playground
cestou /home/zeman/cgi/czechmate/ufal-smt-playground/playground
:
cd filtered-for-eval cat moses.ini | sed 's:/a/LRC_TMP/zeman/statmt/playground:/home/zeman/cgi/czechmate/ufal-smt-playground/playground:g' > moses1.ini mv moses1.ini moses.ini mv phrase-table.0-0.1.1.gz xxl-phrase-table.0-0.1.1.gz ln -s ../ttable-xxx.gz phrase-table.0-0.1.1.gz cd ..