Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
user:zeman:joshua [2009/06/03 22:35] zeman Konfigurační soubor Joshuy. |
user:zeman:joshua [2009/06/04 11:19] zeman Příprava spuštění Z-MERTu. |
* http://www.clsp.jhu.edu/wiki2/JosHUa_-_JHU_Open_Source_Architecture - wiki Joshuy na JHU, jenže jak sami říkají, zastaralá | * http://www.clsp.jhu.edu/wiki2/JosHUa_-_JHU_Open_Source_Architecture - wiki Joshuy na JHU, jenže jak sami říkají, zastaralá |
* http://www.clsp.jhu.edu/wiki2/Joshua_Lab - cvičení s Joshuou na JHU, všechno už mají nainstalováno, ale u nich. Nicméně z toho vyplývá, že to pouštějí na clusteru 64bitových strojů (dokonce něco mají zkompilováno pro ně a nepoběží to jinde) se Sun Grid Engine | * http://www.clsp.jhu.edu/wiki2/Joshua_Lab - cvičení s Joshuou na JHU, všechno už mají nainstalováno, ale u nich. Nicméně z toho vyplývá, že to pouštějí na clusteru 64bitových strojů (dokonce něco mají zkompilováno pro ně a nepoběží to jinde) se Sun Grid Engine |
* http://sourceforge.net/projects/joshua - download (ale viz též níže), jinak toho tu moc není | * http://joshua.sourceforge.net/ - download, trocha dokumentace (hlavně té automaticky vygenerované, javadoc) |
| * http://sourceforge.net/projects/joshua - kupodivu ne totéž jako nahoře. Download (ale viz též níže), jinak toho tu moc není |
| |
===== Instalace ===== | ===== Instalace ===== |
| |
<code bash>java -Xmx2000m -Xms2000m -cp $JOSHUA/bin joshua.prefix_tree.ExtractRules --binary-source=true --binary-target=true --source=model/corpus.en.bin --target=model/corpus.hi.bin --source-vocab=model/vocab.en.bin --target-vocab=model/vocab.hi.bin --source-suffixes=model/suffixes.en.bin --target-suffixes=model/suffixes.hi.bin --alignmentsType=MemoryMappedAlignmentGrids --alignments=model/alignments.bin --test=corpus/test.lowercased.en --output=model/en-hi.grammar.unsorted --maxPhraseLength=5</code> | <code bash>java -Xmx2000m -Xms2000m -cp $JOSHUA/bin joshua.prefix_tree.ExtractRules --binary-source=true --binary-target=true --source=model/corpus.en.bin --target=model/corpus.hi.bin --source-vocab=model/vocab.en.bin --target-vocab=model/vocab.hi.bin --source-suffixes=model/suffixes.en.bin --target-suffixes=model/suffixes.hi.bin --alignmentsType=MemoryMappedAlignmentGrids --alignments=model/alignments.bin --test=corpus/test.lowercased.en --output=model/en-hi.grammar.unsorted --maxPhraseLength=5</code> |
| |
| |
===== Decoding ===== | ===== Decoding ===== |
#wordpenalty weight | #wordpenalty weight |
wordpenalty -2.844814</code> | wordpenalty -2.844814</code> |
| |
| No a nakonec příkaz, kterým pustíme Joshuu s naším konfiguračním souborem (na clusteru): |
| |
| <code>qsub.csh \ |
| "java -Xmx1200m -Xms1200m -cp $JOSHUA/bin joshua.decoder.JoshuaDecoder \ |
| ~zeman/projekty/hindstina/joshua-config-tides-dev.txt \ |
| $HINDI/corpus/dev.lowercased.en \ |
| $HINDI/dev.nbest.out"</code> |
| |
| I když si v konfiguračním souboru řekneme, že chceme N-best výstup pro N=1, dostaneme ho ve formátu, který je připraven na více hypotéz (každý překlad např. obsahuje skóre a váhy). Abychom z toho dostali obyčejný 1-best překlad, můžeme použít Zhifeiův skript, který je k Joshuovi přibalen ve složce example2: |
| |
| <code>$JOSHUA/example2/get_1best_from_Nbest.pl $HINDI/output/dev.nbest.out $HINDI/output/dev.1best.out</code> |
| |
| ===== Vyhodnocení úspěšnosti ===== |
| |
| 1-best výstup Joshuy a referenční překlad bychom mohli převést do příslušného XML formátu a pustit na ně oficiální externí perlový skript, který počítá BLEU skóre. Pro výsledná čísla do článku bychom to tak také měli udělat. |
| |
| Jinak ale Joshua obsahuje svůj vlastní kód pro vyhodnocování. Přehled parametrů jeho volání se dozvíme, když ho zavoláme bez argumentů: |
| |
| <code>java -cp $JOSHUA/bin joshua.util.JoshuaEval</code> |
| |
| S využitím většiny defaultů stačí dodat jméno vyhodnocovaného souboru a jméno souboru s referenčním překladem: |
| |
| <code>java -cp $JOSHUA/bin joshua.util.JoshuaEval \ |
| -cand $HINDI/output/dev.1best.out \ |
| -ref $HINDI/corpus/dev.lowercased.hi</code> |
| |
| Bez MERTu mi zatím vyšlo BLEU = 0.0807. |
| |
| ===== MERT ===== |
| |
| Celý proces by nebyl úplný bez MERTu, což je zkratka za Minimum Error Rate Training. V principu jde o to, že se dekodér opakovaně pouští na vývojová data a na základě změřené úspěšnosti se postupně optimalizují váhy překladového modelu, jazykového modelu a případně dalších složek. V Joshuovi je pro tento účel integrován javovský nástroj Z-MERT. |
| |
| Většina parametrů se Z-MERTu předává prostřednictvím konfiguračního souboru. Přehled volání Z-MERTu se dozvíme takto: |
| |
| <code>java -cp $JOSHUA/bin joshua.zmert.ZMERT -h</code> |
| |
| Příklad použití Z-MERTu najdeme ve složce ''$JOSHUA/ZMERT_example''. Můžeme si zkopírovat a upravit tamější konfigurační soubor ''ZMERT_config_ex2.txt''. Některé numerické parametry (počáteční váhy například) jsou v samostatném souboru ''params.txt'', který si také musíme zkopírovat. Pro jistotu si také uděláme kopii vývojových dat. |
| |
| Dále potřebujeme soubor (vlastně skript: měl by být spustitelný), ve kterém bude napsáno, jak volat dekodér. A, samozřejmě, také soubor s konfigurací dekodéru. |
| |
| <code>cd $HINDI/mert |
| cp ../corpus/dev.lowercased.en src.txt |
| cp ../corpus/dev.lowercased.hi ref.txt |
| cp $JOSHUA/ZMERT_example/config_ex2.txt decoder-config.txt |
| vi decoder-config</code> |
| |
| Změněné parametry: |
| |
| <code>lm_file=/net/work/people/zeman/hindstina/lm/train.lowercased.hi.lm |
| tm_file=/net/work/people/zeman/hindstina/model/en-hi-dev.grammar.gz |
| glue_file=/net/work/people/zeman/joshua/grammars/hiero.glue |
| order=3</code> |
| |
| <code>cp $JOSHUA/ZMERT_example/decoder_command_ex2 decoder_command |
| chmod 755 decoder_command |
| vi decoder_command</code> |
| |
| Ve volání dekodéru musíme změnit cesty ke konfiguračnímu, zdrojovému a cílovému souboru. |
| |
| <code>java -Xmx1200m -Xms1200m -cp $JOSHUA/bin joshua.decoder.JoshuaDecoder \ |
| $HINDI/mert/decoder-config.txt \ |
| $HINDI/mert/src.txt \ |
| $HINDI/mert/nbest.txt</code> |
| |
| V konfiguraci Z-MERTu zohledníme právě upravené volání a konfiguraci dekodéru. |
| |
| <code>cp $JOSHUA/ZMERT_example/params.txt . |
| cp $JOSHUA/ZMERT_example/ZMERT_config_ex2.txt zmert-config.txt |
| vi zmert-config.txt</code> |
| |
| Změněné parametry: |
| |
| <code>-dir /net/work/people/zeman/hindstina/mert # working directory |
| -s src.txt # source sentences file name |
| -r ref # target sentences file name (in this case, file name prefix) |
| -rps 1 # references per sentence |
| -maxIt 5 # maximum MERT iterations |
| -cmd ./decoder_command # file containing commands to run decoder |
| -decOut nbest.txt # file produced by decoder |
| -dcfg decoder-config.txt # decoder config file</code> |
| |
| No a teď už můžeme spustit Z-MERT (případně to celé dát do uvozovek a před to ''~zeman/bin/qsub.csh''): |
| |
| <code>java -cp $JOSHUA/bin joshua.zmert.ZMERT -maxMem 500 \ |
| $HINDI/mert/zmert-config.txt \ |
| > $HINDI/mert/zmert.out</code> |