Balisage d'une partie de discours

From Apertium
Jump to: navigation, search

In English

Le balisage d'une partie de discours est processus d'assignation de catégories grammaticales non ambiguës[1] aux mots dans le contexte. La "croix" du problème est que les formes de surface des mots peuvent souvent être assignées à plus d'une partie de discours par l'analyse morphologique. Par exemple en français, le mot "porte" peut être à la fois un nom au singulier ("La porte est ouverte") ou un verbe ("je porte une valise").

Cette page a l'intention de donner un aperçu sur la manière dont le balisage d'une partie de discours fonctionne dans Apertium, d'abord avec apertium-tagger, mais en donnant un rapide aperçu des contraintes (comme dans Contraintes grammaticales) et des restrictions (comme dans apertium-tagger) aussi bien.

Contents

[edit] Introduction

Voir aussi : Dictionnaire morphologique

Considérons la phrase suivante en espagnol ("Elle vient à la plage"):

Vino (noun or verb) a (pr) la (det or prn) playa (noun)

On peut voir que deux des quatre mots sont ambigus, "vino", qui peut être un nom ("vin") ou un verbe ("vient") et "la", qui peut être un déterminant ("le" ou "la") ou un pronom ("son" ou "sa"). Cela donne les possibilités suivantes pour l'analyse désambiguïsée de la phrase :

Tagset
Tag Gloss
det Déterminant
noun Nom
prn Pronom
pr Préposition
verb Verbe
adj Adjectif
noun, pr, det, noun → Vin à la plage
verb, pr, det, noun → Elle vient à la plage
noun, pr, prn, noun → Vin à sa plage
verb, pr, prn, noun → Elle vient à sa plage

Comme on peut voir, seule une de ces interprétations (verb, pr, det, noun) correspond à la traduction correcte. Donc la tâche du balisage d'une partie de discours est de sélectionner l'interprétation correcte. Il y a plusieurs manières de faire ça, impliquant à la fois des règles linguistiquement motivées (comme constraint grammar et le tagger Brill) et basées sur des statistiques (comme le tagger TnT ou le tagger ACOPOST).

Le tagger d'Apertium (apertium-tagger) utilise une combinaison de règles et un modèle statistique (Markov caché).

[edit] Préliminaires

Avant d'expliquer ce qu'est un modèle de Markov caché, il faut vous donner quelques préliminaires, c'est à dire définir ce qu'on entend par tagset et classe d'ambiguïté. Le tagset (souvent écrit Γ) est l'ensemble des balises (tags) valides (parties de discours, etc.) qu'on peut utiliser dans le modèle, par exemple :

\Gamma = \{ \gamma_1, \gamma_2, \ldots, \gamma_{|\Gamma|} \} = \{ '<noun>', '<verb>', '<adj>', \ldots \}~
Classes d'ambiguïté
det/prn/verb
det/prn
noun/verb
det
noun
prn
pr
verb
adj

Les classes d'ambiguïté (notées comme Σ) d'un modèle sont l'ensemble des ambiguïtés possibles, par exemple entre nom et verbe, ou verbe et adjectif, ex :

\Sigma = \{ \sigma_1, \sigma_2, \ldots, \sigma_{|\Sigma|} \} = \{ 'noun|verb', 'det|prn', 'det|prn|verb', \ldots \}~

[edit] Modèles de Markov cachés

Un modèle de Markov caché est constitué de deux matrices, représentant les probabilités de transitions et probabilités d'émission et un vecteur représentant les probabilités initiales du modèle. C'est souvent exprimé comme :

M = (A, B, \pi)~

M est le modèle, A est la matrice de probabilité de transitions, B est la matrice de probabilité d'émission et ~\pi est le vecteur de probabilités initiales. Ces probabilités sont calculées entre le tagset et les classes d'ambiguïté pour un ensemble d'entraînement. C'est mentionné comme estimation de paramètre.

Les probabilités de transitions représentent la probabilité qu'une balise en suive une autre, ...

[edit] Estimation de paramètre

[edit] Vraisemblance maximale

La manière la plus facile d'estimer les paramètres[2] d'un modèle de Markov caché est d'utiliser la vraisemblance maximale (ML comme maximum likelihood en anglais). Cette méthode nécessite un corpus pré-balisé. On va faire un très petit entraînement de corpus afin d'entraîner un modèle qui puisse être utilisé pour désambiguïser la phrase d'exemple ci-dessus. Le corpus nettement plus petit que ce qui serait normalement utilisé, mais il nous permettra de démontrer étape par étape comment le modèle est construit et utilisé.

Non marqué Analysé Marqué
Vino a la playa Vino<noun>/<verb> a<pr> la<det>/<prn> playa<noun> .<sent> Vino<verb> a<pr> la<det> playa<noun> .<sent>
Voy a la casa Voy<verb> a<pr> la<det>/<prn> casa<noun>/<verb> .<sent> Voy<verb> a<pr> la<det> casa<noun> .<sent>
Bebe vino en casa Bebe<verb> vino<noun>/<verb> en<pr> casa<noun>/<verb> .<sent> Bebe<verb> vino<noun> en<pr> casa<noun> .<sent>
La casa es grande La<det>/<prn> casa<noun>/<verb> es<verb> grande<adj> .<sent> La<det> casa<noun> es<verb> grande<adj> .<sent>
Es una ciudad grande Es<verb> una<det>/<prn>/<verb> ciudad<noun> grande<adj> .<sent> Es<verb> una<det> ciudad<noun> grande<adj> .<sent>

Dans ce corpus, le texte "non marqué" peut venir de n'importe où, le texte "analysé" sera le résultat après passage à travers un analyseur morphologique, et le texte "marqué" devrait être désambiguïsé à la main par un ou plusieurs humains depuis le texte analysé.

Matrice des transitions
Deuxième balise
Première balise verb noun det prn pr adj sent
verb 0 1 1 0 2 1 0
noun 1 0 0 0 1 1 3
det 0 4 0 0 0 0 0
prn 0 0 0 0 0 0 0
pr 0 1 2 0 0 0 0
adj 0 0 0 0 0 0 2
sent 3 0 1 0 0 0 0
Calcul des probabilités de transition

Les probabilités de transition sont principalement un ensemble de probabilités pour qu'une certaine balise soit suivie d'une certaine autre. On entraîne un modèle bigramme (?), donc nous avons besoin de faire une matrice à deux dimensions. Les axes de cette matrice sont le tagset. La première chose qu'on fait est d'additionner les transitions. Par exemple, si on, voit un déterminant, suivi d'un nom quatre fois dans le cours du corpus balisé, alors on met un 4 dans l'élément (det, noun).

Il devrait être possible de voir à partir des comptes dans la table que déjà dans ces modèles on a quelque information sur le corpus. On peut voir que les déterminants sont suivis par des noms et que les verbes commencent très souvent une phrase. Si le corpus était plus large, il y aurait moins de zéros. Ces comptes sont assez faciles à calculer.

La prochaine chose à faire est de calculer la matrice des probabilités de transition, A. C'est habituellement écrit ainsi

a_{ij} = p(\gamma_j | \gamma_i)~

et signifie que l'élément en aij est la probabilité que γj apparaisse après la balise précédente γi. On peut donner l'exemple pour le déterminant suivi d'un nom comme :

a[det][noun] = \frac{N(det, noun)}{N(\{verb,det,prn,pr,adj,sent,noun\}, noun)} = \frac{4}{4} = 1
Matrice des probabilités de transition (A)
Deuxième balise (γj)
Première balise (γi) verb noun det prn pr adj sent
verb 0 0.2 0.2 0 0.4 0.2 0
noun 0.16 0 0 0 0.16 0.16 0.5
det 0 1 0 0 0 0 0
prn 0 0 0 0 0 0 0
pr 0 0.3 0.6 0 0 0 0
adj 0 0 0 0 0 0 1
sent[3] 0.75 0 0.25 0 0 0 0

Ou pour un exemple plus ambigu :

a[pr][noun] = \frac{N(pr, noun)}{N(\{verb,det,prn,pr,adj,sent,noun\}, noun)} = \frac{1}{3} \approx 0.33

N(x) est le nombre de fois que x apparaît dans l'ensemble d'entraînement.

Calcul des probabilités d'émission

On suit un processus similaire pour calculer les probabilités d'émission du modèle, seulement cette fois, on compte le nombre de fois qu'une classe d'ambiguïté est aperçue dans le corpus non marqué pour chaque balise dans le corpus marqué divisé par le nombre de fois que les autres classes d'ambiguïté ont été vues. C'est exprimé ainsi :

b_i(\sigma_k) = p(\sigma_k|\gamma_i)~

Ici, σk est la classe d'ambiguïté, et pk | γi) est la probabilité de voir la classe d'ambiguïté σk à partir de la balise γi. Donc, pour continuer l'exemple, dans le corpus balisé ci-dessus on voit la balise "verb" cinq fois, et la classe d'ambiguïté "verb|noun" une fois.

Matrice des probabilités d'émission (B)
Deuxième balise (γj)
Première balise (σk) verb noun det prn pr adj sent
det/prn/verb 0 0 0 0 0 1 0
det/prn 0 0 0 0 0 1 0
noun/verb 0.2 0.67 0 0 0 0 0
verb 1 0 0 0 0 0 0
noun 0 1 0 0 0 0 0
det 0 0 1 0 0 0 0
prn 0 0 0 1 0 0 0
pr 0 0 0 0 1 0 0
adj 0 0 0 0 0 1 0
sent 0 0 0 0 0 0 1
b_{verb}((verb|noun)) = \frac{N((verb|noun))}{N(verb)} = \frac{1}{5} = 0.2

Et à partir de la balise "noun" qu'on voit six fois, on voit la classe d'ambiguïté "verb|noun" quatre fois,

b_{noun}((verb|noun)) = \frac{N((verb|noun))}{N(noun)} = \frac{4}{6} = 0.67
Calcul des probabilités initiales

Le vecteur pour les probabilités initiales du modèle est simplement la ligne de la matrice des probabilités de transition qui correspond à la balise marqueur de fin de phrase <sent> (marquée # dans les équations), c'est à dire :

\pi_i = p(\gamma_i|\#)

Donc, par rapport à notre ensemble de données décrit précédemment :

\pi_{verb} = \frac{N(sent, verb)}{N(\{det,prn,pr,adj,verb,sent,noun\}, verb)} = \frac{3}{4} = 0.75

[edit] Marquage

Donc, nous avons initialisé le modèle, ce que nous espérons décrit le texte (?). La prochaine chose à faire est de l'utiliser. Disons que nous avons l'exemple de phrase ambigu donné auparavant :

Vino a la playa

On veut désambiguïser ça en utilisant le modèle qu'on a entraîné plus haut. Afin de faire ça, on utilise l'algorithme Viterbi, comme cela sera expliqué plus bas.

[edit] Viterbi

L'algorithme Viterbi est alors utilisé pour marquer la phrase. Principalement, il consiste en une manière efficace de compter le chemin le plus vraisemblable à travers une séquence de probabilités (POS-tags pour chaque mot, bigrammes, trigrammes).

[edit] Voir aussi

[edit] Notes

  1. Également mentionnées comme "partie de discours", ex: nom, verbe, adjectif, adverbe, conjonction, etc.
  2. Par paramètres, on entend les probabilités de transmission, d'émission et initiales
  3. Cette ligne représente les probabilités initiales, ~\pi du modèle.
Personal tools