====== Danovy pokusy na WMT 2013, Sofija ====== http://matrix.statmt.org/ http://www.statmt.org/wmt13/translation-task.html http://www.dfki.de/appraise/wmt13/ /net/work/people/zeman/wmt ===== Aktuální úkoly ===== * Binarizace a prořezání jazykových modelů. Nějak prořezávat lze i paralelní trénovací data, Edinburgh loni něco takového použil a citoval. * Proč mi letos vyšly tak špatně jazykové páry s češtinou bez angličtiny? Udělal jsem nějakou chybu při vyrábění průniku trénovacích dat? Jsou menší nebo špatně spárovaná? * Proč při překladu odkudkoliv do angličtiny to s jazykovým modelem na newsall (tj. starý, nevím jak je to s novým news8all) dopadne malinko hůř než bez něj? Nemělo by to spíš dopadnout zřetelně líp? Co je s ním? Jak je velký? Jakou dostal váhu? Jak se po jeho přidání změnil výstup překladu? * danmake.pl na rozdíl od emana nerozlišuje kroky, které jsou OUTDATED nebo FAILED. Když mu eman select pro nějakou sadu požadavků najde několik kroků, z nichž první je nějak vadný a druhý je DONE, danmake klidně použije ten první a pak se diví. * Nějak tu chybí pořádná tabulka loňských výsledků. To je mám opisovat z článku na WMT? * Jazykové modely gigaword/czeng + newseuro + newsall * Velká paralelní data un, gigafren, czeng * Pokusit se napodobit Ondrův nejlepší výsledek. * Použít stejná data jako on nebo lepší (to znamená přinejmenším celý Czeng a velká jednojazyčná data; Ondra ale prý vynechal Europarl, ten já vynechat nechci). * Natrénovat stejné modely jako on. Přinejmenším mi zatím chybí lexical reordering model. Ondra navíc prováděl ještě nějaké čachry se značkami (jazykový model na morfologických značkách). * Srovnat supervised truecasing, který používám teď, s něčím méně sofistikovaným. Nezmenšovat první písmeno slova uprostřed věty jen proto, že moje lematizace nezná dané slovo jako vlastní jméno (např. "doktor Chaloupka" by se neměl změnit na "doktor chaloupka"). * Prohnat všechna data Morfessorem a vyhodnotit překlad s ním. * Otestovat vliv omezení délky fráze na 5 tokenů (zkusit i default a 10). * Pro všechny jazykové páry používat všechna dostupná data. Například velký Czeng pro češtinu, velké korpusy UN pro francouzštinu a španělštinu, gigawordy pro jazykové modely atd. * Převést všechny pokusy pod aktuální verzi Joshuy (ale bacha, možná bude hodně jiná). * Dohnat pokusy s anglickým Gigawordem. * Merty běží (1.5.2013), ale většina těchto modelů je příliš velkých (dekodérům nestačilo 120 GB paměti), takže se budou ještě dlouho přetahovat o ''iridium'' a termín určitě nestihnou. * Pokračovat v práci na gigafren. Překladový model je natrénovaný, je potřeba vyrobit kroky model, mert, translate a evaluator. * Běží 4 obří merty... (přelom dubna a května 2013). Pokud nespadnou, budou se ještě řadu týdnů přetahovat o iridium, protože nikam jinam se nevejdou, ani jejich dekodéry ne. * Nová data pro rok 2013. * Modely s Gigawordem (zejména tím anglickým) ještě asi poběží několik týdnů, jsou příliš veliké. Ostatní je snad hotovo. * Jsou tu nicméně data, která jsem zatím nepoužil vůbec (viz níže). Výhledově se podívat i na ně. Jde zejména korpus Common Crawl a přídavná ruská data (Yandex). * Vývojová a testovací data: * Kvůli ruštině musím pro nové pokusy (nad news8) přepnout DEV z 2010 na 2012. * Od pondělního odpoledne 29.4.2013 všechny nové pokusy testovat na wmt2013. * Inventura trénovacích dat: * Europarl je stejný jako loni, tedy verze 7. * News Commentary jsou nové a trochu větší, navíc s ruštinou, verze 8. * Newsall je nové, protože přibyl rok 2012 a ruština. * Korpus UN bude asi stejný, i když to na stránkách WMT výslovně nepíšou. Totéž gigafren. * Gigawordy používám správné (ověřeno): en 5, es 3, fr 3. * Navíc je úplně nový korpus Common Crawl (prý je ale špinavý). Ten zatím nepoužívám a do termínu už to nestihnu. ===== 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ů ''''. 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ář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í. ===== 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 & 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 | ===== 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. ===== Jak zpracovat obří korpus Treexem, třeba označkovat Gigaword? ===== 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''.