\chapter{Multilocuteur}

\section{Modèles de Markov cachés}

Les  chaînes de  Markov cachées  permettent de  retrouver des  séquences. La
figure \ref{hmmfig}  montre un exemple  de HMM. La procédure  de génération
d'une séquence  de symboles à  l'aide d'un HMM  consiste à partir  de l'état
\emph{start},  se  déplacer  d'état  en  état suivant  les  probabilités  de
générations associées  à l'état. Lorsqu'un  symbole a été généré,  on choisit
une  transition  sortante  suivant   la  distribution  de  probabilité  de
transition associée à l'état courant,  et a procédure est réitérée jusqu'à
atteindre l'état \emph{end}.

\begin{figure}
  \begin{center}
    \caption{Exemple de HMM\label{hmmfig}}
    \includegraphics[width=\textwidth]{hmm}
  \end{center}
\end{figure}

Pour utiliser les HMM, il nous faut tout d'abord convertir nos échantillons
en  suites de  symboles. Idéalement,  un  symbole devrait  correspondre à  un
phonème.  On devrait convertir chaque  échantillon en suite de phonèmes.  On
utilise plutôt une méthode statistique appelée K-means.  K-means permet de
classifier des  données.  On utilise  K-means sur l'ensemble des  fenêtres de
l'ensemble des échantillons de notre base de données. On espère que K-means
retrouvera  des ensembles  proches de  nos phonèmes.   La  langue française
contient environ une quarantaines de phonèmes. Nous devons aussi prendre en
compte les différentes erreurs. Nous  classons donc nos fenêtres parmi une
cinquantaine de centres.

On classe  notre base de donnée  par K-means. Chaque  échantillon de notre
base peut donc maintenant se  représenter par une suite de classes. Chacune
de  ces classes  correspond  à un  symbole  dans notre  HMM.  On peut  donc
effectuer l'apprentissage  de notre  HMM.

Nous   utilisons  une   bibliothèque  extérieure   permettant   de  réaliser
l'apprentissage de  notre HMM. Cette  bibliothèque prends en  paramètre pour
l'apprentissage une  matrice contenant un  exemple par ligne.   Nos exemples
n'ayant pas  tous la même  durée (pas tous  la même taille donc),  nous été
obligé  de compléter  les valeurs  inexistantes  dans la  matrice. Nous  leur
affectons  une  valeur  spéciale.    Cette  valeur  ne  gène  pas  beaucoup
l'apprentissage du HMM vu qu'elle ne survient qu'à la fin des échantillons.
Elle  constitue  un  état  juste  avant \emph{end}  où  l'on  peut  boucler
indéfiniment.

Nous allons utiliser un HMM par mots de notre langage.  D'après la plupart
de  nos source  \cite{brehelin}\cite{rabiner}, 5-6  états  cachés suffisent
pour notre  HMM.  Nous utilisons l'algorithme  de Baum Welch\cite{brehelin}
pour effectuer l'apprentissage.

Une  fois l'apprentissage  terminé,  nous allons  pouvoir interroger  notre
système sur  de nouvelles sources de  son. Nous calculons  tout d'abord les
coefficients à l'aide  de la MFCC.  Puis, nous  transformons cet ensemble de
coefficients en  suite de symboles  en interrogeant K-means.   On interroge
l'ensemble  de nos HMM  (chacun correspondant  à un  mot du  vocabulaire) à
l'aide de  l'algorithme de backward-forward\cite{brehelin}.  Cet algorithme
permet de savoir quelle est  la probabilité maximale qu'une séquence donnée
de  symbole soit  ressortie par  la chaîne  de Markov.   On retourne  le mot
possédant la plus forte probabilité.


\section{Résultats}

Nous avons malheureusement  manqué de temps pour implémenter  cette partie. 
Nous n'avons pas de résultats suffisament cohérents et  l'on estime qu'il reste
des bugs dans cette partie du projet.


