Pour une phrase donnée, l'analyseur essaie de retourner la meilleure structure grammaticale. L'analyseur FRMG résulte de la compilation de la grammaire FRMG dans l'environnement DyaLog. C'est un analyseur robuste et à large couverture du français. Il est utilisé pour le traitement de très gros corpus, a participé aux campagnes d'évaluation EASy et Passage, et peut se comparer aux analyseurs statistiques sur leur corpus d'entraînement tout en restant stable hors domaine.
FRMG peut analyser une chaîne de mots et plus généralement un treillis de mots reflétant des ambiguïtés sur les mots et leur segmentation. Il calcule l'ensemble de toutes les analyses possibles, en s'appuyant sur des techniques d'analyse par charte (programmation dynamique). Une phase de désambiguïsation permet ensuite de sélectionner la meilleure analyse parmi l'ensemble généralement très grand de toutes les analyses. Cette phase de désambiguïsation peut faire appel à un modèle statistique appris sur un corpus annoté (treebank) pour de meilleures performances.
Pour la version de l'analyseur utilisable en ligne sur ce site, il est à noter qu'elle n'utilise pas un tel modèle statistique de désambiguïsation pour des raisons de temps de latence (le temps de chargement des modèles de quelques secondes est trop couteux pour une simple phrase et ne se justifie que lors du traitement de corpus). D'autre part, divers réglages (sur la segmentation en phrases/mots, sur la détection des entités nommées, sur l'utilisation de restrictions de sélection, ...) peuvent influer sur les performances et expliquer certaines différences entre la version en ligne et les résultats sur corpus.
FRMG ainsi que l'ensemble de la chaîne de traitement ALPAGE sont librement disponibles. Mais n'hésitez pas à nous contacter pour plus d'informations et de conseils si vous souhaitez utiliser nos outils pour vos applications, commerciales ou non.
Nativement, l'analyseur FRMG produit des forêts partagées de dérivations TAG, indiquant l'ensemble des opérations TAG (substitution, adjonction, ...) effectuées, sur quel noeud et avec quel arbre. Ces forêts de dérivation sont ensuite converties en des forêts de dépendances. Intuitivement, l'idée (classique) est qu'une opération TAG consistant à appliquer un certain arbre β sur le noeud N d'un arbre α se traduit par une dépendance étiquetée N allant du mot ancre de α vers le mot ancre de β. Le principe est étendu pour matérialiser les opérations sur les noeuds lexicaux et sur les noeuds co-ancre. Néanmoins, ce schéma de conversion assume que tous les arbres élémentaires possèdent une ancre lexicale, ce qui n'est pas toujours le cas pour les arbres de FRMG. Dans ce cas, une pseudo-ancre lexicalement vide est utilisée comme tête ou cible des dépendances [1].
En pratique, les forêts partagées de dépendances sont représentées en XML pour le schéma DepXML. Ce même schéma est aussi utilisé après désambiguisation de la forêt. Il existe une visualisation graphique de ce format, utilisée par défaut sur ce wiki et également par le serveur de parseurs (parserd) et le nouveau shell pour FRMG (frmg_shell).
La forme graphique de DepXML permet essentiellement de visualiser
La forme graphique de DepXML ne présente qu'une petite partie des informations fournies par ce format. En sus des éléments précédemment évoqués, le schéma DepXML fournit des informations:
Il est évident que le schéma DepXML pourrait être grandement simplifié dans le cas de la représentation d'une seule analyse (au lieu d'une forêt partagée d'analyse). En particulier, les informations présentes dans <node>, <op> et <hypertag> pourraient être regroupées au sein de <node>. Les balises <deriv> pourraient aussi être éliminées ainsi que toute mention aux dérivations.
<op cat="N2" deriv="d3" id="E1o5" span="2 4"> <narg type="top"> <fs> <f name="wh"><minus></minus></f> <f name="time"><minus></minus></f> <f name="sat"><plus></plus></f> <f name="person"><val>3</val></f> <f name="number"><val>sg</val></f> <f name="hum"><minus></minus></f> <f name="gender"><val>fem</val></f> <f name="enum"><minus></minus></f> <f name="countable"><plus></plus></f> </fs> </narg> </op>
Listing 1 : <op> pour une pomme dans il donne une pomme à Marie
<hypertag derivs="d4" id="E1ht0001"> <fs> <f name="anchor"><val>donne</val></f> <f name="refl"><minus></minus></f> <f name="imp"><minus></minus></f> <f name="diathesis"><val>active</val></f> <f name="cat"><val>v</val></f> <f name="arg0"> <fs> <f name="function"><val>suj</val></f> <f name="kind"><val>subj</val></f> <f name="real"><val>cln</val></f> <f name="pcas"><minus></minus></f> <f name="extracted"><minus></minus></f> </fs> </f> <f name="arg1"> <fs> <f name="function"><val>obj</val></f> <f name="kind"><val>obj</val></f> <f name="real"><val>N2</val></f> <f name="pcas"><minus></minus></f> <f name="extracted"><minus></minus></f></fs> </f> <f name="arg2"> <fs> <f name="function"><val>objà</val></f> <f name="kind"><val>prepobj</val></f> <f name="real"><val>PP</val></f> <f name="pcas"><val>à</val></f> <f name="extracted"><minus></minus></f> </fs> </f> </fs> </hypertag>
Listing 2 : <hypertag> pour donne dans il donne une pomme à Marie
L'analyseur FRMG produit par défaut des sorties en dépendances suivant le schéma DepXML, avec des dépendances reflétant directement les structures de la grammaire sous-jacente. Les sorties peuvent être affichées sous forme graphique, mais correspondent en fait à un format XML assez riche [1].
Néanmoins, les sorties peuvent aussi être converties vers d'autres schémas et formats, incluant:
Graph
|
Ce schéma DepConll peut bénéficier des simplifications apportées par l'option transform de l'analyseur qui cherche à faire disparaître les noeuds vides (non lexicalisés). Cette option est cependant encore instable !
Graph
|
Graph
|
Graph
|
Graph
|
Pour essayer de rendre plus homogènes les configurations et les simplifier, un mécanisme de réécriture de graphe est en cours de développement. Les points principaux concernent:
Graphe transformé dans en riant, Marie lui a-t-elle coupé les cheveux ?
|
Graphe non transformé dans en riant, Marie lui a-t-elle coupé les cheveux ?
|
Pour l'instant, les transformations entraînent des problèmes avec l'interprétation DepXML, en particulier avec l'idée qu'une dérivation groupe des arcs partant d'un même gouverneur. Pour cette raison, la transformation n'est pas activée par défaut. Elle peut néanmoins être testé en cochant l'option 'transform' dans l'interface de visualisation.
Nous donnons ici quelques éléments d'information sur les performances de FRMG, en terme de qualité sur divers corpus de test et métriques. Nous fournissons également des informations sur le taux de couverture par analyses complètes, sur divers styles de corpus. Enfin, même si ce n'est qu'indicatif, des informations sur les vitesses d'analyse, désambiguisation, et conversion
Améliorations grâce à l'utilisation de techniques de fouilles d'erreurs [4] sur les échecs d'analyse de gros corpus.
Le tableau suivant, issu de [2], donne, pour quelques corpus, quelques éléments d'information sur le taux de couverture par analyse complète (les autres phrases étant couverte par des analyses robustes). Le tableau fournit aussi les temps d'analyse moyens et médians.
Corpus | #phrases | %analyse totale | temps moyen (s) | temps médian (s) |
---|---|---|---|---|
FTB train | 9881 | 95.9 | 1.04 | 0.26 |
FTB dev | 1235 | 96.1 | 0.88 | 0.30 |
FTB test | 1235 | 94.9 | 0.85 | 0.30 |
Sequoia | 3204 | 95.1 | 1.53 | 0.17 |
EasyDev | 3879 | 87.2 | 0.87 | 0.14 |
Le tableau suivant, issu de [2], donne des éléments d'évaluation de FRMG sur divers treebanks (FrenchTreeBank, Sequoia, EasyDev), pour divers schéma d'annotation (schéma FTB pour FTB et Sequoia; schéma Easy/Passage pour EasyDev) et avec 2 métriques (LAS pour le schéma FTB sans prise en compte des poncuations; F1-mesure sur les relations pour EasyDev). Les résultats, au moins sur le FTB, peuvent être comparés avec les ceux obtenus par des analyseurs syntaxiques (Berkeley, MALT, et MST) entraînés sur la partie FTB train (voir cette page pour plus d'information).
DYALOG-SR est un analyseur statistique par transitions (type MALT) s'appuyant sur des techniques de programmation dynamique et des faisceaux (beam). Comme FRMG, Il est lui-aussi implémenté au dessus du système DyALog. Une expérience récente a consisté à utiliser les sorties de FRMG comme traits de guidage pour DYALOG-SR [5], donnant d'excellents résultats sur le FTB, mais également sur le corpus SEQUOIA.
French TreeBank (LAS) | Autres Corpus | |||||
---|---|---|---|---|---|---|
Analyseurs | Train | Dev | Test | Sequoia (LAS) | EasyDev (Passage) | |
FRMG | base | 79.95 | 80.85 | 82.08 | 81.13 | 65.92 |
+restr | 80.67 | 81.72 | 83.01 | 81.72 | 66.33 | |
+tuning | 86.60 | 85.98 | 87.17 | 84.56 | 69.23 | |
2014/01 | 86.20 | 87.49 | 85.21 | |||
2015/03 | 86.76 | 87.95 | 86.41 | 70.81 | ||
Autres Systèmes | Berkeley | 86.50 | 86.80 | |||
MALT | 86.90 | 87.30 | ||||
MST Parser | 87.50 | 88.20 | ||||
dyalogs-sr | nu | 88.17 | 89.01 | 85.02 | ||
guidé par FRMG | 89.02 | 90.25 | 87.14 |
Toujours dans [5], nous avons quelques résultats plus précis qui tendent à confirmer la stabilité de FRMG (et d'analyseurs couplés avec FRMG) sur des domaines autres que journalistiques (l'augmentation du taux d'erreurs est plus faible en absolu [delta(err)] et relatif [%delta(err)] pour FRMG). Après correction d'une mauvaise utilisation des traits morphosyntaxiques produits par FRMG sur Sequoia, nous fournissons également des résultats mis à jour (Sept. 2014).
FRMG | DYALOG-SR | DYALOG-SR+FRMG | DYALOG-SR +FRMG (sept. 2014) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Corpus | #phrases | LAS | delta(err) | %delta | LAS | delta(err) | %delta | LAS | delta(err) | %delta | LAS | delta(err) | %delta |
FTB Test | 1235 | 87.49 | 89.01 | 90.25 | 90.25 | ||||||||
Europar | 561 | 87.97 | -0.5 | -3.8 | 87.00 | +2.0 | +18.2 | 88.94 | +1.3 | +13.4 | 89.15 | +1.1 | +11.3 |
Annodis | 529 | 86.11 | +1.4 | +11.0 | 85.80 | +3.2 | +29.1 | 88.21 | +2.0 | +20.9 | 88.45 | +1.8 | +18.4 |
Emea-fr Dev | 574 | 85.16 | +2.3 | +18.6 | 83.50 | +5.2 | +50.0 | 86.26 | +4.0 | +40.9 | 86.41 | +3.8 | +39.4 |
Emea-fr Test | 544 | 84.67 | +2.8 | +22.5 | 85.01 | +4.0 | +36.3 | 86.87 | +3.4 | +34.7 | 87.77 | +2.5 | +25.4 |
FrWiki | 996 | 83.53 | +4.0 | +31.7 | 84.39 | +4.6 | +41.9 | 86.23 | +4.0 | +41.2 | 86.94 | +3.3 | +33.9 |
FRMG s'inscrit dans la chaine de traitement alpc développée par ALPAGE et installable via l'installeur alpi (Note: il est préférable d'utiliser la version d'alpi dockerisée). L'ensemble des logiciels de cette chaîne sont disponibles sous licence libre.
Alpc fonctionne sous les environnements Linux et MacOS. Elle est installable de deux façon, via gitlab en local, ou via docker dans un containeur
Ce type d'installation nécessite d'avoir sur sa machine le logiciel docker qui fonctionne, et le daemon docker qui tourne en arrière plan. (Suivre les étapes d'installation de la documentation officielle selon votre OS).
Un docker est un containeur, qui (de façon très synthétique) permet de faire de la virtualisation légère, en se comportant comme une VM qui partage des ressources avec son hôte.
En construisant l'image docker, vous installez un containeur sous linux sur votre machine, et vous pourrez ensuite acceder à la chaine de traitement depuis ce containeur en ligne de commande.
Pour construire l'image Docker, suivez les instructions du Readme qui se trouve ici: https://gitlab.inria.fr/almanach/docker_webservices/, sur les informations d'installation de alpi.
Ce type d'installation nécessite d'avoir sur sa machine le logiciel docker qui fonctionne, et le daemon docker qui tourne en arrière plan. (Suivre les étapes d'installation de la documentation officielle selon votre OS).
Les images Docker (attention, lourdes, environ 10Ga) sont directement récupérables sur le dockerhub de almanach, à l'adresse suivante: https://hub.docker.com/r/almanach/alpi/
La commande à effectuer est docker pull almanach/alpi:v01.
Sous Windows 10:
Pour obtenir la dernière version d'alpi sous gitlab, utiliser
git clone https://gitlab.inria.fr/almanach/alpi
la commande alpi se trouve ensuite dans le répertoire alpi/.
L'installation de Alpc à partir des sources (sous gitlab) est possible, mais la compilation des composants nécessite une machine relativement puissante, de la mémoire (2 à 4 Go), et de l'espace disque (au moins 10Go). L'utilisation de la chaîne requiert cependant moins de mémoire (en général).
Pour installer la chaîne avec alpi, depuis le dossier alpi:
perl ./alpi
Plus d'info, avec
perldoc ./alpi/alpi
ou
perl ./alpi/alpi --help
En cas de problème d'installation, ne pas hésiter à nous contacter, en joignant le fichier 'alpi.log' produit par alpi, et en fournissant des indications sur votre environnement (distribution, architecture, ...).
Certains packages peuvent être longs à installer (comme sxpipe, aleda et frmg). Pour éviter certaines recompilations en cas de problème ou de mise à jour, il est possible d'ignorer des packages avec skippkg
perl ./alpi/alpi --prefix=<where to install> --skippkg sxpipe --skippkg aleda
Une fois installée la chaîne de traitement Alpc, quatre modes d'utilisation sont disponibles, à savoir:
frmg_shell
)parserd
)Ce mode est seulement présenté pour des raisons historiques et pour aider à l'intégration de FRMG.
Il s'appuie sur les commandes frmg_lexer
et frmg_parser
.
> echo "il mange une pomme." | frmg_lexer | frmg_parser -loop -disamb -conll <latency_time> 102ms <token> E1F5 . <token> E1F4 pomme <token> E1F3 une <token> E1F2 mange <token> E1F1 il Answer: L = [-disamb,-conll] SId = E1 N = 5 A = 0 ## sentence=E1 mode=full best=yes 1 il il CL CLS n=s|p=3|s=suj 2 suj _ _ R_subjectsubject 5 2 mange manger V V m=ind|n=s|p=3|t=pst 0 root _ _ R_root -1 3 une un D DET n=s 4 det _ _ R_detdet 2 4 pomme pomme N NC n=s|s=c 2 obj _ _ R_objectobject 4 5 . . PONCT PONCT _ 2 ponct _ _ R_ponctvoid 1
L'option '-loop' pour frmg_parser permet en fait de traiter un séquence de phrases. Il est donc possible de traiter le contenu d'un fichier
> cat myfile.txt | frmg_lexer | frmg_parser -loop -disamb -conll -multi
Par ailleurs, le lexer frmg_lexer accepte une chaîne de caractères en entrée et appelle le segmenteur sxpipe dessus. Mais il est également possible de passer au lexer le résultat d'une telle segmentation sous forme d'un DAG (ou treillis de mots).
> echo "il mange une pomme." | sxpipe | dag2udag | frmg_lexer | frmg_parser -loop -disamb -conll
Le mode shell, avec la commande frmg_shell
, est conseillé pour une première utilisation de l'analyseur FRMG.
> frmg_shell Welcome on FRMG shell [type help for more information] (default: sentence 1)> help FRMG shell commands quit : exit this shell (alias: q | bye ) .... (default: sentence 1)>:conll il mange une pomme ... ## sentence=E1 mode=full best=yes 1 il il CL CLS n=s|p=3|s=suj 2 suj _ _ R_subjectsubject 5 2 mange manger V V m=ind|n=s|p=3|t=pst 0 root _ _ R_root -1 3 une un D DET n=s 4 det _ _ R_detdet 2 4 pomme pomme N NC n=s|s=c 2 obj _ _ R_objectobject 4 [1] il mange une pomme (default: sentence 1)>1:xml:| ... (default: sentence 1)> quit Goodbye ! à bientôt
La commande peut être aussi utilisée en mode batch
> echo ":xml:passage il mange une pomme." | ./frmg_shell --quiet > foo.xml
Elle peut également être utilisée pour traiter des corpus jouets. Par exemple, la commande suivante traite les phrases de mycorpus.txt pour produire des sorties en format CONLL (schéma FTB), stockées sous mycorpus/ à raison d'une phrase par fichier.
> echo "corpus mycorpus.txt mycorpus :conll" | frmg_shell --batch
ou (pour des sorties en format Passage/XML et mode robust) :
> echo "corpus mycorpus.txt mycorpus :passage:xml:robust" | frmg_shell --batch
Voici l'aide (à peu près à jour) des options de FRMG Shell
Ce mode, un peu plus compliqué à mettre en oeuvre, permet cependant le traitement de gros corpus sur des clusters de machines. Il repose sur l'utilisation du serveur parserd
(qui devra tourner sur chaque noeud du cluster) et sur le contrôleur dispatch.pl
qui a la charge d'envoyer les phrases du corpus aux noeuds, récupérer les résultats, et gérer les problèmes éventuels.
Le serveur parserd peut être lancé à l'aide de parserd_service
, installé par alpi
.
> parserd_service status parserd is stopped > parserd_service start Starting parserd: Running the server user=clerger group=alpage [ OK ]
Le traitement d'un corpus peut alors être lancé, en précisant un certain nombre d'options dans un fichier de configuration (ou directement sur la ligne de commande)
> cat mycorpus.conf ## path to dags (word lattices) for mycorpus built with SxPipe # using something along: cat mycorpus/file.txt | sxpipe -u -l=fr | dag2udag > mycorpus.dag/file.udag dagdir mycorpus.dag/ # specify that that dag files use suffixes .udag or .udag.bz2 (compressed) dagext udag ## where and how to save the results ## the following will save everything under mycorpus.results with archives of the form <file>.tar.gz for each ## file of the corpus, and a file per sentence in the archive. results mycorpus.results collsave compress tar ## emits some statistics in <file>.log.bz2 where <file> is one of the corpus files time date stats ## output schema for the sentences #dis_xmldep #passage #udep conll # Control of the parser # partial analysis robust # timeout of 300s to kill parses that takes too long timeout 300 # Specif of the hosts and of the number of workers per host # two instances on nodeA host nodeA_1@nodeA host nodeA_2@nodeA # alternatively, the following lines use a shortcut notation for 8 instances on nodeA and 8 on nodeB host nodeA_%i@nodeA^i=1..8 host nodeB_%i@nodeB^i=1..12
Et finalement, > dispatch.pl --config mycorpus.conf ....
Le package FRMG inclut le script frmg_server.pl qui permet de lancer un service Web sous Mojolicious, par exemple en lançant
morbo ./frmg_server.pl
Des réglages de configuration peuvent être fournis dans frmg_server.conf, (voir le modèle d'exemple frmg_server.conf.sample).
Il suffit ensuite d'ouvrir une fenêtre de navigateur sur l'adresse et port retourné lors du démarrage du service (par défaut: http://127.0.0.1:3000/process
) . C'est ce genre de service WEB qui est utilisé par le visualisateur de sorties syntaxiques de ce site. Il est directement accessible ici. Dans l'interface WEB, le champ 'Options' peut être rempli par les mêmes options disponible pour le shell FRMG (mais séparées par des espaces plutôt que par ':').
NOTES: pour l'instant (Mars 2018), alpi m'installe pas de base tous les éléments nécessaires au service WEB. En particulier, il faut installer le module Perl DepXML
alpi --prefix=<prefix> --pkg=DepXML
La compilation de DepXML va requérir d'autres modules Perl (Devel::Declare, B::Hooks::EndOfScope), pouvant être installés via cpanm
FRMG shell commands
This shell maintains an active sentence within a sentence set. New sentences may be added or loaded. The current set of sentences may be saved and searched.
Through the options (set and <sid>:<opts>), one may switch:
frmg_shell may be used to examine the content of archives produced by dispatch.pl when processing (large) corpus.
frmg_shell may be used to process in batch mode (with option -batch) a set of commands provided in a file (-batch file) or on stdin (-batch -).
For more information about zgrviewer, see http://zvtm.sourceforge.net/zgrviewer.html
For more information about dot2tex, see http://www.fauskes.net/code/dot2tex/
Cette page recense quelques exemples d'utilisation de FRMG.