Les lexies en TAL

A. Michiels

Université de Liège

amichiels@ulg.ac.be


1         Définition

Les lexies, unités lexicographiques qui dépassent les frontières du mot défini morphologiquement, sont, comme toutes les autres unités lexicographiques, des ‘constructs’ (artéfacts) ; seules leurs manifestations textuelles sont directement observables. En TAL (Traitement automatique de la langue), il y a peu d’intérêt à recourir à une définition de la lexie qui fasse état du caractère non-compositionnel de son interprétation sémantique, non seulement car on ne sait pas trop bien cerner le mécanisme de composition du sens, mais aussi parce que les lexies elles-mêmes fournissent des contextes pour les items qui en font partie, et contribuent ainsi à la détermination de leur contenu sémantique sur base distributionnelle, lequel ne peut donc en être totalement indépendant. En effet, si les sens de x (take : prendre) et de y (cleaner : produit nettoyant, nettoyeur) se déterminent – inévitablement – en fonction de tous les contextes dans lesquels ces deux items apparaissent, leur participation à une lexie xyZ (he took me to the cleaner’s : « il m’a plumé ») est à prendre en compte au même titre que les autres contextes, et interviendra dans la définition du sens que l’on soumettra à l’opération de composition pour rendre compte de l’interprétation de AxB (he took my pen : « il a pris mon stylo ») et de CyD (he went to the cleaner’s yesterday afternoon : « il s’est rendu chez le teinturier hier après-midi »), contextes dont nous supposerons qu’ils ne forment pas de lexies. La définition de la lexie comme unité sémantiquement non-compositionnelle est donc entachée de circularité, l’exclusion de la lecture idiomatique dans les énoncés compositionnels ne pouvant se faire que sur la base d’une interprétation préalable des énoncés où apparaît la lexie.

 

On partira donc d’une définition plus étroitement liée au comportement lexical et morphosyntaxique de la lexie. Pour rendre compte de ce comportement, on attribuera à la lexie l’appartenance à un type de construction grammaticale et, par l’imposition de contraintes, on cernera le caractère plus ou moins fixe (frozen) de la lexie par rapport à l’ouverture aux manipulations morphosyntaxiques et à la variation lexicale qui caractérise la construction en question dans la description de la langue. On peut arguer que la résistance de la lexie à la variation lexicale et aux manipulations syntaxiques n’est que le reflet de sa non-compositionnalité sémantique, les éléments manquant d’indépendance sémantique ne pouvant pas faire l’objet de manipulations qui les mettraient en évidence, ni être substitués sur l’axe paradigmatique par d’autres qui, dans d’autres contextes, appartiennent à la même classe qu’eux.

 

Les lexies ne sont évidemment pas de simples chaînes de caractères ou listes de mots, contrairement à ce qu’un coup d’oeil à leur description dans un dictionnaire papier pourrait laisser croire. C’est que le dictionnaire fait un appel implicite à la connaissance de la langue décrite de la part de celui qui le consulte, et à sa capacité à abstraire des exemples fournis les conditions sous lesquelles la chaîne de caractères représentant la lexie peut s’insérer dans des contextes divers et y garder son caractère de lexie, c’est-à-dire différer de la structure libre correspondante, tant sur le plan de l’interprétation sémantique que sur celui de l’ouverture à la variation lexicale et aux manipulations syntaxiques. Dans un système de traitement automatique de la langue, les lexies devront être caractérisées de façon tout à fait explicite, de telle manière à ce que l’on puisse décider algorithmiquement si une portion de texte exemplifie oui ou non une lexie donnée.

2         Caractérisation

On conviendra donc aisément qu’il n’est pas possible de caractériser la lexie indépendamment de la grammaire qui en sous-tend la description. De même que si je dis que porte est un nom féminin, je m’attends à ce que la grammaire fasse quelque chose de la partie du discours appelée ‘nom’, et reconnaisse une pertinence à la distinction entre genres grammaticaux, je ne peux décrire une lexie syntagme prépositionnel (comme sur le bout du doigt) sans faire une place aux syntagmes prépositionnels dans ma description grammaticale de la langue.

 

Il importe donc de bien montrer que les descriptions qu’on donne des lexies sont directement utilisables par la grammaire. Je m’attacherai dans cet article à faire voir tout ce que cette exigence implique en donnant une description de lexies assez complexes et une micro-grammaire intégrée à un prototype d’analyseur qui en permet le parsage, c’est-à-dire reconnaît les diverses manifestations textuelles des lexies en question et leur attribue la structure appropriée[1]. Mes exemples seront le plus souvent empruntés à la langue anglaise, mais les propriétés qu’ils tentent de mettre en valeur concernent aussi d’autres langues, telles les autres langues germaniques et les langues romanes.

 

La description de la lexie contiendra bien sûr du matériau lexical. C’est en cela que formellement elle se distinguera de la description de constructions grammaticales que l’on pourrait qualifier de ‘libres’. A côté de syntagmes libres tels que GN (groupe nominal) ou GV (groupe verbal), on trouvera donc des unités lexicographiques dont la description comporte au moins deux listes de traits où un trait au moins est de nature lexicale, disons txt (forme textuelle, variante morphologique) ou lex (lexème, lemme). La règle constitutive du GP (groupe prépositionnel) anglais fera référence à un trait pos (part of speechpartie du discours) assurant l’unification avec la liste de traits associée à une préposition, et à un ensemble phrastique GN qui permettra de récupérer une structure nominale créée ailleurs. Mais dans la description de in troubled waters (en eaux troubles), je devrai préciser que le lex de la préposition  est in, et que le GN est troubled waters. A moins bien sûr que je ne considère que la structure interne de ce GP soit immuable et puisse se passer d’être décrite, ce qui serait le cas si in troubled waters n’autorisait aucune manipulation morpho-syntaxique, et pouvait être reconnu par le seul biais de l’adjacence textuelle de ses composants (ce qui n’est bien sûr pas le cas). Je me contenterais alors de reconnaître une séquence de trois mots (unités textuelles), à savoir in, troubled et waters, et de lui assigner la valeur phrastique de GP.

 

Plus précisément , il convient de prévoir la possibilité de faire référence, dans la description des lexies, à six types de spécification pour leurs éléments constitutifs:

 

1) l’élément est une forme, qu’il n’y a pas lieu de rattacher à un lexème car elle n’apparaît nulle part ailleurs (au fur et à mesure, en son for intérieur) ou n’y a aucune des propriétés associées au lexème qui semble y correspondre (by and large (en gros), où by n’est pas préposition, and n’est pas connecteur, et large n’est pas adjectif)

 

Il convient donc de reconnaître une lexie telle que by and large avant même que la consultation d’un lexique de monolemmes n’ait associé les parties du discours aux éléments de la chaîne tokenisée. Ce qui ne veut pas dire qu’on puisse se passer de reconnaître individuellement les éléments constitutifs de la lexie by and large. En effet, comme ces éléments peuvent apparaître dans la séquence spécifiée dans la lexie sans pour autant en constituer la manifestation textuelle, il faut les deux analyses :

 

He went by and large crowds gathered wherever he happened to stop to speak. (Des foules nombreuses se pressaient sur son passage partout où il lui plaisait de s’arrêter pour prendre la parole)

By and large the situation is getting slightly better. (En gros, la situation s’améliore quelque peu)

 

2) l’élément est caractérisé au niveau de la forme textuelle ; on ne peut se contenter d’une caractérisation au seul niveau du lemme. Si dans faire flèche de tout bois, flèche ne peut être mis au pluriel, il y a lieu de référer à txt:flèche (référence à la forme textuelle), ou à  [lex:flèche, nombre:sing] (référence au lemme et au trait indiquant le nombre).

Le choix de l’une ou l’autre solution sera dicté par le comportement du mot flèche dans la lexie.

 

3) l’élément est un lemme, comme par exemple le verbe support prendre dans prendre en considération ; il faut déterminer de quel prendre il s’agit, à savoir dans ce cas le verbe support (au sémantisme réduit, etc.)

 

4) l’élément est membre d’une classe fermée (donc spécifiable lexicalement) : perdre la boule, la raison, etc. où boule et raison sont membres d’une classe à définir lexicalement (en donnant tous les lemmes ou formes textuelles qui en font partie)

 

5) l’élément est membre d’une classe ouverte, caractérisable sémantiquement ou thésauriquement (par exemple ‘possession inaliénable’ pour les parties du corps, etc.)

 

6) l’élément est membre d’une classe ouverte spécifiable syntaxiquement – cas du GN objet dans prendre GN en considération ; on peut considérer que ces éléments sont en fait extérieurs à la lexie, mais la description de celle-ci devra y faire référence, par exemple dans la liste des arguments associée à la lexie.

3         Format

Dans le modèle proposé ici, la description des lexies se fait par le biais de la détermination de termes Prolog utilisés dans un parseur ascendant qui se base sur une grammaire d’unification mettant en oeuvre l’unification de traits. La description de chaque lexie comporte un élément et un seul qui constitue le point d’ancrage de la lexie dans le texte. Il doit donc s’agir d’une forme textuelle et non d’un lemme. Elle permettra par unification d’associer la description de la lexie à un élément du texte. Pour des lemmes tels que les verbes, associés à un éventail de variantes morphologiques, on aura recours au mécanisme de macro-expansion pour éviter de répéter pour chaque variante morphologique constituant le point d’ancrage textuel l’ensemble des informations pertinentes à la lexie tout entière[2]. Pour exposer le mécanisme de macro-expansion, nous commencerons par examiner une macro pour un lexème qui ne comporte qu’une unité lexicale, et n’est donc pas une lexie :

 

verb([v(thinks,think,thought,think)],intr,

arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]]]).

 

 

Cette description est celle du verbe intransitif think. On constate qu’il s’agit d’un terme Prolog d’arité 3 dont le foncteur est l’atome verb. Le premier argument est une liste, ici limitée à un seul élément, de termes Prolog dont le foncteur est v d’arité 4 et dont les trois premiers arguments représentent un certain nombre parmi les variantes morphologiques du verbe, celles dont cette grammaire fait usage (à savoir la troisième personne du singulier de l’indicatif présent, l’autre forme du présent, la forme du prétérit), et le quatrième donne le lemme. En deuxième argument de verb, on trouve la classe (intr : verbes intransitifs), et en troisième argument un terme Prolog bâti autour de l’opérateur infixe deux-points(:). Il s’agit d’un trait (feature). A gauche de l’opérateur on trouve le nom du trait (feature name) et à droite sa valeur (feature value). Le nom du trait est ici arglist, et sa valeur est la liste des arguments du verbe. Elle ne contient ici qu’un argument, le sujet. On en précise le type (noun phrase, groupe nominal), et la place dans l’ordre canonique des arguments (0 désigne la place à gauche du verbe conjugué), c’est-à-dire sa place avant tout déplacement dû aux manipulations syntaxiques ou au poids des structures. Les traits gappable et oblig enregistrent des propriétés de type oui-non de l’argument sujet : le trait ‘gappable indique si l’élément peut ou ne peut pas être déplacé hors de la structure, laquelle en portera alors la trace, et le trait oblig indique le caractère obligatoire ou optionnel de l’élément dans la structure actantielle manifestée. Enfin, le trait constraints enregistre des contraintes sur la manifestation textuelle de l’argument : le groupe nominal candidat à la fonction de sujet devra satisfaire à ces exigences ; dans le cas qui nous occupe, il devra être muni d’une liste de traits sémantiques qui inclut la valeur hum. Il n’est pas possible de présenter les traits spécifiés dans la liste de constraints comme autre chose que, précisément, des contraintes qu’on ne peut vérifier que lors de l’introduction de la lexie dans le contexte constitué par le texte soumis à l’analyse.

 

La description donnée est une macro, elle n’est donc pas confrontée directement au texte. Cette confrontation est dévolue aux entrées lexicales obtenues par expansion de cette macro. Voici celle que nous obtenons pour la troisième personne de l’indicatif présent :

 

lex(thinks, v, [pos : v, class : intr, txt : thinks, lex : think, tense : present,

              arglist : [subject : [type : np, canon : 0, gappable : yes, oblig : yes,

              constraints : [agr : [number : sing, person : 3, gender : G], sem : [hum]]]]]).

 

On constate que le mécanisme d’expansion de la macro s’est contenté de sélecter la forme textuelle appropriée, et de spécifier les traits qui dépendent de ce choix, notamment au niveau de l’accord (injection du trait agr dans le trait constraints associé au trait subject). Le prédicat lex qui en résulte a trois arguments :

 

1) la forme textuelle à confronter au texte : thinks (c’est toujours le premier argument du foncteur lex)

2) la partie du discours : v(erbe)

3) une liste de traits.

 

La liste de traits est, comme toute liste, une séquence ordonnée. Cependant, l’ordre est dû seulement au fait que la séquence de traits (anglais feature bundle, FB) est représentée en Prolog par une liste, et il conviendra d’assurer que l’usage qui est fait de cette liste n’utilise pas la propriété d’ordre sur les traits, qui n’est pas pertinente pour la description linguistique. Le nombre d’éléments de la séquence n’est pas prédéterminé (la liste peut être vide), et la nature des éléments peut varier librement d’élément à élément. La notation utilisée est celle de Prolog, où les listes sont pincées entre un crochet ouvrant ([) et un crochet fermant (]), les éléments séparés par des virgules. [] désignera une liste vide.

 

Un trait est un couple Nom_du_trait : Valeur_du_trait (le séparateur est l’opérateur infixe « : », dépourvu ici de tout sémantisme).

 

Le nom du trait est atomique (chaîne de caractères sans séparateurs, pour faire bref) ; la valeur du trait est soit

1) atomique

2) du type liste de traits

3) du type variable (conformément ici aussi à la notation Prolog, la variable est désignée par une chaîne de caractères dont le premier élément est une majuscule).

 

Il est essentiel que les informations soient typées, ce qui est assuré par le nom de trait. Ce typage permet d’éviter la contrainte d’ordre sur les traits, et est indispensable à une utilisation souple des variables.

4         Détermination

Avant de passer à la description de quelques lexies, nous soulignerons toute l’importance que revêt le travail préliminaire, par lequel le lexicographe en vient à poser la nécessité d’introduire la lexie dans le répertoire des ressources lexicales de la langue. On serait bien mal inspiré de s’en tenir aux descriptions offertes par les dictionnaires existants. La phraséologie y reste traitée essentiellement par le biais des manifestations textuelles des lexies ; à charge de l’utilisateur de dégager le modèle qui permet de rendre compte de ces manifestations. Le problème provient du fait que les lexies sont présentées sous forme de séquences de mots, accompagnées ou non de codes grammaticaux, notes d’usage, etc. Ce formalisme est souvent insuffisant pour la spécification exacte des contraintes qui caractérisent la lexie.

 

Une première tâche consiste à bien établir les frontières de la lexie. On veillera à ne pas réduire trop, à ne pas poser de lexie telle que le bout du doigt, lexie fantôme du Petit Robert :

 

Le Bout du doigt. Fig. Connaître, savoir qqch. sur le bout du doigt. Avoir de l’esprit jusqu’au bout des doigts.

(remarquez la typographie du Le ; remarquez aussi que la lexie fantôme est susceptible de subir des modifications dont on ne peut que deviner la nature et l’étendue : des doigts au lieu du doigt)

 

mais on ne reconnaîtra pas non plus, n’en déplaise à Wehrli (cf. Wehrli 1997 : 172-173), une lexie :


 

[NP qqn] [v savoir] [NP qqch] [PP sur le bout du doigt]

                  -PASS                     +LITTERAL

 

car le lemme savoir ne fait pas partie de la lexie. Cette exclusion se fonde, non seulement sur l’alternance avec connaître mentionnée par le Robert, mais aussi sur l’examen d’énoncés tels que :

 

Il possède la matière sur le bout du doigt.

 

Quant au trait –PASS (absence de passivisation) sur savoir, il est assez surprenant, et est sans doute dû à des restrictions sur la passivisation de savoir en général, plutôt qu’à des restrictions particulières qui tiendraient à sa participation à la lexie :

 

Cette matière doit être connue sur le bout du doigt.

Choses sues sur le bout du doigt.

 

On voit que les frontières de la lexie ne dépassent pas le PP, que Wehrli marque comme +LITTERAL pour indiquer que la chaîne de caractères ne peut accueillir aucune expansion et ne subir aucune modification, ce qu’il conviendrait de vérifier par l’examen d’un corpus de taille significative.

 

Il est clair qu’il est impossible de déterminer à priori quelles seront les contraintes qu’il faut mettre en œuvre pour distinguer la lexie de ses voisines textuelles. Si on estime qu’il faut distinguer la présence d’une lexie dans

He takes a good photograph (il est photogénique)

en contraste avec

He takes good photographs (il fait de bonnes photos) et He is taking a good photograph (il prend une bonne photo),

ne fût-ce que pour satisfaire les besoins de la traduction anglais-français, on est amené à poser qu’il n’y a pas de borne supérieure au degré de finesse que la description doit atteindre pour pouvoir déterminer si la contrainte pertinente est ou n’est pas satisfaite.

5         Mise en oeuvre

Un modèle grammatical capable de satisfaire les contraintes placées par les lexies sur leur environnement doit être à même de reconnaître les fonctions grammaticales (sujet, objet, etc.) et d’interpréter correctement les traces que doivent laisser les mouvements qui peuvent affecter les constituants de la lexie. Dans la micro-grammaire donnée en exemple, nous considérerons la relativisation et par ce biais montrerons comment les relations de longue distance doivent être prises en compte dans la satisfaction des contraintes.

 

On peut bien sûr opter pour un traitement beaucoup plus sommaire (et également beaucoup plus robuste) des problèmes posés par la reconnaissance des lexies en contexte. On peut se contenter d’un appariement assez flou entre la chaîne représentant la lexie dans les ressources lexicales standard et le texte censé véhiculer une des ses manifestations textuelles. C’est l’approche mise en œuvre dans le projet defi (cf. Michiels 2001). Pour éviter un excès de bruit on ne peut se limiter à un appariement trop grossier et on est donc amené à sacrifier la reconnaissance des lexies ayant subi des manipulations textuelles qui ont modifié de manière trop drastique l’ordre canonique illustré par la chaîne qui représente la lexie dans le dictionnaire. Defi reconnaît la lexie cock_a_snook_at dans cet exemple de The Economist :

he had cocked a calculated snook at Washington (The Economist, April 20th, 2002 – p.44, third col.)

malgré la présence de l’adjectif épithète calculated[3], mais est impuissant devant la relativisation exemplifiée par

The formidable snook he cocked at us left us speechless.

La même remarque vaut pour tout système basé sur un automate à nombre fini d’états.

 

Le modèle d’analyse proposé ici repose sur la répartition du travail entre différentes passes. Chaque passe active un système de productions. Chaque règle attend pour se déclencher que ses conditions d’application soient réunies. Le système tout entier est constamment relancé – la passe ne se termine qu’en l’absence de toute nouvelle production.

 

Le parseur est implémenté en Prolog. Les contrôles procéduraux sont limités à l’emploi du coupe-choix (le cut, « ! ») et à la vérification de la nature instanciée ou libre d’une variable à une étape donnée du traitement (utilisation des prédicats prédéfinis var et nonvar).

 

Avant même l’exécution de la première passe, le texte à analyser est préparé : la chaîne de caractères est transformée en liste de mots (selon un algorithme tout à fait standard) et à chaque mot sont associées ses bornes de gauche et de droite. Le tout est rendu disponible à la base de données interne à Prolog par l’ajout des clauses pertinentes. Par exemple, l’énoncé the teacher kicked the bucket sera transformé en[the,teacher,kicked,the,bucket]et les clauses suivantes seront injectées dans la base de données à l’aide du prédicat Prolog recorda : position(0,1,the), position(1,2,teacher), position(2,3,kicked), position(3,4,the), position(4,5,bucket)ainsi que fin(5) qui indique la position de la ponctuation finale. On dispose ainsi de manière explicite des relations de contiguïté et de précédence entre items. Elles seront utilisées dans la construction des ensembles phrastiques et dans la vérification des relations de précédence entre un prédicat et ses arguments, et entre arguments. Toutes ces clauses seront ’oubliées’ dès la fin du traitement de l’énoncé.

5.1       La consultation lexicale

La première passe est la passe de consultation lexicale. Les items lexicaux mono-lemmes sont associés à leur manifestation textuelle. En termes prologuiens, le point d’entrée est l’unification de la forme textuelle avec la valeur Text du trait txt (txt : Text). On peut dire que la liste de traits associée à la forme textuelle devient l’entrée lexicale qui vient enrichir le graphe représentant le texte. Le mécanisme est semblable à celui d’initialisation d’un chart parser.

 

L’utilisation de variables à l’intérieur même du lexique permet une écriture non redondante. Le fait qu’il s’agit de listes de traits permet d’enrichir le lexique sans avoir à le redessiner, et de spécifier des entrées riches à côté d’entrées pauvres.

Cette première passe est aussi celle où seront reconnues les chaînes non susceptibles de variation ou de modification. Leur premier élément, invariable, constituera le point d’ancrage dans le texte. Les éléments suivants devront apparaître tels quels dans le texte, et en stricte adjacence. Ces chaînes pourront être accompagnées d’une indication de la partie du discours ou de la catégorie grammaticale sous laquelle il convient de les ranger. On peut aussi leur associer divers traits comme le poids structurel (un poids de 3 est généralement attribué aux groupes prépositionnels dans la grammaire prototype) et spécifier l’absence de trace dans leur configuration (* the bay he was held at – * l’échec dans lequel il était tenu vs the room he was kept in – la pièce où on le détenait).

 

string(adv,[by,and,large],[lex:by_and_large]).        % en gros

string(pp,[at,bay],[lex:at_bay,weight:3,gap:nogap]).  % à distance, en échec (hold at bay)

string(prep,[out,of],[lex:out_of]).

5.2       L’analyse grammaticale

Elle se base sur deux opérations :

 

a) vérification de l’existence de FBs (feature bundles, séquences de traits) et des contraintes portant sur leurs traits

b) construction de nouveaux FBs

 

Les FBs sont stockés dans une base de données qui est remise à zéro lors de l’analyse d’une nouvelle phrase. Le modèle d’analyse est de type ascendant, avec ajout monotone[4] d’information.

 

Prenons comme exemple un cas tout simple, l’analyse de la chaîne the man. La consultation lexicale conduit à la création d’un graphe sur le texte de deux FBs :

 

[pos:det,type:article,txt:the,lex:the,agr:[number:Nb,person:3,gender:G]] associé à the et

[pos:n,txt:man,lex:man,class:c,agr:[number:sing,person:3,gender:masc],sem:[hum]] associé à man

 

Alors que la règle de grammaire indépendante du contexte  GNà DET N spécifie la création d’un graphe GN regroupant les informations de DET et N si ces deux éléments se retrouvent en stricte adjacence, l’adjacence est contrôlée ici via le partage de positions dans la liste de mots correspondant au texte (voir ci-dessous la section sur la contrainte de linéarité). Les deux feature bundles participent au calcul de l’accord en nombre, qui s’accomplit via l’unification de la variable Nb, associée au trait number dans le FB du DET, avec la constante sing, associé comme valeur à ce même trait number dans le FB de man :

 

[gr,np2] --->

[

known(det,[from:A,to:B|FS1]),

 known(n,[from:B,to:C|FS2]),

 constraint([agr:[number:Nb]],FS1),

 constraint([agr:[number:Nb,person:P,gender:G],sem:Sem],FS2),

 build(np,[from:A,to:C,cat:np,agr:[number:Nb,person:P,gender:G],sem:Sem,

           weight:2,index:i(A,C),gap:nogap,c_str:[det:FS1,head:FS2]])

].

 

La règle np2 du module d’analyse grammaticale prévoit la vérification de l’adjacence par le partage de la variable B : la position de fin du DET est la position de début du N. Les deux FBs sont récupérés de la base de données qui stocke les éléments d’analyse de la phrase courante. Les prédicats constraint forcent l’unification du trait nb dans les deux FBs. Le prédicat build crée une structure (un graphe) qui couvre les positions A à C et dont la catégorie est NP (noun phrase, syntagme nominal). Y est associé un trait index qui permettra à cet NP de faire l’objet de relations de coréférence via son unification.  Le trait c_str donne la structure de constituants par percolation des deux FBs des constituants, FS1 et FS2. Le trait weight spécifie le poids du groupe nominal, lequel sera pris en considération dans l’établissement des relations de précédence.

 

La construction de nouveaux FBs ne peut donc se faire que si la ‘règle’ dispose des FBs qui entreront, en tout ou en partie, dans ces nouveaux FBs. Par exemple, un nom régissant une proposition (ex. the claim dans the claim the teacher made a mistake) devra attendre que cette proposition ait été reconnue pour donner naissance à un nouveau FB, celui du groupe nominal correspondant à la règle cfg : GN à DET N S.

 

Les deux opérations de base, vérification de contraintes sur les FBs et création de nouveaux FBs, sont suffisantes pour assurer la reconnaissance des lexies. Toutefois, pour rendre le système plus puissant et plus souple, on introduit un algorithme de parcours de la liste d’arguments, semblable à celui qu’on trouve dans la slot grammar de Michael McCord (cf. McCord 1982) et dans Horatio (cf. Michiels 1995). Ce parcours de liste permet de prendre en compte plus aisément les contraintes de linéarité, et ne nécessite pas la mise en œuvre de diverses règles selon que les arguments optionnels sont ou ne sont pas présents dans la phrase à analyser.

 

Dans cet algorithme, chaque argument est choisi dans la liste par une sélection non-déterministe. Il doit satisfaire les contraintes de linéarité par rapport à l’argument dont la réalisation dans la phrase à analyser est un syntagme qui se trouve à sa droite. En fin de parcours, il ne peut rester dans la liste que des arguments marqués comme optionnels.

 

Comme le parseur est de type ascendant (bottom-up), il ne connaît pas le problème généré par les règles récursives à gauche, problème que doivent contourner les parseurs de type descendant (top-down). Les règles de constitution des structures coordonnées attendent, exactement comme les autres règles, que leurs constituants aient été reconnus. 

5.3       Satisfaction des contraintes

La satisfaction des contraintes est basée sur l’unification. Comme l’ordre des traits à l’intérieur des listes de traits n’est pas pertinent, il faut prévoir dans l’algorithme un parcours de liste. C’est le nom du trait qui sert à repérer les valeurs à unifier. Le processus est récursif puisque la valeur d’un trait peut être une liste de traits. Cet algorithme se trouve dans la littérature. Nous utilisons ici une adaptation de la version de Gal et al. 1991 (pp. 244-245). Nous en proposons deux modes. Le premier est la vérification. Ici, la satisfaction des contraintes ne conduit pas à la création d’une nouvelle liste de traits, mais se contente de vérifier la compatibilité des deux listes en présence.

 

Le second mode requiert la construction d’une nouvelle liste de traits par unification des deux listes existantes. Nous trouvons ce cas dans les structures coordonnées. Si nous coordonnons deux structures qui contiennent un gap, c’est-à-dire qui sont structurellement incomplètes, la résultante présentera un gap où se retrouveront les contraintes spécifiées dans les deux gaps des structures constituant la coordination. Prenons l’exemple de la coordination de deux relatives : the book the man wrote and the woman read. Le gap qui désigne l’objet de wrote et de read devra satisfaire aux contraintes placées par les deux prédicats wrote et read sur l’objet manquant. On aura donc la règle suivante :

 

[gr,coord_pred2] --->

[ known(coord,[from:B, to:C|FS2]),

  constraint([pos:coord],FS2),

  known(pred,[from:A, to:B|FS1]),

  constraint([cat:pred,

              gap:[type:Type,index:I,function:F,constraints:Co1,F:[e:I]]],

                FS1),

  known(pred,[from:C, to:D|FS3]),

  constraint([cat:pred,

              gap:[type:Type,index:I,function:F,constraints:Co2,F:[e:I]]],

  FS3),

  funify(Co1,Co2,UnifiedCos),

  build(pred,[from:A, to:D,

              cat:pred,

              gap:[type:Type,index:I,function:F,constraints:UnifiedCos,F:[e:I]],

              weight:3,

              type:coordinated,

              c_str:[head:FS1,coord:FS2,pred:FS3]])].

 

On constate que les deux prédicats à coordonner partagent un gap, gap qui laissera une trace qui sera unifiée à l’index de la structure dont le mouvement a créé le gap. Cet index, désigné ici par la variable I, valeur du trait de nom index et également, dans la description de la structure en constituants, du trait e (qui, par convention, désigne la trace laissée par un constituant gappé), sera unifié à une structure de foncteur i et d’arité 2 dont les deux arguments ne sont rien d’autre que les bornes du constituant gappé, par exemple i(3,8) si le constituant occupe les positions 3 à 8 dans la phrase à analyser. Donnons un exemple. Supposons que la phrase à analyser soit :

the students like the pamphlet the minister wrote and the teachers bought

ce qui donne les positions suivantes :

[0/the, 1/students, 2/like, 3/the, 4/pamphlet, 5/the, 6/minister, 7/wrote, 8/and, 9/the, 10/teachers, 11/bought, endpos(12)]

La structure gappée par la relativisation est l’objet des deux verbes transitifs wrote et bought. Dans l’analyse renvoyée par le prototype, ils présenteront tous deux un objet de type trace, qui référera à la structure gappée, à savoir le groupe nominal the pamphlet, l’antécédent du relatif Ø, qui occupe les positions 3 à 5. On aura donc deux fois e:i(3, 5), comme objet de wrote et comme objet de bought.

Les contraintes que doit satisfaire le gap porté par la structure résultant de la coordination des deux prédicats présentant une trace (the minister wrote et the teachers bought) seront donc le résultat de l’union des deux ensembles de contraintes, celles placées par wrote sur son objet et celles placées par bought sur son objet. Il s’agit dans le premier cas de la liste ([sem:[document]]) et dans le second de la liste [sem:[thing]]. L’union sera donc, dans ce cas, la liste [sem:[document,thing]]. En effet, le lexique présente les macro-entrées suivantes :

 

verb([v(writes,write,wrote,write)],tr,

arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                       object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[sem:[document]]]]).

et

verb([v(buys,buy,bought,buy)],tr,

arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                       object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[sem:[thing]]]]).

 

Quant aux adaptations à l’algorithme d’unification de traits que nous proposons, la première permet  l’utilisation de disjonctions comme valeur de trait ; de telles disjonctions sont signalées par le foncteur or, qui prend comme unique argument une liste d’atomes, par exemple : or([the_place,the_house]). La disjonction ne se limite donc pas à une paire de valeurs. En mode vérification, on exigera que l’ensemble constitué par l’intersection des deux listes des foncteurs or ne soit pas vide. En mode construction, cette intersection constituera la valeur du foncteur or résultant. Si on a d’un côté une valeur de type atomique et de l’autre un foncteur or, on s’assurera que la valeur atomique est membre de la liste qui figure en argument du foncteur or.

 

La seconde adaptation concerne le trait sem, dont la valeur est toujours une liste d’atomes, par exemple : sem:[abstract, thing]. L’unification de telles listes sera basée sur l’existence d’une relation de sous-ensemble de la première liste par rapport à la seconde en mode vérification, et sur l’union des deux listes en mode construction, comme nous venons de le voir dans l’établissement de la liste [sem:[document,thing]].

 

De plus, la relation sous-ensemble est définie de telle sorte qu’elle tienne compte des relations d’héritage qui découlent de l’existence d’une taxonimie des traits sémantiques. Par exemple, la liste de valeurs sémantiques du nom pamphlet est sem:[book]] :

 

lex(pamphlet,n,

[type:std,pos:n,txt:pamphlet,lex:pamphlet,count:c,class:std,

agr:[number:sing,person:3,gender:neuter],sem:[book]]).

 

Or, un verbe tel que write exige, nous l’avons vu, un objet qui comporte le trait document. Le trait book est, dans la taxonimie, inférieur à document. Il faut donc assurer que l’exigence posée par write soit satisfaite par pamphlet. Les relations taxinomiques sont implémentées par le prédicat ako (a_kind_of) :

 

ako(book,document).

ako(document,thing).

ako(document,information).

ako(information,abstract).

 

L’héritage se fait via une remontée de la taxinomie, la relation ako étant transitive.

5.4       La contrainte de linéarité

Comme on l’a souligné plus haut, certains modèles linguistiques, à commencer par les grammaires indépendantes du contexte, ont indissolublement mêlé constituence et linéarité. La règle cfg : P à GN GV instaure la constituence de la phrase, et dans le même mouvement impose stricte adjacence à ses deux constituants. Les transducteurs ont également une expression implicite de la linéarité.

 

Or, un grand nombre de langues ne lient pas constituence et linéarité, et, même dans le cas des langues à ordre des mots plus ou moins rigide, il y a pas mal de fluctuation pour servir des buts stylistiques (variations élégantes du type Belle marquise…) et d’expressivité. Il nous paraît préférable de ‘retenir’ la position de chaque élément via ses bornes de gauche et de droite, et de fixer des contraintes sur les positions pour rendre compte des notions de précédence (en utilisant la contrainte ‘plus petit que’) et d’adjacence (bornes partagées – coïncidence entre la borne de droite de l’élément précédent et la borne de gauche de l’élément suivant).

 

Il est nécessaire de calculer d’autres valeurs que la nature ou la fonction pour établir les contraintes de linéarité. L’ordre des GN constituant le couple objet direct – attribut de l’objet direct est lié à la notion de poids des constituants, notion qui fait appel à la complexité de la structure interne du constituant, et ne se réduit pas à un simple comptage de mots :

 

Je déclare Pasqua ennemi public.

Je déclare ennemi public toute personne qui etc.

?? Je déclare ennemi public Pasqua.

?? Je déclare toute personne qui … et qui, alors que…, ennemi public.

 

Dans la grammaire proposée en illustration, la linéarité sera donc la résultante d’un calcul qui prend en compte deux types d’information :

 

a) Le premier type d’information est présent dans le lexique lui-même. Il spécifie l’ordre canonique des arguments, et est présenté sous la forme d’une valeur numérique du trait canon. Voici par exemple l’entrée pour le verbe à particule adverbiale brush_aside (balayer, repousser):

 

verb([v(brushes,brush,brushed,brush_aside)],trprt,

                   arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                            object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[sem:[abstract]]],

                            athematic:[type:part,canon:1,gappable:no,oblig:yes,

                                constraints:[pos:part,lex:aside]]]).

 

Le sujet précède dans l’ordre canonique. Quant à la particule adverbiale, athématique, et l’objet direct, ils partagent la même valeur. La linéarité sera déterminée par le deuxième type d’information pris en compte à savoir

 

b) Le poids structurel de l’argument. Ce poids s’attribue au moment de la création du FB de l’argument. Un GN qui comporte seulement un déterminant et un nom, éventuellement accompagnés d’un adjectif, pèsera moins qu’un GN qui comporte toute une proposition, soit une proposition argument du nom (the claim that the earth is flat – l’affirmation que la terre est plate), soit une relative dont le nom est l’antécédent (the claim the teacher read out to the students – l’affirmation que le professeur a lue devant les étudiants). Ce poids permet de satisfaire aux contraintes de l’end-weight, c’est-à-dire le déplacement vers la droite des items les plus lourds.

 

La pondération entre ordre canonique et poids structurel se détermine heuristiquement.

6         Représentation

Considérons à présent quelques macro-lexies utilisées dans la grammaire d’illustration[5] et penchons-nous sur les propriétés des spécifications lexicales dont elles démontrent la nécessité ou l’utilité.

6.1       Le sujet comme argument; les variables; contraintes sur la structure en constituants des arguments

% DIG ONE'S OWN GRAVE creuser sa tombe

verb([v(digs,dig,dug,dig_one_s_own_grave)],mwutr,

               arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                 constraints:[sem:[hum],agr:[person:P,gender:G]]],

                        object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[c_str:[det:[type:poss_adj,agr:[person:P,gender:G]],

                                                    adj:[lex:own],

                                                    head:[lex:grave]]]]]).

 

On constate que la liste d’arguments de la lexie mentionne le sujet. Bien qu’il soit un élément obligatoire, ce qui pour beaucoup justifierait son absence de la liste d’arguments, il fait l’objet de contraintes au même titre que les autres arguments[6], et le traitement est grandement simplifié s’il est disponible au même niveau d’analyse qu’eux. Les contraintes portant sur le sujet sont ici d’une part de nature sémantique (trait hum) et d’autre part concernent l’accord, le partage des traits personne et genre avec ceux du possessif accompagnant le lexème objet GRAVE. Pour spécifier ces traits au niveau de l’objet, il faut pouvoir pénétrer dans sa structure en constituants (trait c_str, pour constituency structure)[7]. D’autre part, l’utilisation des variables P et G pour désigner les valeurs des traits person et gender permet de spécifier l’accord sans avoir à énoncer de disjonctions sur l’ensemble des paires possibles (masc et masc ou fem et fem ; 1 et 1 ou 2 et 2 ou 3 et 3). Enfin, lors de la satisfaction des contraintes, on fera agir l’algorithme d’unification de traits, dans lequel il est possible, nous l’avons vu, de réserver un sort particulier aux traits dont la valeur se présente sous la forme d’une disjonction. Ainsi, on permettra l’unification de la valeur or([masc, fem] avec la valeur masc ou la valeur fem. Dans le lexique, on utilisera la valeur or([masc, fem]dans la spécification du trait genre des noms épicènes, comme teacher:

 

lex(teacher,n,[type:std,pos:n,txt:teacher,lex:teacher,count:c,class:std,

agr:[number:sing,person:3,gender:or([masc,fem])],sem:[hum]]).

 

On remarquera que la contrainte sur la tête du groupe nominal (head) est une spécification de lemme et non de forme textuelle. En effet, on rencontrera graves aussi bien que grave, quoique moins fréquemment, quand le sujet est pluriel (the teachers dug their own grave(s)).

 

La nécessité de spécifier le sujet est tout à fait évidente lorsqu’il fait partie intégrante de la lexie, c’est-à-dire contient du matériau qui doit être spécifié lexicalement (au niveau du lemme ou de la forme textuelle). C’est le cas de la lexie the_shit_hit_the_fan :

 

% (THE) SHIT HITS THE FAN ça barde vraiment

 verb([v(hits,hit,hit,the_shit_hit_the_fan)],mwupred,

               arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                 constraints:[c_str:[head:[txt:shit]]]],

                        object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[c_str:[det:[lex:the]],

                                             c_str:[head:[txt:fan]]]]]).

6.2        Traitement de l’alternance ; chaîne vs configuration structurelle

% SHOUT/SCREAM THE PLACE/HOUSE DOWN  crier comme un damné

verb([v(shouts,shout,shouted,shout_the_place_or_house_down),

      v(screams,scream,screamed,scream_the_place_or_house_down)],mwutrprt,

                   arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                            string:[type:string,canon:1,gappable:no,oblig:yes,

                                constraints:[lex:or([the_place,the_house])]],

                            athematic:[type:part,canon:2,gappable:no,oblig:yes,

                                constraints:[pos:part,lex:down]]]).

 

 

L’alternance shout/scream et l’alternance the place/the house sont inscrites dans le corps même de la lexie. La première sera prise en compte par macro-expansion, selon le mécanisme exposé ci-dessus. On constate qu’on a décidé d’attribuer des lemmes différents aux formes avec scream et aux formes avec shout. On n’est évidemment pas obligé de le faire. Le traitement optimal dépendra de l’usage qu’on désire faire de l’information concernant le lemme. Une forme unique serait de nature à simplifier l’interprétation sémantique.

 

La seconde alternance concerne un élément de la liste d’arguments, à savoir string. Notons que le type string sera utilisé pour les arguments qui n’en sont pas vraiment, c’est-à-dire qui apparaissent en surface mais ne participent pas à la configuration actantielle. La présence de la chaîne the place ou de la chaîne the house est évidemment cruciale dans le repérage de la lexie, mais sa participation sémantique, au-delà de la reconnaissance même de la lexie, est tout à fait nulle.  

 

L’alternance est confiée à l’algorithme d’unification de traits, qui gérera la disjonction indiquée par le foncteur or : or([the_place,the_house]).

 

Le dernier élément de la structure de surface de la lexie est la particule down. Dans la structure actantielle, elle remplit la valeur du trait athematic, qui lui aussi indique une participation dans le schéma actantiel qui se limite à la surface. Down, tout comme the place/the house, figure dans le lemme même de la lexie (scream_the_place_or_house_down), dont l’unique actant sera le sujet.

 

Notez que la reconnaissance de the place (the house) comme string (chaîne) implique qu’il n’y a aucun profit à considérer cette chaîne comme la manifestation textuelle d’un élément phrastique, c’est-à-dire à lui attribuer la structure d’un groupe nominal. Si on trouvait the big place, ou the houses, ou encore a house, ou si cet élément était sujet à des déplacements (the house he screamed down, the place was shouted down), il faudrait bien sûr en faire un argument objet de type groupe nominal, comme c’est le cas pour a snook dans la lexie cock_a_snook_at:

 

% COCK A SNOOK AT faire la nique à

verb([v(cocks,cock,cocked,cock_a_snook_at)],mwu_trprep,

              arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                       object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[c_str:[head:[lex:snook,agr:[number:sing]]]]],

                       pp_arg:[type:pp,canon:2,gappable:yes,oblig:no,

                                constraints:[prep:at]]]).

 

On peut prévoir une contrainte sur l’objet qui lui conserve son caractère de lexème, mais en précise le nombre ([lex:snook,agr:[number:sing]]). On peut aussi opter pour une spécification de l’item au niveau de la variante textuelle ([txt:snook]). Le peu d’indépendance de l’item snook rend cette solution tout à fait acceptable.

 

La seule contrainte placée sur le groupe prépositionnel concerne le choix de la préposition. Si le groupe prépositionnel est présent, il doit être ouvert par la préposition at.

 

On peut avoir à spécifier la valeur actantielle et phrastique d’une chaîne invariable. At bay dans hold at bay n’est susceptible d’aucune modification interne, mais la chaîne tout entière se comporte comme un groupe prépositionnel et doit être reconnue comme tel :

 

% HOLD AT BAY tenir à distance, en échec

verb([v(holds,hold,held,hold_at_bay)],mwu_trprep,

              arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                constraints:[sem:[hum]]],

                       object:[type:np,canon:1,gappable:yes,oblig:yes,

                                constraints:[]],

                       pp_arg:[type:pp,canon:2,gappable:no,oblig:yes,

                                constraints:[lex:at_bay]]]).

 

 

La contrainte sur le GP est spécifiée via le lexème at_bay, un lexème de type chaîne reconnu lors de la première passe lexicale, et associé à la catégorie syntaxique GP. Cette solution implique que le GP ne puisse subir aucune modification. Mais c’est bien en tant que GP que se comportera syntaxiquement la chaîne tout entière, notamment pour ce qui est de l’ordre des mots.

 

La liste des contraintes associées à l’objet est vide. On peut ainsi rendre compte de l’insertion d’éléments non idiomatiques à l’intérieur d’une lexie. Seules sont spécifiées la valeur phrastique (il doit s’agir d’un groupe nominal), la valeur actantielle (il s’agit de l’objet) et sa position dans l’ordre canonique (tout de suite à la droite du prédicat – cet ordre peut être dérangé par le poids structurel des arguments : he had so far managed to hold at bay his own desire to tell them what he really thought of their repeated endeavours to make him keep his mouth shut – jusqu’à présent il était parvenu à contrôler son propre désir de leur dire ce qu’il pensait vraiment de leurs tentatives répétées de le contraindre à se taire – voir ci-dessus, 5.4)

6.3       Modification externe, métalinguistique vs modification interne

On sait que certains modificateurs peuvent être associés à des éléments de la lexie sans pour autant conférer d’indépendance sémantique à ces éléments. Ces modificateurs sont de nature métalinguistique et n’ont pour but que de renforcer la lecture idiomatique de la lexie. C’est ainsi qu’on peut opposer

he didn’t want to kick the {fatal, proverbial, damned, ...} bucket (il ne voulait pas, comme on dit, passer l’arme à gauche)

et
the farmer’s wife kicked the red bucket full of milk (la fermière a lancé un coup de pied dans le seau rouge plein de lait).

 

Il faut donc s’assurer, dans la spécification d’une lexie telle que kick_the_bucket, que ‘the bucket’ reçoive bien l’analyse phrastique d’un groupe nominal, afin qu’un adjectif puisse y être inséré, et y être inséré à la place qu’occupent les adjectifs, et d’autre part que cet adjectif appartienne à une classe déterminée, celle des adjectifs susceptibles de lecture métalinguistique. On travaillera avec la description ci-dessous de kick_the_bucket :

 

% KICK THE BUCKET clampser, passer l’arme à gauche

verb([v(kicks,kick,kicked,kick_the_bucket)],mwutr,

               arglist:[subject:[type:np, canon:0,gappable:yes, oblig:yes,

                                 constraints:[sem:[hum]]],

                        object:[type:np,canon:1,gappable:no,oblig:yes,

                                constraints:[c_str:[det:[lex:the],

                                                    head:[txt:bucket,type:idiom]]]]]).

 

et on s’assurera, lors de la construction des groupes nominaux, d’un accord entre la valeur du trait type du nom avec la valeur du trait class de l’adjectif. On aura en outre des entrées pour les adjectifs où le trait class reçoit la valeur appropriée :

 

lex(proverbial,adj,[pos:adj,class:idiom,txt:proverbial,lex:proverbial]).

lex(red,adj,[pos:adj,class:std,txt:red,lex:red]).

 

On constate que les contraintes sur l’objet de la lexie ne font pas mention d’un adjectif; elles se contentent d’exiger un déterminant bien précis (the) et une forme textuelle bien précise (bucket). De cette façon, la lecture idiomatique sera possible pour he kicked the bucket, he kicked the proverbial bucket et exclue pour he kicked a bucket, he kicked the buckets, he kicked the red bucket, he kicked the bucket which had been left on the table (rappelons que les relatives à pronom relatif sujet ont également une trace coréférencée au relatif lui-même et à son antécédent – voir note 6 – la valeur de sem de bucket élément de lexie est incompatible avec les valeurs sémantiques associées au pronom relatif). 

6.4       Accessibilité des productions grammaticales

Nous n’avons encore examiné que des lexies dont l’élément central était un prédicat. On pouvait envisager les contraintes sur les arguments comme des conditions que devaient remplir les structures phrastiques (groupes nominaux et groupes prépositionnels) candidates à la position actantielle en question. Si nous examinons des lexies telle que the_horse’s_mouth (GN) et from_the_horse’s_mouth (GP), nous nous rendrons compte que la solution la plus élégante consiste à faire référence dans la spécification de la lexie GP à la lexie GN qui en remplit la position d’objet prépositionnel. Ceci peut se faire très simplement si nous travaillons avec un parseur monotone, qui donne un accès ouvert aux structures qu’il crée, c’est-à-dire les met à la disposition de ses propres règles de construction de constituants. Nous savons que c’est le cas de notre parseur prototype : il s’agit d’un parseur ascendant, qui lors des diverses passes qu’il met en oeuvre, construit des structures au départ des éléments qu’il possède déjà.

 

La spécification de la lexie the horse’s mouth prend la forme suivante :

 

[gr,np2b] --->

[

known(det,[from:A,to:B|FS1]),

 known(n,[from:B,to:C|FS2]),

 constraint([c_str:[det:[c_str:[head:[txt:horse], det:[lex:the]]]]],FS1),

 constraint([txt:mouth],FS2),

 build(np,[from:A,to:C,cat:np,lex:the_horse_s_mouth,

           agr:[number:sing,person:3,gender:neuter],sem:[abstract,hum],

           weight:2,index:i(A,C),gap:nogap,c_str:[det:FS1,head:FS2]])

].

 

Il s’agit d’une règle de grammaire, même si les contraintes d’ordre lexical sur les constituants en font également une entrée lexicale. Elle spécifie que si on a déjà, en stricte adjacence, un déterminant dont le centre est horse et le propre déterminant the (the horse) et un nom dont la forme textuelle est mouth, on peut former un GN dont le lemme sera the_horse_s_mouth. En effet, le groupe nominal the horse ne pourra jouer le rôle de déterminant du nom mouth que s’il se trouve au génitif anglo-saxon (the horse’s).

 

On pourra dès lors spécifier très simplement la lexie from_the_horse’s_mouth :

 

[gr,pp1a] --->

[ known(prep,[from:A, to:B|FS1]),

  known(np,[from:B,to:C|FS2]),

  constraint([lex:the_horse_s_mouth],FS2),

  constraint([lex:from],FS1),

  build(pp,[from:A,to:C,cat:pp,lex:from_the_horse_s_mouth,prep:from,

            gap:nogap,weight:3,c_str:[head:FS1,arg_prep:FS2]])].

 

Si on a, en stricte adjacence, une préposition dont le lemme est from, et un groupe nominal dont le lemme est the_horse_s_mouth, on peut former un groupe prépositionnel dont le lemme sera from_the_horse_s_mouth.

 

La possibilité qui est offerte par le système de contraintes d’explorer la structure en constituants des arguments permet des spécifications extrêmement fines, mais il faut veiller à ne pas se montrer trop restrictif. Je prendrai pour exemple la lexie the_horses, désignant les paris sur les courses de chevaux, disons le tiercé pour faire bref. On peut considérer qu’il s’agit bien d’une lexie dans la mesure où l’article défini est tout à fait nécessaire et reçoit son interprétation à l’intérieur de la lexie elle-même (opposez he was looking at the horses – il regardait les chevaux – et he spent a fortune on the horses – il a dépensé une fortune au tiercé). On pourrait proposer :

 

[gr,np2a] --->

[

known(det,[from:A,to:B|FS1]),

 known(n,[from:B,to:C|FS2]),

 constraint([pos:det,lex:the],FS1),

 constraint([pos:n,txt:horses],FS2),

 build(np,[from:A,to:C,cat:np,lex:the_horses,agr:[number:plural,person:3,gender:neuter],sem:[abstract],

           weight:2,index:i(A,C),gap:nogap,c_str:[det:FS1,head:FS2]])

].

 

c’est-à-dire construire la lexie comme on construit un autre groupe nominal, en spécifiant toutefois que le déterminant doit être the et le nom horses. C’est cette solution qui est choisie dans notre système prototype.

 

On pourrait également laisser la règle standard de constitution de groupes nominaux de structure DET+N faire son travail, et établir la lexie en se référant aux productions de cette règle :

 

[gr,np2abis] --->

[

known(np,[from:A,to:B|FS1]),

 constraint([c_str:C_str],FS1),

 constraint([det:[lex:the],head:[txt:horses]],C_str),

 build(np,[from:A,to:B,cat:np,lex:the_horses,agr:[number:plural,person:3,gender:neuter],sem:[abstract],

           weight:2,index:i(A,B),gap:nogap,c_str:C_str])

].

 

Cette deuxième méthode n’est pas équivalente à la première. En effet, les contraintes seront également satisfaites par un GN qui comporterait par exemple une modification de type adjectival, comme the brown horses. Si on veut l’éviter, il faut contraindre la valeur de c_str à ne comporter que deux éléments, ce qui est aisé (C_str=[One,Two]) mais ne permet plus l’insertion d’un adjectif du type bloody ou damned, dont on a déjà vu qu’ils s’inséraient volontiers dans les lexies : he spent a fortune on the bloody horses. Ce dernier cas pourrait être pris en compte à l’aide de la stratégie exposée plus haut pour kick the bucket. Horses recevrait une entrée où son type serait déclaré idiom, et ce serait cette entrée seulement qui pourrait constituer la tête de la lexie the_horses.  Nous aurions alors :

 

lex(bloody,adj,[pos:adj,class:std,txt:bloody,lex:bloody]).

lex(bloody,adj,[pos:adj,class:idiom,txt:bloody,lex:bloody]).

 

lex(horses,n,[type:std,pos:n,txt:horses,lex:horse,count:c,class:std,

agr:[number:plural,person:3,gender:neuter],sem:[thing]]).

lex(horses,n,[type:idiom,pos:n,txt:horses,lex:horse,count:c,class:std,

agr:[number:plural,person:3,gender:neuter],sem:[thing]]).

 

et

 

[gr,np2ater] --->

[

known(np,[from:A,to:B|FS1]),

 constraint([c_str:C_str],FS1),

 constraint([det:[lex:the],head:[txt:horses,type:idiom]],C_str),

 build(np,[from:A,to:B,cat:np,lex:the_horses,agr:[number:plural,person:3,gender:neuter],sem:[abstract],

           weight:2,index:i(A,B),gap:nogap,c_str:C_str])

].

 

Comme le prototype est un parseur monotone, si on veut mettre en avant les lectures qui assignent une structure de lexie aux groupements qui reçoivent également une lecture non-idiomatique, il faut prévoir un système de pondération qui privilégie les analyses contenant un maximum de valeurs lex de type lexie, lesquelles peuvent s’identifier via un trait ad hoc (mwu : yes), pour autant que les composants de ces lexies soient identifiables en tant que tels. Pour reprendre notre exemple, la lecture de the bloody horses en tant que manifestation textuelle de the_horses (« le foutu tiercé ») serait préférée dans l’analyse où bloody reçoit une lecture idiomatique, et horses également (via la valeur idiom du trait class pour l’adjectif et type pour le nom). Cette préférence n’aurait aucune influence sur la lecture non-idiomatique de the bloody horses (« les foutus chevaux », « les chevaux sanglants »).

7         Appendice : Une introduction intuitive au mécanisme d’unification

Pour le monde restreint qui nous occupe, on peut dire que l’unification de deux informations est la confrontation de ces deux informations, la vérification de leur compatibilité, et, pour autant que le contrôle de compatibilité n’ait pas conduit à l’échec, l’enrichissement de la plus pauvre par la plus riche (elles peuvent, lors d’une même unification, jouer tour à tour le rôle de la parente pauvre et de la parente riche).

 

Posons les deux traits / * FB1 */  agr1:[nb:pluriel, genre:Genre] et /* FB2 */   agr1:[genre:masc, nb:Nb]

 

Ici, la vérification de la compatibilité doit concerner le nom du trait ; des traits de nom différent ne sont pas unifiables. A l’intérieur des listes de traits, si un trait est présent dans les deux listes (quelle que soit sa position), sa valeur dans la première liste doit s’unifier à la valeur de son correspondant dans l’autre liste. Ici, FB1 est le parent riche pour ce qui est du trait nb, et le parent pauvre pour ce qui est du trait genre ; l’inverse vaut pour FB2. L’unification conduira à un FB résultant, /* FB3 */ agr1:[nb:pluriel, genre:masc], qui viendra remplacer à la fois FB1 et FB2.

 

En fait, comme nous l’avons déjà signalé, pour les besoins de la consultation de ressources lexicales et de l’analyse grammaticale, on peut concevoir deux modes de fonctionnement de l’unification : un mode ‘vérification’ et un mode ‘construction’. Dans le mode vérification (unification d’un FB à vérifier avec un FB de référence), on s’assure que toutes les informations du bundle à vérifier soient bien présentes dans le bundle de référence, et que leurs valeurs soient unifiables à celles du bundle à vérifier. Dans le mode construction (unification d’un FB d’ajout et d’un FB de référence pour donner un FB résultant), les traits du FB d’ajout doivent être compatibles avec les traits du FB de référence, mais ne doivent pas nécessairement y être présents ; il s’agit d’ajout monotone d’information conduisant à la création d’un nouveau FB, le FB résultant.

 

L’unification est au centre de Prolog. Pour programmer ces deux type d’unification en Prolog, il suffit de tenir compte de l’ordre libre des traits à l’intérieur des FBs. L’unification standard offerte par Prolog s’occupera du reste.

 

D’autre part, le mécanisme de remontée (backtracking) inclu dans le modèle d’exécution de Prolog assure que toutes les unifications possibles seront essayées ; les variables prendront toutes les valeurs possibles. C’est la remontée qui assure le parcours exhaustif de l’arbre des solutions. Il y a à ce parcours un coût computationnel non négligeable.

 

Équipé de ces outils, on peut concevoir la consultation lexicale et l’analyse grammaticale comme un double mouvement :

 

1) lecture des FBs correspondant aux unités textuelles ; le nombre de FBs associé à une même unité textuelle dépendra du degré de granularité des ressources lexicales. Il convient de se rappeler ici que l’on désambiguïse toujours en vue d’une certain but ; ni le degré d’ambiguïté qu’on introduit via la consultation des ressources lexicales, ni le degré qu’on tolère en sortie d’analyse, ne sont des données immuables – cela dépend de ce que l’on veut faire.

 

2) élimination des lectures incompatibles avec le contexte (ou, comme on doit souvent le préférer, prioritisation des lectures les plus denses, c’est-à-dire dans lesquelles sont maximisés les liens que les unités entretiennent entre elles).

 

Dans les deux cas, les éléments manipulés sont des FBs ; le graphe est composé de FBs ; dans tout FB peuvent apparaître des variables. Les variables de même nom à l’intérieur d’un graphe doivent être unifiables. C’est donc le graphe tout entier qui est le domaine de la variable.

 

Comme tente de le montrer la grammaire mise en œuvre ici, il n’est pas nécessaire de prévoir un algorithme d’application d’une grammaire au texte qui fasse appel à d’autres mécanismes que l’unification. Il suffit de mettre sur pied un système où chaque règle est capable de reconnaître les cas où elle dispose d’assez de structure pour s’appliquer. Elle génère alors sa propre structure, enrichissant par là la base de données de structures disponible à l’inspection par toutes les règles du système, y compris elle-même. Il s’agit là bien sûr d’un modèle computationnellement coûteux, mais respectant parfaitement une vue de l’analyse grammaticale comme ajout monotone d’information sous forme de nouveaux graphes.

 

Le degré de lisibilité pour le linguiste devrait être élevé, puisqu’il ne s’agit pas d’autre chose que d’un système de contraintes imbriquées. Les arbres d’analyse s’obtiennent aisément par percolation des FBs dans les traits c_str (trait de structure en constituants), comme exemplifié dans la grammaire d’illustration.

8         Références

Gal et al. 1991 = Annie Gal, Guy Lapalme, Patrick Saint-Dizier, Harold Somers, Prolog for Natural Language Processing, John Wiley, New York, 1991

 

Michiels 1995 = Archibald Michiels, Horatio: A Middle-sized NLP Application in Prolog, L3, Liège, 1995

 

Michiels 2001 = Archibald Michiels, DEFI, un outil d’aide à la comprehension, Actes du Congrès de Tours, TALN 2001, pp. 283-293, Tours, juillet 2001

 

McCord 1982 = M. C. McCord,  Using slots and modifiers in logic grammars for natural language, Artificial Intelligence, Vol. 18, pp. 327-367

 

Wehrli 1997 = Eric Wehrli, L’analyse syntaxique des langues naturelles, Problèmes et méthodes, Masson, Paris, 1997 




[1] On trouvera le programme Prolog complet (lexique et grammaire insérés dans le parseur) et un fichier test à l’adresse Web http://engdep1.philo.ulg.ac.be/download/mwus.

[2] Cette macro-expansion peut se situer à différentes étapes : on peut envisager de la mettre en oeuvre à l’extérieur du programme d’analyse, dans un langage de programmation approprié (tels Perl ou Awk), et soumettre à Prolog uniquement les produits de cette macro-expansion. Si l’expansion se fait en Prolog même, elle peut néanmoins s’accomplir en dehors du programme d’analyse, et fournir des clauses Prolog qui seront lues en même temps que les autres clauses Prolog constituant le programme d’analyse. Si les productions ne sont pas trop nombreuses, comme c’est le cas dans ce prototype, elles peuvent être directement ajoutées à la base de données Prolog via un prédicat d’assertion de clauses (la famille assert).

[3]  L’appariement donné par defi rend compte du parcours de la lexie, ou mieux, de sa projection sur le texte soumis à l’analyse :

240 - 284306, ohef, [snook], to cock a snook at sb, tr(faire la nique à qn), [m(c1,vac,to,0),m(c6,dic(cock),txt(cocked),morph(0),syn(3),30),m(c5,dictxt(a),morph(10),syn(0),25),m(c5,dictxt(snook),morph(7),syn(5),50),m(c5,dictxt(at),morph(2),syn(8),50),m(c12,dic(sb),txt(washington),12)]

[4] monotone : qui assure que toute conclusion déduite de certaines hypothèses reste valide après tout ajout de nouvelles hypothèses (S.Pavel, Intelligence Logicielle, Dictionnaire français-anglais, Réseau international de néologie et de terminologie, Module Canadien, Secrétariat d'Etat du Canada, 1989). Un parseur monotone ne fait qu’ajouter de l’information, par couches et étapes successives, sans jamais remettre en cause l’information acquise dans les étapes précédentes.

[5] On trouvera dans le parseur prototype le traitement des lexies suivantes :

bear (carry, catch, face, take) the brunt, beat (flog) a dead_horse, change (swap) horses in midstream,

cause (create, wreak) havoc, make havoc of, play havoc with

cock a snook at, dig one’s own grave, hold at bay, hold one’s horses, kick the bucket, shout (scream) the place (the house) down, the shit hit the fan

les 'phrasal verbs'  brush aside, horse around/about, shout down

ainsi que les GN the horses, the horse's mouth, a fly in the ointment, a pig in a poke et le GP from the horse's mouth

[6] On notera également que le sujet peut laisser une trace, exactement comme le fait l’objet direct. On analysera donc de manière parallèle le livre que j’ai lu et le livre qui me plaît, à savoir :

NP {det n S} où le S présente une trace matérialisée par le pronom relatif (trace de l’objet : que, trace du sujet : qui).

[7] Notons que dans une lexie telle que have_NP_eating_out_of_(the_palm_of)_one_s_hand, le même type de contrainte liera le sujet de la lexie et l’adjectif possessif modifiant le mot hand, qui sera soit la tête du GN du groupe nominal régi par la préposition out_of, soit la tête d’un groupe nominal plus profondément enchâssé dans la structure, régi par la préposition of, le groupe prépositionnel tout entier (of one’s hand) formant un sous-constituant du GN régi par la préposition out_of. Il ne semble pas qu’il y ait de frontière à la complexité structurelle dont les contraintes doivent faire état, du moins pas de frontières qu’on puisse fixer a priori.