LORG

De wikiRcln
Aller à : navigation, rechercher

Parseur syntaxique développé au NLCT de la Dublin City University. Au LIPN on travaille avec la variante de LORG maintenue par Joseph Le Roux.

Installation

Téléchargement des sources

  • Télécharger les sources à partir du fork de Joseph avec git:
git clone https://github.com/jihelhere/LORG-Release.git

Installation des dépendances

  • boost (version supérieure où égale à 1.56)

Sur ubuntu:

sudo apt-get install libboost-all-dev

Sur mageia (64-bit):

sudo urpmi lib64boost-devel
  • tbb (Intel Threading Building Blocks)

Sur ubuntu:

sudo apt-get install libtbb-dev

Sur mageia:

sudo urpmi tbb tbb-devel
  • Google malloc (installation conseillée pour améliorer la performance, mais non obligatoire)

Voici la page de Google malloc et voici le mode d'emploi pour installer la bibliothèque.

Compilation des sources

Voici les commandes la suite de commandes pour compiler les sources de LORG avec cmake:

$ cd LORG_Release
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..

Et si vous voulez changer le répertoire cible pour l'installation des binaires (normalement installés sur /usr/bin):

$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/lorg/LORG-Release/ ..

La réponse doit ressembler à:

-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.53.0
-- Found the following Boost libraries:
--   regex
--   program_options
--   system
--   filesystem
--   thread
--   unit_test_framework
--   serialization
-- /usr/include
-- Found Intel TBB
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lorg/LORG-Release/build


Maintenant on peut complier:

$ make

Et si tout va bien, installer...

$ make install

Pour vérifier que tout s'est bien passé, on affiche l'aide de tb2gram et twostage_lorgparser

$ cd ..
$ ./bin/tb2gram --help
$ ./bin/twostage_lorgparser --help

Utilisation sur le serveur lipn-rcln

Entraînement

Le programme tb2gram lit un corpus annoté en format Penn Treebank (.ptb) pour produire une grammaire hors contexte probabiliste (PCFG). Cette grammaire sera utilisée par le parseur syntaxique twostage_lorgparser.

  • Anglais

Pour l'anglais, on va entraîner le parseur avec les sections [2-21] du Penn Treebank, qui se trouve sur /home/corpus/Treebank-3/parsed/mrg/wsj/ dans le serveur lipn-rcln. Avant de lancer l'entraînement, il faut créer un répertoire sur lipn-rcl où écrire la grammaire de sortie. À partir du répertoire racine de LORG (LORG-Resease), on envoie:

$ mkdir data/training/english/english_grammar.utilisateur.date

Maintenant on peut commencer l'entrainement, qui peut prendre quelques heures. La commande qui suit entraine avec les sections 2 à 21 du Penn Treebank avec l'option des messages explicites (-v) et elle produira six étapes de division/melange/lissage (option par défaut) avec 8 fils d'exécution (--nbthreads), tout en remplaçant les tokens qui avec occurrence=1 par les signatures ordonnées d'après son gain d'information en anglais (-w EnglishIG).

$ export WSJ=/home/corpus/Treebank-3/parsed/mrg/wsj/
$ export TB2OUTPUT=/home/lorg/LORG-Release/data/training/english/english_grammar.jorge.11dec13/
$ ./bin/tb2gram $WSJ/0[2-9] $WSJ/1* $WSJ/2[01] -v --nbthreads 8 -w EnglishIG -u 1 -o $TB2OUTPUT/english_grammar

Pour voir le détail des options de tb2gram, voir l'option --help où le README du code source.

Si tout s'est bien passé, le contenu du répertoire $TB2OUTPUT/english_grammar doit contenir les fichiers de la grammaire:

$ ll $TB2OUTPUT
total 426352
 -rw-r--r-- 1 lorg lorg   1708005 déc.  11 17:59 english_grammar_base
 -rw-r--r-- 1 lorg lorg   3043333 déc.  11 17:59 english_grammar_smoothed_1
 -rw-r--r-- 1 lorg lorg   5962637 déc.  11 17:58 english_grammar_smoothed_2
 -rw-r--r-- 1 lorg lorg  12551585 déc.  11 17:58 english_grammar_smoothed_3
 -rw-r--r-- 1 lorg lorg  26922814 déc.  11 17:58 english_grammar_smoothed_4
 -rw-r--r-- 1 lorg lorg  60927726 déc.  11 17:58 english_grammar_smoothed_5
 -rw-r--r-- 1 lorg lorg 133219576 déc.  11 17:59 english_grammar_smoothed_6
 -rw-r--r-- 1 lorg lorg 191847960 déc.  11 17:58 english_grammar_smoothed_6_grammars.arc
 -rw-r--r-- 1 lorg lorg    382460 déc.  11 17:59 english_grammar_smoothed_6_lexicon.arc
 -rw-r--r-- 1 lorg lorg      1056 déc.  11 17:58 english_grammar_smoothed_6_nt.arc

Parsing

Préconditions

Le fichier d'entrée doit être déjà segmenté en phrase, une phase par ligne. Pour le présent exemple, on donnera en entrée les premières phrases d'un discours de Martin Luther King (sur lipn-rcln, on peut le trouver dans /home/lorg/LORG-Release/data/parsing/input/dream.txt).

I say to you today, my friends, so even though we face the difficulties of today and tomorrow, I still have a dream. 
It is a dream deeply rooted in the American dream.
I have a dream that one day this nation will rise up and live out the true meaning of its creed: 
"We hold these truths to be self-evident: that all men are created equal."
[...]

Segmentation en unités lexicales (Tokenisation)

Le fichier d'entrée du parseur doit être segmenté en accord avec le corpus avec lequel le parseur a été entrainé. C'est à dire, si on a entrainé avec un Penn Treebank le texte à analyser devra être tokenisé de la même façon que le Penn Treebank.

Dans l'installation de lipn-rcln, le script ptb.tokenizer.sed (répertoire scripts) permet de segmenter avec les mêmes critères que le Penn Treebank. La commande suivante segmente le texte dream.txt en unité lexicales distinctes séparées par un espace et écrir la sortie sur dream.ptb.txt

[lorg@lipn-rcln LORG-Release]$ ./scripts/ptb.tokenizer.sed data/parsing/input/dream.txt > data/parsing/input/dream.ptb.txt

L'étape de tokenisation peut être évité en passant l'option --input-mode raw à twostage_lorgparser, mais elle ne marche que pour l'anglais.

Analyse syntaxique

[lorg@lipn-rcln LORG-Release]$ export TRAINING=/home/lorg/LORG-Release/data/training/english/english_grammar.9dec13/
[lorg@lipn-rcln LORG-Release]$ export PARSING=/home/lorg/LORG-Release/data/parsing/
[lorg@lipn-rcln LORG-Release]$ ./bin/twostage_lorgparser $PARSING/input/dream.ptb.txt \
                               -g $TRAINING/english_grammar_smoothed_6 -o $PARSING/output/dream.txt.tok.parsed \
                               -w EnglishIG --input-mode tok --parser-type kmax --k 1 --verbose

Cette commande appel twostage_lorg avec les options suivantes:</tt>

  • -g indique la grammaire PCFG-LA précedemment généré dans la phase d'entraînement
  • -o indique le fichier de sortie de l'analyse syntaxique
  • -w EnglishIG indique le remplacement des occurrences uniques par ses signatures ordonnées d'après son gain d'information en langue anglaise
  • --input mode tok indique que le texte à analyser a été segmenté en unité lexicales
  • --parser-type kmax --k 1 indique que l'analyse sera effectué avec Maxrule, qui produit une liste de k solutions (k=1 ici)
  • --verbose pour imprime les scores des solutions et d'autres messages complémentaires

Le résultat de la commande:

Setting ouput file to /home/lorg/LORG-Release/data/parsing//output/dream.txt.tok.parsed
Setting test file to /home/lorg/LORG-Release/data/parsing//input/dream.ptb.txt
Not removing punctuation from input.
Input mode set to: tok
creating the parser... using 1 thread(s) to parse
using threshold 0.0001 for chart construction
using standard c2f thresholds
Setting grammar to /home/lorg/LORG-Release/data/training/english/english_grammar.9dec13//english_grammar_smoothed_6.
Grammar set
create intermediate grammars
computing priors
gram_conf contains lex_unknown_map info
overwriting unknown_map from command-line (if you don't want this, edit the grammar)
Setting unknown mapping type to English IG tests mapping 
ok
Start parsing process.
overall time: 6.51949s

Et le résultat de l'analyse sur le fichier dream.txt.tok.parsed

### ID: 1
### length: 27
### time: 0.640125
### solutions: 1
### sentence: I say to you today , my friends , so even though we face the difficulties of today 
and tomorrow , I still have a dream . 
-3.95993 : ( (S (S (NP (PRP I)) (VP (VBP say) (PP (TO to) (NP (PRP you))) (NP (NN today)) (, ,) 
(NP (PRP$ my) (NNS friends)))) (, ,) (RB so) (S (SBAR (RB even) (IN though) (S (NP (PRP we)) 
(VP (VBP face) (NP (NP (DT the) (NNS difficulties)) (PP (IN of) (NP (NN today) (CC and) 
(NN tomorrow))))))) (, ,) (NP (PRP I)) (ADVP (RB still)) (VP (VBP have) (NP (DT a) (NN dream)))) (. .)))
### ID: 2
### length: 11
### time: 0.0734208
### solutions: 1
### sentence: It is a dream deeply rooted in the American dream . 
-4.14508 : ( (S (NP (PRP It)) (VP (VBZ is) (NP (NP (DT a) (NN dream)) (ADJP (RB deeply) (JJ rooted) 
(PP (IN in) (NP (DT the) (JJ American) (NN dream)))))) (. .)))