Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
user:zeman:joshua [2009/06/01 17:52] zeman Potlačení divného chování dokuwiki. |
user:zeman:joshua [2009/06/01 22:29] zeman Sourceforge. |
====== 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 SRILM ===== | ===== Instalace ===== |
| |
SRILM je nástroj pro jazykové modelování, se kterým pracují mnohé překladače včetně Mosese a Joshuy. Je napsaný v céčku. Způsob, jak ho získat a přeložit, je popsaný v tutoriálu k Mosesovi. (Ten není na webu normálně vidět, ale jeden odkaz na něj vede např. z Trac wiki Gaurav.) Stručně zde opakuji: | 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či, jako 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éž). |
| |
Získat balík se SRILM lze zde: http://www.speech.sri.com/projects/srilm/download.html | Nastavit důležité proměnné (to by se hodilo přidat do ''.cshrc'' nebo nějakého podobného konfiguračního souboru). |
| |
Stažený balík srilm.tgz má asi 49 MB<nowiki>!</nowiki> Pozor, rozbaluje se do aktuální složky, takže před rozbalováním vytvořit složku srilm a vlézt do ní. | <code>setenv JAVA_HOME /opt/jdk1.6 |
| setenv SRILM /home/zeman/nastroje/srilm |
| setenv JOSHUA_HOME /net/work/people/zeman/joshua</code> |
| |
<code>mkdir srilm | Stáhnout aktuální verzi Joshuy: |
cd srilm | |
unzip.pl ../srilm.tgz</code> | |
| |
nebo | <code>cd $JOSHUA_HOME |
| svn co https://joshua.svn.sourceforge.net/svnroot/joshua/trunk joshua</code> |
| |
<code>tar -xzvf ../srilm.tgz</code> | Přeložit Joshuu: |
| |
Přečíst si soubor README, je tam mnoho tipů. Upravit Makefile, aby obsahoval cestu do mé složky. | <code>cd $JOSHUA_HOME |
| ant compile</code> |
| |
<code>chmod +w Makefile | Kdyby bylo potřeba v budoucnosti překompilovat Joshuu načisto, již zkompilované moduly se dají odstranit pomocí |
vi Makefile</code> | |
| |
diff: | <code>ant clean</code> |
| |
<code>7c7 | Otestujeme, že je Joshua funkční: |
< # SRILM = /home/speech/stolcke/project/srilm/devel | |
--- | |
> SRILM = /home/zeman/nastroje/srilm</code> | |
| |
Není tam popsaný akorát tento zádrhel: z neznámých důvodů SRILM očekává grafickou knihovnu TCL. Pokud tato knihovna není k dispozici, musíme mu říct, že se na ni má vykašlat. K tomu je potřeba ve složce SRILM vlézt do common, najít dílčí Makefile pro naši architekturu (lze zjistit pomocí ''$SRILM/sbin/machine-type''), otevřít ho v nějakém editoru a upravit 3 řádky: zakomentovat 2 začínající na TCL a zajistit, že je tam ten třetí (NO_TCL): | <code>ant test |
| ./example/decode_example_javalm.sh |
| ./example/decode_example_srilm.sh</code> |
| |
<code># Tcl support (standard in Linux) | 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. |
# TCL_INCLUDE = | |
# TCL_LIBRARY = -ltcl | |
NO_TCL = x</code> | |
| |
Nyní jsme připraveni přeložit SRILM. Pokud nejsme v kořenové složce ''srilm'', vrátíme se do ní a spustíme: | <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> |
| |
<code>make World</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). |
| |
Nyní bychom měli otestovat, že SRILM je přeložen a běží správně. K tomu ho musíme přidat do své cesty (i když pro použití s Mosesem a Joshuou to zřejmě není potřeba). Musíme do cesty přidat jednak bin, jednak jeho podsložku pro naši architekturu. | |
| |
<code>setenv PATH /home/zeman/nastroje/srilm/bin/i686:/home/zeman/nastroje/srilm/bin:${PATH} | |
cd test | |
make all</code> | |
| |
Josh Schroeder: "Prohlédneme si výstup, budeme hledat zprávy IDENTICAL a DIFFERS. Občas se může stát, že není vše identické, ale přesto lze poznat, jestli nástroj funguje, nebo padá." Dan: Úplně všechny testy mi hlásily DIFFERS, ale zdá se mi, že problém je spíš v pojmenování souborů (mnou vygenerované výstupy mají ve jménu navíc ".unknown"; namátkou jsem zkusil jeden z nich porovnat se vzorem a byl identický). | |
| |
==== Kompatibilita architektur ==== | |
| |
Předpokládal bych, že když něco přeložím pro 32bitový počítač, poběží to i na 64bitovém, ale není to tak. Přeložil jsem SRILM na zenu a úspěšně jsem ho otestoval. Potom jsem se pokusil tentýž test zopakovat na luciferovi (lucifer.ufal.hide). Hlásilo to následující chybu: | |
| |
<code>ngram: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ngram)</code> | |
| |
Jako kdyby na luciferovi byla jiná verze céčka (a standardních knihoven) než na zenu. | |
| |
**zen:** | |
| |
<code>17:38 zen:/ha/home/zeman/nastroje/srilm/test> gcc -v | |
Using built-in specs. | |
Target: i486-linux-gnu | |
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu | |
Thread model: posix | |
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu3)</code> | |
| |
**lucifer:** | |
| |
<code>17:37 lucifer:/ha/home/zeman/nastroje/srilm/test> gcc -v | |
Using built-in specs. | |
Target: x86_64-redhat-linux | |
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-cpu=generic --host=x86_64-redhat-linux | |
Thread model: posix | |
gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)</code> | |
| |
Možná je problém v tom, že na luciferovi ještě není Ubuntu, ale Red Hat. Zkusíme to tedy přímo na clusteru, např. **sol1:** | |
| |
<code>17:42 sol1:/ha/work/people/zeman/zeh/zeman/tectomt/devel/external_code_compilation> gcc -v | |
Using built-in specs. | |
Target: x86_64-linux-gnu | |
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu | |
Thread model: posix | |
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu3)</code> | |
| |
Tentokrát test běží bez chyb! | |
| |
===== Instalace ===== | |
| |
Pozor, aby to běželo na clusteru LRC, je potřeba to překládat pro 64bitovou architekturu. V nejhorším případě přímo na clusteru samém. | |
| |
Stáhnout aktuální verzi Joshuy: | |
| |
<code>cd /net/work/people/zeman/joshua | |
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ě. | |
| |
<code>setenv JAVA_HOME /opt/jdk1.6 | |
which ant # /usr/bin/ant | |
which swig # /usr/bin/swig | |
# install SRILM</code> | |