Cours 5
Formule de Bayes
Programmation dynamique
Automates à poids
Algorithme "avant"
n-grammes
Modèles de Markov
Modèles de Markov cachés
Algorithme de Viterbi
Le modèle du canal bruité
Étiquetage lexicalOn connaît les tokens, on veut deviner les étiquettesCanal bruitéUne information inconnue vient d'une source et passe par un
canal de communication bruitéOn obtient une autre information (observation o)On veut deviner l'information originale sCorrection orthographiqueInformation originale : le texte correctObservation : le texte avec les fautesOn veut deviner le texte correct
Formule de Bayes
P(s|o)probabilité que l'information originale soit s sachant que l'observation est ovaleur : entre 0 et 1
argmaxsS P(s|o)la valeur de sS pour laquelle P(s|o) est maximal
P(s|o) P(o) = P(o|s) P(s)formule de Bayes
argmaxsS P(s|o) = argmaxsS P(o|s) P(s) /P(o)
= argmaxsS P(o|s) P(s)car P(o) ne dépend pas de s
Exemple : correction orthographique
e mot incorrect c mot correct
On veut argmaxcC P(c|e) = argmaxcC P(e|c) P(c)On calcule P(e|c) P(c) pour tous les c proches de eP(c)Corpus d'apprentissage avec des mots correctsP(c) = nb_occ(c)/NN nombre de mots dans le corpusP(e|c)Corpus d'apprentissage avec erreursOn classe les erreurs en suppressions, insertions, substitutions et
transpositionsOn compte le nombre d'erreurs pour chaque lettre ou paire de
lettresOn en déduit une approximation de la probabilité de chaque erreur
Distance d'édition
Dans le modèle précédent, pour simplifier le calcul de P(e|c), on suppose qu'il y a une seule erreur par mot
Il peut y avoir plusieurs erreurs par mot
Distance d'édition entre c et e
nombre minimal d'opérations (suppressions, insertions, substitutions) nécessaires pour passer de c à e
Exemple : la distance entre plouc et pneu est 3
plouc pnouc pneuc pneu
Si la probabilité d'une erreur est p et s'il y a 3 erreurs, une approximation de P(e|c) est p3
Programmation dynamique
Algorithme de calcul de la distance d'éditionSi pneuc fait partie d'un chemin minimal de plouc à pneu, alors ce
chemin doit commencer par un chemin minimal de plouc à pneuc
Matrice de distancescuol 2 1 1 2 3p 1 0 1 2 3# 0 1 2 3 4
# p n e usource : plouc cible : pneu
Programmation dynamiquedistance[i,j] = distance minimale entre les i premiers caractères de la
source et les j premiers caractères de la cible
c 5 4 4 4 3
u 4 3 3 3 2
o 3 2 2 2 3
l 2 1 1 2 3
p 1 0 1 2 3
# 0 1 2 3 4
# p n e u
distance[i, j] := min(distance[i-1,j]+cost_inst(cible[i]),
distance[i-1,j-1]+cost_subst(source[j],cible[i]),
distance[i,j-1]+cost_suppr(source[j]))
Programmation dynamiqueCalculer les valeurs de distance[i,j] dans un certain ordre :
distance[i-1,j], distance[i-1,j-1] et distance[i,j-1] doivent être disponibles quand on calcule distance[i,j]
c 5 4 4 4 3
u 4 3 3 3 2
o 3 2 2 2 3
l 2 1 1 2 3
p 1 0 1 2 3
# 0 1 2 3 4
# p n e u
Automates à poidsUn automate des erreurs sur le mot pneu (à partir d'un corpus
d'apprentissage ou d'un modèle de causes d'erreurs)
Le poids représente la probabilité qu'on passe par cette transition quand on sort de cet état
# p n e u0,9 0,8 0,095 0,9
m0,05 b0,05 r i
0,05 0,15 0,003
0,0020,1
1 1 1
Calculer la probabilité d'une séquenceApplication : calcul de P(e|c) pour la correction orthographiqueUne séquence e correspond à un ou plusieurs chemins de l'automateOn fait la somme des probabilités correspondant à ces cheminsPour chaque chemin, on fait le produit des poidsAlgorithme "avant" (forward algorithm)
# p n e u0,9 0,8 0,095 0,9
m0,05 b0,05 r i
0,05 0,15 0,003
0,002 0,11 1 1
Algorithme "avant"Programmation dynamique
Source : les états de l'automate à poids
Cible : l'observation e
prob[s,j] : probabilité d'observer les j premiers mots de e en suivant un chemin de l'automate allant jusqu'à l'état s
prob[s,j] = q prob[q,j-1]aqsbsj
aqs : poids de la transition de l'état q à l'état s
bsj vaut 1 si l'état s correspond à ej, 0 sinon
Les états de l'automate à poids doivent être classés de telle sorte que toutes les sources des transitions entrant dans s soient avant s
Algorithme "avant"prob[s,j] = q prob[q,j-1]aqsbsj
i 0 0 0 0 0
u 0 0 0 0 a#mamnanraru
r 0 0 0 a#mamnanr
e 0 0 0 0 0b 0 0 0 0 0
n 0 0 a#mamn 0 0
m 0 a#m 0 0 0p 0 0 0 0 0# 1 0 0 0 0
# m n r u
Résultat : prob[u,4] = a#mamnanraru = 0,0001
n-grammesOn cherche à deviner un token en connaissant les précédents
P(mk|m1m2...mk-1) probabilité de mk après m1m2...mk-1
On se limite aux n-1 tokens précédents : P(mk|mk-n+1...mk-1)
On utilise des statistiques sur les suites de n tokens (n-grammes)
On fait les statistiques à partir d'un corpus (apprentissage supervisé)
n = 2 (bigrammes) : après le, bain est plus probable que objets
P(bain|le) > P(objets|le)
P(mk|mk-1) = nb_occ(mk-1mk)/nb_occ(mk-1)
n = 3 (trigrammes) : après dans le, bain est plus probable que calculer
P(bain|dans le) > P(calculer|dans le)
P(mk|mk-2mk-1) = nb_occ(mk-2mk-1mk)/nb_occ(mk-2mk-1)
n-grammesProbabilité d'une séquence de tokens avec un modèle trigramme
P(m1m2...mk-1mk) = 1ik P(mi|mi-2mi-1)
Les probabilités sont souvent très faibles
Les produits de plusieurs probabilités encore plus
On utilise les logarithmes des probabilités
On additionne au lieu de multiplier
Plus n est élevé :
- plus les probabilités sont faibles
- plus les n-grammes sont nombreux (exponentiel)
- plus la prédiction est efficace
n-grammesGénération aléatoire avec un modèle n-grammeOn couvre l'espace de probabilités [0,1] avec tous les n-grammes
(chacun occupe un espace proportionnel à sa probabilité)On choisit un nombre aléatoirement entre 0 et 1 et on écrit le n-
gramme qui contient ce nombrePour choisir le mot suivant, on couvre [0,1] avec tous les n-grammes
qui commencent par m2m3...mn et on en choisit un aléatoirementetc.Modèle unigramme de ShakespeareTo him swallowed confess near both. Which. Of save on trail for are
ay device and rote life haveModèle bigramme de ShakespeareWhat means, sir. I confess she? then all sorts, he is trim, captain.
n-grammesModèle trigramme de ShakespeareSweet prince, Falstaff shall die. Harry of Monmouth's grave.Modèle 4-gramme de ShakespeareKing Henry. What! I will go seek the traitor Gloucester. Exeunt some
of the watch. A great banquet serv'd in;Modèle bigramme du Wall Street JournalLast December through the way to preserve the Hudson corporation
N.B.E.C. Taylor would seem to complete the major central planners one point five percent of U.S.E. has already old M.X. corporation of living on information such as more frequently fishing to keep her
Modèle trigramme du Wall Street JournalThey also point to ninety nine point six billion dollars from two
hundred four oh six three percent of the rates of interest stores as Mexicon and Brazil on market conditions.
Modèle de MarkovModèle de probabilités dans lequel la probabilité de mk ne dépend que
des n éléments qui précèdent (modèle de Markov d'ordre n)
P(mk|m1m2...mk-1) = P(mk|mk-n...mk-1)
On le représente par un automate à poids
Chaque état de l'automate correspond à un n-gramme
Le poids de la transition de m1m2...mn à m2m3...mn+1 est P(mn+1| m1m2...mn)
Un modèle d'ordre n correspond donc à un modèle n+1-gramme
Un modèle de Markov d'ordre 1
1
.4
1
.3.3
.4
.6 1
.6
.4
te
ha p
i
Modèle de Markov cachéLes observations o sont distinctes des états s de l'automate
La probabilité de o ne dépend que de l'état courant :
P(o|s) probabilité d'observer o quand on est dans l'état s
P(s|q) probabilité de passer dans l'état s quand on est dans l'état q
Pour une suite d'états :
P(s1s2...sn) = P(s1)P(s2|s1)P(s3|s2)...P(sn|sn-1)
Pour une suite d'états et d'observations :
P(o1o2...on|s1s2...sn,) = P(o1|s1)P(o2|s2)...P(on|sn)
Application à l'étiquetageOn recherche l'étiquette s de race pour laquelle P(TO s|to race) est
maximale
argmaxsS P(TO s|to race) = argmaxsS P(to race|TO s) P(TO s)
= argmaxsS P(race|s) P(s|TO)
s = NN
P(race|NN) P(NN|TO) = 0,00041 * 0,021 = 0,000007
s = VB
P(race|VB) P(VB|TO) = 0,00003 * 0,34 = 0,00001
Conclusion
L'étiquette correcte de race dans to race est probablement VB
Exemple bigramme
# DT NNVB
P(DT|#)
P(NN|DT) P(VB|NN)
P(VB|DT)
P(the|DT)
P(NN|NN)
P(can|VB)P(smells|VB)
P(can|NN)P(smells|NN)
Application à l'étiquetageLes observations sont les tokens du texte
On veut argmaxsS P(s|m) où m est la séquence de tokens :
argmaxsS P(s|m) = argmaxsS P(m|s) P(s)
= argmaxsS 1ikP(mi|si) 1ikP(si|si-n+1...si-1)
On estime ces valeurs à l'aide d'un corpus étiqueté (apprentissage supervisé) :
P(mi|si) = nb_occ(mi, si)/nb_occ(si)
P(si|si-n+1...si-1) = nb_occ(si-n+1...si-1si)/nb_occ(si-n+1...si-1)
Pour trouver la meilleure valeur de s : algorithme de Viterbi
Algorithme de ViterbiProgrammation dynamique
Source : les états du modèle de Markov
Cible : l'observation m
prob[s,j] : probabilité maximale d'observer les j premiers mots de m en suivant un chemin de l'automate allant jusqu'à l'état s
prob[s,j] = maxq (prob[q,j-1]aqsbsj)
aqs : P(s|q)
bsj : P(mj|s)
Une fois la matrice remplie, on retrouve un chemin qui a donné la probabilité maximale dans la dernière colonne et on en déduit les états correspondants