[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

This is an old revision of the document!


Table of Contents

Joshua

Toto jsou Danovy poznámky k práci s hierarchickým překladovým dekodérem Joshuou (reimplementace Hiera (David Chiang) v Javě od lidí z JHU (Zhifei Li)).

Zdroje informací:

Instalace

Prerekvizity:

Nastavit důležité proměnné (to by se hodilo přidat do .cshrc nebo nějakého podobného konfiguračního souboru).

setenv JAVA_HOME /opt/jdk1.6
setenv SRILM /home/zeman/nastroje/srilm
setenv JOSHUA /net/work/people/zeman/joshua

Stáhnout aktuální verzi Joshuy:

cd $JOSHUA
svn co https://joshua.svn.sourceforge.net/svnroot/joshua/trunk joshua

Přeložit Joshuu:

cd $JOSHUA
ant compile

Kdyby bylo potřeba v budoucnosti překompilovat Joshuu načisto, již zkompilované moduly se dají odstranit pomocí

ant clean

Otestujeme, že je Joshua funkční:

ant test
./example/decode_example_javalm.sh
./example/decode_example_srilm.sh

Joshuu jsem překládal na zenu. Teď je ještě potřeba otestovat, že funguje i na clusteru, třeba na počítači sol1. A ejhle, na 64 bitech přestala fungovat spolupráce se SRILM.

21:35 sol1:/ha/work/people/zeman/joshua> ./example/decode_example_srilm.sh
Jun 1, 2009 9:35:43 PM joshua.decoder.JoshuaConfiguration readConfigFile
INFO: you use a LM feature function, so make sure you have a LM grammar
Exception in thread "main" java.lang.UnsatisfiedLinkError: /ha/work/people/zeman/joshua/lib/libsrilm.so: /ha/work/people/zeman/joshua/lib/libsrilm.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1767)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1692)
        at java.lang.Runtime.loadLibrary0(Runtime.java:840)
        at java.lang.System.loadLibrary(System.java:1047)
        at joshua.corpus.vocab.SrilmSymbol.<init>(SrilmSymbol.java:46)
        at joshua.decoder.JoshuaDecoder.initializeSymbolTable(JoshuaDecoder.java:322)
        at joshua.decoder.JoshuaDecoder.initialize(JoshuaDecoder.java:259)
        at joshua.decoder.JoshuaDecoder.<init>(JoshuaDecoder.java:108)
        at joshua.decoder.JoshuaDecoder.main(JoshuaDecoder.java:684)

Přestože SRILM, který nebyl přeložen na 64 bitech, běží jak na 32, tak na 64 bitech, s Joshuou na 64 bitech spolupracovat neumí (na 32 ano). Nepomůže ani když překlad Joshuy pustím až na 64 bitech (při spolupráci s 32bitovým SRILM).

Nicméně se zdá, že pomohlo následující:

Cluster

Ke spuštění Joshuy na clusteru se hodí např. Ondrova obálka (nebo i ta moje vlastní, ale tu bych neměl nutit např. Gauravovi, když jako jeden z mála pořád pracuju s tcsh).

kinit
ssh lrc-two
cd $JOSHUA
~bojar/tools/shell/qsubmit ./example/decode_example_srilm.sh
qstat -u '*'

Použití

Joshua je nainstalován a funguje. Nyní se musíme naučit, jak ho trénovat a jak ho použít k překladu.

Nejdříve potřebujeme získat paralelní data, to je úkol mimo Joshuu.

Správný soubor s párováním vypadá nějak takhle:

2-0 2-1 2-2 2-3 1-4 2-5 14-8 13-10 8-11 9-11 8-12 8-13 8-14 8-15 5-16 7-16 6-17 4-18 15-19
0-3 7-4 8-5 9-6 10-7 11-8 12-9 13-10 14-11 15-12 16-13 4-15 2-17 3-18 20-19 18-21 21-22 22-23 22-24 22-25 19-26 23-27
0-0 1-1 2-1 3-2 4-4 5-5 7-9 8-16 9-17 10-17 12-17 13-17 14-17 15-17 17-17 18-17 11-18 18-19 18-20 19-21
1-0 4-2 6-4 7-5 7-6 5-7 7-7 6-8 8-9 7-10 8-11 8-12 8-13 11-14 12-17
0-0 1-1 2-1 3-1 7-2 8-3 9-4 6-5 11-6 11-7 12-10 13-11 14-12 15-13 16-14 22-15 23-15 21-16 26-17 17-20 28-22 29-23 27-26 25-28 30-29 31-30 32-30 33-30 33-31 33
-32 34-33

A takhle pustíme Joshuu, aby z trénovacích dat extrahoval gramatiku:

cd $JOSHUA
java -cp bin joshua.prefix_tree.ExtractRules \
    --source=corpus/train.clean.en \
    --target=corpus/train.clean.hi \
    --alignments=model/aligned.grow-diag-final-and \
    --test=corpus/train.clean.en \
    --output=en-hi.grammar.unsorted \
    --maxPhraseLength=5 \
    --print-rules=false

Pozor, je poměrně snadné vyčerpat paměť. Tomu se dá čelit jednak tím, že se přesuneme na stroj, který má více paměti, jednak že zvolíme postup, který je složitější, ale k paměti šetrnější.

Binarizovat zdrojovou část korpusu.

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

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