230 likes | 352 Views
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 lexical On connaît les tokens, on veut deviner les étiquettes Canal bruité
E N D
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 lexical On connaît les tokens, on veut deviner les étiquettes Canal 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 s Correction orthographique Information originale : le texte correct Observation : le texte avec les fautes On veut deviner le texte correct
Formule de Bayes P(s|o) probabilité que l'information originale soit s sachant que l'observation est o valeur : entre 0 et 1 argmaxsSP(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 argmaxsSP(s|o) = argmaxsSP(o|s) P(s) /P(o) = argmaxsSP(o|s) P(s) car P(o) ne dépend pas de s
Exemple : correction orthographique e mot incorrect c mot correct On veut argmaxcCP(c|e) = argmaxcCP(e|c) P(c) On calcule P(e|c) P(c) pour tous les c proches de e P(c) Corpus d'apprentissage avec des mots corrects P(c) = nb_occ(c)/N N nombre de mots dans le corpus P(e|c) Corpus d'apprentissage avec erreurs On classe les erreurs en suppressions, insertions, substitutions et transpositions On compte le nombre d'erreurs pour chaque lettre ou paire de lettres On 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'édition Si pneuc fait partie d'un chemin minimal de plouc à pneu, alors ce chemin doit commencer par un chemin minimal de plouc à pneuc Matrice de distances c u o l 2 1 1 2 3 p 1 0 1 2 3 # 0 1 2 3 4 # p n e u source : plouc cible : pneu
Programmation dynamique distance[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 dynamique Calculer 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 à poids Un 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 0,05 0,003 0,15 0,9 0,9 0,8 0,095 u # p n e 1 1 1 0,05 0,1 i m 0,05 b 0,002 r
Calculer la probabilité d'une séquence Application : calcul de P(e|c) pour la correction orthographique Une séquence e correspond à un ou plusieurs chemins de l'automate On fait la somme des probabilités correspondant à ces chemins Pour chaque chemin, on fait le produit des poids Algorithme "avant" (forward algorithm) 0,05 0,003 0,15 0,9 0,9 0,8 0,095 u # p n e 1 1 1 0,05 0,1 i m 0,05 b 0,002 r
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 0 b 0 0 0 0 0 n 0 0 a#mamn 0 0 m 0 a#m 0 0 0 p 0 0 0 0 0 # 1 0 0 0 0 # m n r u Résultat : prob[u,4] = a#mamnanraru = 0,0001
n-grammes On 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-grammes Probabilité d'une séquence de tokens avec un modèle trigramme P(m1m2...mk-1mk) = 1ikP(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-grammes Génération aléatoire avec un modèle n-gramme On 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 nombre Pour choisir le mot suivant, on couvre [0,1] avec tous les n-grammes qui commencent par m2m3...mn et on en choisit un aléatoirement etc. Modèle unigramme de Shakespeare To him swallowed confess near both. Which. Of save on trail for are ay device and rote life have Modèle bigramme de Shakespeare What means, sir. I confess she? then all sorts, he is trim, captain.
n-grammes Modèle trigramme de Shakespeare Sweet prince, Falstaff shall die. Harry of Monmouth's grave. Modèle 4-gramme de Shakespeare King 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 Journal Last 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 Journal They 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 Markov Modè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
.6 1 a p h .4 .4 .3 .6 1 .3 e t 1 i .4 Un modèle de Markov d'ordre 1
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'étiquetage On recherche l'étiquette s de race pour laquelle P(TO s|to race) est maximale argmaxsSP(TO s|to race) = argmaxsSP(to race|TO s) P(TO s) = argmaxsSP(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 P(VB|DT) P(DT|#) VB DT # NN P(NN|DT) P(VB|NN) P(NN|NN) P(can|NN) P(smells|NN) P(can|VB) P(smells|VB) P(the|DT)
Application à l'étiquetage Les observations sont les tokens du texte On veut argmaxsSP(s|m) où m est la séquence de tokens : argmaxsSP(s|m) = argmaxsSP(m|s) P(s) = argmaxsS1ikP(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 Viterbi Programmation 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