equipes:rcln:ancien_wiki:outils:lorg

LORG

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.

  • 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: <code> sudo apt-get install libtbb-dev </code> Sur mageia: <code> sudo urpmi tbb tbb-devel</code>
  • 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.

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 <tt>tb2gram</tt> et <tt>twostagelorgparser</tt> <code> $ cd .. $ ./bin/tb2gram –help $ ./bin/twostagelorgparser –help </code>

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/englishgrammar doit contenir les fichiers de la grammaire: <code> $ ll $TB2OUTPUT total 426352 -rw-r–r– 1 lorg lorg 1708005 déc. 11 17:59 englishgrammarbase -rw-r–r– 1 lorg lorg 3043333 déc. 11 17:59 englishgrammarsmoothed1 -rw-r–r– 1 lorg lorg 5962637 déc. 11 17:58 englishgrammarsmoothed2 -rw-r–r– 1 lorg lorg 12551585 déc. 11 17:58 englishgrammarsmoothed3 -rw-r–r– 1 lorg lorg 26922814 déc. 11 17:58 englishgrammarsmoothed4 -rw-r–r– 1 lorg lorg 60927726 déc. 11 17:58 englishgrammarsmoothed5 -rw-r–r– 1 lorg lorg 133219576 déc. 11 17:59 englishgrammarsmoothed6 -rw-r–r– 1 lorg lorg 191847960 déc. 11 17:58 englishgrammarsmoothed6grammars.arc -rw-r–r– 1 lorg lorg 382460 déc. 11 17:59 englishgrammarsmoothed6lexicon.arc -rw-r–r– 1 lorg lorg 1056 déc. 11 17:58 englishgrammarsmoothed_6_nt.arc </code> ==== 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). <code> 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.” outils </code> === 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 écrire la sortie sur dream.ptb.txt <code> LORG-Release$ ./scripts/ptb.tokenizer.sed data/parsing/input/dream.txt > data/parsing/input/dream.ptb.txt </code> L'étape de tokenisation peut être évité en passant l'option -%%-%%input-mode raw à twostagelorgparser, 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:

  • -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)))))) (. .)))
  • Dernière modification: il y a 4 ans