Modelos de Markov
Modelos de Markov
Modelos de Markov
SEDE CUENCA
TÍTULO:
”ESTUDIO DE LOS MODELOS OCULTOS DE MARKOV
Y DESARROLLO DE UN PROTOTIPO PARA EL
RECONOCIMIENTO AUTOMÁTICO DEL HABLA”
AUTORES:
Diana Xismenia Macas Macas
Willian Alfonso Padilla Pineda
DIRECTOR:
Ing. Vladimir Robles
Willian Padilla
Diana Macas
C E RT I F I C A C I Ó N :
Certifica:
vii
D E D I C AT O R I A
Esta tesis se la dedico a mi Dios quién supo guiarme por el buen camino,
darme fuerzas para seguir adelante y no desmayar en los problemas
que se presentaban, enseñándome a encarar las adversidades sin perder
nunca la dignidad ni desfallecer en el intento.
A mis padres, aunque mi padre ya no está presente en este mundo
ellos siempre creyeron en mí y porque me sacaron adelante, dándome
ejemplos dignos de superación y entrega, porque en gran parte gracias
a ustedes, hoy puedo ver alcanzada mi meta, ya que siempre estuvieron
impulsándome en los momentos más difíciles.
A ti querida madre Marcela: como no agradecerte porque todo este
triunfo es tuyo, por haberme apoyado en todo momento, por tus conse-
jos, valores, por la motivación constante que me ha permitido ser una
persona de bien, pero más que nada, por su amor. Porque el orgullo
que sientes por mí, fue lo que me hizo ir hasta el final.
A mi hija Stephany por estar siempre presente, acompañándome
para poderme realizar quien ha sido y es mi motivación, inspiración y
felicidad.
Hermanos como no darles gracias por haber fomentado en mí el
deseo de superación y el anhelo de triunfo en la vida.
A todos, espero no defraudarlos y contar siempre con su valioso
apoyo, sincero e incondicional.
ix
AGRADECIMIENTOS
xi
AGRADECIMIENTOS
Son muchas las personas que han formado parte de mi vida profesio-
nal a las que me encantaría agradecerles su amistad, consejos, apoyo,
ánimo y compañía en los momentos más difíciles de mi vida.
Algunas están aquí conmigo y otras en mis recuerdos y en mi cora-
zón, sin importar en donde estén quiero darles las gracias por formar
parte de mí, por todo lo que me han brindado y por todas sus bendi-
ciones.
Para cada una de esas personas presentes o no: Muchas gracias y que
Dios siempre este con ustedes.
xiii
ÍNDICE GENERAL
i introducción 1
1 introducción 3
1.1 Antecedentes 3
1.1.1 Técnicas más utilizadas aplicadas al Reconoci-
miento de Habla 5
1.2 Objetivos 7
1.2.1 Objetivo General 7
1.2.2 Objetivos Específicos 7
1.3 Alcance 8
iv diseño de un prototipo 53
4 diseño del prototipo 55
4.1 Análisis del problema a resolver 55
4.2 Diseño del plan de experimentación 55
xv
xvi Índice general
v resultados y discusión 97
5 resultados y discusión 99
5.1 Ejecución del plan de experimentación 99
5.2 Análisis de resultados 101
5.3 Especificación de mejoras planteadas a la experimenta-
ción 106
Conclusiones 109
Recomendaciones 111
vi anexos 117
a anexos 119
b anexos 125
ÍNDICE DE FIGURAS
xvii
Figura 45 Proceso de experimentación del reconocimiento
de palabras 99
Figura 46 Ejecución de la herramienta Julius 100
Figura 47 Reconocimiento de una palabra mediante Julius 100
Figura 48 Pruebas continuas mediante Julius 101
Figura 49 Nivel de reconocimiento de voz obtenido en las
pruebas realizadas 103
Figura 50 Nivel de Reconocimiento de Palabras No entre-
nadas 104
Figura 51 Resultado de pruebas con palabras no entrena-
das 105
Figura 52 Interfaz de HSlab 123
Figura 53 Julius Información 126
ÍNDICE DE CUADROS
xviii
Parte I
INTRODUCCIÓN
INTRODUCCIÓN 1
1.1 antecedentes
3
4 introducción
• Redes Neurales:
Las redes neuronales son sistemas compuestos por estructuras de
procesamiento que operan en paralelo.
Estas obtienen el conocimiento por medio de un proceso de apren-
dizaje y para proceder a realizar el almacenamiento de la informa-
ción se utiliza los pesos sinápticos o conexiones interneuronales.
Estas redes neuronales poseen grandes ventajas entre la cuales
tenemos la capacidad de aprendizaje, tolerancia ante fallos y
6 introducción
1.2 objetivos
1.3 alcance
M O D E L O S O C U LT O S D E M A R K O V
M O D E L O S O C U LT O S D E M A R K O V 2
2.1 introducción
13
14 modelos ocultos de markov
Denotación:
– Estado: S = {S1 , S2 , S3 , ......, Sn }
– Estados en el tiempo: t como qt .
Denotación:
– Símbolo de observación: V = {V1 , V2 , ......, VM }
– Observación en tiempo: t, Ot V.
• A = {aij }: Matriz de transición de probabilidades, donde aij es
la probabilidad de que se de la transición desde el estado i al
estado j.
Denotación:
aij = P(qt = Sj | qt−1 = Si ), 1 6 i, j 6 N, 2 6 t 6
T , aij > 0 ∀ij
para todo i, j. En los MOM general, se tiene que aij = 0 para uno
o más parejas de valores (i, j).
X
N
aij = 1 ∀i (2.2)
i=1
Denotación:
tal que
X
k
bj (k) = 1, 16j6N (2.5)
k=1
Denotación:
tal que
X
N
πi = 1 (2.8)
i=1
O = O1 , O2 , ........, ..OT
Por lo tanto, un modelo oculto de Markov se describe como:
h = (A, B, π)
t : T iempo.
x(t) : Variable aleatoria.
Px : Probabilidad de esado asociado.
Denotación:
Siendo:
Según la naturaleza del parámetro t, los procesos de tipo Markov pueden ser:
a11 a12 · · · a1j ···
a
21 a22 · · · a2j ···
P= (2.12)
.. ..
. .
ai1 ai2 ··· aij ···
Entre las matrices estocásticas nos podemos encontrar con que estas
pueden ser de los siguientes tipos [13][23]:
20 modelos ocultos de markov
2.4 arquitectura
En este tipo de MOM solo se podrán dar las transiciones hacia delante,
esto se da debido a que mientras el índice del tiempo t va avanzando,
también lo hace el índice de estados. De igual forma, también se podría
dar el caso que se quede en el mismo estado, este es muy utilizado
para modelar las señales que varían con el tiempo como son la voz.
La probabilidad para este tipo se representa de la siguiente manera:
aij = 0 ∀j<i )
Esto significa que es sistema no va tener transiciones hacia atrás
o producirse una transición hacia un estado con un índice menor al
actual.
2.5.2 Ergódicos:
X
P(O | λ) = πq1 bq1 (O1 )aq1 q2 bq2 (O2 ) · · · aqT −1qT bqT (OT )
q1 ,q2 ,....qT
(2.13)
2. Inducción:
X
N
" #
αt+1 (j) = αt (i)aij bj (Ot+1 ), t = 1, 2, ..., T =1, j = 1, 2, ..., N
i=1
(2.16)
3. Finalización:
X
N
P(O | λ) = αT (i) (2.17)
i=1
2. Inducción:
X
N
βt (i) = aij bj (Ot+1 )βt+1 (j), t = T − 1, T − 2, ..., 1, i = 1, 2, ...N
j=1
(2.20)
3. Finalización
X
N
P(O | λ) = βt (i)πi bi (o1 )
i=1
Algoritmo Viterbi
Primeramente se procede a definir la ecuación 2.21 la cual permitirá
encontrar la secuencia de estados óptima Q = q1 , q2 , ..., qT , dada una
secuencia de observaciones O = O1 , O2 , ..., OT y un modelo λ:
ψ1 (i) = 0 (2.24)
2. Recursión:
δt (j) = máx δt−1 (i)aij · bj (Ot ), t = 2, 3, ......, T , j = 1, 2, ....., N
i=1,2,......,N
(2.25)
ψt (j) = arg máx δt−1 (i)aij , t = 2, 3, ...., T , j = 1, 2, ...., N (2.26)
i=1,2,..N
3. Finalización:
N
X
γt (i) = ξt (i, j) (2.32)
j=1
TX
−1
γt (i, j) = número esperado de transiciones desde Si (2.33)
t=1
TX
−1
ξt (i, j) = número esperado de transiciones desde el estado Si al estado Sj
t=1
(2.34)
númeroesperadodetransicionesdesdeelestadoSi conelsı́mboloVk
āij = (2.37)
númeroesperadodevecesenelestadoSj
_ nij
aij = , i, j = 1, 2, ...., N (2.38)
X
N
nik
k=1
_ ujk
bj (k) = , j = 1, 2, ...., N, k = 1, 2, ..., K (2.39)
X
N
nij
i=1
1. Biociencias
• Clasificación automática de electrocardiogramas.
• Análisis de arritmia cardiaca.
• Representación de la actividad neuronal de las cortezas vi-
suales de simios usando diferentes estímulos visuales.
• Restauración de las grabaciones de corrientes fluyendo desde
un solo canal de iones en una membrana celular.
• Modelado de series de tiempo de la cantidad de ataques
epilépticos.
• Modelado de la secuencia de la cantidad de movimiento de
un feto de cordero en útero a través de ultrasonido.
• Modelado estadístico, búsquedas en bases de datos y alinea-
ción de múltiples secuencias de estructuras de proteínas.
• Detección de segmentos homogéneos en secuencias de DNA.
• Aprendizaje de filogenias no singulares.
• Modelo mutagenético longitudinal de la secuencia HIV.
• Análisis a gran escala de genoma.
• Aplicaciones en la biología computacional.
• Detección de anomalías en la carga de un procesador.
2.7 aplicaciones de mom 27
2. Epidemiología y Biométrica
• Modelado de la secuencia de comportamiento de animales
bajo observación.
• Análisis de series de tiempo de homicidios relacionados con
disparos de armas de fuego y suicidios en Ciudad del Cabo,
África del Sur, así como de series de tiempo de nacimientos.
3. Tratamiento de imágenes
• Clasificación de texturas.
• Técnicas de representación de formas.
• Clasificación de vehículos militares en secuencias de video.
• Reconocimiento automático de palabras clave en documentos
pobremente impresos.
• Clasificación de imágenes.
• Análisis de imágenes.
• Reconocimiento de objetos en tercera dimensión.
• Reconocimiento de gestos.
• Extracción de información importante de partidos de béisbol.
• Análisis de la estructura de un video de fútbol.
• Reconocimiento dinámico de expresiones faciales.
• Clasificación automática de huellas dactilares.
6. Comunicación
28 modelos ocultos de markov
7. Informática
• Detección de intrusos.
• Modelado de interacción humano-computadora.
• Clasificación del tráfico de red.
• Detección de ataques de red en varias etapas.
• Tratamiento de la pérdida de paquetes para voz sobre IP.
• Codificación.
• Modelado del retraso en Internet.
9. Control y Optimización
• Análisis de problemas de control sensibles al riesgo.
10. Climatología
• Modelar relaciones espacio-temporales entre precipitación
pluvial en una serie de sitios y patrones atmosféricos sinóp-
ticos.
• Modelado de la persistencia hidroclimática.
• Segmentación de series de tiempo hidrológicas y ambienta-
les.
11. Econometría
• Medida de la probabilidad del ciclo de punto de quiebre de
un negocio.
• Aplicaciones en la venta de bienes raíces.
• Aplicaciones en las series de retorno diario.
• Modelado de series de tiempo de retorno financieras.
12. Otros
• Representación de habilidades humanas para la tele-operación
del sistema robótico de una estación espacial.
2.8 modelo oculto de markov para la detección automática del habla 29
Probabilidades de transición
X
m
pij = 1 (2.42)
j=1
p11 p12 ··· p1m
p
21 p22 ··· p2m
T = [pij ] .
.. .. .. ..
. . .
pm1 p2m · · · pmm
(n)
Probabilidad de transición en n pasos pij
(n)
pij es la probabilidad condicional de que la variable aleatoria X,
empezando en el estado i se encuentre en el estadoj después den pasos,
y se expresa de la siguiente manera [32]:
(n)
pij = P(Xn = j | X0 = i)
(n)
X
m
pij = P(Xn = j, Xn−1 | X0 = i)
k=1
(n)
X
m
pij = P(xn = j, Xn−1 = k | X0 = i)
k=1
(n)
X
m
pij = P(xn = j | Xn−1 = k | X0 = i)P(Xn−1 = K | X0 = i)
k=1
(n)
X
m
pij = P(xn = j | Xn−1 = kP(Xn−1 = K | X0 = i)
k=1
(n)
X
m
(1) (n−1)
X
m
(n−1) (1)
Pij = Pkj Pik = Pik Pkj (2.44)
k=1 k=1
(1) (1)
[p2ij ] = [pij pkj ] = T 2 (2.45)
[pn
ij ] = T
n
(2.46)
Estado absorbente
pij = 1
en la i-ésima fila de T .
Estado recurrente
32 modelos ocultos de markov
Es un estado tal, que una vez que el proceso ha estado en él, existe la
seguridad de que volverá.
(n)
fj =Probabilidad de que la primera visita al estado Ej ocurra en la
etapa n.
(n)
pjj =Probabilidad de que se produzca un retorno en el n-ésimo
paso.
Podemos deducir que:
(1) (1)
pjj = fj
(n) (n)
X
n−1
(r) (n−r)
pjj = fj + fj pjj (2.48)
r=1
(1) (1)
fj = pjj
(n)
X
n−1
(r) (n−r)
fn
j = pjj − fj pjj (2.49)
r=1
∞
X (n)
fj = fj (2.50)
n=1
cadena por el estado j, saliendo del estado i, sea igual a n, con n > 1,
quedando:
(n)
fij = P(Xn = j, Xn−1 6= j, ...., X1 6= j | X0 = i) (2.51)
Entonces,
(1)
fij = P(X1 = j | X0 = i) = pij
(2
X X (1)
fij = P(X2 = j, X1 6= j | X0 = i) = P(X2 = j, X1 = k | X0 = i)) = pik fkj
k6=j k6=j
..
.
(n)
X (n−1)
fij = pik fkj (2.52)
k6=j
∞
X (n)
fij = fij (2.53)
n=0
Estado transitorio
∞
X (n)
fj = fj <1 (2.54)
n=1
Cadenas irreducibles
34 modelos ocultos de markov
Conjuntos Cerrados
Para que sea un conjunto cerrado se dan condiciones que son:
Cadenas Ergódicas
Una cadena ergódica describe de forma matemática un proceso en el
cual es posible avanzar desde un estado hasta cualquier otro estado, no
es necesario que esto se dé en un sólo paso, pero debe ser posible para
que cualquier resultado sea logrado independientemente del estado
presente.
Distribuciones estacionarias
Sea E el conjunto de estados de una cadena de Markov con matriz
de transición T. Una distribución p = [pi ] donde i ∈ E se dice que es
estacionaria o de equilibrio si
p = pT (2.56)
X
πj = πi Tij (2.57)
i∈E
Teorema
Dada la matriz de transición T de una cadena de Markov finita,
aperiódica e irreducible con m estados, existe, entonces una única
solución al sistema de ecuaciones
X
m
πj = πi Tij (2.58)
i=1
P
para todo j = 1, ..., m, de modo que mi=1 πi = 1.
Además, la solución viene dada por
(n)
πi= limn→∞ Tij (2.59)
2.8 modelo oculto de markov para la detección automática del habla 35
(n) 1
πi= limn→∞ Tij = (2.60)
uj
Observaciones
Esto indica que cuanto mayor es el tiempo medio de recurrencia
del estado j, menor es la probabilidad de que nos encontremos en ese
estado j, cuando pase un tiempo suficientemente grande.
Por otro lado, uj se puede calcular como
∞
X (n)
uj = nfj (2.61)
n=1
P∞ = limn→∞ Pm (2.62)
(n)
πj = limn→∞ Pij (2.63)
(n)
limn→∞ Pij =0 (2.64)
36 modelos ocultos de markov
∀j transitorio.
∞
X (k)
fij = fij (2.66)
k=0
Ejemplo
Sea N(t), t > 0, un proceso de Poisson con tasa l, y sea Yn una cadena
de Markov discreta con probabilidad de transición, digamos, u(i, j).
Este proceso definido como Xt = YN(t) es una cadena de Markov
en tiempo continuo, podemos decir, Xt procede a realizar un salto de
acuerdo a u(i, j) en cada llegada de N(t).
como N(t) se distribuye como una Poisson con media lt , tiene la forma
2.8 modelo oculto de markov para la detección automática del habla 37
∞
X (λt)n n
pt (i, j) = e−λt u (i, j)
n!
n=0
X
ps+t (i, j) = ps (i, k)pt (k, j)
k
pt (i, j)
q(i, j) = lı́m
t→0 t
el cual se interpreta como la intensidad con que la cadena pasa de i
a j.
X
pt+h (i, j) = ph (i, k)pt (k, j)
k
ph (i, j)
q(i, j) = lı́m
h→0 h
para i 6= j, y operando, se presenta la siguiente relación:
38 modelos ocultos de markov
0 X
pt (i, j) = q(i, k)pt (k, j) − λi pt (i, j)
k6=i
q(i, j) Si j 6= i
Q = (i, j) =
−λ Si j = i
Probabilidades límite32
q(i, j) Si j 6= i
Q = (i, j) =
−λ Si j = i
P
donde li = j6=i = q(i, j) es la tasa total de transiciones a partir de i.
Se tiene que π es una distribución estacionaria si sólo si pQ = 0.
Esto se puede ver de manera intuitiva, sustituyendo en la condición
anterior el valor de Q, de mod que la condición pQ = 0 queda como
X
π(k)q(k, j) = π(j)λj
k6=j
2.8 modelo oculto de markov para la detección automática del habla 39
Ejemplo
modelo de markov del clima
Estado 1 – Lluvioso.
Estado 2 – Nublado.
Estado 3 – Soleado.
Permanencia en un estado
Gracias al modelo, también podemos responder a la pregunta: ¿cuál
es la probabilidad de que el sistema permanezca en el mismo estado
durante exactamente d muestras?
40 modelos ocultos de markov
∞
X ∞
X 1
d̄i = d · pi (d) = d · (aii )d−1 · (1 − aii ) =
1 − aii
d=1 d=1
1 1
d¯3 = = =5
1 − a33 1 − 0 08
Parte III
S E L E C C I Ó N D E H E R R A M I E N TA S
S E L E C C I Ó N D E H E R R A M I E N TA S 3
3.1 introducción
• Problema de entrenamiento.
• Problema de evaluación.
• El algoritmo de K-medias.
45
46 selección de herramientas
• Unix
• Linux
• Windows XP
• DOS.
• Algoritmo de Viterbi
• Algoritmo Forward-Backward.
Sphinx
El Sphinx decoder
Comparada con las otras herramientas, esta posee una gran cantidad
de algoritmos, los cuales nos van a permitir realizar un entrenamiento
con mayor precisión debido a que trabaja mediante la estadística de
probabilidad, además nos permite crear modelos de acuerdo a la pala-
bra que nosotros queramos entrenar.
DISEÑO DE UN PROTOTIPO
DISEÑO DEL PROTOTIPO 4
Dentro de este capítulo vamos a detallar el proceso de desarrollo de
nuestro prototipo, tomando en cuenta las diferentes fases para llegar a
su conclusión, ya que se emplearon dos herramientas a más de HTK,
como son Julius y clases de Java para la adaptación del sistema completo
para el usuario final.
En primera instancia se detallarán todos los pasos relacionados con
la configuración y diseño en HTK, es decir, procesos y utilitarios em-
pleados.
De igual manera se explicará el uso de Julius, pues se trata de una
herramienta que nos brinda mucha ayuda para el funcionamiento en
tiempo real, de igual manera se indicará su modo de trabajo, paráme-
tros, compatibilidad, etc.
Finalmente, mediante el lenguaje de programación Java, podremos
adaptar el reconocimiento de voz a un prototipo con funciones específi-
cas para el control del ordenador.
57
58 diseño del prototipo
Procedimientos de la experimentación
Estas muestras han sido revisadas una a una, pues se requiere que
todas tengan una calidad aceptable, ya que si son grabaciones de baja
calidad el sistema presentará confusión al momento del reconocimiento.
Grabación de palabras
Para este paso inicial hemos utilizando la herramienta HSLab, puesto
que en primer lugar debemos grabar muestras de voz para el entrena-
miento posterior.
En nuestro caso fueron tomadas muestras de voz de las siguientes pa-
labras: Clic, Arriba, Abajo, Derecha, Izquierda, Enter, Siguiente, Teclado,
Cerrar, Gracias.
Estas fueron las palabras de las cuales se tomaron un número de
grabaciones que oscila entre 20 y 50 muestras de cada una para nuestro
corpus de entrenamiento, todas fueron grabadas de la misma manera,
como se indica en la Figura 10, es decir:
f[Hz]
f[mel] = 1125ln 1 + (4.1)
700
• Número de estados
Entrenamiento, Inicialización
Dentro de este proceso se realizan pasos para “inicializar” los valores
de nuestros modelos, ya que cuando se definen los modelos ocultos de
Markov para cada palabra, se impusieron o definieron variables con
media cero y varianza uno.
Y estos valores van a ser modificados tomando en cuenta los mfcc.
HTK tiene dos herramientas para realizar esta tarea: HInit y HCompV.
HInit realiza una inicialización de los modelos por alineación en el
tiempo de los datos de entrenamiento con el algoritmo de Viterbi.
Entrenamiento, Re-estimación
En la fase de entrenamiento se debe re-estimar e iterar los valores
principales de los HMM, con su inicialización previa.
Este proceso se puede decir que es el entrenamiento de los modelos
tomando en cuenta su inicialización y los vectores de coeficientes
cepstrales en la frecuencia de mel, generados inicialmente.
Este proceso HTK realiza con la herramienta HRest y se lo puede
realizar las veces que se desee, obviamente utilizando la salida la Re-
estimación N-1 como entrada para la Re-estimación N.
El proceso de re-estimación se lo puede explicar básicamente como un
proceso que se encarga de las probabilidades y variación de parámetros
de los HMM definidos.
Compilación de la Gramática
HTK también facilita una herramienta para realizar una compilación de
nuestra gramática, la herramienta utilizada es HParse, que genera un
archivo con extensión “slf” que equivale a la red gramatical, el objetivo
de la cual es establecer las especificaciones descritas en la gramática.
Dado que nuestra gramática es simple, pues tenemos el objetivo de
reconocer un solo comando de voz por cada orden, entonces nuestra
red quedaría definida como se indica en la figura 17.
67
68 diseño del prototipo
Archivo de configuración
El archivo de configuración es un archivo de texto que contiene pa-
rámetros que establecen el modo de configuración y trabajo de las
herramientas según se requiera.
Ventana de Hamming
Las funciones ventana son funciones matemáticas utilizadas general-
mente en el análisis y procesamiento de señales, que nos permite aislar
4.4 diseño del prototipo 71
Coeficiente de preénfasis
El preénfasis es el incremento del nivel de altas frecuencias de audio
en proporción directa al aumento de amplitud del ruido en dichas
frecuencias, antes de la modulación, con el fin de mantener una relación
constante a través de toda la banda de transmisión [8].
El filtro perceptual
Es un sistema de compresión con pérdida, esto quiere decir que el
sonido original y el comprimido no son exactamente iguales. Estas pér-
didas tienen en cuenta el funcionamiento del oído humano, de tal forma
que aunque los sonidos no son iguales se perciben como si lo fuesen [5].
Topología
Descripción [33]:
Proceso de Grabación
Como mencionamos en el plan de experimentación, lo primero que
se debe hacer es obtener nuestra base de datos de entrenamiento o
corpus. Para ello podemos utilizar una herramienta que nos brinda
HTK, llamada HSLab.
La sintaxis de utilización de esta herramienta es muy parecida a
todas las herramientas HTK, es decir, se hace la llamada al nombre
de la herramienta, seguida de los parámetros necesarios y operación a
realizar.
Las palabras a grabar para muestro prototipo son las siguientes: Si-
guiente, derecha, izquierda, abajo, arriba, enter, cerrar, teclado, gracias.
Para cada una de estas palabras debemos hacer una cantidad N de
grabaciones, ahora de esto va a depender mucho la eficacia de recono-
cimiento como en cualquier método de entrenamiento, mientras mayor
número de muestras exista en nuestro corpus de entrenamiento, mayor
será el porcentaje de efectividad de reconocimiento.
HSLab nombre.sig
Donde:
• - C archivo.conf → -C, este parámetro indica que se va a utilizar
ciertas configuraciones para la grabación, seguidamente viene el
nombre del archivo de configuración.
• nombre.sig → este parámetro simplemente nos indica el nombre
con el que va a guardar nuestra muestra y consecuentemente el
nombre de las etiquetas realizadas en nuestros archivo de voz.
Una vez ejecutada la herramienta, se presentará una interfaz
gráfica de la siguiente manera:
Procedemos a grabar cada una de las palabras y las veces que se
hayan establecido, mediante el botón “rec” y para terminar la grabación
4.4 diseño del prototipo 73
La etiqueta de silencio debe ser la misma para todas las palabras (en
nuestro caso se ha definido con el nombre de “sil”). Ahora procedemos
a guardar las etiquetas con la opción “Save”, nos dará la posibilidad de
cambiar el nombre de las etiquetas de cada grabación que se guarda-
rá en un archivo de extensión “.lab”, recomendamos dejar el nombre
estándar pues de esta manera podremos saber a qué archivo de voz
(.sig) pertenece cada archivo de etiquetas (.lab). Seguido del nombre,
presionamos la tecla entrar, para aceptar la opción de guardado.
Y en ese momento esto nos generará dos archivos: uno que es nuestro
archivo de audio “nombre.sig” y nuestro archivo de etiquetas “nom-
bre.lab”, los cuales nos servirán como paso inicial y básico para procesos
posteriores.
74 diseño del prototipo
Archivo “lista.txt”
datos/sig/aw0.sig datos/mfcc/aw0.sig
datos/sig/aw1.sig datos/mfcc/aw1.sig
datos/sig/aw2.sig datos/mfcc/aw2.sig
datos/sig/aw3.sig datos/mfcc/aw3.sig
datos/sig/aw4.sig datos/mfcc/aw4.sig
datos/sig/aw5.sig datos/mfcc/aw5.sig
datos/sig/aw6.sig datos/mfcc/aw6.sig
datos/sig/aw7.sig datos/mfcc/aw7.sig
datos/sig/aw8.sig datos/mfcc/aw8.sig
..........................
75
76 diseño del prototipo
• ∼ h "clic" < BeginHMM > (...) < EndHMM >→ contiene toda
la definición del HMM llamado "clic".
aN1 · · · aNN
datos/mfcc/aw0.mfcc
datos/mfcc/aw1.mfcc
datos/mfcc/aw2.mfcc
datos/mfcc/aw3.mfcc
datos/mfcc/aw4.mfcc
datos/mfcc/aw5.mfcc
datos/mfcc/aw6.mfcc
datos/mfcc/aw7.mfcc
datos/mfcc/aw8.mfcc
..........................
Una vez que corremos la línea de inicialización para cada uno de los
modelos, debemos fijarnos que no nos presente ningún error.
Luego de finalizado este proceso, encontraremos en el directorio de
salida nuevos archivos con el nombre especificado, estos serían nuestros
modelos inicializados, pues podríamos observar que su contenido ya
no es el mismo que el definido inicialmente.
Los archivos obtenidos con este último paso son de suma importancia,
ya que son los archivos principales que contienen nuestros modelos
entrenados.
Ahora, para establecer una forma de prueba para reconocimiento
podemos aprovechar que HTK nos brinda la posibilidad de trabajar con
herramientas de prueba y reconocimiento. Para ello debemos realizar
pasos adicionales, que se describen a continuación.
Gramática
La gramática define la estructura de reconocimiento del sistema, a
continuación se indica la estructura utilizada para nuestro sistema.
En primer lugar definimos una variable con los valores posibles que
se nos puede presentar, el signo “$” indica que estamos definiendo
una variable que en nuestro caso se llama “funcion” y esta se iguala
a sus posibles valores, es decir: “derecha”, “izquierda”, “abajo”, etc.
separados con “|”, que indica cada una de las diferentes alternativas que
puede tomar nuestra variable “funcion”, e indicamos que ha finalizado
la orden con punto y coma “;”.
A continuación definimos una línea en donde establecemos la forma
que el sistema va a reconocer.
Las llaves denotan cero o varias repeticiones, es decir “sil”, que
representa al silencio (definido en el diccionario) se puede repetir una
o más veces.
Los corchetes “[ ]” alrededor de “$funcion” significa cero o alguna
ocurrencia.
Y todo esto dentro de paréntesis, indicando que es una sola cadena.
Diccionario
El diccionario es un archivo de texto en el cual se definen las variables
a utilizar, es decir, nuestros modelos principalmente. A continuación se
describe el archivo utilizado para nuestro prototipo.
Red Gramatical
La red gramatical es un tipo de archivo con extensión “slf” que se crea
mediante una herramienta HTK, llamada HParse.
Para nuestro prototipo lo realizamos de la siguiente manera, simple-
mente con dos parámetros:
sil
derecha
izquierda
arriba
abajo
teclado
inicio
gracias
clic
enter
cerrar
siguiente
La Figura 32 nos indica que el sistema está listo para recibir las
muestras de voz de entrada para empezar el reconocimiento.
Entonces, presionamos la tecla “Enter” ,pronunciamos una de las
palabras entrenadas, y nuevamente otro “Enter” para indicar que hemos
terminado la grabación.
4.4 diseño del prototipo 83
Proceso de acoplamiento
Para completar lo requerido en nuestro prototipo, hemos decidido
trabajar con Julius, por lo que obviamente va a existir un proceso in-
termediario entre HTK y el mismo a fin de acoplar las características
de cada una de ellas y obtener el resultado planteado para nuestro
prototipo.
-dfa wilo.dfa
-v wilo.dict
-h hmmdefs3
-hlist tiedlist
-demo
-input mic
arriba
izquierda
gracias
teclado
clic
cerrar
enter
derecha
abajo
siguiente
sil
hola
inicio
Diccionario Julius
Contenido del archivo “wilo.voca”
% NS_B
<s> sil
% NS_E
</s> sil
% FUNCION
derecha derecha
abajo abajo
izquierda izquierda
arriba arriba
siguiente siguiente
clic clic
cerrar cerrar
enter enter
gracias gracias
teclado teclado
hola hola
inicio inicio
%NS_B
<s> sil
Para el silencio final es el mismo proceso, ya que se trata del mismo
modelo de silencio, como observamos a continuación.
%NS_E
</s> sil
El siguiente párrafo lo que describe es la variable principal que se va
tomar en cuenta para el reconocimiento. Dicho párrafo consta de dos
columnas: la de la izquierda es el nombre de la variable para Julius y
la de la derecha es el nombre del modelo que representa, es decir, el
4.4 diseño del prototipo 87
%FUNCION
derecha derecha
abajo abajo
izquierda izquierda
arriba arriba
siguiente siguiente
clic clic
cerrar cerrar
enter enter
gracias gracias
teclado teclado
hola hola
inicio inicio
Gramática Julius
Archivo “wilo.grammar”
mkdfla.pl wilo
Proceso de creación del archivo que contiene las definiciones de los HMM
entrenados.
Creamos un archivo nuevo con cualquier editor de texto.
~o
<STREAMINFO> 1 39
<VECSIZE> 39
<NULLD><MFCC_D_A_0><DIAGC>
A continuación podemos observar un ejemplo del MOM entrenado
con HTK, de una de las palabras (abajo)
Modelos Basura
Dentro del proceso de reconocimiento existe un inconveniente que quizá
no se lo tome en cuenta en el inicio del entrenamiento HTK: cuando
se realizan las pruebas de reconocimiento mediante el micrófono con
alguna palabra no entrenada, puede existir confusión por parte del
sistema y reconocer la palabra que mas se asemeje a la pronunciada, es
decir, existirá un reconocimiento incorrecto.
Es importante mencionar que si no se ha pronunciado palabra del
diccionario no debería dar como respuesta alguna de las palabras
entrenadas.
Para este caso hemos encontrado de cierto modo una solución, se trata
de realizar el entrenamiento del mayor número de palabras posibles,
es decir, crear modelos que nos reduzcan el porcentaje de error que se
puede presentar y se los ha denominado “modelos basura”.
Estos modelos nos ayudarán a que si se pronuncia alguna palabra de
las que no nos interesa para nuestro prototipo, va a reconocer alguna
de nuestros “modelos basura”, resultando que no va a afectar a la
funcionalidad de nuestro prototipo.
Obviamente, mientras mayor sea el número de “modelos basura”
creados, menor será la probabilidad de error o confusión cuando se
pronuncien palabras no funcionales para nuestro prototipo.
Ejecución Julius
Una vez que tenemos todos los parámetros necesarios para un correcto
funcionamiento mediante Julius, su llamada mediante el terminal es
4.4 diseño del prototipo 91
Julius –C configuracion.jconf
Donde:
Julius –C configuracion.jconf
Algoritmo 4.1
try {
Process p = Runtime.getRuntime().exec ("firefox.exe");
}
catch (Exception e){
Algoritmo 4.2
try {
Process p = Runtime.getRuntime().exec ("Julius -C
configuracion.jconf ");
}
catch (Exception e) {
/* Excepción en caso de error. */
}
Clic izquierdo
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
Clic derecho
Para simular el evento del clic derecho simplemente se debe cambiar el
parámetro de los métodos de la clase Robot, como podemos observar a
continuación:
robot.mousePress(InputEvent.BUTTON2_MASK);
robot.mouseRelease(InputEvent.BUTTON2_MASK);
Algoritmo 4.3
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_H);
robot.keyPress(KeyEvent.VK_O);
robot.keyPress(KeyEvent.VK_L);
robot.keyPress(KeyEvent.VK_A);
}
catch (AWTException e) {
e.printStackTrace();
}
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
De igual manera:
robot.keyPress(KeyEvent.VK_ENTER);
Sistema Final
Posee una interfaz gráfica sencilla, la cual sirve principalmente para ini-
ciar y terminar el proceso de reconocimiento, como podemos observar
en la siguiente Figura:
PALABRA FUNCIÓN
Derecha Movimiento del puntero del mouse hacia
la derecha de la pantalla
Izquierda Movimiento del puntero del mouse hacia
la izquierda de la pantalla
Arriba Movimiento del puntero del mouse hacia
la parte superior de la pantalla
Abajo Movimiento del puntero del mouse hacia
la parte inferior de la pantalla
Clic Simula un clic izquierdo del mouse
Cuadro 2: Palabras que simulan las funciones del Movimiento del Puntero
96 diseño del prototipo
Activa funciones
También existe la posibilidad de activar funciones, por ejemplo con
la palabra “Teclado”, se activarán las mismas palabras anteriores de
dirección pero esta vez con diferentes funciones .
PALABRA FUNCIÓN
Teclado Activa funciones del teclado (botones de dirección)
Derecha Simula tecla de dirección ”derecha”
Izquierda Simula tecla de dirección ”izquierda”
Arriba Simula tecla de dirección ”arriba”
Abajo Simula tecla de dirección ”abajo”
Escritura Activa la función de escritura
Teclado
También se han establecido órdenes que simulen ciertas teclas, con un
previo análisis hemos considerado que las siguientes son importantes
para un control básico.
PALABRA FUNCIÓN
Enter Simula la tecla ”Enter”, con la cual podemos tener acceso
a diferentes funciones dentro del sistema operativo.
Siguiente Simula la tecla ”Tabulador”, con la cual podemos
cambiar de opciones de distintas aplicaciones.
Salir Simula la conbinación de teclas ”Alt + F4”, con la cual
podemos salir de diferentesventanas, o aplicaciones.
Cuadro 4: Palbras que activan la función de ciertas teclas para el control del
S.O.
Otras funciones
De igual manera, se han establecido otras palabras que representen
nuevas funciones que nos pueden ser de ayuda al momento del control
del sistema operativo.
PALABRA FUNCIÓN
Gracias Termina la ejecución del prototipo
R E S U LTA D O S Y D I S C U S I Ó N
R E S U LTA D O S Y D I S C U S I Ó N 5
En este apartado describiremos la etapa final, detallando el esquema
de funcionamiento de nuestro prototipo completo, mediante el cual se
ha alcanzado los objetivos planteados inicialmente.
Asimismo hemos logrado realizar el prototipo con la mejor eficacia
posible, basándonos en la experiencia de práctica y pruebas.
También describiremos los resultados obtenidos, mediante los cuales
se hará una fácil observación de los niveles de respuesta en cuanto al
reconocimiento de nuestro sistema, esta parte será siempre importante
para medir lo que el sistema es capaz de realizar, mediante los procesos
del proyecto.
Finalmente, tomando como base lo anterior, se plantea el modelo de
mejoras que podríamos realizar al sistema, considerando que el objetivo
principal es explorar todas las potencialidades del reconocimiento
automático del habla a través de HMM.
101
102 resultados y discusión
Julius –C parametros.jconf
Precisión
A continuación se detalla una tabla con los valores de cada una de las
pruebas que han sido realizadas.
televisión si inicio
radio no Vladimir
botella si izquierda
universidad si inicio
pato no gato
proyecto no texto
esfero no perro
2 10 3
3 10 4
4 10 5
5 10 5
6 10 4
7 10 4
8 10 5
9 10 4
10 10 5
Estos dos aspectos deben ser tomados en cuenta al inicio del proceso,
ya que la base de datos de entrenamiento que debemos obtener es
primordial y el paso principal para la calidad de reconocimiento.
111
RECOMENDACIONES
113
BIBLIOGRAFÍA
115
116 Bibliografía
[17] LEE Akinobu. The Julius book. 17 de Mayo 2010. URL http://iij.
dl.sourceforge.jp/julius/47534/Juliusbook-4.1.5.pdf. (Ci-
ted on page 83.)
[40] YOUNG Steve y otros. The HTK Book, volume version 3.4 of
Cambridge University Engineering Department. Diciembre del 2005.
URL http://htk.eng.cam.ac.uk/docs/docs.shtml. (Cited on pa-
ges xvii, 62, 70, and 71.)
ANEXOS
ANEXOS A
proceso instalacion de htk en la plataforma gnu/linux
121
122 anexos
Estos son los paquetes que principalmente hemos verificado que son
necesarios o que comúnmente pueden ocasionar ciertos inconvenientes
anexos 123
al momento de la instalación.
cd htk
./configure –prefix=/usr/local
/usr/local/bin
Y posteriormente:
Para instalarlos.
/etc/profile
NUEVAVARIABLE=/usr/local/bin
Digitamos en la consola:
HSLab nombre.sig
pruebas y problemas
Ubuntu 8.10, 9.10, 10.4, 10.10, 11.4, 11.10, kubuntu 11.10 y fedora 16.
problemas encontrados:
Paso 1
Descargar el software de la página web oficial http://julius.sourceforge.
jp/en_index.php
Paso 2
Extraer en contenido del archivo descargado en un directorio específico.
Paso 3
Desde el terminal de Linux nos dirigimos a la ubicación del directorio
en el cual se ha realizado la extracción del archivo.
Paso 4
Estos pasos son similares al proceso de compilación de HTK.
./configure
sudo make
Paso 5
127
128 anexos