Syntaxe et analyse syntaxique Réseaux sémantiques

Slides:



Advertisements
Présentations similaires
Initiation à la programmation et algorithmique cours 4
Advertisements

Je lis, j’écris Objectif du logiciel S'entraîner à saisir précisément un mot, une expression, une phrase, un texte,
« 1.5. Les fonctions logiques »
Classification et prédiction
Langages objet Définitions Traduction des méthodes en C++
C.
La Logique Issus de l'algèbre de Bool (mathématicien Anglais ), seuls deux états sont utilisés : Etat « 0 » = abscence, faux Etat « 1 » =
Etude de la langue LOrthographe grammaticale. Constat Les élèves connaissent les règles. Ils savent les appliquer dans les exercices. Et pourtant ! Ils.
Chap 1 Grammaires et dérivations.
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Chap. 1 Structures séquentielles : listes linéaires
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
La fonction Style Permet de créer des types de texte, par exemple
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Quelques exemples de situations de travail ritualisées brèves...
Représentation des connaissances Cours 2. Réseaux sémantiques
LES REGLES DE BASE DE L’ORTHOGRAPHE
Programmation fonctionnelle Le langage LISP
4 - Les automates et les lexiques morphologiques : le contenu mot fléchilemmepartie du discourstraits de flexion Habituellement, un lexique morphologique.
Programmation logique Démonstrateur automatique
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Bases de données lexicales
Nature ou fonction d’un mot
FICHIERS : Définition : Algorithme général:
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Structures de données IFT-2000
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
Traduction dirigée par la syntaxe
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Outils pour le traitement des textes Levée d'ambiguïtés morpho-syntaxiques Éric Laporte Université Paris-Est Marne-la- Vallée.
Cours 7 Grammaires algébriques Constituants syntaxiques.
Cours 10 Réseaux sémantiques Relations sémantiques WordNet
Les applications évoluées (traduction automatique) nécessitent beaucoup d'informations lexicales : délimitation des mots composés, lemmes... Cela fait.
Cours 6 Paires attribut-valeur Structures de traits Unification.
OUTILEX Présentation des résultats
Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France Syntaxe et analyse syntaxique.
Syntaxe et analyse syntaxique
Analyse syntaxique Réseaux sémantiques
Le Sémiographe Outil générique pour effectuer des opérations texte sens texte ou texte sens actions
Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison.
Chapitre 3 Syntaxe et sémantique.
Partie II Sémantique.
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Paradigmes des Langages de Programmation
L'analyse doit mettre en évidence la nature et la fonction du mot
Architecture et modularité du modèle L'exemple de GUST et des grammaires de correspondance polarisées Sylvain Kahane Modyco, Université Paris.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Programmation linéaire en nombres entiers
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
La phrase de base GNs GV CP.
Tutorat en bio-informatique
Les classes de mots… en bref
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Programmation annuelle: Etude de la langue
Introduction Formalisation de GUST basée sur GUP (GUST = Grammaire d’Unification Sens-Texte, Kahane 2001) (GUP = Grammaire d’Unification Polarisée, Kahane.
Cours LCS N°4 Présenté par Mr: LALLALI
Verbes Grammaire phrases Classe des mots
Module d’auto-apprentissage
Règles d’or à suivre en rédaction
Les différentes sortes.
La négation.
Les bases de données Séance 3 Construction du Modèle Conceptuel de Données.
UQÀM DDL-8430 didactique de la grammaire Analyse de matériel didactique Nouvelle grammaire pratique : 2ème année du 1 er cycle du secondaire Myriam Laporte.
Transcription de la présentation:

Syntaxe et analyse syntaxique Réseaux sémantiques Eric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée France http://igm.univ-mlv.fr/~laporte/

Syntaxe et analyse syntaxique Réseaux sémantiques Unification Analyse syntaxique par l'algorithme d'Earley Réseaux sémantiques Relations sémantiques WordNet

Accord grammatical (1/4) P --> GN attend Le public attend Le GN est obligatoirement au singulier : * Les spectateurs attend P --> GN attendent Les spectateurs attendent Le GN est obligatoirement au pluriel : * Le public attendent On veut éviter d'avoir deux symboles distincts pour les GN au singulier et les GN au pluriel

Accord grammatical (2/4) P --> GN attend { GN.nombre = "singulier" } P --> GN attendent { GN.nombre = "pluriel" } On considère les traits du GN comme des attributs du symbole GN On ajoute des attributs aux symboles et des équations aux règles On veut éviter d'avoir deux règles distinctes

Accord grammatical (3/4) P --> GN <attendre> { GN.nombre = <attendre>.nombre ; GN.personne = <attendre>.personne ; } Le public attend - Les spectateurs attendent - Vous attendez On considère les traits de attendre comme des attributs aussi

Accord grammatical (4/4) Vérification des équations P --> GN <attendre> { GN.nombre = <attendre>.nombre ; GN.personne = <attendre>.personne ; } On ne sait pas si on connaîtra la valeur de GN.nombre avant celle de<attendre>.nombre ou le contraire On veut pouvoir vérifier l'équation avant de connaître aucun des deux attributs On vérifie les équations par unification

Unification (1/7) Unification entre GN.nombre et<attendre>.nombre Avant : GN.nombre = x <attendre>.nombre = "singulier" Après : GN.nombre = "singulier" Les valeurs à unifier peuvent être des constantes ou des variables

Unification (2/7) Avant : GN.nombre = x <attendre>.nombre = y Après : GN.nombre = x <attendre>.nombre = x En fait, après unification, les deux valeurs sont représentées par des objets distincts mais équivalents Plus tard, si une autre unification précise l'une des deux, cela changera automatiquement l'autre aussi Avant unification, chaque valeur n'est équivalente qu'à elle-même

Unification (3/7) Formalisation de l'équivalence Chaque valeur a un champ "ensemble" qui contient un pointeur GN.nombre.ensemble := 0 <attendre>.nombre.ensemble := GN.nombre Dans chaque classe d'équivalence, une seule des valeurs est choisie comme élément canonique Pour la valeur canonique, le champ ensemble est le pointeur nul Pour toutes les autres valeurs, le champ ensemble pointe directement ou indirectement sur la valeur canonique

Unification (4/7) Unification entre GN.nombre et<attendre>.nombre Avant : GN.nombre = "pluriel" <attendre>.nombre = "singulier" Après : GN.nombre = "pluriel" L'unification peut échouer L'algorithme d'unification renvoie un booléen L'unification est destructrice : elle peut changer les deux valeurs à unifier, même si l'unification échoue

Unification (5/7) Unifier deux valeurs a et b, c'est construire une valeur qui contient toutes les restrictions de a et de b en vérifiant qu'elles sont compatibles

Unification (version 1) booléen unifier(valeur a, valeur b) { A := trouver-canonique(a) ; B := trouver-canonique(b) ; si (A = B) { renvoyer vrai ; } sinon si (A et B sont la même constante) { renvoyer vrai ; } sinon si (A ou B est une variable) { unir(A, B) ; renvoyer vrai ; } sinon { renvoyer faux ; } } unir(valeur A, valeur B) { si A n'est pas une variable { B.ensemble := A ; } sinon { A.ensemble := B ; }

Unification (7/7) trouver-canonique(valeur a) Renvoie l'élément canonique de la classe d'équivalence de a unir(valeur A, valeur B) Fusionne les classes d'équivalence de A et B Préconditions : - A et B sont les éléments canoniques de leurs classes d'équivalence - L'unification entre A et B réussit Si l'une des deux valeurs est une constante, c'est elle qui doit être devenir l'élément canonique de l'autre Cela revient à remplacer la variable par la constante

Accord grammatical (1/2) P --> GN <attendre> { GN.nombre = <attendre>.nombre ; GN.personne = <attendre>.personne ; } si (unifier(GN.nombre, <attendre>.nombre) et unifier (GN.personne, <attendre>.personne)) { l'analyse syntaxique peut continuer }

Accord grammatical (2/2) GN --> Dét N { Dét.nombre = N.nombre ; GN.nombre = N.nombre ; GN.personne = "3" ; } si (unifier(Dét.nombre, N.nombre) et unifier(GN.nombre, N.nombre) et unifier(GN.personne, "3")) { l'analyse syntaxique peut continuer } On a l'impression que GN.personne = "3" est une simple affectation Si on connaît GN.personne par une autre équation avant de traiter cette règle, c'est bien une équation à vérifier

Avec des RTN On attache les attributs - à des noeuds du graphe : $$.nombre - au graphe : nombre, personne Fonctionnalité disponible avec Outilex, pas encore avec Unitex

Unification d'arbres (1/3) P --> GN <attendre> { GN.nombre = <attendre>.nombre ; GN.personne = <attendre>.personne ; } On veut regrouper les deux attributs en un seul GN.accord = <attendre>.accord ; } La valeur de l'attribut est maintenant un arbre

Unification d'arbres (2/3) P --> GN <attendre> { GN.accord = <attendre>.accord ; } GN.accord= <attendre>.accord= structure de traits structure de traits nombre= personne= nombre= personne= x "3" "singulier" y

Unification d'arbres (3/3) GN.accord= <attendre>.accord= structure de traits structure de traits Avant nombre= personne= nombre= personne= x "3" "singulier" y GN.accord= <attendre>.accord= structure de traits structure de traits Après nombre= personne= nombre= personne= "singulier" "3" "singulier" "3"

Formalisation des arbres Un noeud peut être : - une constante ("singulier") - une variable - une structure de traits (feature structure) qui a 0, 1 ou plusieurs attributs dont les valeurs sont des noeuds GN.accord= structure de traits nombre= personne= x "3"

Unification (version 2) booléen unifier(noeud a, noeud b) { A := trouver-canonique(a) ; B := trouver-canonique(b) ; si (A = B) { renvoyer vrai ; } sinon si (A et B sont la même constante) { renvoyer vrai ; } sinon si (A et B sont des structures de traits) { unir(A, B) ; pour chaque trait t de A ou de B { si (unifier(A.t, B.t) = faux) { renvoyer faux ; } } renvoyer vrai ; } sinon si (A ou B est une variable) { unir(A, B) ; renvoyer vrai ; } sinon { renvoyer faux ; } }

Résultat de l'unification Les pointillés représentent les équivalences et pointent vers le membre canonique GN.accord= <attendre>.accord= structure de traits structure de traits nombre= personne= nombre= personne= x "3" "singulier" y

Subsomption (1/2) Le cas général subsume le cas particulier  x subsume "singulier" x  "singulier" "3" subsume "3" "3"  "3" Le cas général subsume le cas particulier GN.accord= GN.accord= structure de traits structure de traits  nombre= personne= nombre= personne= x "3" "singulier" "3"

Subsomption (2/2) Si S1 est une constante : S1  S2 si et seulement si S1 = S2 Si S1 est une variable : S2 S1  S2 Si S1 est une structure de traits : S1  S2 si et seulement si pour tout trait t de S1 ou de S2, S1.t  S2.t Les restrictions précisées dans S1 doivent être précisées aussi dans S2 sans contradiction S2 peut préciser des restrictions supplémentaires

Subsomption et unification S1  S2 est l'arbre le plus général S3 telle que S1  S3 et S2  S3 S1  S2 contient toutes les informations de S1 et de S2

Têtes des constituants Le mot le plus important de chaque constituant est appelé sa tête P (préfère) GN (compagnie) GN (Luc) Det (cette) N (compagnie) Luc préfère cette compagnie

Grammaires de dépendance On remplace chaque symbole non terminal par la tête correspondante, puis on supprime le noeud redondant Arbre de dépendance préfère préfère compagnie compagnie Luc Luc compagnie cette cette Luc préfère cette compagnie

Grammaires de dépendance Informations perdues - étiquettes des constituants (on compense en ajoutant des étiquettes aux arêtes) - ordre des mots (on compense si nécessaire en ajoutant des contraintes sur l'ordre des mots) préfère objet sujet compagnie Luc déterminant cette

Lexicalisation Lorsqu'un mot a des compléments, la forme des compléments dépend du mot P --> GN <préférer> GN à GN Luc préfère cette compagnie à la concurrence P --> GN <quitter> GN Luc quitte Paris P --> GN <partir> Prép GN Luc part pour Toulouse Nombre de compléments Prépositions devant les compléments Grammaire lexicalisée Chaque règle comporte au moins un mot du lexique (la tête en général) Nombre de règles = nombre de mots x nombre de constructions

Grammaires non lexicalisées On regroupe tous les mots qui entrent dans une même construction On fait une règle commune P --> GN V GN à GN { V.N1àN2 = "+" ; } Luc préfère cette compagnie à la concurrence P --> GN V GN { V.N1 = "+" ; } Luc quitte Paris Luc préfère cette compagnie P --> GN V Prép GN { V.PrépN1 = "+" ; V.Prép = Prép ; } Luc part pour Toulouse

Analyse syntaxique Parsing Entrées : une phrase étiquetée et une grammaire algébrique Sorties : le ou les arbres de dérivation de la phrase Algorithmes Ascendants Descendants Programmation dynamique Cascade de transducteurs

L'algorithme d'Earley (1970) Analyse descendante Sauvegarde dans un tableau tous les résultats intermédiaires réutilisables (programmation dynamique) Tableau indicé par les tokens de la phrase Phrase : Les orchestres aiment cette mélodie Indices : 0 1 2 3 4 5 Pour chaque indice, le tableau contient un ensemble de sous-arbres correspondant à des analyses partielles On remplit le tableau de gauche à droite, sans retours en arrière On ne détruit jamais des sous-arbres déjà créés Pour construire les arbres de dérivation, on combine les sous-arbres du tableau

Les sous-arbres Un sous-arbre est représenté par - une règle pointée (le point indique jusqu'où on a analysé) - deux positions dans la phrase, correspondant : - au début de la règle - et au point jusqu'où on a analysé Exemple 1 P --> GN <aimer> . GN 0-3 P GN GN Det N Det N <le> <orchestre> <aimer> <ce> <mélodie> 0 1 2 3 4 5

Les sous-arbres Exemple 2 GN --> Det N . 0-2 Exemple 3 3-3 Si la 2e position d'un sous-arbre est j, ce sous-arbre est rangé à l'indice j dans le tableau Exemple 2 : rangé à l'indice 2 Exemple 3 : rangé à l'indice 3 P GN GN Det N Det N <le> <orchestre> <aimer> <ce> <mélodie> 0 1 2 3 4 5

L'algorithme On parcourt le tableau de gauche à droite Quand on est à l'indice i, on parcourt les sous-arbres et on crée de nouveaux sous-arbres à l'indice i (queue FIFO) et à l'indice i + 1 On suppose que l'axiome de la grammaire apparaît une seule fois, dans une règle P0 --> P Début P0 --> . P 0-0 Fin P0 --> P . 0-n (n = nombre de tokens dans la phrase) Règle pointée complétée : règle dont le point est à la fin

L'algorithme analyseur.table[0].enfiler(P0 --> . P, 0, 0) pour i de 0 à n pour chaque sousArbre dans table[i] si sousArbre.complétée() analyseur.compléter(sousArbre) sinon si sousArbre.prochainSymbole() est terminal analyseur.vérifier(sousArbre) sinon analyseur.prédire(sousArbre) si analyseur.table[n].contient(P0 --> P ., 0, n) analyseur.construireArbres(n)

L'algorithme compléter(B --> w ., j, k) : pour chaque (A --> u . B v, i, j) dans table[j] table[k].enfiler(A --> u B . v, i, k) vérifier(A --> u . t v, i, j) : si t correspond à token[j] table[j + 1].enfiler(A --> u t . v, i, j + 1) prédire(A --> u . B v, i, j) : pour chaque (B --> w) dans règles(B) table[j].enfiler(B --> . w, j, j)

Synonymes C'est un gros avion C'est un grand avion C'est un gros achat ?C'est un grand achat Luc est trop gros  Luc est trop grand Critère Possibilité de remplacer un mot par l'autre dans au moins un contexte sans "trop" changer le sens

Réseau sémantique Comme un lexique mais - plusieurs entrées différentes pour un mot ambigu - une seule entrée pour plusieurs synonymes Exemples d'entrées 1. couillon - gogo - naïf - pigeon 2. bar - loup - loup de mer - perche de mer 3. bar - bistro - brasserie - café - estaminet Une entrée = un ensemble de synonymes (synset) Membres d'un synset - lemmes et non formes fléchies - mots et non tokens (loup de mer : mot composé)

Relations sémantiques Relations entre synsets X est une sorte de Y bar - loup - loup de mer - perche de mer X poisson - poiscaille Y animal - bête Z Y est une sorte de X bar - bistro - brasserie - café - estaminet X bar à vins Y Hyponyme - hyperonyme

Relations sémantiques X est une partie de Y mets - plat repas Y est une partie de X poiscaille - poisson écaille nageoire ligne latérale ouïe Méronyme - holonyme

Relations sémantiques contraire gagnant - vainqueur perdant Antonyme

WordNet Anglais Version 3.0 : 120 000 synsets Miller, 1995 - Fellbaum, 1998 Le réseau sémantique le plus utilisé au monde Développement à partir de 1985 - Première version 1991 4 sous-réseaux : noms, verbes, adjectifs, adverbes

WordNet Principales relations entre synsets est un V/V exhale/breathe; inhale/breathe est un N/N cat/feline instance N/N Eiffel Tower/tower partie N/N France/Europe membre N/N France/European Union similaire A/A dying/moribund

WordNet Principales relations entre lemmes contraire A/A good/bad appartenance A/N academic/academia appartenance Adv/A boastfully/boastful dérivé N/V killing/kill dérivé A/N dark/darkness

Hyperonymes Le synset de breathe est un hyperonyme de ceux de exhale et inhale Le synset de feline est un hyperonyme de celui de cat Un synset a souvent un seul synset hyperonyme, mais peut en avoir plusieurs Exemple eat "manger" a deux hyperonymes : eat "prendre un repas" (contestable) et consume/ingest/take in/take/have Le synset de cat est un hyponyme de celui de feline

Hyperonymes timepiece/timekeeper/horologe atomic clock watch/ticker ammonia clock sandglass sundial ... caesium clock timer hourglass clock egg timer alarm clock/alarm chronograph stopwatch/stopo watch ... parking meter

Coordonnés Coordonnés d'un synset : les synsets qui ont un même hyperonyme Coordonnés de watch/ticker atomic clock clock sandglass sundial timer Les coordonnés d'un synset ne sont pas directement accessibles par les fonctions NLTK d'accès à WordNet Rechercher les hyperonymes puis les hyponymes

Autres WordNets EuroWordNet Français (23 000 synsets), anglais, néerlandais, italien, espagnol, allemand, tchèque, estonien Liens entre langues et avec l'anglais BalkaNet Tchèque, roumain, grec, turc, bulgare, serbe