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