Table of Contents
Parsery
Závislostní parsery
- Maximum Spanning Tree Parser (Ryan McDonald)
Danovo parsing repository
Verzovaná složka, která zatím obsahuje stanfordský parser, Charniakův parser, Johnsonův reranker a řadu drobných nástrojů pro manipulaci s treebanky. Pokud chcete s uvedenými parsery či nástroji pracovat, musíte si nejprve z repozitáře vytáhnout svou vlastní pracovní kopii nástrojů (návod následuje). V případě potřeby můžete opravovat chyby nebo přidávat vlastní nástroje a změny odesílat zpátky do repozitáře. V takovém případě se ale nejdřív důkladně seznamte se správou verzí, abyste se uměli vyhnout konfliktům; nezapomeňte také ke každému svn commit
popsat, v čem změna spočívá!
Nikdy se nehrabte přímo (tj. bez prostřednictví příkazů svn) v úložišti repozitáře!
Jak získat svou vlastní pracovní kopii
Do proměnné PARSINGROOT
níže nastavte cestu ke složce, ve které chcete svou pracovní kopii mít, nejlépe asi do /net/work/people/$USER
nebo někam na místní disk. (Složka parsing
zatím neexistuje, ale nadřazené složky pochopitelně existovat musí.) Ve všech návodech souvisejících s parsingem budeme na vaši pracovní kopii odkazovat jako na $PARSINGROOT
.
setenv PARSINGROOT /net/work/people/$USER/parsing svn checkout -q file:///net/work/public/SVN/parsing/trunk $PARSINGROOT cd $PARSINGROOT make
Než zavoláte make
, budete možná chtít otevřít $PARSINGROOT/brown-reranking-parser/Makefile
a zkontrolovat nastavení proměnné GCCFLAGS
. Některé části Brown reranking parseru jsou výpočetně velmi náročné a stojí za to je přeložit s optimalizacemi pro procesor, na kterém je budete pouštět. (Pokud chcete trénovat Johnsonův reranker na Penn Treebanku nebo srovnatelných datech, měli byste podle údajů z README
mít také aspoň 8 GB paměti, což rovnou diskvalifikuje většinu neclusterovaných počítačů.) Buďte opatrní, protože maximální optimalizace získáte jen za cenu toho, že parser nepoběží na slabších nebo jiných architekturách. Máte tyto možnosti:
GCCFLAGS = -march=pentium4 -mfpmath=sse -msse2 -mmmx
- 32bitové Xeony ležící mimo clustery, např. belzebub, freki, geri, anette, euler, sakuraGCCFLAGS = -march=opteron -m64
- Opterony (sol cluster, kentaur, troll, zlobr)GCCFLAGS = -march=nocona -mfpmath=sse -msse3 -mmmx
- 64bitové Xeony (orion cluster)
Dáváte-li přednost kompatibilitě s ostatními architekturami za cenu slabší optimalizace, použijte -mcpu
místo -march
, popř. nechte GCCFLAGS
úplně prázdné.
Knihovny Boost C++, PETSc a TAO
Céčkové / Cplusplusové knihovny Boost C++, PETSc a TAO jsou potřeba pro trénování rerankeru Marka Johnsona (reranker zřejmě přímo využívá jen TAO, ale PETSc potřebujeme taky, protože TAO je nadstavba PETSc). Tyto knihovny nejsou součástí parsing repository. Zde shrnujeme poznámky o jejich instalaci.
Boost C++ údajně “bývá součástí moderních distribucí Linuxu.”
PETSc je knihovna pro vědecké výpočty založené na parciálních diferenciálních rovnicích. Domovská stránka projektu je http://www-unix.mcs.anl.gov/petsc/petsc-2/. My máme verzi 2.3.2, vybalenou v /net/work/public/lib/petsc-2.3.2-p7
. Před instalací, jakož i později při používání knihovny, je potřeba mít cestu ke knihovně uloženou v systémové proměnné PETSC_DIR
. Pak je třeba uvnitř složky s knihovnou zavolat config/configure.py
. Pozor! Návod na instalaci na stránkách PETSc uvádí trochu jiné parametry pro configure
, než jaké doporučují stránky TAO! Pokud nenakonfigurujete PETSc tak, jak požaduje TAO, nepodaří se vám později nainstalovat TAO. My jsme použili tyto parametry:
setenv PETSC_DIR /net/work/public/lib/petsc-2.3.2-p7 cd $PETSC_DIR ./config/configure.py --with-clanguage=C++ --with-cc=gcc --with-fc=gfortran \ --download-f-blas-lapack=1 --with-mpi=0 --with-x=0 --with-shared=0
Stránky PETSc a TAO v příkladech uvádějí –with-fc=g77
; tento překladač Fortranu u nás nemáme, místo něj máme gfortran
. Konfigurační procedura sama stáhne a nainstaluje další knihovny (napsané ve Fortranu), které nejsou běžným příslušenstvím Linuxu, ale PETSc je potřebuje: BLAS (Basic Linear Algebra Subprograms) a LAPACK (Linear Algebra Package).
Na konci úspěšné konfigurace se dozvíme, jak máme mít nastavenou (při volání make
, ale i při pozdějším linkování knihoven ke svým programům) proměnnou PETSC_ARCH
. Hodnota použitá v následujícím příkladu platila na počítači zen; nejsem si jist, zda na 64bitových procesorech na clusteru nebude jiná. (Po přeložení knihovny proměnná PETSC_ARCH
pravděpodobně slouží jen jako odkaz na správnou podsložku knihovny. Otázkou ale zůstává, zda pro 64bitové Opterony nebude nutné knihovnu přeložit znova do jiné podsložky.)
setenv PETSC_ARCH linux-gnu-cxx-debug make all test
Kromě PETSC_ARCH
si na konci hlášení o konfiguraci všimněte ještě několikařádkové informace o BLAS/LAPACK. Jsou to údaje, které by měl dostat linker vašeho (resp. Johnsonova) programu, který bude používat TAO, potažmo PETSc, LAPACK a BLAS. Dost možná budete potřebovat podle této řádky upravit makefile klíčové části rerankeru Marka Johnsona (brown-reranking-parser/second-stage/programs/wlle/Makefile
). Původní Markův Makefile obsahoval prostě odkazy -llapack -lblas
, které fungovaly, protože BLAS a LAPACK byly na jeho systému nainstalovány ve standardních cestách nezávisle na PETSc. Podobně jsme to měli v Marylandu, proto jsem na potíže narazil až tady na ÚFALu: BLAS a LAPACK ve standardní výbavě nemáme, musíme tedy nalinkovat ten, který se nám stáhne jako “external package” do podstromu knihovny PETSc. Všimněte si také -lgfortran
na konci, to tam Mark taky neměl, ale bez toho se -lflapack
u nás nechytá.
BLAS_LAPACK_LIBS = -Wl,-rpath,${PETSC_DIR}/externalpackages/fblaslapack/${PETSC_ARCH} \ -L${PETSC_DIR}/externalpackages/fblaslapack/${PETSC_ARCH} -lflapack \ -Wl,-rpath,${PETSC_DIR}/externalpackages/fblaslapack/${PETSC_ARCH} \ -L${PETSC_DIR}/externalpackages/fblaslapack/${PETSC_ARCH} -lfblas \ -lgfortran TAO_PETSC_LIBS = -Wl,-rpath,${TAO_DIR}/lib/${PETSC_ARCH} \ -L${TAO_DIR}/lib/${PETSC_ARCH} -ltaopetsc -ltao \ -Wl,-rpath,${PETSC_DIR}/lib/${PETSC_ARCH} \ -L${PETSC_DIR}/lib/${PETSC_ARCH} \ -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc \ -lmpiuni ${BLAS_LAPACK_LIBS} -lm -lstdc++ -lgcc_s
TAO je zkratka za Toolkit for Advanced Optimization. Domovská stránka projektu je http://www-unix.mcs.anl.gov/tao/. My máme verzi 1.8.2, vybalenou v /net/work/public/lib/tao-1.8.2
. Před instalací, jakož i později při používání knihovny, je potřeba mít cestu ke knihovně uloženou v systémové proměnné TAO_DIR
.
setenv TAO_DIR /net/work/public/lib/tao-1.8.2 cd $TAO_DIR make all
Brown Reranking Parser
Brown Reranking Parser je můj název pro kombinaci parseru Eugena Charniaka a rerankeru Marka Johnsona (oba pánové působí na Brown University). Následuje popis obslužných skriptů z marylandské wiki.
The currently best English parser is the combination of the N-best parser by Eugene Charniak, and Mark Johnson's reranker. After realizing that changes to Brown source code might be desirable, sources of this software were added to our SVN parsing repository.
There are two subfolders of $PARSINGROOT
related to Brown software: charniak-parser
is for those who want to run the parser without the reranker, brown-reranking-parser
is for those who want both. In fact, charniak-parser
contains only calling scripts, while the code of both the parser and the reranker is in brown-reranking-parser
. Charniak parser code is in brown-reranking-parser/first-stage
. Johnson's reranker is in brown-reranking-parser/second-stage
.
Remember that you need to go to $PARSINGROOT
after checking out your working copy, and call make
. Note that the Makefile is currently set up to optimize the code for the C cluster machines. I am not sure whether you can compile it elsewhere but you definitely won't be able to run it elsewhere. Further note that external libraries PETSc and TAO are needed. These are not standard Linux equipment but are not part of our SVN repository either; paths to our installations are in the Makefile.
Our SVN version of the Brown parser has some advantages over the standard distribution:
- Number of output sentences equals to the number of input sentences. If parse of a sentence failed, the output line will be “__FAILED__…something” which can be easily fixed by one of our scripts. The original parser did not tell you where it failed, which was very difficult to fix.
- The parser does not say just Segmentation fault when it hits the vocabulary size limit. Moreover, the limit has been pushed from 50,000 words to 1,000,000 words.
- The reranker has been freed from its dependency on the Penn Treebank. The various data relations, originally wired deeply into their Makefile, are now generalized to the extent that we can call a training script and supply the training data as standard input. Not all parts of the Makefile have been generalized, yet.
Both folders, charniak-parser
and brown-reranking-parser
, have a scripts
subfolder with the basic set of parse.pl
, cluster-parse.pl
, and train.pl
. These scripts are invoked in much the same fashion as for the Stanford parser (see above).
The parse.pl
and cluster-parse.pl
scripts of the Charniak parser accept the -Nbest
option, in addition to standard options of these scripts. -Nbest 50
translates as -N50
on Charniak's parseIt
commandline. It asks the parser to output N (here 50) best parses, instead of just one. The output format for N>1 differs from the default: the set of parses is preceded by a line with the number of parses and the ID (number) of the sentence, and every parse is preceded by a line with the weight (log probability) of the parse. This option only applies to charniak-parser
. It is ignored by brown-reranking-parser
.
Training
To train only the Charniak parser, call
$PARSINGROOT/charniak-parser/scripts/train.pl < trainingdata.penn > modeldata.tgz
You will find the Charniak DATA folder tgzipped on standard output. You can pass the tgzipped file directly to the parse.pl
and cluster-parse.pl
scripts as the grammar.
To train the parser and the reranker, call
$PARSINGROOT/brown-reranking-parser/scripts/train.pl < trainingdata.penn > modeldata.tgz
Again, you will get tgzipped DATA folder, but this time it will contain two reranker files in addition, features.gz
and weights.gz
. The Brown parsing scripts require this tgzipped file as the grammar.
Options:
-nick da-delex
- Assigns a nickname (
da-delex
in this example) to the intermediate files the training procedure creates in the $PARSINGROOT subtree. Ensures that older models do not get overwritten. Is only needed if you want to reuse the intermediate files or if you want to train two different models in parallel. The resulting tgzipped model appears anyway on the standard output and it is your responsibility to save it.
-reuse
- Reuse old intermediate files, if available and up-to-date (make-wise). In other words, do not perform
make clean
in the beginning.
If you have two tgzipped models and want to use the first-stage parser from the first model, plus the reranker from the second model, call
$PARSINGROOT/brown-reranking-parser/scripts/combine_brown_models.pl first.tgz second.tgz > combined.tgz