http://matrix.statmt.org/
http://www.statmt.org/wmt13/translation-task.html
http://www.dfki.de/appraise/wmt13/
/net/work/people/zeman/wmt
iridium
a termín určitě nestihnou.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?
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 |
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ř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ů:
cs
, resp. en
, označují anotaci, kterou data prošla v TectoMT (Ondra na to má scénář v adresáři augmented_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 jako Na
, 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í.
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 & for y in 2008 2009 2010 2011 ; do for l in cs de en es fr ; do nohup nice make CORPUS=newstest$y-v6b LANGUAGE=$l >& make-newstest$y-$l.log & done done
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”. Varianta “v7”: nová trénovací data (verze 7 News Commentary a Europarlu pro WMT 2012) už jsou defaultně s upravenými uvozovkami; vývojová a testovací data jsou v tomto případě shodná s v6b. Verze wmt12 se od v7 liší tím, že netestujeme na newstest2011, ale newstest2012.
Šest přídavných jazykových párů: čeština s němčinou, španělštinou a francouzštinou. Tyto jazykové páry nejsou součástí shared task. Organizátoři pro ně ani neposkytují trénovací data, ale ta je možné získat hledáním shodných vět v dotyčných jazycích v páru s angličtinou. Ve všech případech jsem dostal kolem 690 tisíc párů vět.
Sloupec Moses je první odpovídající pokus s Mosesem, už nad wmt12 (dev wmt10) a s jednojazyčným sjednocením news-europarl pro jazykový model.
Jazyky | v6 | v6b-tr | v6b | v7 | wmt12 | Moses | +NewsAll | +Gigaword | Czeng |
---|---|---|---|---|---|---|---|---|---|
en-cs | 0.1191 | 0.1246 | 0.1257 | 0.1299 | 0.1161 | 11.96±0.50 | |||
cs-en | 0.1692 | 0.1792 | 0.1801 | 0.1814 | 0.1661 | 17.96±0.50 | 0.2022 | 0.2225 | |
en-de | 0.1337 | 0.1274 | 0.1334 | 0.1350 | 0.1359 | 14.26±0.52 | |||
de-en | 0.1885 | 0.1859 | 0.1896 | 0.1915 | 0.1880 | 18.77±0.53 | |||
en-es | 0.2573 | 0.2531 | 0.2627 | 0.2756 | 0.2757 | 27.78±0.65 | |||
es-en | 0.2446 | 0.2375 | 0.2497 | 0.2562 | 0.2699 | 22.19±0.58 | |||
en-fr | 0.2591 | 0.2619 | 0.2526 | 0.2729 | 0.2572 | 25.99±0.63 | |||
fr-en | 0.2243 | 0.2285 | 0.2384 | 0.2448 | 0.2391 | 24.59±0.68 | |||
cs-de | 0.1304 | 13.65±0.54 | 0.1529 | ||||||
de-cs | 0.1186 | 12.12±0.52 | |||||||
cs-es | 0.1848 | 19.52±0.52 | 0.2214 | 0.2243 | |||||
es-cs | 0.1220 | 12.81±0.54 | |||||||
cs-fr | 0.1822 | 19.53±0.55 | 0.2169 | ||||||
fr-cs | 0.1175 | 12.53±0.57 |
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.
Dosud jsem používal obyčejné treex -p, kde se přesměrovává standardní výstup do nějakého souboru. Pro velké korpusy, které se zpracovávají několik dní na půlce clusteru, tohle není ten nejvhodnější způsob. Vždy je pravděpodobné, že pár strojů umře a pro pár dokumentů nám bude výstup chybět. Potom se obtížně dohledává, které dokumenty to byly a jak je opravit.
Martin preferuje jiný způsob. Tisíce vstupních souborů leží v nějaké adresářové struktuře, někdy i vícepatrové, aby se předešlo jedné složce, která obsahuje třeba 100000 souborů. Paralelní Treex nepíše na standardní výstup, který by se beztak musel ukládat do nějakých souborů s číslovanými jmény. Místo toho Treex vytváří výstupní adresářovou strukturu, která odpovídá té vstupní, ale vedle kopií vstupních souborů tam navíc leží i ty výstupní. Snadno se pak zjistí, který výstupní soubor chybí nebo je v nepořádku a který skript se má pustit znova.
Martinův postup lze vykoukat z treex/devel/en2cs/mononews/Makefile
.