[ 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

Next revision
Previous revision
Next revision Both sides next revision
user:zeman:joshua [2009/06/01 16:42]
zeman vytvořeno
user:zeman:joshua [2009/06/03 09:46]
zeman Pozor na --print-rules=false.
Line 1: Line 1:
 ====== Joshua ====== ====== 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).+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í: Zdroje informací:
   * Soubory ''INSTALL'' a ''README'' přímo v balíčku s Joshuou.   * Soubory ''INSTALL'' a ''README'' přímo v balíčku s Joshuou.
 +  * 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://sourceforge.net/projects/joshua - download (ale viz též níže), jinak toho tu moc není
  
 ===== Instalace ===== ===== Instalace =====
  
-Pozoraby to běželo na clusteru LRC, je potřeba to překládat pro 64bitovou architekturuV nejhorším případě přímo na clusteru samém.+Prerekvizity: 
 +  * Ant: kompilátor a make Javy. Máme ho v ''/usr/bin/ant'' 
 +  * Swig: nástroj na propojení kódu napsaného v různých jazycích, v tomto případě Joshuy (Java) na SRILM (céčko). Máme ho v ''/usr/bin/swig'' 
 +  * [[SRILM]]: nástroj Andrease Stolckeho na trénování a používání jazykových modelů, běžně používaný se strojovými překladačijako je Pharaoh, Hiero, Moses, Joshua. Máme nainstalováno nejspíš mnohokrát, v podstatě si každý instaluje svou kopii. Podrobnosti o instalaci viz odkaz na začátku tohoto bodu. Pozor, aby instalace fungovala na stroji (architektuře), na kterém chceme překládat (podrobnosti viz tamtéž). 
 + 
 +Nastavit důležité proměnné (to by se hodilo idat do ''.cshrc'' nebo nějakého podobného konfiguračního souboru). 
 + 
 +<code>setenv JAVA_HOME /opt/jdk1.
 +setenv SRILM /home/zeman/nastroje/srilm 
 +setenv JOSHUA /net/work/people/zeman/joshua</code>
  
 Stáhnout aktuální verzi Joshuy: Stáhnout aktuální verzi Joshuy:
  
-<code>cd /net/work/people/zeman/joshua+<code>cd $JOSHUA
 svn co https://joshua.svn.sourceforge.net/svnroot/joshua/trunk joshua</code> svn co https://joshua.svn.sourceforge.net/svnroot/joshua/trunk joshua</code>
  
-Nastavit důležité proměnné (to by se hodilo přidat do ''.cshrc'' nebo nějakého podobného konfiguračního souboru) a zkontrolovat, že máme nainstalované prerekvizity. Ant je překladač nebo spíš make pro Javu. Swig je nástroj, který umí propojovat kód napsaný v různých jazycích, v tomto případě jde o napojení céčkového SRILM (jazykové modelování) na zbytek Joshuy, který je v Javě.+Přeložit Joshuu:
  
-<code>setenv JAVA_HOME /opt/jdk1.6 +<code>cd $JOSHUA 
-which ant /usr/bin/ant +ant compile</code> 
-which swig # /usr/bin/swig + 
-# install SRILM</code>+Kdyby bylo potřeba v budoucnosti překompilovat Joshuu načisto, již zkompilované moduly se dají odstranit pomocí 
 + 
 +<code>ant clean</code> 
 + 
 +Otestujeme, že je Joshua funkční: 
 + 
 +<code>ant test 
 +./example/decode_example_javalm.sh 
 +./example/decode_example_srilm.sh</code> 
 + 
 +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. 
 + 
 +<code>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)</code> 
 + 
 +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í:** 
 +  * Nalogoval jsem se na sol1 (aby kompilace probíhala na clusterové 64bitové architektuře). 
 +  * Upravil jsem $SRILM/sbin/machine-type tak, aby vracel i686-m64 (teď byl upravený, aby i zde dával jen i686). 
 +  * Vlezl jsem do $SRILM/common/Makefile.machine.i686-m64. TCL proměnné tam byly v pořádku, ale přidal jsem do voleb překladu (ADDITIONAL_CFLAGS i ADDITIONAL_CXXFLAGS) volbu -fPIC. Pokud by se to přeložilo bez ní, knihovny SRILM by pak nešly slinkovat přes Swig s Joshuou. 
 +  * make clean, pak make World 
 +  * Vrátil jsem se do $JOSHUA_HOME a pustil ant clean, pak ant compile, nakonec ant test a hlavně ten ./example/decode_example_srilm.sh. 
 + 
 +==== 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). 
 + 
 +<code>kinit 
 +ssh lrc-two 
 +cd $JOSHUA 
 +~bojar/tools/shell/qsubmit ./example/decode_example_srilm.sh 
 +qstat -u '*'</code> 
 + 
 +===== 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. 
 +  * Tokenizovaný a segmentovaný text ve zdrojovém jazyce (en). 
 +  * Tokenizovaný a segmentovaný text v cílovém jazyce (hi). 
 +  * Párování vyrobíme [[Giza++|Gizou++]]. 
 + 
 +Správný soubor s párováním vypadá nějak takhle: 
 + 
 +<code>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</code> 
 + 
 +A takhle pustíme Joshuu, aby z trénovacích dat extrahoval gramatiku: 
 + 
 +<code>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</code> 
 + 
 +V příkladu v INSTALL.txt měli navíc ještě volbu ''--print-rules=false'', nevím proč. Výsledná gramatika totiž byla prázdná, a když jsem tuto volbu odstranil, gramatika se vygenerovala. 
 + 
 +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. 
 + 
 +<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>

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