Grammaires locales étendues principe
Aperçu général
Le graphe 4.1 représente une grammaire locale étendue pour la reconnaissance de dates. La fonction étendue llike (looks like) vérifie si une séquence inconnue, stockée dans la variable d, est similaire (avec un seuil maximal de 2) à un nom de jour, de même, elle teste, dans la deuxième appelle, si la séquence stockée sur la variable m est similaire à un nom de mois. @llike(${d},day,2) @llike(${m},month,2) d d m m uday day month daynumber yearnumber , ε , ε umonth Graphe 4.1 – Grammaire locale étendue pour la reconnaissance des dates Des exemples de séquences reconnues par cette grammaire, colonne ELG, sont présentés dans le tableau 4.1. Séquences COGITO 1 LG 2 TXRZR 3 STNER 4 ELG 5 Valide ? 6 March 14th X X X X X X Friday, October 7, 1966 X X X X X X Dceember 21, 1985 × × × X X X 4.1 Aperçu général 4 70 Séquences COGITO LG TXRZR STNER ELG Valide ? Monda Yanary 15, 2007 × × X × X X Jueves, Septiembre 30, 2004 × × × × × X Championships 2nd 2004 × × × × × × Tableau 4.1 – Exemples de dates reconnues par différents systèmes et par une elg L’implémentation de la fonction étendue llike, et par conséquent de la notion de ressemblance, est arbitraire et peut dépendre de la nature du problème à traiter. Nous pouvons définir, par exemple, comme présentée plus bas, qu’une séquence ressemble au nom d’un jour si la distance d’édition (Levenshtein, 1966) entre le nom d’un jour et la séquence est inférieure ou égal 2. Par exemple, distance(Wednesday,Wednesdy) = 1 mais distance(Wednesday,Wedgelike) = 5. function llike(input,entity,threshold) if input == nil then return true end if entity == ‘month’ then if levenshtein({‘January’,’February’,…}, input) <= threshold then return true end elseif entity == ‘day’ then if levenshtein({‘Sunday’,’Monday’,…}, input) <= threshold then return true end end end La fonction étendue llike utilise une approche naïve pour rechercher approximativement un motif p (input) dans une liste W (e.g. ’January’,’February’,…). Des autres approches sont plus adéquates à mettre en œuvre. Cependant, ce qui est important à retenir est que l’analyseur syntaxique ne connaît pas à l’avance cette fonction étendue et n’est pas responsable de son évaluation. Cela implique que la fonction peut être modifiée ou améliorée sans changer l’algorithme d’analyse syntaxique, et même sans apporter des changements au graphe graphe 4.1, et donc sans le recompiler. Le graphe 4.2 illustre un autre exemple de l’utilisation des grammaires locales étendues, il s’agit de la reconnaissance des expressions du type : • 2 fois 13 • 16 divisé par 4 6. Cogito demo API : http://cogitoapi.com/demo,context:kernel. 6. Grammaire locale classique 6. TextRazor demo : https://www.textrazor.com/demo 6. Stanford NER demo : http://nlp.stanford.edu:8080/ner, classifier : english.muc.7class. 6. Grammaire locale étendu 4 Grammaires locales étendues : principes 71 • 25 moins 15 • 45 + 32 Afin de produire des sorties comme : • 2 fois 13 = 26 • 16 divisé par 4 = 4 • 25 moins 15 = 10 • 45 + 32 = 77 $@calculate(${n1},${n2},${op})$ n1 n1 n2 n2 op op operation (a) graphe principal + – * / * fois multiplié divisé par / + plus – moins (b) sous-graphe operation Graphe 4.2 – Calculatrice Pour parvenir à produire ce résultat, la fonction étendue calculate est utilisée, un exemple de sa mise en œuvre est illustrée ci-après : function calculate (op1, op2, op) if not uMatch.start_with_space() then return false end if op == « + » then return tostring(op1 + op2) elseif op == « – » then return tostring(op1 – op2) elseif op == « * » then return tostring(op1 * op2) elseif op == « / » then return tostring(op1 / op2) else return false end end Dans l’exemple uMatch.start_with_space() fait partie des opérations accessibles aux fonctions étendues pour connaître l’état de l’analyse, dans le cas présent, il est requis que le premier token du motif qui viens d’être reconnu se trouve au début de l’entrée ou après l’espace.
Principes
En premier lieu, une grammaire locale étendue inclut les caractéristiques classiques d’une grammaire locale traditionnelle 1 : appel à des sous-graphes, utilisation de variables, de contextes, de filtres morphologiques, de masques lexicaux (Gross, 1993, 1997, Silberztein, 2003, Silberztein et Tutin, 2005, Paumier, 2016), etc. De plus, une grammaire locale étendue enrichit le modèle des grammaires locales par un nouveau formalisme qui permet d’ajouter, par des transitions étiquetées, des fonctions conditionnelles qui sont externes à l’analyseur syntaxique. Ces fonctions permettent d’inclure ainsi, à la volée, dans les analyses effectuées, la combinaison d’une ou plusieurs approches, comme des calculs mathématiques, des manipulations de chaînes de caractères, des analyses statistiques, l’interrogation de bases de données, ou l’exploitation d’autres ressources utiles. Dans leur représentation, le graphe est composé également par un groupe de boîtes (les transitions du diagramme d’états-transitions) reliées par des arcs avec une unique boîte désignée comme initiale (l’état initial du diagramme d’états-transitions) et une seule boîte désignée comme finale (l’état final du diagramme d’états-transitions), chaque boîte, à l’exception de celle associée à l’état final, est étiquetée en entrée (contenu de la boîte) et facultativement en sortie (contenu en dessous de la boîte). Comme dans le cas des lgs, les étiquettes d’entrée peuvent contenir des mots, des méta-symboles, des traits sur les mots (contraintes lexicales sur les mots), le mot vide, l’appel à un sous-graphe (en indiquant son nom), etc. Les étiquettes de sortie peuvent contenir des suites de symboles, comportant zéro ou plus sous-séquences de symboles non-terminaux toujours sous la forme ϕ(∆) représentant chacuns l’appel à une fonction externe à la grammaire. ϕ est le nom de la fonction étendue, ∆ est un n–uplet (a1, a2, . . . , an) où chaque ai est dénommé argument de ϕ. Un argument est soit une suite finie de symboles terminaux, désormais appelé argument littéral, soit un registre de la grammaire, désormais appelé argument variable. L’entrée de la grammaire locale étendue est une séquence d’unités telle que des caractères ou des tokens. Lors de leur analyse, c’est-à-dire, l’application d’une ELG sur la séquence d’unités lexicales en entrée, une sous-séquence est reconnue si, en lisant le graphe de gauche à droite, il existe un chemin allant de l’état initial à l’état final où chacune des transitions parcourues reconnaît la sous-séquence présentée en entrée tout en satisfaisant les fonctions étendues rencontrées. De la même manière que la notion de grammaire locale est comparable à celle d’un rtn, la notion de grammaire locale étendue que nous introduisons peut être rapprochée du modèle du réseaux de transitions augmenté (atn, Woods, 1970, Bates, 1978). Le modèle d’atn a été introduit indépendamment par Thorne et al. (1968, 1. Il est utile de rappeler que dans le périmètre de nos travaux, nous parlons des grammaires locales classiques en faisant référence au formalisme des graphes syntaxiques disponibles dans des outils comme Unitex ou NooJ 4 Grammaires locales étendues : principes 73 citée par Kaplan, 1972, p. 5) et généralisé par Woods (1970) comme une approche du traitement automatique du langage. Un atn est une version augmentée du modèle des rtns par la possibilité qu’offre un tel réseau d’ajouter 1) des registres, 2) des conditions aux arêtes et 3) d’associer à celles-ci des actions. Néanmoins, nous pouvons mettre en avant deux sortes de différences entre les elg et les atn. D’une part, on retrouve les mêmes différences que celles existant entre les grammaires locales et les rtns : • Les grammaires locales peuvent produire des sorties. • Les grammaires locales peuvent faire référence à des ressources linguistiques. D’autre part, on note des différences supplémentaires entre les atn et les elg : • La notion de fonction étendue diffère de celle d’action dans les atn, d’un part parce que les fonctions étendues peuvent communiquer de forme bidirectionnelle avec l’analyseur syntaxique et aussi entre elles, d’autre part, parce qu’elles peuvent retourner des résultats à concaténer à la sortie de la grammaire. • Dans une atn le cycle de vie des actions est limité à leur temps d’exécution, les fonctions étendues sont évaluées à chaque appel, mais peuvent conserver des registres globaux. • Dans une atn il n’est pas possible de faire face à des erreurs inattendues, par exemple, des phrases qui échouent à être analysées pour contenir un mot inconnu. En revanche, la notion de fonction étendue et l’ajout des événements permet aux grammaires locales étendues de mettre en place des techniques de correction locale au niveau de la lecture de symboles d’entrée ou des opérations appelées à partir du graphe. • Les fonctions étendues sont évaluées par une machine abstraite et indépendantes de l’algorithme d’analyse syntaxique, autrement dit, il n’est pas nécessaire que l’analyseur connaisse à l’avance la fonction pour parvenir à la traiter. • Les fonctions étendues ont accès aux mêmes ressources utilisées par l’analyseur syntaxique, tels que les dictionnaires morphologiques ou les tokens et peuvent les consulter et les modifier. En outre, les fonctions étendues ont aussi accès à des ressources externes, tels que des fichiers ou des bases de données.