This is an old revision of the document!
Table of Contents
Danovy pokusy s Joshuou na WMT 2012
http://matrix.statmt.org/
http://www.statmt.org/wmt11/translation-task.html
http://svn.ms.mff.cuni.cz/projects/statmt/wiki/enhi/joshua
/net/work/people/zeman/wmt
Aktuální úkoly
- Udělat pořádek v záznamech.
- Najít a oživit loňské pokusy s interpunkcí, zejména s uvozovkami.
- Zopakovat tytéž pokusy, ale nad letos distribuovanými daty.
- Převést všechny pokusy pod aktuální verzi Joshuy.
- Konečně převést Joshuu pod Emana.
- Převést všechny pokusy na nové zacházení s velkými písmeny (viz Ondřej a čeština).
- Dotáhnout do konce obo-max.
- Při klonování experimentu se musí kopírovat mert/decoder-config.txt.ZMERT.final a změnit v něm cesty! Pozor, mohla se změnit i cesta ke glue gramatice, pokud se změnila cesta k Joshuovi.
- Pro všechny jazykové páry používat všechna dostupná data, tedy i Europarl, neomezovat se na News Commentary. To mj. znamená, že musím pro všechny páry získat nové baseliny.
Srovnávací testy mezi Joshuou 1.1 a 1.3: Je třeba otestovat nastavení maximální délky fráze 5
Po přechodu z Joshuy 1.1 na 1.3 u téměř všech pokusů pokleslo BLEU skóre. Je to sice malý pokles a pravděpodobně není statisticky významný, ale stejně mě to zaráží. Srovnání u češtiny ukázalo, že se liší extrahovaná gramatika. V konfiguraci se už teď nezadává, že maximální délka fráze má být 5. Hraje to nějakou roli?
obo-max
Nejúspěšnější nastavení z roku 2010 (více méně recyklované v roce 2011) bylo obo-max
, nyní přejmenované na obo-max-test2009
, a obo-max3
, nyní přejmenované na obo-max-test2010
. Oba tyto pokusy nyní používají Joshuu 1.3 (stará skóre byla naměřena s Joshuou 1.1 a jinými skripty). Oba používají Ondřejova velká data, tj. 7 miliónů párů vět z Czengu 0.92 na trénování, 13 miliónů českých vět (210 miliónů slov) pro český jazykový model (hexagram), nějaké tokenizační a technické úpravy (jazyky csNm a enNa2). Oba využívají Ondrovy augmented_corpora
(/home/bojar/diplomka/granty/emplus/wmt10/playground/augmented_corpora
). V mých vlastních možná ani nejsou k dispozici zdrojové korpusy. Testovací korpus má u Ondry název wmt102.test09
, resp. wmt102.test10
. V obou případech ladím váhy na wmt102.test08
.
Vytvořil jsem ještě i analogické obo-max-test2011
, ale zatím to má háček. Ondrovy augmented_corpora
neobsahují newstest2011
. Takže jsem se vyhnul pouštění prepare.pl
, přeplácnul jsem svou kopii testovacích souborů svou kopií newstest2011
, což navíc neprošlo stejnou úpravou jako ostatní Ondrova data (není to tedy ve skutečnosti jazyk csNm, resp. enNa2, ale obyčejné moje cs a en; byť jsem je přejmenoval, aby to fungovalo).
Výsledek | Test 2009 | Test 2010 | Test 2011 |
---|---|---|---|
Starý (Joshua 1.1) | 0.1300 | 0.1402 | |
Nový (25.1.2012, Joshua 1.3) | 0.1381 | 0.1477 | 0.1452 |
Data
Vývojová data (news-test
) jsou k dispozici ve formátu SGML. Obsahují pouze jeden referenční překlad, takže stačí vykopat obsah prvků <seg>
. Výsledek strčit do augmented_corpora
.
Ondřejova data
Ondřejovy augmented corpora se nacházejí v /home/bojar/diplomka/granty/emplus/wmt10/playground/augmented_corpora
(což vede na /a/merkur3/TMP/bojar/wmt10/playground/augmented_corpora
). Za baseline se považuje trénování na zpravodajské části Czengu, tj. czeng092-ne
. Uvnitř jsou různé podjazyky podle úrovně analýzy. Zdá se, že baseline by mohly být např. enNa
a csNa
, ale Ondřej prý pro WMT 2010 používal enNa2+stc
a csN[ma]+stc
(csNa
a csNm
jsou prý identické). Faktor stc
znamená supervised truecasing, čili truecasováno podle lemat. Ondřej korpus zarovnával podle lemat, tj. enNa-lemma-csNa-lemma-gdfa
. Český jazykový model Ondřej vyráběl z wmt10mono2
, a to šestigramový.
Vysvětlení Ondrových pseudojazyků:
- Znaky za
cs
, resp.en
, označují anotaci, kterou data prošla v TectoMT (Ondra na to má scénář v adresářiaugmented_corpora
, ale možná to není commitnuté). Nm
značí s normalizací (jako uvozovky, 'll apod.) a jen po morfologickou rovinu.Na
je s normalizací až po t-rovinu, ale uloženo jako analytická, tj. co token, to analytický uzel, a některé mají kolonku t-lematu a formému neproškrtnutou.Na2
je jakoNa
, ale Ondra nějak měnil ten normalizační blok. Do soutěže šlo právěNa2
.Nt
je linearizovaná t-rovina.X1
je Ondrův pokus o frázovou interlingvu, tj. sice stále lineární, ale některé věci (jako zvratná zájmena nebo v angličtině další součástky slovesa) pravidlově přemístěny blíž ke slovesu. Neúspěšné, tak neví přesně._txt
je prostý text bez tokenizace, začátek všeho, odpovídá releasnutému CzEngovému plaintextu.
Ondřejův maximální paralelní korpus navíc obsahuje další části Czengu a korpus Emea: czeng092-ne+czeng092-eu+czeng092-fi+czeng092-te+czeng092-su+czeng092-we+emea2
(alignment csNm-lemma-enNm-lemma-gdfa
).
Pro český jazykový model chtěl Ondřej později ještě přidat korpusy wmt09mono
, webcoll
a syn200x
.
Testovací data by měl mít stejná jako já, tj. wmt102.test08
pro MERT a wmt102.test09
pro testování.
Výsledky
Není-li řečeno jinak, váhy se ladí na newstest2008 a testuje se na newstest2009. Trénuje se zatím na news-commentary, a to jak překladový, tak jazykový model. U testu WMT 2010 se jako základní uvádí BLEU skóre, které mi spočítal Joshua, v závorce pak skóre, které mi spočítali organizátoři, lowercase / truecase. Hodnoty se někdy výrazně liší, zřejmě kvůli odlišné tokenizaci.
Pokus | Dev WMT08 | Test WMT09 | Test WMT10 | Poznámka | Datum |
decs-josh13 | 0.0935 | 0.0886 | 15.3.2010 | ||
escs-josh13 | 0.0922 | 0.0872 | 15.3.2010 | ||
frcs-josh13 | 0.0885 | 0.0818 | Zřetelně menší trénovací data než pro encs, decs a escs. | 15.3.2010 |
Pokusy s uvozovkami
Paralelní data, která máme k dispozici, používají velmi různorodou směs znaků pro uvozovky. Často také není poznat, zda jde o počáteční, nebo koncové uvozovky. Napsal jsem skript, který se tohle pokusí rozpoznat (je jazykově závislý), a znaky pro uvozovky sjednotit. Všechny korpusy jsem tímto skriptem protáhl a vznikly verze označené v6b
(včetně vývojových a testovacích dat). Nyní je třeba pustit všechny pokusy znova a zjistit, zda to nějak ovlivní skóre.
$STATMT/scripts/specchar.pl
Takhle se upraví korpus v augmented_corpora
, aby vznikla verze v6b (korpus musíme také označkovat, protože budeme potřebovat faktory lemma a stc):
cd /net/work/people/zeman/wmt
Do Makefile přidáme nově upravené korpusy, mající v názvu “.v6b.”, např.:
EUROPARL = $(foreach pair,es-en/es es-en/en,europarl-v6b.$(pair)) NEWSCOMM = $(foreach pair,es-en/es es-en/en,news-commentary-v6b.$(pair))
Ale pozor! Jestliže jsme už předtím zpracovali jiný jazykový pár, musíme ho z Makefile alespoň dočasně vyhodit! Jinak si novým zkopírováním zdrojových korpusů přepíšeme případnou označkovanou verzi korpusu!
make corpus CORPUS=europarl-v6b.fr-en LANGUAGE=fr
Teď použijeme TectoMT/Treex a cluster k označkování nových korpusů. Původní aplikace se nachází v $TMT_ROOT/applications/reordering/actag
, ale už v ní přestala fungovat němčina, protože ze sdílené složky zmizel natrénovaný model pro TreeTagger. Nová aplikace se nachází v $TMT_ROOT/treex/devel/reordering/actag
, ale zatím v ní funguje pouze němčina.
cd $TMT_ROOT/treex/devel/reordering/actag nohup nice make CORPUS=europarl-v6b.fr-en LANGUAGE=fr >& make-euro-fren-fr.log & nohup nice make CORPUS=europarl-v6b.fr-en LANGUAGE=en >& make-euro-fren-en.log & nohup nice make CORPUS=news-commentary-v6b.fr-en LANGUAGE=fr >& make-news-fren-fr.log & nohup nice make CORPUS=news-commentary-v6b.fr-en LANGUAGE=en >& make-news-fren-en.log &
No a nyní již můžeme naklonovat nové pokusy. I když můžeme naklonovat oba směry (např. “fren” a “enfr”) těsně po sobě, se spuštěním druhého směru by to chtělo počkat kvůli zámkům a vzájemnému nepřetahování se o práci, až než u prvního směru doběhne fáze “prepare”.
$STATMT/joshua-scripts/clonex.pl fren-stc-allemma-tmnews+parl-lmnews+parl-lm6-test2011 fren-stc-allemma-tmv6b-lmv6b-lm6-test2011 cd fren-stc-allemma-tmv6b-lmv6b-lm6-test2011 $STATMT/joshua-scripts/resetex_scripts.pl vim scripts/setexp.pl $ac_tmtrain = 'news-commentary-v6b.fr-en+europarl-v6b.fr-en';
Dotažení do konce: i vývojová a testovací data musí být ve verzi v6b. Můžeme přeskočit alignment a trénování jazykového modelu, ale musíme pustit prepare.pl
, abychom získali upravená data!
$STATMT/joshua-scripts/clonex.pl encs-stc-allemma-tmv6b-lmv6b-lm6-test2011 encs-stc-allemma-tmv6b-lmv6b-lm6-test2011v6b cd encs-stc-allemma-tmv6b-lmv6b-lm6-test2011v6b $STATMT/joshua-scripts/resetex_scripts.pl vim scripts/setexp.pl $ac_dev = 'newstest2008-v6b'; $ac_test = 'newstest2011-v6b'; (qsub.pl) scripts/prepare.pl nohup nice $STATMT/joshua-scripts/joshua.pl extract > & joshua.log &
Pokusy s uvozovkami začaly na jaře 2011. Tehdy jsem upravil pouze trénovací data (Europarl a News-Commentary) pro všechny čtyři jazykové páry. K poslední úpravě došlo 21.4.2011. Vracím se k tomu 16.1.2012. Nejdříve pouštím všechny tehdejší pokusy znova, potom přidám i úpravu vývojových a testovacích dat.
Nový průběh všech osmi starých pokusů (supervised truecasing, žádná normalizace uvozovek, nové je na nich paralelní počítání alignmentu, ale výsledek by měl být identický – nekontroloval jsem): $SRC$TGT-stc-allcstem4-tmnews+parl-lmnews+parl-lm6-test2011
, v tabulce uvedeno jako “v6”. Varianta, ve které byly uvozovky upraveny pouze v trénovacích datech ($SRC$TGT-stc-allemma-tmv6b-lmv6b-lm6-test2011
), je označena “v6b-tr”. Varianta, ve které úpravou uvozovek prošla i vývojová a testovací data ($SRC$TGT-stc-allemma-tmv6b-lmv6b-lm6-test2011v6b
), je označena “v6b”.
Jazyky | v6 | v6b-tr | v6b |
---|---|---|---|
en-cs | 0.1191 | 0.1246 | |
cs-en | 0.1692 | 0.1792 | |
en-de | 0.1337 | 0.1274 | |
de-en | 0.1885 | 0.1859 | |
en-es | 0.2573 | 0.2531 | |
es-en | 0.2446 | 0.2375 | |
en-fr | 0.2591 | 0.2619 | |
fr-en | 0.2243 | 0.2285 |
Pokusy s Emanem
Tohle jsou data, která Ondřej použil pro svůj „malý pokus“:
SRCAUG=enNmT1+stc
TGTAUG=csNmT1+stc
ALILABEL=enNmT1-lemma-csNmT1-lemma
DEV: wmt10
TEST: wmt11
Kopie příslušných korpusů jsou na mém hřišti v těchto krocích (ukázáno rovnou na inicializaci kroku dandata):
/home/zeman/projekty/statmt/playground/corpman --wait wmt10/csNmT1+stc SRC=en TGT=cs IMPORTCORPUS=yes TRALS=s.corpus.60681730.20120201-2157 TRALT=s.corpus.892024c6.20120201-2157 TRTMS=s.corpus.402e5219.20120201-2302 TRTMT=s.corpus.d8e0b2d7.20120201-2157 TRLMT=s.corpus.d8e0b2d7.20120201-2157 DEVS=s.corpus.e46c791e.20120201-2159 DEVT=s.corpus.c3230ea2.20120201-2201 TESTS=s.corpus.7b9dc07b.20120201-2205 TESTT=s.corpus.d0ef157e.20120201-2208 eman init dandata s.dandata.1d1f8734.20120203-1125 wmt10/enNmT1+stc = s.corpus.e46c791e.20120201-2159 wmt10/csNmT1+stc = s.corpus.c3230ea2.20120201-2201 wmt11/enNmT1+stc = s.corpus.7b9dc07b.20120201-2205 wmt11/csNmT1+stc = s.corpus.d0ef157e.20120201-2208 Korpusy pro alignment: s.corpus.60681730.20120201-2157 s.corpus.892024c6.20120201-2157 GIZASTEP=s.mosesgiza.8a492679.20120202-1628 DATASTEP=s.dandata.1d1f8734.20120203-1125 ALISYM=gdfa eman init danalign s.danalign.9fb3696a.20120203-1128 JOSHUASTEP=s.joshua.2723ccd9.20120131-1031 ALIGNSTEP=s.danalign.9fb3696a.20120203-1128 eman init binarize --start --mem 31g s.binarize.4576151d.20120203-1524 BINARIZESTEP=s.binarize.4576151d.20120203-1524 FOR=dev eman init extract --start s.extract.95792bfb.20120203-1528 BINARIZESTEP=s.binarize.4576151d.20120203-1524 FOR=test eman init extract --start s.extract.01f5693c.20120203-1528 SRILMSTEP=s.srilm.e99247ad.20120201-0921 DATASTEP=s.dandata.1d1f8734.20120203-1125 ORDER=5 eman init danlm --start s.danlm.06d337e0.20120203-1600 LMSTEP=s.danlm.06d337e0.20120203-1600 EXTRACTSTEP=s.extract.95792bfb.20120203-1528 eman init zmert --start s.zmert.884b636b.20120203-1602 MERTSTEP=s.zmert.884b636b.20120203-1602 EXTRACTSTEP=s.extract.01f5693c.20120203-1528 eman init daneval --start s.daneval.96709ff9.20120203-1603
Výsledek Danova pokusu s Ondřejovými malými daty:
BLEU = 0.1185
(Ondřej měl s Mosesem asi 0.1230.)
Ještě je potřeba to testovat stejným skriptem jako Ondřej, abychom použili stejnou tokenizaci a taky abychom dostali rozptyl skóre.