ajout POS, rendu à Viterbi

This commit is contained in:
François Pelletier 2019-10-19 21:28:39 -04:00
parent d802bfd29c
commit 35d79a2164
4 changed files with 340 additions and 4 deletions

View file

@ -1,4 +1,5 @@
dot_compile:
dot -Tpng fsa_sheep.dot -o fsa_sheep.png
dot -Tpng -o fsa_sheep.png fsa_sheep.dot
dot -Tpng -o hmm.png hmm.dot
build: examen_partiel.md dot_compile
pandoc examen_partiel.md -o examen_partiel.pdf

View file

@ -745,17 +745,281 @@ Ce type de modèle va discriminer parmi les classes possibles $P(c|doc)$
## Régression logistique
Forme générale de la régression:
$$
P(y=c|x) = \sum_{i=1}^N{w_{i}f_{i}+b}
$$
Classificateur binaire:
$$
\log \left( \frac{P(y=0|x)}{P(y=1|x)} \right) = \sum_{i=1}^N{w_{i}f_{i}}
$$
En utilisant la fonction sigmoïde:
$$
\begin{aligned}
P(y=1) &= \sigma(w \cdot x + b) \\
&= \frac{1}{1+e^{-(w \cdot x + b)}} \\
P(y=0) &= 1- \sigma(w \cdot x + b) \\
&= \frac{e^{-(w \cdot x + b)}}{1+e^{-(w \cdot x + b)}}
\end{aligned}
$$
On obtient une fonction de décision:
$$
\begin{aligned}
\hat{y} =
\begin{cases}
1 &, P(y=1|x)>0.5 \\
0 &, sinon
\end{cases}
\end{aligned}
$$
Pour la régression multiple, on utilise la fonction softmax:
$$
p(y=c|x) = \frac{e^{w_c \cdot x + b_c}}{\sum_{j=1}^k e^{w_j \cdot x + b_j}}
$$
### Construction des attributs
- Variables indicatrices sur une caractéristique du document
- Compteurs de mots ou de polarités
- Logarithme de la longueur du document
Chaque attribut a un poids positif ou négatif
### Évaluation
Pour choisir la classe la plus probable, on peut simplifier le problème de régression:
$$
\begin{aligned}
\hat{c} &= arg\,max_{c \in C} P(c|x) \\
&=arg\,max_{c \in C} \frac{\exp({\sum_{i=1}^N w_{i}f_{i}(c,x)})}{\sum_{c^{\prime} \in C}{\exp({\sum_{i=1}^N w_{i}f_{i}(c,x)})}} \\
&=arg\,max_{c \in C} \exp({\sum_{i=1}^N w_{i}f_{i}(c,x)}) \\
&=arg\,max_{c \in C} \sum_{i=1}^N w_{i}f_{i}(c,x) \\
\end{aligned}
$$
On ignore le dénominateur et la fonction exponentielle tout en conservant l'ordre.
### Apprentissage
Trouver les paramètres $w_i$ et $b$ qui minimisent les erreurs du classificateur. On veut minimiser une fonction de perte ou maximiser une fonction de vraisemblance.
Pour la régression logistique: on maximise la vraisemblance:
$$
\begin{aligned}
\log(P(y|x)) &= \log(\hat{y}^y(1-\hat{y}^{1-y}))
\end{aligned}
$$
Ce qui revient à minimiser la fonction de perte suivante:
$$
\begin{aligned}
L_{CE}(\hat{y},y) &= -\log(P(y|x)) \\
&= -[y \log(\hat{y})+(1-y)\log(1-\hat{y})] \\
L_{CE}(w,b) &= -[y \log(\sigma(w \cdot x + b))+(1-y)\log(1-\sigma(w \cdot x + b))]
\end{aligned}
$$
La fonction de coût est:
$$
Cost(w,b) = \frac{1}{m} \sum_{i=1}^m L_{CE}(w,b)
$$
On minimise la fonction de perte:
$$
\begin{aligned}
\frac{\partial L_{CE}(w,b)}{\partial w_j} &= [\sigma(w \cdot x+b)-y]x_j
\end{aligned}
$$
Algorithme utilisé: Descente de gradient stochastique ou avec mini-batch.
## Conclusion
||Régression logistique|Naive Bayes|
|---|---|---|
|Hypothèse d'indépendance|Non|Oui|
|Ajustement pour corrélation|Oui|Non|
|Interprétabilité|Oui|Non|
|Taille de l'échantillon|Grand|Petit|
|Entraînement|Algorithme complexe|Simple et rapide|
# Analyse grammaticale
## Classe de mots
**Analyse grammaticale**: Attribuer une étiquette lexicale à chaque mot dun texte
Usages:
- Synthèse vocale (prononciation)
- Analyse syntaxique (nom ou verbe)
- Extraction dinformation (noms, relations)
- Traduction automatique (prendre le bon sens)
## Classes de mots
- Classes fermées
- Nombre fixe de membres:
- Prépositions et conjonctions: de, en, vers, et, mais, car,...
- Pronoms: je, tu, elle, le mien, ...
- Verbes auxiliaires: *may*, *can*, *will*, *been*, ...
- Déterminants et nombres: un, la, le, ses, mon, ...
- Particules (anglais): up, down, off, on
- Classes ouvertes
- On peut ajouter de nouveaux mots
- Noms (propres, communs, comptables, massifs)
- Verbes (action, processus)
- Adjectifs
- Adverbes (manière, temps, quantité, lieu, ...)
## POS Tags
## Analyseur
- Plusieurs ensemble d'étiquettes disponibles
- Haut niveau (N, V, ADJ, ADV, DET, PRE, PRO)
- Plus détaillé (Penn Treebank: 45 étiquettes)
|Tag |Description |Example |
|-----|-----------------------------------------|---------------------------|
|CC |conjunction, coordinating |and, or, but |
|CD |cardinal number |five, three, 13% |
|DT |determiner |the, a, these |
|EX |existential there |there were six boys |
|FW |foreign word |mais |
|IN |conjunction, subordinating or preposition|of, on, before, unless |
|JJ |adjective |nice, easy |
|JJR |adjective, comparative |nicer, easier |
|JJS |adjective, superlative |nicest, easiest |
|LS |list item marker | |
|MD |verb, modal auxillary |may, should |
|NN |noun, singular or mass |tiger, chair, laughter |
|NNS |noun, plural |tigers, chairs, insects |
|NNP |noun, proper singular |Germany, God, Alice |
|NNPS |noun, proper plural |we met two Christmases ago |
|PDT |predeterminer |both his children |
|POS |possessive ending |'s |
|PRP |pronoun, personal |me, you, it |
|PRP$ |pronoun, possessive |my, your, our |
|RB |adverb |extremely, loudly, hard |
|RBR |adverb, comparative |better |
|RBS |adverb, superlative |best |
|RP |adverb, particle |about, off, up |
|SYM |symbol |% |
|TO |infinitival to |what to do? |
|UH |interjection |oh, oops, gosh |
|VB |verb, base form |think |
|VBZ |verb, 3rd person singular present |she thinks |
|VBP |verb, non-3rd person singular present |I think |
|VBD |verb, past tense |they thought |
|VBN |verb, past participle |a sunken ship |
|VBG |verb, gerund or present participle |thinking is fun |
|WDT |wh-determiner |which, whatever, whichever |
|WP |wh-pronoun, personal |what, who, whom |
|WP$ |wh-pronoun, possessive |whose, whosever |
|WRB |wh-adverb |where, when |
|. |punctuation mark, sentence closer |.;?* |
|, |punctuation mark, comma |, |
|: |punctuation mark, colon |: |
|( |contextual separator, left paren |( |
|) |contextual separator, right paren |) |
Problème: Les mots ont souvent plus d'une étiquette, il faut alors déterminer la bonne.
## Modèle HMM
**HMM**: Hidden Markov Models
- Approche probabiliste
- Cas spécial d'intérence bayésienne
- Modèle génératif:
- On détermine la structure de la phrase
- On choisit le mot associé à chaque étiquette
- La première étape est une chaîne de Markov et la seconde, l'extension cachée
### Définitions
- **Chaîne de Markov**: Automate avec des probabilités associées aux transitions. Chaque état ne dépend que du précédent.
- **Séquence d'entrée**: États suivis par l'automate.
- **Espace d'états**: Ensemble fermé d'états
- **Probabilité de transition**: Probabilité de passer de l'état $i$ à l'état $j$: $P(q_i=j|q_{i-1}=i)$
- **Probabilité initiale**: $\pi_i$: probabilité de démarrer dans l'état $q_i$
### Application au POS tagging
- Les états correspondent aux étiquettes lexicales. Ils sont cachés, ce qu'on observe, ce sont les mots. D'où le besoin d'une extension.
- Probabilité de transition $A=\lbrace a_{ij} \rbrace$: modélise la séquence d'étiquettes
- Probabilité d'émission $B=\lbrace b_i(k) \rbrace$: associe les mots aux étiquettes
![](hmm.png)
Quelle est la meilleure séquence d'étiquettes qui correspond à la séquence d'observations ?
### Approche probabiliste
- Considérer toutes les séquences possibles $t_1, t_2, \ldots, t_n$
- Sélectionner celle qui est la plus probable: maximiser $P(t_1, t_2, \ldots, t_n|w_1,\ldots,w_n)$
- Problème d'optimisation:
$$
\hat{t}_1^n = arg\,max_{t_1^n} \frac{P(w_1^n|t_1^n)P(t_1^n)}{P(w_1^n)}
$$
Comme le dénominateur est une constante dans cette optimisation, on peut simplifier le problème:
$$
\hat{t}_1^n = arg\,max_{t_1^n} \overbrace{P(w_1^n|t_1^n)}^{\text{vraisemblance}}\overbrace{P(t_1^n)}^{\text{a priori}}
$$
- Vraisemblance: les mots correspondent aux étiquettes
- a priori: probabilité de retrouver une séquence d'étiquettes
Estimation:
- Présence d'une étiquette ne dépend que de la précédente: bigrammes
$$
P(t_1^n) \approx \prod_{i=1}^n P(t_i|t_{i-1})
$$
- Exemple:
$$
P(\text{DT JJ NN} \ldots) = P(\text{DT}|\text{<s>})P(\text{JJ}|\text{DT})P(\text{NN}|\text{JJ})\ldots
$$
- Présence d'un mot ne dépend que de son étiquette
$$
P(w_1^n|t_1^n) \approx \prod_{i=1}^n P(w_i|t_i)
$$
- Exemple:
$$
P(\text{le petit chien}|\text{DT JJ NN}) = P(\text{le}|\text{DT})P(\text{petit}|\text{JJ})P(\text{chien}|\text{NN})
$$
- Résultat:
$$
\hat{t}_1^n = arg\,max_{t_1^n}P(w_1^n|t_1^n)P(t_1^n) \approx \prod_{i=1}^n \overbrace{P(w_i|t_i)}^{\text{émission}}\overbrace{P(t_i|t_{i-1})}^{\text{transition}}
$$
### Estimation des probabilités
À l'aide d'un corpus étiqueté
- Transition: $$P(t_i|t_{i-1}) = \frac{C(t_{t-1}|t_i)}{C(t_{i-1})}$$
- Émission: $$P(w_i|t_i)=\frac{C(t_i,w_i)}{C(t_i)}$$
## Décodage: Algorithme de Viterbi
Comme il n'est pas pratique d'énumérer tous les chemins possibles et d'estimer leurs probabilités, on utilise la programmation dynamique.
## Algorithme de Viterbi
## MEMM

71
hmm.dot Normal file
View file

@ -0,0 +1,71 @@
digraph G {
ratio=1.2
mincross = 2.0
subgraph cluster_A {
q_0[label=<Start<SUB>0</SUB>>];
q_1[label=<MD<SUB>1</SUB>>];
q_2[label=<VB<SUB>2</SUB>>];
q_3[label=<NN<SUB>3</SUB>>];
q_4[label=<End<SUB>4</SUB>>];
q_0->q_1[label="a01"];
q_0->q_2[label="a02"];
q_0->q_3[label="a03"];
q_1->q_1[label="a11"];
q_1->q_2[label="a12"];
q_1->q_3[label="a13"];
q_1->q_4[label="a14"];
q_2->q_1[label="a21"];
q_2->q_2[label="a22"];
q_2->q_3[label="a23"];
q_2->q_4[label="a24"];
q_3->q_1[label="a31"];
q_3->q_2[label="a32"];
q_3->q_3[label="a33"];
q_3->q_4[label="a34"];
}
subgraph cluster_B1 {
B1[
shape=plaintext
label=<
<table border='1' cellborder='1'>
<tr><td><b>B<sub>1</sub></b></td></tr>
<tr><td>P("aardvark"|MD)</td></tr>
<tr><td>P("will"|MD)</td></tr>
<tr><td>P("the"|MD)</td></tr>
<tr><td>P("black"|MD)</td></tr>
<tr><td>P("zebra"|MD)</td></tr>
</table>
>];
}
subgraph cluster_B2 {
B2[
shape=plaintext
label=<
<table border='1' cellborder='1'>
<tr><td><b>B<sub>2</sub></b></td></tr>
<tr><td>P("aardvark"|VB)</td></tr>
<tr><td>P("will"|VB)</td></tr>
<tr><td>P("the"|VB)</td></tr>
<tr><td>P("black"|VB)</td></tr>
<tr><td>P("zebra"|VB)</td></tr>
</table>
>];
}
subgraph cluster_B3 {
B3[
shape=plaintext
label=<
<table border='1' cellborder='1'>
<tr><td><b>B<sub>3</sub></b></td></tr>
<tr><td>P("aardvark"|NN)</td></tr>
<tr><td>P("will"|NN)</td></tr>
<tr><td>P("the"|NN)</td></tr>
<tr><td>P("black"|NN)</td></tr>
<tr><td>P("zebra"|NN)</td></tr>
</table>
>];
}
q_1 -> B1
q_2 -> B2
q_3 -> B3
}

BIN
hmm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB