From dd8c88798389097bd4f0d6625536742c79e72774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pelletier?= Date: Fri, 18 Oct 2019 16:07:17 -0400 Subject: [PATCH] ajout fin n-grammes --- examen_partiel.md | 128 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 2 deletions(-) diff --git a/examen_partiel.md b/examen_partiel.md index 9641eb5..12d35e9 100644 --- a/examen_partiel.md +++ b/examen_partiel.md @@ -6,6 +6,8 @@ highlight: pygments number_sections: yes toc: yes toc_depth: 3 +geometry: "left=2cm,right=2cm,top=2cm,bottom=2cm" +fontsize: 12pt --- # Expressions régulières @@ -398,7 +400,7 @@ $$ ## Estimation des probabilités -Estimateur du maximum de vraisemblance pour les bigrammes +Estimateur du maximum de vraisemblance pour les N-grammes, déterminé à partir d'un corpus d'entraînement. $$ \begin{aligned} @@ -408,9 +410,131 @@ P(w_i|w_{i-1}) &= \frac{\texttt{count}(w_{i-1},w_i)}{\texttt{count}(w_{i-1})} \\ \end{aligned} $$ +Pour calculer les probabilités des bigrammes, on doit faire le compte des unigrammes et des bigrammes, puis, on divise le compte du bigramme par le compte de l'unigramme + +Ex: + +$$ +\begin{aligned} +P(\texttt{want}|\texttt{I}) \\ +&= \frac{P(\texttt{I want})}{P(\texttt{I})} \\ +&= \frac{827}{2533} = 0.3265 +\end{aligned} +$$ + +- Pour éviter de calculer des probabilités trop petites, on utilise des log-probabilités que l'on additionne au lieu de multiplier. +- On doit délimiter les débuts `` et les fins de phrases ``. On ajoute aussi la fin de phrase au vocabulaire. +- On valide la capacité de généralisation du modèle en générant des phrases ou en analysant les modèles N-grammes (aspects reliés à une langue). + +### Génération aléatoire + +- Choisir un bigramme aléatoire `(,w)` +- Échantillonner un bigramme `(w,x)` +- Itérer jusqu'à l'obtention d'un bigramme `(x,)` + +### Différents corpus + +Shakespeare: + +- N=884647 jetons +- V=29066 types +- 300000 types de bigrammes, sur 844M possibles, soit 0.04% + +### Évaluation + +Les textes générés avec des modèles d'ordres supérieurs sont plus cohérents. Ils ressemblent aux textes utilisés pour construire les modèles. + +Méthodes de validation intrinsèques: + +- Holdout: ensembles d'entraînement et de test +- Métrique d'évaluation: + - Perplexité (à minimiser) +- Limites: + - Données de test peuvent être très différentes des données d'entraînement + - La perplexité est une mauvaise approximation dans ce cas + +$$ +\begin{aligned} +PP(W) &= \sqrt[N]{\frac{1}{P(w_1,\ldots,w_N)}} \\ +&= \sqrt[N]{\prod_{i=1}^{N}\frac{1}{P(w_i|w_1,\ldots,w_{i-1})}} +\end{aligned} +$$ + +- Méthodes extrinsèques: tester deux modèles dans une application et prendre le meilleur selon une métrique propre à l'application. + ## Lissage -# Correction d'orthographe +- Les bigrammes qui sont rares ont souvent une probabilité de 0 avec la méthode du maximum de vraisemblance, car ils ne seront pas rencontrés dans le corpus d'entraînement. +- On veut les considérer dans nos calculs: on applique un lissage + +### Lissage de Laplace + +- Consiste à ajouter un compte de 1 à tous les n-grammes. On augmente donc la taille du corpus de $|V|$ jetons. + +La probabilité de rencontrer le mot $w_i$ devient: + +$$ +P_{\texttt{Laplace}}(w_i) = \frac{c_i+1}{N+V} +$$ + +Les comptes reconstruits sont: + +$$ +c_i^{\star} = (c_i+1)\frac{N}{N+V} +$$ + +Appliqué aux bigrammes, ces équations deviennent: + +$$ +\begin{aligned} +P_{\texttt{Laplace}}(w_n|w_{n-1}) &= \frac{C(w_{n-1}w_n)+1}{C(w_{n-1})+V} \\ +c^{\star}(w_{n-1}w_n) &= (C(w_{n-1}w_n)+1)\frac{C(w_{n-1})}{C(w_{n-1})+V} +\end{aligned} +$$ + +- Enjeux + - Approche trop drastique + - On peut utiliser une valeur $\delta \in [0,1]$, mais ce choix est difficile + - Pas utilisé en pratique pour les N-grammes, il y a de meilleures méthodes. + - Utilisé pour lisser d'autres types de modèles probabilistes. + - Classification de textes + - Études pilotes + - Lorsqu'il n'y a pas beaucoup de zéros. + +### Autres approches de lissage: +- Si $C(xyz)=0$, on peut utiliser $p(z|y)$ et $p(z)$ +- Interpolation (combinaison) + - Interpolation simple: + $$ + \begin{aligned} + \hat{P}(w_n|w_{n-2}w_{n-1}) &= \lambda_{1}P(w_n|w_{n-2}w_{n-1})\\ + &+\lambda_{2}P(w_n|w_{n-1})\\ + &+\lambda_{3}P(w_n)\\ + \sum_{i} \lambda_i&=1 + \end{aligned} + $$ + - Version plus sophistiquée: + $$ + \begin{aligned} + \hat{P}(w_n|w_{n-2}w_{n-1}) &= \lambda_{1}(w_{n-2}^{n-1})P(w_n|w_{n-2}w_{n-1})\\ + &+\lambda_{2}(w_{n-2}^{n-1})P(w_n|w_{n-1})\\ + &+\lambda_{3}(w_{n-2}^{n-1})P(w_n) + \end{aligned} + $$ + - Les lambdas sont déterminés à partir d'un jeu de validation (devset) séparé du jeu d'entraînement et de celui de test. +- Backoff (on utilise le premier non-nul en ordre décroissant: $C(zyx)$, $C(zy)$, $C(z)$ + - Katz Backoff + - Stupid (web) backoff. Cet algorithme ne génère pas une distribution de probabilité, on identifie alors la mesure par $S$. + $$ + \begin{aligned} + S(w_i|w_{i-k+1}^{i-1}) &= + \begin{cases} + \frac{C(w_{i-k+1}^i)}{C(w_{i-k+1}^{i-1})}&,\texttt{si } C(w_{i-k+1}^i) >0\\ + 0.4S(w_i|C(w_{i-k+2}^{i-1}))&,\texttt{sinon} + \end{cases} \\ + S(w_i) &= \frac{C(w_i)}{N}\\ + \end{aligned} + $$ # Classification de textes