[ 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).

Zdroje informací:

Instalace SRILM

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:

Získat balík se SRILM lze zde: http://www.speech.sri.com/projects/srilm/download.html

Stažený balík srilm.tgz má asi 49 MB! 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í.

mkdir srilm
cd srilm
unzip.pl ../srilm.tgz

nebo

tar -xzvf ../srilm.tgz

Přečíst si soubor README, je tam mnoho tipů. Upravit Makefile, aby obsahoval cestu do mé složky.

chmod +w Makefile
vi Makefile

diff:

7c7
< # SRILM = /home/speech/stolcke/project/srilm/devel
---
> SRILM = /home/zeman/nastroje/srilm

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):

# Tcl support (standard in Linux)
# TCL_INCLUDE =
# TCL_LIBRARY = -ltcl
NO_TCL = x

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:

make World

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.

setenv PATH /home/zeman/nastroje/srilm/bin/i686:/home/zeman/nastroje/srilm/bin:${PATH}
cd test
make all

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:

ngram: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ngram)

Jako kdyby na luciferovi byla jiná verze céčka (a standardních knihoven) než na zenu.

zen:

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)

lucifer:

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)

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:

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)

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:

setenv JOSHUA_HOME /net/work/people/zeman/joshua
cd $JOSHUA_HOME
svn co https://joshua.svn.sourceforge.net/svnroot/joshua/trunk joshua

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ě.

setenv JAVA_HOME /opt/jdk1.6
which ant # /usr/bin/ant
which swig # /usr/bin/swig
setenv SRILM /home/zeman/nastroje/srilm

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