[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
user:zeman:joshua [2009/06/03 19:02]
zeman
user:zeman:joshua [2009/06/04 10:06]
zeman První výsledek.
Line 7: Line 7:
   * 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 =====
Line 117: Line 118:
 <code>java -cp bin joshua.corpus.suffix_array.SuffixArray $WORK/corpus/train.clean.en $WORK/model/vocab.en.bin $WORK/model/corpus.en.bin $WORK/model/suffixes.en.bin</code> <code>java -cp bin joshua.corpus.suffix_array.SuffixArray $WORK/corpus/train.clean.en $WORK/model/vocab.en.bin $WORK/model/corpus.en.bin $WORK/model/suffixes.en.bin</code>
  
-java -Xmx2000m -Xms2000m -cp $JOSHUA/bin --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+Takto se extrahuje gramatika pro konkrétní testovací data s pomocí binarizovaného korpusu: 
 + 
 +<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 ===== 
 + 
 +Jakmile máme gramatiku (tj. překladový model), můžeme dekódovat neboli překládat. Bývá sice zvykem ještě nejdříve vyladit váhy jednotlivých komponent pomocí MERTu, ale MERT sám už dekódování používá a teoreticky se můžeme spokojit s dekódováním pomocí odhadnutých, nevyladěných vah. 
 + 
 +Parametry dekódování se zadávají prostřednictvím konfiguračního souboru. Vytvoříme si ho třeba tak, že zkopírujeme a upravíme konfigurační soubor, který byl přibalen k Joshuovi v jednom z příkladů (example2). Konfigurační soubor obsahuje následující parametry: 
 + 
 +Cesta k souboru s jazykovým modelem. Zatím předpokládám, že to má být soubor ve formátu SRILM, i když SRILM nepoužijeme a místo něj použijeme javovské jazykové modelování, které je součástí Joshuy. Jazykový model může být zagzipován. Cesta k souboru může být relativní. 
 + 
 +<code>lm_file=$WORK/lm/train.lowercased.hi.lm</code> 
 + 
 +Cesta k souboru s překladovým modelem, tedy s gramatikou vyextrahovanou pro daný testovací soubor. Formát má být stejný, jako produkuje Hiero. Předpokládám, že je to i defaultní formát, který produkuje Joshua, po setřídění s odstraněním duplicit a po zagzipování. 
 + 
 +<code>tm_file=$WORK/model/en-hi-dev.grammar.gz 
 +tm_format=hiero</code> 
 + 
 +Jakýsi spojovací soubor, glue_file. Vůbec nevím, co to je. Joshua ale jeden obsahuje a vypadá dost obecně, takže možná nezávisí na konkrétních trénovacích datech. 
 + 
 +<code>glue_file=$JOSHUA/grammars/hiero.glue 
 +glue_format=hiero</code> 
 + 
 +Konfigurace jazykového modelu. Kopíruju ji z example2, akorát měním order na 3, protože jsem trénoval trigramy, nikoli čtyřgramy. 
 + 
 +<code>#lm config 
 +use_srilm=false 
 +lm_ceiling_cost=100 
 +use_left_euqivalent_state=false 
 +use_right_euqivalent_state=false 
 +order=3</code> 
 + 
 +Konfigurace překladového modelu. Kopíruju ji z example2, aniž bych tušil, co znamená. 
 + 
 +<code>#tm config 
 +span_limit=10 
 +phrase_owner=pt 
 +mono_owner=mono 
 +begin_mono_owner=begin_mono 
 +default_non_terminal=X 
 + 
 +#pruning config 
 +fuzz1=0.1 
 +fuzz2=0.1 
 +max_n_items=30 
 +relative_threshold=10.0 
 +max_n_rules=50 
 +rule_relative_threshold=10.0</code> 
 + 
 +Konfigurace N-best listu (dekodér vrací N překladových hypotéz, které se mu jeví jako nejlepší, seřazených podle skóre, které jim přiřadil). Pro MERT potřebujeme N nejlepších hypotéz, abychom mohli každou z nich porovnat s referenčními překlady, spočítat BLEU skóre a případně upravit váhy, pokud má nejlepší BLEU skóre hypotéza, která se celkovým skóre nedostala na začátek seznamu, ale při jiném vyvážení komponent by se tam mohla dostat. Pro závěrečný překlad testovacích dat obvykle N nejlepších hypotéz nepotřebujeme, chceme znát rovnou tu, kterou systém považuje za úplně nejlepší. 
 + 
 +<code>#nbest config 
 +use_unique_nbest=true 
 +use_tree_nbest=false 
 +add_combined_cost=true 
 +top_n=300</code> 
 + 
 +Další sekce se týkají vzdáleného serveru pro jazykové modelování a paralelního dekodéru. Tyto sekce vynechávám, protože se nezdá, že bychom je v současné době využili. 
 + 
 +Následují váhy jednotlivých komponent ("features"), tedy jazykového modelu, frázového modelu a případně dalších. 
 + 
 +<code>###### model weights 
 +#lm order weight 
 +lm 1.000000 
 + 
 +#phrasemodel owner column(0-indexed) weight 
 +phrasemodel pt 0 1.066893 
 +phrasemodel pt 1 0.752247 
 +phrasemodel pt 2 0.589793 
 + 
 +#arityphrasepenalty owner start_arity end_arity weight 
 +#arityphrasepenalty pt 0 0 1.0 
 +#arityphrasepenalty pt 1 2 -1.0 
 + 
 +#phrasemodel mono 0 0.5 
 + 
 +#wordpenalty weight 
 +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.

[ Back to the navigation ] [ Back to the content ]