cours 6 paires attribut-valeur structures de traits unification
TRANSCRIPT
Cours 6
Paires attribut-valeur
Structures de traits
Unification
Paires attribut-valeurÉtiquettes lexicales
viendrai
[ catgram="verbe"
lemme="venir"
temps="futur"
personne="1"
nombre="singulier" ]
je[ catgram="pronom"
personne="1"nombre="singulier" ]
Contraintes
Je viendrai *Tu viendrai *Il viendrai
*Je viendras Tu viendras *Il viendras
*Je viendras *Tu viendra Il viendra
token1.personne = token2.personne
token1.nombre = token2.nombre
Paires attribut-valeur avec variablesÉtiquettes lexicales
viendrai
[ catgram="verbe"
lemme="venir"
temps="futur"
personne=personneVerbe
nombre=nombreVerbe ]
je[ catgram="pronom"
personne=personnePronomnombre=nombrePronom ]
Les valeurs d'un attribut peuvent être des constantes ou des variables
Équations exprimant les contraintes d'accord :
token1.personneVerbe = token2.personnePronom
token1.nombreVerbe = token2.nombrePronom
Paires attribut-valeur avec structuresviendrai
[ catgram="verbe"
lemme="venir"
temps="futur"
accord= [
personne=personneVerbe
nombre=nombreVerbe ] ]
je[ catgram="pronom"
accord= [personne=personnePronomnombre=nombrePronom ] ]
La valeur d'un attribut peut être un ensemble de paires attribut-valeur (récursif)
token1.accord = token2.accord
Structures de traits
Une structure de traits (feature structure) peut être :
- un ensemble de paires attribut-valeur, dans les quelles chaque valeur est une structure de traits
- une constante simple ("singulier")
- vide (dans le cas d'une valeur inconnue)
- un pointeur sur structure de traits
Les pointeurs permettent à deux structures de traits d'avoir une partie commune
Exemple avec valeurs inconnues
viendrai
[ catgram="verbe"
lemme="venir"
temps="futur"
personne=(vide)
nombre=(vide) ]
Utilisation
- quand on ne connaît pas les valeurs de la personne et du nombre
- exprimer des contraintes indépendantes de ces valeurs
Exemple avec partie partagéeviendrai
[ catgram="verbe"
lemme="venir"
temps="futur"
accord=
[ personne="1"
nombre="singulier" ] ]
je[ catgram="pronom"
accord=(pointeur) ]
Le partage entre la structure viendrai et la structure je est équivalent à l'équation
token1.accord = token2.accord
Pour chaque valeur d'attribut, on aura un contenu (constante ou structure ou vide) et un pointeur (éventuellement nul)
Structures de traits
Représentation par un graphe acyclique
catgram
lemme
temps
accord
contenu : "verbe"pointeur :
contenu : "venir"pointeur :
contenu : "futur"pointeur :
personne
temps
contenu : "1"pointeur :
contenu : "singulier"pointeur :
pointeur :
contenu :
contenu :pointeur :
contenu :pointeur :
Structures de traits
Chaque noeud du graphe est soit une constante simple, soit un ensemble de traits attribut-valeur
Pour chaque valeur d'attribut, on a un contenu et un pointeurLe contenu peut être videLe pointeur peut être nulSi le contenu n'est pas vide et le pointeur n'est pas nul, c'est le pointeur
qui représente la valeur de l'attributSi S est une structure de traits, deref(S) est le noeud du graphe acyclique
trouvé dans le champ pointeur ou dans le champ contenuderef(feature-structure S)
if (S.pointer is null)return S.content
else return * S.pointer
Unification
Unifier deux structures de traits s1 et s2, c'est construire une structure qui contient l'union des informations de s1 et de s2 en supposant qu'elles décrivent la même chose
Comparaison d'informations[ nombre="singulier"] [ nombre="singulier"]
= [ nombre="singulier"]
[ nombre="singulier"] [ nombre="pluriel"]--> échec
[ nombre="singulier"] [ nombre=(vide)]= [ nombre="singulier"]
Exemples
Combinaison d'informations
[ personne="1"] [ nombre="singulier"]
= [ personne="1"
nombre="singulier"]
[ nombre="singulier"] [ (vide) ]
= [ nombre="singulier"]
Exemple avec partie partagée dans la même structure
[ sujet=
[ catgram="pronom"
accord=(pointeur) ]
verbe=
[ catgram="verbe"
lemme="venir"
temps="futur"
accord=
[ personne="1"
nombre="singulier" ] ] ]
Représente Je viendrai avec un sujet et un verbe
Exemple d'unification avec pointeurs
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ personne="1"
nombre="singulier" ] ] ]
[ sujet= [ accord= [ personne="1"
nombre="singulier" ] ] ]
=
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ personne="1"
nombre="singulier" ] ] ]
Exemple d'unification avec pointeurs
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ (vide) ] ] ]
[ sujet= [ accord= [ personne="3"
nombre="singulier" ] ] ]
=
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ personne="3"
nombre="singulier" ] ] ]
Exemple d'unification sans pointeurs
[ sujet= [ accord= [ nombre="singulier" ] ]
verbe= [ catgram="verbe"
accord= [ nombre="singulier" ] ] ]
[ sujet= [ accord= [ personne="3"
nombre="singulier" ] ] ]
=
[ sujet= [ accord= [ personne="3"
nombre="singulier" ] ]
verbe= [ catgram="verbe"
accord= [ nombre="singulier" ] ] ]
Exemple d'échec d'unification
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ personne="1"
nombre="singulier" ] ] ]
[ sujet= [ accord= [ personne="3"
nombre="singulier" ] ]
verbe= [ catgram="verbe"
accord= [ personne="1"
nombre="singulier" ] ] ]
--> échec
Subsomption
S1 S2 (S1 subsume S2) veut dire que S1 est plus générale que S2 :
- pour tout attribut a de S1, S1(a) S2(a)
- pour tous chemins c et d de S1 tels que S1(c)=S1(d), S2(c)=S2(d)
Toutes les informations présentes dans S1 sont présentes aussi dans S2 sans contradictions
[ personne="1"] [ personne="1"
nombre="singulier"]
[ (vide) ] [ nombre="singulier"]
Exemple
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ (vide) ] ] ]
[ sujet= [ accord=(pointeur) ]
verbe= [ catgram="verbe"
accord= [ personne="1"
nombre="singulier" ] ] ]
Subsomption et unification
S1 S2 est la structure de traits la plus générale S3 telle que
S1 S3 et S2 S3
S1 S2 contient toutes les informations de S1 et de S2
Algorithme d'unification
Un algorithme d'unification entre S1 et S2 destructif (dans le cas général, il modifie S1 et S2)
Après l'unification, S1 et S2 contiennent chacun le résultat de l'unification
L'algorithme ajoute des pointeurs entre S1 et S2
nombre contenu : "singulier"pointeur :
personne contenu : "1"pointeur :
nombre contenu : "singulier"pointeur :
données
contenu :pointeur :
contenu :pointeur :
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
résultat
pointeur :
contenu :
Algorithme d'unificationunify(featureStructure f1, featureStructure f2) { /* renvoie soit une structure de traits soit "failure" */ f1Node = deref(f1) f2Node = deref(f2) if (f1Node is null) { f1.pointer = f2 ; return f2 ; } else if (f2Node is null) { f2.pointer = f1 ; return f1 ; } else if (f1Node == f2Node) { f1.pointer = f2 ; return f2 ; } else if (both f1Node and f2Node contain feature-value pairs) { for each feature2 in f2Node { feature1 = find or create in f1Node a feature corresponding to feature2 if (unify(feature2.value,feature1.value)=="failure") { return "failure" } } f2.pointer = f1 return f1 } else return "failure" }
données
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
résultat
pointeur :
contenu :
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
pointeur :
contenu :
données
contenu : "1"pointeur :
pointeur :
contenu :
résultat
contenu : "1"pointeur :
pointeur :
contenu :
nombre contenu : "singulier"pointeur :
données
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
résultat
pointeur :
contenu :
nombre contenu : "singulier"pointeur :
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
pointeur :
contenu :
nombre contenu : "singulier"pointeur :
données
contenu :pointeur :
personne
contenu : "1"pointeur :
personne
pointeur :
contenu :
résultat
pointeur :
contenu :
nombre contenu : "singulier"pointeur :
contenu :pointeur :
personnecontenu : "1"pointeur :
personne
pointeur :
contenu :
pointeur :
contenu :accord
pointeur :
contenu :
accord
pointeur :
contenu :
accord
pointeur :
contenu :
accord
pointeur :
contenu :
Utilisation pratiqueviens
[ catgram="verbe"
lemme="venir"
temps="futur"
accord= [
personne="1"
nombre="singulier" ] ]
je[ catgram="pronom"
accord= [personne="1"nombre="singulier" ] ]
On peut représenter une contrainte d'accord par une équation :
token1.accord = token2.accord
Pour voir si l'équation est vérifiée, on unifie les deux structures de traits
Dans ce cas, succès
Utilisation pratiqueviens
[ catgram="verbe"
lemme="venir"
temps="futur"
accord= [
personne="2"
nombre="singulier" ] ]
je[ catgram="pronom"
accord= [personne="1"nombre="singulier" ] ]
token1.accord = token2.accord
Dans ce cas, échec de l'unification
Si je est le sujet de viens, viens n'est pas à la 2e personne
viens,V:P1s viens,V:P2s on lève une ambiguïté