Este documento apresenta uma introdução aos Modelos Escondidos de Markov (HMM). Discute brevemente o histórico e definição de HMM, a relação entre programação dinâmica e HMM, e os três principais problemas de HMM. Também menciona algumas aplicações de HMM, como reconhecimento de padrões temporais.
1. Modelos Escondidos de Markov (HMM’S)
Affonso de Oliveira S. Neto1, Aline Kely Fontes Santos2, Ana Rute Passos3, Danilo
Duarte Correia Da Costa Reis4, Eric Almeida Souza5, Henrique Mandt L.
Figueiredo6, Mateus Nascimento Oliveira7
Universidade Federal de Sergipe (UFS) - Departamento de Computação (DCOMP)
1
affonso.souza@gmail.com1, 2alinefontes19@gmail.com, 3ruteufs@gmail.com,
4
danilodccr@gmail.com, 5souzaeric@msn.com, 6henrique.mandt@hotmail.com,
7
dragonyle@gmail.com
Abstract. This meta-article is an introduction to Hidden Markov Models. It
presents a brief history and definition of this model, the relationship between
dynamic programming and HMM, the main problems of HMM, and finally,
the main uses of the Markov model.
Resumo. Este meta-artigo faz uma introdução aos Modelos Escondidos de
Markov. Apresenta um breve histórico e definição desse modelo, a relação
entre programação dinâmica e o HMM, os três problemas principais de um
HMM, e por fim, os principais usos do modelo Markoviano.
1. Introdução
Cadeias de Markov são um tipo de processo estocástico (fenômeno que varia em
algum grau de forma imprevisível, à medida que o tempo passa), que possui a chamada
propriedade Markoviana. Essa propriedade define que os estados anteriores do processo
são irrelevantes para a predição dos próximos, desde que o estado atual seja conhecido.
Andrey Markov foi um matemático que conseguiu os primeiros resultados para
esses processos, em 1906. Nos dias de hoje, as Cadeias de Markov têm sido utilizadas e
estudadas principalmente nas ciências biológicas, sociais e administrativas. (Fernandes,
2010)
Os Modelos Escondidos de Markov (Hidden Markov Model) se baseiam em
uma Cadeia de Markov, onde uma observação é produzida ao se observar cada estado, e
os estados dessa Cadeia não são observáveis, por isso o nome modelos escondidos. O
HMM é conhecido por sua aplicação na área de reconhecimento de padrões temporais
como a fala, a escrita, os gestos e a bioinformática. (Santos, 2005)
O objetivo deste artigo é fazer uma introdução aos Modelos Escondidos de
Markov. O texto será dividido da seguinte maneira: na primeira parte serão abordados o
histórico e a definição do HMM, na segunda parte tratará sobre a programação dinâmica
e os Modelos Escondidos de Markov, na terceira parte serão apresentados os três
problemas básicos de um HMM. A seguir apontaremos algumas aplicações desses
modelos, e por fim, serão apresentadas as considerações finais sobre o tema e as
referências utilizadas como base.
2. 2. Breve Histórico e Definição
A Cadeia de Markov é um tipo de autômato finito com pesos, sendo que cada
aresta é associada com a probabilidade, e a soma das probabilidades das arestas saindo
de um nó deve ser 1, além disso, a sequência de entrada determina unicamente a saída, e
não há ambiguidade. (Zadrozny, 2008)
A definição formal da Cadeia de Markov é caracterizada pela trinca {S, π, P},
onde:
S= {1, 2,...,u} __ Conjunto dos estados do modelo
π= [p1, p2, ..., pu], pj= P(s0= j) __ Vetor das probabilidades iniciais de estado
P= [pij]uxu ,pij= P(st=j |st-1=i) __ Matriz de probabilidade de transição
A figura abaixo ilustra uma cadeia de Marcov de três estados, sendo que entre
eles, todas as transições são possíveis. (Fernandes, 2010)
Figura 1. Cadeia de Markov de 3 estados
Os modelos ocultos de Markov (HMM) foram descritos pela primeira vez, em
uma série de artigos estatísticos, por Leonard E. Baum e outros autores, na segunda
metade da década de 1960. Uma das primeiras aplicações do HMM foi o
reconhecimento da fala na década 1970. (Espíndola, 2009)
Na segunda metade da década de 1980, os HMM’s começaram a ser usados na
análise de sequências biológicas, principalmente o DNA. Deste então, tornaram-se
onipresentes no campo da bioinformática.
Em problemas que envolvem a manipulação de um conjunto de dados a fim de
extrair informações importantes, para que se possa conhecer a sua fonte de dados sem
tê-la, é fundamental que seja modelado um sistema. Sendo assim, o HMM é um modelo
de parâmetros do objeto de estudo, onde se constrói a partir das propriedades estatísticas
desse objeto. Dessa forma, os parâmetros podem ser feitos de modo preciso e bem
definido. (Khouri, 2002)
A diferença fundamental entre HMM e o resto dos formalismos Markovianos
está na forma de se observar o sistema. Enquanto que na maioria dos processos
Markovianos a observação é direta, pois os observáveis são os próprios estados, em
HMM a observação é indireta, feita por inferência, pois os observáveis são funções
3. probabilísticas dos estados da Markov ou das transições entre esses estados. (Espíndola,
2009)
Os Modelos Ocultos de Markov são caracterizados por uma cadeia de Markov
subjacente e por distribuição de probabilidade das observações produzidas em cada
estado. Sendo assim, um HMM pode ser descrito pelo seguinte conjunto de parâmetros
{S, A, π, P, B}, descrito por:
S = {1, 2, .., u} __ Conjunto dos estados do modelo;
A = {α1, α2, .., αm} __ Conjunto dos símbolos de saída;
π = [p1p2..pu], pj = P(s1=j) __ Vetor das probabilidades iniciais de estado;
P = [pij]uxu, pij = P(st=j | st-1 = i) __ Matriz de probabilidade de transição
B = [P(O | j)] __ Vetor com a distribuição de probabilidade das observações (O) por
estado (j).
3. Programação Dinâmica e HMM
A programação dinâmica é uma técnica utilizada em problemas de otimização.
Assim como em algoritmos recursivos (Figura 2), os problemas são resolvidos a partir
do resultado de problemas menores. O diferencial da programação dinâmica (Figura 3)
em relação à recursividade é a utilização de uma tabela para armazenar o resultado dos
problemas, ao invés de recalculá-lo, reduzindo assim a quantidade de iterações.
(Ferreira, 2004)
Figura 2. Exemplo de Recursividade
4. Figura 3. Exemplo de Programação Dinâmica – Armazenando resultados em um array
Para a utilização da programação dinâmica em problemas de otimização, é
necessário seguir a seguinte propriedade: As soluções não ótimas de subproblemas não
podem integrar a solução ótima do problema original.
Seguindo essa lógica, somente as soluções ótimas dos problemas menores
podem integrar uma solução ótima do problema principal. Com isso, as soluções não
ótimas podem ser descartadas, fazendo com que os algoritmos desenvolvidos com
programação dinâmica sejam mais eficientes que algoritmos diretos.
A vantagem disso é que o custo computacional diminui bastante, pois os
problemas menores, ou subproblemas, são resolvidos uma única vez e possuem as
soluções salvas para serem utilizadas sempre que necessário.
A programação dinâmica permite resolver qualquer problema de otimização. É
necessário que a estrutura tenha as seguintes características:
1. Possuir subestruturas ótimas, permitindo soluções ótimas em qualquer instância
do problema;
2. Poder ser dividido em subproblemas;
3. Os subproblemas são dependentes, permitindo que uma mesma instância do
subproblema seja referida várias vezes durante uma recursão.
A programação dinâmica pode ser usada em comparações de sequências
biológicas. Primeiro, são comparadas subsequências menores e os resultados delas são
armazenados em tabelas. Em seguida, esses resultados são utilizados em subproblemas
maiores até que sequências inteiras sejam comparadas, gerando o resultado da
comparação global da sequência.
Em uma aplicação algorítmica utilizando programação dinâmica em
Bioinformática, os seguintes componentes são apresentados:
1. Utilização de soluções de prefixos menores de forma recorrente para determinar
a solução ótima em determinadas sequências;
2. Registro de valores de uma solução ótima é feito em forma matricial ou tabular;
3. Rotinas que possibilitem retrocesso sobre a matriz de resultados para que possa
ser emitida ou recuperada uma solução ótima.
5. A programação dinâmica é utilizada como principal ferramenta em quase todos
os algoritmos e processos utilizados na comparação de sequências biológicas. Um
algoritmo utilizado é o perfil-HMM.
O perfil-HMM melhora a busca de sequências relacionadas de forma distante ao
converter um alinhamento de sequência múltipla em um sistema de pontuação de
posições específicas baseado em probabilidade. (EDDY, 1998)
Um perfil-HMM contém estados para combinar, inserir ou excluir, e são usados
para modelar uma família de sequências. Cada estado no modelo tem distribuições de
probabilidade e cada transição tem uma probabilidade. Como exemplo, se existe um
aminoácido comumente representado em uma determinada posição no alinhamento de
sequências múltiplas,este recebe uma pontuação maior.
Os algoritmos que utilizam programação dinâmica são usados em
Bioinformática para o alinhamento de pares de sequências ou de múltiplas sequências
entre si e organização de uma ou várias sequências a um perfil-HMM. Eles utilizam
vários critérios de otimização, ou funções de custo, para encontrar um alinhamento
ótimo (com custo mínimo ou com pontuação máxima) ou calcular outras medidas.
Na biologia molecular, as funções de custo possuem a seguinte ordem de
complexidade:
1. Custos simples, onde cada custo de mutação é uma constante;
2. Custos lineares de lacunas (GAPS) e custos lineares de lacunas afins, onde
inclusões e remoções são orçadas através de uma função linear;
3. Custos lineares por partes de lacunas e custos côncavos de lacunas.
Muitas vezes o algoritmo desenvolvido por métodos de programação dinâmica
reduz drasticamente a complexidade, quando comparado com a complexidade do
algoritmo direto, ou seja, para um algoritmo direto de complexidade exponencial às
vezes pode se construir um algoritmo de programação dinâmica com complexidade
polinomial. Outras vezes o algoritmo de programação dinâmica tem a mesma
complexidade do algoritmo direto, mas com coeficientes de ordem mais baixos
(TOSCANI, 2001).
4. Os três problemas básicos do HMM
Em projetos que se utilizam do HMM, há três problemas básicos a serem
resolvidos: O primeiro é a avaliação da probabilidade de uma sequência de observações,
dado o HMM; O segundo problema é a determinação da melhor sequência de estados; e
o último é o ajuste dos parâmetros do modelo, de acordo com a sequência observada.
4.1 Algoritmo de Forward
O primeiro problema do HMM diz respeito à avaliação, em que dado uma
sequência de observações O = {o1,o2, ..., oT} e o modelo λ = {A, B, π}, calcula-se a
probabilidade da sequência de observações produzidas pelo modelo P(O| λ) a partir do
Algoritmo de Programação Dinâmica Forward. (Bandeira, 2008)
6. Dada uma variável de Forward α definida por:
αt(i) = P(O1O2... Ot, qt = Si | λ)
Podemos determinar de forma indutiva a probabilidade desejada em três passos;
1-Inicialização:
α1(i)=πibi(O1)
2-Indução:
αt+1(j) = [ αt(i)aij]bj(Ot+1)*
3-Finalização:
P(O|λ) = αT(i) *
* 1 ≤ i ≥ N, 1 ≤ t ≥ T-1, 1 ≤ j ≥ N.
4.2 Algoritmo de Viterbi
O segundo problema visa buscar uma sequência de estados que seja a mais correta
possível através de critérios de otimização. Trata-se de buscar a sequência de estados Q =
{q1,q2, ..., qT} que possui maior probabilidade de ter gerado série de observações O =
{o1, o2, ..., oT}. (Bandeira, 2008). Uma forma eficiente de resolver este caso é o
Algoritmo de Viterbi, que é muito utilizado para o reconhecimento de voz, biologia
molecular, fonemas, palavras, codificadores e etc.
O Algoritmo de Viterbi consiste em determinar a melhor sequência de estado
individual Q = {q1q2...qT} dada a sequência de observações O = {O1O2...OT} através
da equação:
δt(i) = Max P[q1q2 …qt = i, O1O2 …Ot|λ] (1)
q1, q2, …, qt-1
Por indução teremos:
δt+1(j) = [max δt(i)aij ]bj(Ot+1) (2)
Para podermos determinar o argumento que maximize a Equação 2 utilizaremos a
matriz ψt(j) e seguindo os procedimentos do algoritmo de Viterbi teremos:
1-Inicialização
δ1(i) = πibi(O1) , 1≤i≤N (3)
ψ1(i) = 0. (4)
2-Recursão
δt(j) = Max[[δt-1(i)aj]bj(Ot)] (5)
1≤i≤N
7. ψ1(i) = argmax [δt-1(i)aij] (6)
1≤i≤N
2≤ t ≤ T, 1 ≤ j ≤ N
3-Finalização
P* = max [δT(i)] (7)
1≤i≤N
qT* = argmax [δT(i)] (8)
1≤ i ≤ N
Determinação do caminho ótimo por retrocesso
qt = ψt+1(q*t+1), t = T-1, T-2, ..., 1 (9)
*Os asteriscos indicam resultados otimizados.
4.2.1 Exemplo de Algoritmo de Viterbi com dados viciados
Temos dois dados: um justo e outro viciado. Dada uma sequência de lançamentos,
é possível advinhar qual dos dados originou cada valor da sequência?
Figura 4. Exemplo com dados viciados. Figura 5. Freqüência de símbolos.
As figuras 4 e 5 representam a probabilidade de uma sequência oculta h e uma
sequência de símbolos visíveis s. (Carvalho, 2010)
Probabilidade de uma sequência oculta h:
n n
P (h) = P (h1 )∏P (hi hi −1 ) = T (0, h1 )∏T (hi −1 , hi )
i =2 i =2
Probabilidade de gerar uma sequência de símbolos s, dada uma sequência de estados
ocultos h.
n n
P (s | h) = ∏ P ( si | hi ) = ∏ E ( hi , si )
i =1 i =1
Se h é conhecida (raro), a probabilidade conjunta de h e s é:
8. P (s, h ) = P (s | h ) P (h )
Se h é desconhecida (frequente), pode-se usar o teorema da probabilidade total para
calcular a probabilidade de s:
P (s) = ∑P (s, h j ) = ∑P (s | h j ) P (h j )
h H
∀ j∈ n h H
∀ j∈ n
Representa todas as cadeias ocultas de tamanho n
OBS: Cresce exponencialmente com n.
E por fim, a sequência mais provável é:
h* = arg maxn P (s, h)
∀h∈H
4.3 Algoritmo de Baum-Welch
O terceiro problema do HMM é determinar um método para ajustar seus
parâmetros (A, B, π) de modo a ampliar as probabilidades de uma sequência de
observações O= {o1, o2, ..., oT}. Para solucionar este problema utiliza-se o Algoritmo
de Baum-Welch, com ele é possível determinar λ= (A, B, π) de modo que P(O| λ) seja
localmente maximizada.
ξt (i , j) = at(i)aijbj(Ot+q)βt+1(j)
P(O|λ)
γt(i)=
onde ξt (i , j) representa a probabilidade de se estar no estado Si no instante t e no estado Sj
no instante t+1, conhecido o modelo e a sequência de observações, ou seja
ξt (i , j) = P(qt=Si, qt+1 = Sj | O, λ)
e γt (i), a probabilidade de estar no estado Si no instante t dado o modelo e a sequência de
observações. (Bandeira, 2008)
5. Aplicações de um HMM
Os Modelos Ocultos de Markov (HMM’s) são utilizados em diversas áreas,
como: bioinformática; reconhecimento de voz, face, palavras.
Na área da saúde, os pesquisadores utilizam o software HTK, que é baseado no
HMM. Este software é de propriedade da Microsoft que o disponibiliza de forma
gratuita no endereço online <http://htk.eng.cam.ac.uk>, para nível de estudo.
9. A seguir, descrevemos algumas aplicações do HMM.
5.1 Aplicações de um HMM no reconhecimento de Palavras.
O HMM é uma das principais aplicações no reconhecimento da fala. Os sinais
são analisados através da modelagem de padrões; dado um padrão de referência de
palavras, é preciso reconhecer um padrão de entrada que se pareça com o padrão já
conhecido. (Bandeira, 2008)
O sistema a seguir, faz o reconhecimento de algumas palavras isoladas,
Figura 6. Figura ilustrando o sistema de reconhecimento de palavras isoladas.
A figura 6 ilustra o sistema de reconhecimento de fala, que se inicia com a
emissão do sinal de voz, que é convertido para um sinal digital, e comparado com a
sequência de símbolos falados com os símbolos armazenados no sistema. A seguir, o
HMM calcula qual das palavras tem maior probabilidade de ter sido dita.
As palavras ou fonemas pronunciados passam por um amplificador de
freqüência onde serão divididos em pequenos intervalos de freqüência e em seguida são
filtrados, para eliminar qualquer interferência. Essas palavras ou fonemas proferidas são
compostas de um conjunto de sequências de observações (Intervalos de frequências)
O = {O1O2...OT}, e cada observação Ot é um conjunto de V palavras infinitas, e é
representado por V= {V1V2....VM}. (Bandeira, 2008)
Em resumo, ao se entrar com a palavra para ser reconhecida é efetuada a
quantização da sequência de observação O, Logo após calcula-se a probabilidade do
modelo de entrada com todos os possíveis modelos do banco de protótipos, P(O | λv) e
por fim escolhe a maior probabilidade obtida pela relação
V* = argmax [P(O | λv)].
1≤v≤V
5.2 Aplicações de um HMM na identificação de ilhas CpG
Segundo Calhau (2008), as ilhas CpG são zonas do DNA que possuem grande
número de citosina--fosfatodiester--guanina dinucleotídeo. Em humanos, há cerca de
45.000 ilhas de CpG encontradas principalmente nas extremidades 5' dos genes.
10. Para simular um modelo de ilha em um oceano onde não há ilha, usaremos duas
cadeias (+,-).
Desta forma, admitindo os símbolos:
A+, C+, G+, T+ para ilhas.
A-, C-, G-, T- para não ilhas.
Figura 7. Transições intramodelo.
A maior probabilidade de transição é de mais (+) para menos (-), do que de
menos (-) para mais (+). Tomando a letra G com exemplo, não é possível afirmar,
apenas olhando se esta foi emitida pelo estado G+ ou G-. (Rosa, 2009)
G+
G
G-
Figura 8. Exemplo de estado oculto.
Para encontrar a sequência de estados com a maior probabilidade, utiliza-se do
algoritmo de Viterbi, com a seguinte equação: (Calhau, 2008)
11. Sendo π* o melhor caminho, tem-se:
6. Considerações Finais
Neste artigo foi apresentada uma introdução aos Modelos Ocultos de Markov.
Inicialmente foi abordado um pouco do histórico do HMM, citando a primeira área
de aplicação desses modelos, o reconhecimento da fala.
Também foi descrito o uso da programação dinâmica e sua relação com o
HMM. A programação dinâmica é importante para esse modelo porque ela é utilizada
em problemas de otimização, ou seja, ela resolve problemas a partir do resultado de
problemas menores, e utiliza uma tabela para armazenar os resultados, ao invés de
recalculá-los. (Ferreira, 2004)
Foram apresentados ainda os três problemas básicos de um HMM, que consiste
em: avaliação da probabilidade de uma sequência de observações; determinação da
melhor sequência de estados; e ajuste dos parâmetros do modelo de acordo com a
sequência observada. Tais problemas do HMM são resolvidos de modo eficiente pelos
respectivos algoritmos: Forward, Viterbi e Baum-Welch.
Pode-se perceber a importância desses algoritmos para a aplicação em diversas
áreas como, por exemplo, a bioinformática, na identificação de ilhas CpG, com o uso do
algoritmo de Viterbi. A pesquisa de ilhas CpG é importante, pois à medida em que
encontrar ilhas CpG corresponde encontrar, na maioria dos casos, regiões promotoras de
genes. (Calhau, 2008)
Por fim, a realização deste trabalho foi muito importante para o entendimento
dos Modelos Ocultos de Markov e suas aplicações.
Referências
Bandeira, Leila P; Costa, Rosa V. Marcos da; Júnior, Osvaldo Artur. (2008) Sistema de
Reconhecimento de fala usando Cadeias Ocultas de Markov. Centro Universitário de
LINS. Disponível em: < http://www.slideshare.net/mwanalezi/reconhecimento-de-
fala-usando-cadeias-de-markov >. Acesso em: 12.10.2012.
Calhau, Ana; Pisco, Ângela; Santos, Nuno. (2008) Modelos Probabilísticos. Disponível
em: < web.ist.utl.pt/ist155746/relatorio_4_bc.pdf >. Acesso em: 11.10.2012.
Carvalho, André de. (2010) Modelos Ocultos de Markov. USP: São Paulo. Disponível
em: < http://migre.me/b9usm >. Acesso em: 13.10.2012.
Durbin, R. et al. (2002) Biological Sequence Analysis. Cambridge.
Eddy, S. (1998). Profile Hidden Markov Models. Bioinformatics, 14: 755-763.
12. Espíndola, Luciana da Silveira. (2009) Um estudo sobre os Modelos Ocultos de Markov
– HMM. PUC: Porto Alegre. Disponível em:
<www.inf.pucrs.br/peg/pub/tr/TI1_Luciana.pdf>. Acesso em: 01.10.2012.
Ferreira, J.O. (2004) Algoritmos de Programação Dinâmica usados em Modelos
Markovianos Ocultos (HMM’s). São José dos Campos: INPE.
Fernandes, M. Vinícius dos Santos. (2010) Modelagem de Canais de Comunicações
Digitais Sujeitos a Erros em Surtos. PUC Rio – Certificação Digital Nº 0510511/CA.
Rio de Janeiro. Disponível em: < www2.dbd.puc-rio.br/.../0510511_10_cap_02.pdf>.
Acesso em: 09.10.2012.
Khouri, Cátia Mesquita B. (2002) Modelos Escondidos de Markov para Classificação
de Proteínas. Recife. Disponível em: <
www.liber.ufpe.br/teses/arquivo/20040510115431.pdf >. Acesso em: 07.10.2012.
Rabiner, L.R. (1989) A Tutorial on Hidden Markov Models and Selected Applications
in Speech Recognition. Procedings of the IEEE, Vol. 77, n. 2.
Rosa, Rogério dos Santos. (2009) Reconstruindo Mapas Regulatórios Dinâmicos.
UFPE. Disponível em: < www.cin.ufpe.br/.../ReconstruindoMapas-Rogerio.ppt >.
Acesso em: 13.10.2012.
Santos, André Vinícius. (2005) Marcação de Palavras da Língua Portuguesa Baseado
em Modelos Ocultos de Markov. Pelotas. Disponível em: <
http://www.rocha.c3.furg.br/arquivos/download/marcador-pos-andre-vinicius-
2005.pdf >. Acesso em: 11.10.2012.
Toscani, L. V; Veloso, P.A.S. (2001) Complexidade de Algoritmos. Porto Alegre:
Instituto de Informática da UFRGS. Editora Sagra Luzzatto.
Zadrozny, Bianca. (2008) Processamento de Estatístico de Linguagem Natural. UFF.
Disponível em: <http://www.ic.uff.br/~bianca/peln/>. Acesso em: 01.10.2012.