Hidden Markov Model - Modélisation

Modélisation d'un HMM

Pour modéliser un HMM, il suffit de définir les trois matrices S, A et B. En effet, les dimensions de ces matrices nous renseignent sur les nombres N, nombre d'états, et M, nombre d'observations. En plus de ces trois matrices, on peut éventuellement ajouter des labels pour les états et/ou les observations. Dans la plupart des langages de programmation, une matrice est représentée par un tableau à deux dimensions.

La matrice S est de taille 1xN et elle contient les probabilités de départ du HMM. Pour rappel, ces probabilités ne sont utilisées qu'une fois, pour déterminer l'état de départ du HMM.

La matrice A est de taille NxN et elle contient les probabilités de transition du HMM. Ces probabilités sont celles de passer d'un état à un autre. Par exemple, la probabilité de passer de l'état i à l'état j est Aij (ligne i, colonne j).

La matrice B est de taille NxM et elle contient les probabilités d'émission du HMM. Ces probabilités sont celles d'émettre chacune des observations pour chacun des états. Par exemple, la probabilité d'émettre l'observation j pour l'état i est Bij (ligne i, colonne j).

Ces trois matrices ont la particularité d'avoir des lignes "stochastiques". Cela signifie que chaque élément d'une ligne est une probabilité et que la somme des éléments de la ligne est égale à 1. Cela est simplement conforme à la description du modèle.

Limitations

Le plus gros problème lors de la modélisation d'un HMM vient de l'imprécision des flottants. En effet, lorsque nous travaillons sur un HMM, nous faisons des calculs probabilistes, ce qui implique principalement de multiplier des probabilités entre elles. Une probabilité étant un nombre compris entre 0 et 1, la multiplication de probabilités donne des nombres de plus en plus proche de 0. Au bout du compte, nous obtenons 0 parce que les flottants ne peuvent plus fournir la précision nécessaire au calcul.

Lorsque nous travaillons sur un HMM, nous devons contourner ce problème. Pour cela, nous augmentons l'échelle des nombres, c'est à dire que nous les multiplions selon certaines formules mathématiques de sorte à ce qu'ils restent suffisament grands pour ne pas trop souffrir de l'imprécision des flottants et que nous puissons quand même trouver le bon résultat au final. Dans l'exemple "Entrainement luiguistique" de la partie Exemples d'utilisation, cette technique est implémentée dans la fonction "training" qui permet de répondre à la question "Maximiser la probabilité d'une séquence d'observations"

Un autre technique, plus simple mais moins largement applicable, consiste à utiliser les logarithmes. En effet, si nous ne faisons que multiplier les probabilités, nous pouvons utiliser le fait que : a.b = eln(a)+ln(b). On transforme donc notre multiplication de petits nombres en addition de grands nombres négatifs. Le résultat final est exprimé en exponentiel (car pour n'importe quel langage, e-100000 ou e-200000, par exemple, sont tous deux égaux à 0).

Malgré ces techniques, l'imprécision des flottants reste un problème et est source d'erreurs de calcul. Dans l'idéal, le travail sur les HMM requiert donc un matériel spécialisé pour les calculs à haute précision (qui n'utilise donc pas de flottants, mais des représentations décimales exactes) ou encore l'utilisation de bibliothèques spéciales associées à une très grosse puissance de calcul et beaucoup de temps.

Aller aux Exemples d'utilisation