Upload
duongphuc
View
219
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD POLITÉCNICA DE MADRID
ESCUELA TÉCNICA SUPERIOR DE INGENIEROS
DE TELECOMUNICACIÓN
PROYECTO FIN DE CARRERA
Desarrollo de un segmentador
fonético automático
para habla expresiva basado en
modelos ocultos de Markov
JUAN CARMONA MARISCAL
Ingeniero de Telecomunicación
Madrid, 2012
UNIVERSIDAD POLITÉCNICA DE MADRID
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
ESCUELA TÉCNICA SUPERIOR DE INGENIEROS
DE TELECOMUNICACIÓN
PROYECTO FIN DE CARRERA
Desarrollo de un segmentador
fonético automático
para habla expresiva basado en
modelos ocultos de Markov
JUAN CARMONA MARISCAL
Ingeniero de Telecomunicación
Tutor del Proyecto
JUAN MANUEL MONTERO MARTÍNEZ
Doctor Ingeniero de Telecomunicación
2012
PROYECTO FIN DE CARRERA
Título: Desarrollo de un segmentador fonético automático
para habla expresiva basado en modelos ocultos de Markov.
Autor: Juan Carmona Mariscal
Tutor: Dr. Ingeniero Juan Manuel Montero Martínez
Departamento: Ingeniería Electrónica de la Escuela Técnica
Superior de Ingenieros de Telecomunicación de
Madrid de la Universidad Politécnica de Madrid
Grupo: Tecnología del Habla
MIEMBROS DEL TRIBUNAL
Presidente: D. Rubén San Segundo Hernández Firma:
Vocal: D. Juan Manuel Montero Martínez Firma:
Secretario: D. Roberto Barra Chicote Firma:
Suplente: D. Fernando Fernández Martínez Firma:
Fecha de Lectura:
Calificación:
AGRADECIMIENTOS
En primer lugar tengo que dar gracias a Juancho por su enorme
paciencia al explicarme tantas cosas acerca de un campo que de
entrada desconocía, por tantos viernes por la tarde que me ha dedicado
en exclusiva, y por la inmensa ayuda que me ha prestado a lo largo de
todo el proyecto.
Gracias a todos los compañeros y amigos que me han acompañado
durante la carrera, Javi, Cristina, Beatriz, Miriam, Rocío y tantos otros
que me han hecho esta etapa de mi vida más agradable y feliz; y en
especial a Rosi, por ser la que me animó a hacer este proyecto y por
haber estado siempre cerca de mí a lo largo de los años.
Gracias a Marta, por animarme siempre en casa a que termine este
proyecto, por querer compartir su vida conmigo, por el buen equipo que
hacemos, y sobre todo por creer en mí y hacerme sentir un hombre
capaz de conseguir cualquier cosa que me proponga.
Y dejo para el final a los más importantes. Gracias a mis padres, por
tantas noches en vela, por preocuparse de mí a todas horas, por darme
constantemente su confianza y apoyo, y por conseguir, a pesar de llevar
tantos años fuera, que con ellos me siga sintiendo como en casa. Con el
fin de mi carrera creen haber cerrado un ciclo, tras haber dejado a sus
cuatro hijos preparados para enfrentarse al mundo, pero en realidad me
queda tanto por aprender de ellos... Espero, si Dios me ayuda, poder
llegar algún día a ser tan buen padre como ellos lo han sido para mí.
RESUMEN
Una de las principales áreas de estudio dentro de las Tecnologías del Habla es
la síntesis de habla expresiva, puesto que las emociones pueden dotar de
naturalidad y variabilidad a la voz sintetizada. El uso de estrategias basadas
en la concatenación de unidades de voz pregrabada permite obtener una alta
calidad en la voz sintetizada si se dispone de múltiples versiones de cada
unidad, si bien son muy costosas debido a la necesidad de contar con un gran
conjunto de unidades segmentadas y etiquetadas con precisión. Una manera
de reducir los costes del segmentado y etiquetado manual es utilizar
herramientas de segmentación automática como la que se propone en este
proyecto. Las emociones alteran las principales características de la voz, por lo
que pueden tener una cierta influencia en el proceso de segmentación del
habla expresiva. Cuando se dispone de la transcripción fonética, uno de los
principales métodos para abordar el problema de la segmentación fonética
automática es el uso de técnicas basadas en los Modelos Ocultos de Markov
(Hidden Markov Models). Estas técnicas generan la segmentación automática
mediante la comparación recurrente entre los datos procedentes de la voz
grabada y la transcripción fonética de la locución a segmentar, por medio del
algoritmo de Viterbi. Nuestro sistema de segmentación se basará en los
Modelos Ocultos de Markov y se implementará mediante el uso de las
herramientas HTK (Hidden Markov Model Toolkit).
PALABRAS CLAVE
Segmentación automática de voz, habla expresiva, modelos ocultos de Markov,
HMM, HTK.
ÍNDICE DE CONTENIDOS
1. INTRODUCCIÓN ............................................................................................................................... 1
1.1 BREVE HISTORIA DE LAS TECNOLOGÍAS DEL HABLA............................................................................ 3
1.2 ESTRUCTURA GENERAL DE UN SISTEMA DE RECONOCIMIENTO Y SEGMENTACIÓN DEL HABLA ............ 7
1.3 ALGORITMOS DE EXTRACCIÓN DE CARACTERÍSTICAS DE VOZ ............................................................. 9
1.3.1 ANÁLISIS POR BANCO DE FILTROS DIGITALES .......................................................................... 10
1.3.2 TRANSFORMADA DISCRETA DE FOURIER ................................................................................. 11
1.3.3 PREDICCIÓN LINEAL ................................................................................................................ 12
1.3.4 ANÁLISIS CEPSTRAL ................................................................................................................ 13
1.3.5 PREDICCIÓN LINEAL PERCEPTUAL .......................................................................................... 16
1.4 LOS MODELOS OCULTOS DE MARKOV .............................................................................................. 17
2. SÍNTESIS DE VOZ Y SEGMENTACIÓN AUTOMÁTICA DE UNIDADES ..................... 20
2.1 LA SÍNTESIS DE VOZ .......................................................................................................................... 20
2.2 LA SÍNTESIS POR CONCATENACIÓN DE UNIDADES ............................................................................. 22
2.3 LA SEGMENTACIÓN AUTOMÁTICA DE UNIDADES ............................................................................... 24
3. EL HABLA CON EMOCIONES .................................................................................................... 27
3.1 EL CONCEPTO DE EMOCIÓN Y SUS FUNCIONES ................................................................................... 27
3.2 COMPONENTES DE LA EMOCIÓN ........................................................................................................ 30
3.3 LA EMOCIÓN Y SU EFECTO EN EL HABLA ........................................................................................... 31
3.3.1 EL PITCH ................................................................................................................................. 32
3.3.2 LA DURACIÓN.......................................................................................................................... 32
3.3.3 LA CALIDAD DE VOZ ................................................................................................................ 33
3.4 LA CLASIFICACIÓN DE LAS EMOCIONES ............................................................................................. 34
3.5 LAS EMOCIONES ESTUDIADAS CON NUESTRO SEGMENTADOR FONÉTICO AUTOMÁTICO ..................... 38
4. DESCRIPCIÓN DE LAS HERRAMIENTAS EMPLEADAS ................................................. 40
4.1 HTK ................................................................................................................................................. 40
4.1.1 FUNCIONAMIENTO GENERAL DE HTK ..................................................................................... 41
4.1.2 PARAMETRIZACIÓN CON HTK ................................................................................................. 45
4.1.3 CREACIÓN DE MODELOS DE MARKOV..................................................................................... 52
4.1.4 ENTRENAMIENTO DE LOS HMM .............................................................................................. 58
4.1.5 RED GRAMATICAL Y DICCIONARIO.......................................................................................... 63
4.1.6 RECONOCIMIENTO Y EVALUACIÓN DE RESULTADOS................................................................ 65
4.2 EL LENGUAJE DE SCRIPTS ......................................................................................................... 67
4.2.1 GESTIÓN DE ARGUMENTOS EN LOS PROCESOS POR LOTES ....................................................... 68
4.2.2 COMANDOS ESPECÍFICOS PARA PROCESOS POR LOTES ............................................................. 68
4.3 EL LENGUAJE PERL ..................................................................................................................... 75
4.3.1 ESTRUCTURA DEL LENGUAJE................................................................................................... 76
5. IMPLEMENTACIÓN DEL SEGMENTADOR: ESTRUCTURA DEL PROGRAMA Y
SUS SCRIPTS ........................................................................................................................................ 82
5.1 LA ESTRUCTURA DE DIRECTORIOS DEL SEGMENTADOR ................................................. 83
5.2 LOS SCRIPTS DEL SEGMENTADOR .......................................................................................... 86
5.2.1 FULL.BAT ................................................................................................................................ 87
5.2.2 EXPERIM.BAT .......................................................................................................................... 90
5.2.3 SETBD.BAT ............................................................................................................................. 92
5.2.4 PARAM.BAT ........................................................................................................................... 106
5.2.5 TRAIN_MONOPHONES.BAT .................................................................................................... 109
5.2.6 TRAIN_AUTO.BAT ................................................................................................................. 118
5.2.7 RECO_MONOPHONES.BAT ..................................................................................................... 122
5.2.8 RECO_GAUSS.BAT ................................................................................................................. 123
5.2.9 SEGM_MONOPHONES.BAT ..................................................................................................... 127
5.2.10 SEGM_GAUSS.BAT ............................................................................................................... 127
5.2.11 EVAL_MONOPHONES.BAT ................................................................................................... 131
5.2.12 EVAL_GAUSS.BAT ............................................................................................................... 131
5.3 SCRIPTS AUXILIARES ............................................................................................................... 133
5.3.1 LIMPIA.BAT ........................................................................................................................... 134
5.3.2 MI_TYPE.BAT ........................................................................................................................ 134
5.3.3 SUMMARY.BAT ...................................................................................................................... 135
5.4 PROGRAMAS EN PERL USADOS EN EL SEGMENTADOR ................................................... 136
5.4.1 GENPROTO.PER ..................................................................................................................... 137
5.4.2 BLANCOS2RETORNOS.PER ..................................................................................................... 140
5.4.3 MLF2FON.PER ....................................................................................................................... 140
5.4.4 MLF2C.PER ............................................................................................................................ 141
5.4.5 CUENTALINEAS.PER .............................................................................................................. 142
5.4.6 AUTOTRAIN.PER ................................................................................................................... 143
6. DESCRIPCIÓN DE LA BASE DE DATOS SES .................................................................... 145
6.1 LA BASE DE DATOS SES .................................................................................................................. 145
6.1.1 LAS FRASES CORTAS .............................................................................................................. 146
6.1.2 LOS PÁRRAFOS ...................................................................................................................... 147
6.2 LA GRABACIÓN DE LA BASE DE DATOS ............................................................................................ 148
6.3 ETIQUETADO Y MARCADO DE SES .................................................................................................. 149
6.4 LA BASE DE DATOS SES EN NUESTRO SISTEMA ............................................................................... 149
7. DESCRIPCIÓN DE LA BASE DE DATOS SEV.................................................................... 152
7.1 LA BASE DE DATOS SEV ................................................................................................................. 152
7.1.1 EL CONTENIDO DE VOZ DE LA BASE DE DATOS ...................................................................... 153
7.2 ETIQUETADO Y MARCADO DE SEV ................................................................................................. 154
7.3 LA BASE DE DATOS SEV EN NUESTRO SISTEMA .............................................................................. 155
8. EJECUCIONES Y RESULTADOS ............................................................................................ 158
8.1 ELECCIÓN DE LA VERSIÓN DE HTK ....................................................................................... 158
8.2 DETERMINACIÓN DEL NÚMERO ÓPTIMO DE ESTADOS, ITERACIONES Y GAUSSIANAS
............................................................................................................................................................. 160
8.3 COMBINACIONES DE COEFICIENTES .................................................................................... 170
8.4 COMBINACIONES DE FRASES Y PÁRRAFOS COMO GRUPOS DE ENTRENAMIENTO Y
EVALUACIÓN ................................................................................................................................... 179
8.5 SEGMENTACIÓN INTEREMOCIONES ..................................................................................... 184
8.6 SEGMENTACIÓN CON NORMALIZACIÓN CEPSTRAL ........................................................ 194
8.7 VARIACIÓN DEL NÚMERO DE CANALES .............................................................................. 198
8.8 VARIACIÓN DEL DESPLAZAMIENTO DE TRAMAS Y DEL TAMAÑO DE LA VENTANA
DE ANÁLISIS ..................................................................................................................................... 200
8.9 INCLUSIÓN DE FILTRADO ........................................................................................................ 204
8.10 DETERMINACIÓN DEL NÚMERO ÓPTIMO DE ESTADOS, ITERACIONES Y
GAUSSIANAS CON SEV ................................................................................................................... 207
8.11 COMBINACIONES DE COEFICIENTES CON SEV ................................................................ 211
8.12 SEGMENTACIÓN INTEREMOCIONES CON SEV ................................................................. 215
8.13 SEGMENTACIÓN CON EL LOCUTOR MASCULINO DE SEV ............................................. 220
8.14 SEGMENTACIÓN CON LA BASE DE DATOS UPC................................................................ 221
9. CONCLUSIONES Y LÍNEAS FUTURAS DE INVESTIGACIÓN ....................................... 224
9.1 CONCLUSIONES ............................................................................................................................... 224
9.1.1 CONCLUSIONES ACERCA DEL SISTEMA .................................................................................. 224
9.1.2 CONCLUSIONES ACERCA DE LOS EXPERIMENTOS REALIZADOS .............................................. 229
9.2 LÍNEAS FUTURAS DE INVESTIGACIÓN .............................................................................................. 235
10. BIBLIOGRAFÍA ........................................................................................................................... 237
11. PLIEGO DE CONDICIONES ................................................................................................... 241
11.1 CONDICIONES GENERALES ............................................................................................................ 241
11.2 CONDICIONES GENERALES A TODOS LOS PROGRAMAS .................................................................. 243
11.3 CONDICIONES GENERALES DE PRUEBA .......................................................................................... 243
11.4 RECURSOS MATERIALES ................................................................................................................ 244
11.5 RECURSOS LÓGICOS ...................................................................................................................... 244
12. PRESUPUESTO ........................................................................................................................... 245
12.1 PRESUPUESTO DE EJECUCIÓN MATERIAL ....................................................................................... 245
12.1.1 RELACIÓN DE SALARIOS ...................................................................................................... 246
12.1.2 RELACIÓN DE OBLIGACIONES SOCIALES .............................................................................. 246
12.1.3 RELACIÓN DE SALARIOS EFECTIVOS TOTALES ..................................................................... 246
12.1.4 COSTE DE LA MANO DE OBRA .............................................................................................. 247
12.1.5 COSTE TOTAL DE MATERIALES ............................................................................................ 247
12.1.6 IMPORTE TOTAL DEL PRESUPUESTO DE EJECUCIÓN MATERIAL ............................................ 248
12.2 IMPORTE DE EJECUCIÓN POR CONTRATA ....................................................................................... 248
12.3 HONORARIOS FACULTATIVOS ....................................................................................................... 249
12.4 IMPORTE TOTAL DEL PROYECTO ................................................................................................... 250
ANEXO 1. PROGRAMAS AJENOS EMPLEADOS ................................................................... 251
A.1.1 MACRO.EXE ................................................................................................................................ 251
A.1.2 COPIAMODELOS.EXE .................................................................................................................. 253
A.1.3 SCORE_MONO.EXE ...................................................................................................................... 259
ANEXO 2. FICHEROS DE CONFIGURACIÓN ......................................................................... 267
A.2.1 CONFIG_FILE_HCOPY : CONFIG_HCOPY_SES_MFCC_ .......................................................... 267
A.2.2 CONFIG_FILE_HCOPY : CONFIG_HCOPY_SES_PLP_ .............................................................. 268
A.2.3 CONFIG_FILE_HCOMPV : CONFIG_HCOMPV_MFCC_ ............................................................. 269
A.2.4 CONFIG_FILE_HCOMPV : CONFIG_HCOMPV_PLP_ ................................................................ 270
A.2.5 CONFIG_FILE_CMN : CONFIG_MFCC_CMN_CVN.CMN ............................................................ 270
A.2.6 CONFIG_FILE_CMN : CONFIG_PLP_CMN_CVN.CMN................................................................ 270
A.2.7 CONFIG_FILE_CVN : CONFIG_MFCC_CMN_CVN.CVN ............................................................. 270
A.2.8 CONFIG_FILE_CVN : CONFIG_PLP_CMN_CVN.CVN ................................................................. 271
A.2.9 CONFIG_FILE_TRAIN : CONFIG_TR_MFCC_ ........................................................................... 271
A.2.10 CONFIG_FILE_TRAIN : CONFIG_TR_MFCC_CMN_CVN ......................................................... 271
A.2.11 CONFIG_FILE_TRAIN : CONFIG_TR_PLP_ ............................................................................. 272
A.2.12 CONFIG_FILE_TRAIN : CONFIG_TR_PLP_CMN_CVN ............................................................. 272
ANEXO 3. TEXTOS DE LAS BASES DE DATOS EMPLEADAS ........................................ 274
A.3.1 BASE DE DATOS SES: PÁRRAFOS (R) ................................................................................. 274
A.3.2 BASE DE DATOS SES: FRASES (F) ........................................................................................ 275
A.3.3 BASE DE DATOS SEV: FRASES PROVENIENTES DE SES (F) ........................................... 276
A.3.4 BASE DE DATOS SEV: FRASES PROVENIENTES DEL QUIJOTE (Q)............................... 277
A.3.5 BASE DE DATOS SEV: FRASES PROVENIENTES DE PROSODIA (P) .............................. 277
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 1
1. INTRODUCCIÓN
Una de las principales áreas de estudio dentro de las Tecnologías del
Habla es la síntesis de habla expresiva, puesto que las emociones
pueden dotar de naturalidad y variabilidad a la voz sintetizada.
El uso de estrategias basadas en la concatenación de unidades de voz
pregrabada permite obtener una alta calidad en la voz sintetizada si se
dispone de múltiples versiones de cada unidad, si bien son muy
costosas debido a la necesidad de contar con un gran conjunto de
unidades segmentadas y etiquetadas con precisión. Una manera de
reducir los costes del segmentado y etiquetado manual es utilizar
herramientas de segmentación automática como la que se propone en
este proyecto.
Las emociones alteran las principales características de la voz, por lo
que pueden tener una cierta influencia en el proceso de segmentación
del habla expresiva.
Cuando se dispone de la transcripción fonética, uno de los principales
métodos para abordar el problema de la segmentación fonética
automática es el uso de técnicas basadas en los Modelos Ocultos de
Markov (Hidden Markov Models). Estas técnicas generan la
segmentación automática mediante la comparación recurrente entre los
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 2
datos procedentes de la voz grabada y la transcripción fonética de la
locución a segmentar, por medio del algoritmo de Viterbi.
Nuestro sistema de segmentación se basará en los Modelos Ocultos de
Markov y se implementará mediante el uso de las herramientas HTK
(Hidden Markov Model Toolkit).
En este primer capítulo realizaremos una breve introducción al
panorama general en el que se inscribe nuestro proyecto.
Comenzaremos situando con una breve historia el reconocimiento
automático de voz como base de conocimiento que se encuentra en los
orígenes de las tecnologías del habla, y que más adelante dio lugar al
estudio de la síntesis de voz y a la propia segmentación, y que por tanto
comparte principios teóricos con ellas. Pasaremos entonces a ver cuál
es la estructura general de un sistema de reconocimiento y
segmentación automática del habla. A continuación resumiremos los
algoritmos de extracción de características, prestando especial atención
a los dos que utilizaremos en los experimentos con nuestro
segmentador, el basado en coeficientes cepstrales en frecuencia MEL
(MFCC) y el basado en predicción lineal perceptual (PLP). Por último
dedicaremos un apartado a los Modelos Ocultos de Markov como
modelo de encaje de patrones en el que se basa nuestro segmentador.
Los dos capítulos siguientes los dedicaremos a la síntesis de voz y la
segmentación automática, y al habla con emociones, al ser éstas
determinantes para el proceso de segmentación automática del habla.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 3
1.1 Breve historia de las tecnologías del habla
En los orígenes de las tecnologías del habla se encuentra el interés
científico por conseguir que un ordenador entendiera la voz humana y
fuera capaz de convertir a texto las locuciones dictadas o de realizar
acciones en consonancia con la interpretación de dichas locuciones. Es
lo que denominamos reconocimiento automático del habla. Más
adelante surge el interés por realizar la conversión inversa texto-voz,
denominada síntesis de voz y que está estrechamente relacionada con
nuestro problema de segmentación automática, por lo que dedicaremos
el siguiente capítulo a su descripción. Aunque en este proyecto nos
centraremos en el problema de la segmentación automática, nuestro
sistema también realiza reconocimiento automático del habla. Veamos
una breve introducción a la historia de esta rama de la ciencia.
Durante las últimas décadas, la investigación en el campo del
reconocimiento automático del habla se ha venido desarrollando de una
forma intensa, empujada, a juicio del profesor Álvarez Marquina
[Álvarez 2001], por los avances en procesamiento de señal, algoritmos,
arquitecturas y plataformas de cómputo. La historia de la investigación
en este campo se ha venido llevando a cabo durante un periodo que
abarca la segunda mitad del siglo XX y principios del XXI.
Los primeros intentos por construir máquinas que realizaran tareas de
reconocimiento se remontan a la década de los 50, cuando diversos
investigadores trataban de explotar los principios fundamentales de la
fonética acústica. En 1952, en los laboratorios Bell, K. Davis, R.
Biddulph y S. Balashek crearon un sistema electrónico que permitía
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 4
identificar para un solo hablante, pronunciaciones de los 10 dígitos
realizadas de forma aislada. El fundamento de esta máquina se basaba
en medidas de las resonancias espectrales del tracto vocal para cada
dígito. Las medidas se obtenían mediante el uso de bancos de filtros
analógicos. En 1959, en la University College de Londres, P. Denes
trataba de desarrollar un sistema para reconocer 4 vocales y 9
consonantes. El aspecto más novedoso de su trabajo era el uso de
información estadística, acerca de las secuencias válidas de fonemas en
inglés, con el objetivo de mejorar el rendimiento de la tarea para
palabras que contuvieran dos o más fonemas. Éste constituye el primer
intento de incorporar conocimiento lingüístico en este tipo de sistemas.
Hasta este momento, todos los sistemas son dispositivos electrónicos.
Los primeros experimentos de reconocimiento desarrollados en
ordenadores tienen lugar al final de los años 50 y principios de los 60,
principalmente en el Lincoln Laboratory a cargo de J. Forgie y C. Forgie.
En los años 60 se generaliza el uso de ordenadores en este campo. En
estos años, se inician 3 proyectos que modifican el curso de la
investigación y desarrollo en el área del reconocimiento de voz de
manera notable. El primero de ellos lo realizan T. Martin, A. Nelson y H.
Zadell en los RCA Laboratories (1964). Su objetivo fundamental era
desarrollar soluciones realistas para los problemas asociados con la
falta de uniformidad de las escalas de tiempo en los hechos de habla.
Como consecuencia de este trabajo, los autores diseñaron un conjunto
de métodos elementales de normalización en el tiempo, que se basaban
en la detección fiable de los puntos de principio y fin de discurso. De
esta forma conseguían reducir la variabilidad en las tasas de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 5
reconocimiento. Al mismo tiempo en la Unión Soviética, T. K. Vintsyuk,
propone la utilización de métodos de programación dinámica para
conseguir el alineamiento temporal de pares de realizaciones de habla.
El tercer trabajo lo realiza D. R. Reddy (Stanford University, 1966) en el
campo del reconocimiento de habla continua mediante el seguimiento
dinámico de fonemas.
Los años 70 representan un periodo muy activo para esta disciplina,
distinguiéndose dos tipos de actividades principales: el reconocimiento
de palabras aisladas, que comienza a ser viable y utilizable en la
práctica; y los primeros intentos de construir reconocedores de habla
continua y de grandes vocabularios, basados en el uso de conocimiento
de alto nivel, fundamentalmente de tipo sintáctico.
Si en la década de los 70 los sistemas de reconocimiento de vocablos
aislados alcanzan una cierta madurez, los años 80 se caracterizan por
la generalización en la construcción de sistemas de reconocimiento, que
ahora serán capaces de tratar cadenas de palabras pronunciadas de
una manera fluida. Se extienden las técnicas de programación dinámica
al reconocimiento de palabras conectadas.
En estos años se produce un giro metodológico como consecuencia de
pasar de métodos basados en comparación de plantillas a métodos
basados en modelado estadístico. Esto es debido a la extensión en el
uso de los Modelos Ocultos de Markov (HMM). Estos métodos habían
sido desarrollados en la década anterior para tratar con problemas de
habla continua, pero su aceptación generalizada no sucedió hasta unos
10 años después. A partir de entonces se han desarrollado numerosas
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 6
mejoras y actualmente constituyen los mejores modelos disponibles
para capturar y modelar la variabilidad presente en el habla.
La década de los 90 supone en cierta manera la continuidad en los
objetivos ya propuestos, ampliando, eso sí, el tamaño de los
vocabularios a la vez que se diversifican los campos de aplicación. Se
dedican muchos estudios a los servicios sobre la línea telefónica y a
disponer de sistemas capaces de enfrentarse a situaciones cada vez más
reales, al mismo tiempo que crece el interés por el estudio de los
procesos de reconocimiento en condiciones de ruido y adversas en
general.
El profesor Álvarez Marquina [Álvarez 2001] marca como conclusiones
de las experiencias acumuladas a lo largo de estas décadas de estudio
las siguientes:
Los sistemas del presente y, presumiblemente, los que puedan
venir en el futuro se basarán al menos en parte, en modelos y
técnicas que aparecieron relativamente pronto en la historia del
reconocimiento automático del habla.
La transformación de un prototipo de laboratorio de excelentes
prestaciones en un sistema comercial fiable es un proceso arduo
y no dominado en su totalidad.
Las prestaciones del mejor sistema construido en la actualidad,
en lo relativo a las tasas de reconocimiento, están por debajo en
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 7
un orden de magnitud respecto a las que serían atribuibles al ser
humano.
La solución global al problema no se encontrará de manera
inmediata por el trabajo de un investigador ingenioso, sino como
consecuencia de un trabajo continuado, que incorpore
conocimientos multidisciplinares, incluyendo trabajos de
investigación básica en los campos de producción y percepción
del habla.
1.2 Estructura general de un sistema de
reconocimiento y segmentación del habla
El esquema general que debe seguir un sistema automático de
reconocimiento y segmentación del habla como el nuestro comprende
las siguientes etapas [Álvarez 2001]:
Representación de la señal: Tras obtener los datos de entrada al
sistema por medio de la digitalización de la señal de voz, las
muestras del paso anterior se transforman en un conjunto de
medidas o características útiles. La realización de esta tarea se
lleva a cabo a un ritmo constante, usualmente de entre 10 y 20
ms. Como producto de salida se obtienen una serie de vectores
que de alguna manera contienen en esencia la señal original, pero
con un tamaño mucho menor. Un vector de características deberá
contener toda la información relevante para realizar el proceso de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 8
reconocimiento y segmentación, eliminando el resto de contenidos
redundantes o que no sean útiles para el sistema.
Búsqueda de patrones: En la fase de búsqueda de patrones las
medidas de la etapa anterior se emplean para encontrar la
palabra candidata que proporcione el mejor encaje. Para ello se
tienen en cuenta las restricciones impuestas por los modelos
acústico, léxico y de lengua (gramática) disponibles.
Modelado y clasificación: Los sistemas de reconocimiento
intentan estimar y configurar las fuentes de variación descritas
anteriormente de diversas formas en lo que constituye la fase de
modelado y clasificación. En el nivel de representación de la
señal, los desarrolladores emplean representaciones que enfaticen
las características importantes desde un punto de vista
perceptual; por otra parte se intenta desenfatizar aquellas otras
que son dependientes de determinados hablantes. La adaptación
a un determinado hablante o a las condiciones del entorno de
funcionamiento del sistema se realiza a través de un conjunto de
procesos de normalización. La normalización tiene como finalidad
restaurar las características del vector, es decir, conseguir
medidas con valores lo más próximos posibles a los que se
obtendrían en condiciones neutras o a las presentes cuando se
entrenó el reconocedor.
Proceso de entrenamiento: El entrenamiento constituye una
etapa previa a la entrada en funcionamiento del conjunto y tiene
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 9
como finalidad establecer los diferentes conjuntos de modelos
empleados durante el proceso de búsqueda:
o Modelos acústicos, que recojan realizaciones dependientes
del género del locutor, entonaciones, variantes dialectales,
etc.
o Modelos léxicos, que contemplen pronunciaciones
alternativas de las palabras, con objeto de permitir que los
algoritmos de búsqueda encuentren diferentes caminos.
o Modelos de lengua, que permitan estimar la frecuencia de
ocurrencia de determinadas secuencias de palabras.
Además durante el entrenamiento se puede obtener también la
información necesaria para ajustar los procesos de modelado y
normalización.
1.3 Algoritmos de extracción de características de
voz
Como acabamos de ver, el objetivo de la etapa de representación de la
señal será parametrizarla, esto es, transformar la información presente
en la traza de voz en un conjunto reducido de valores. Este conjunto
reducido de valores será de dos tipos:
Coeficientes estáticos, obtenidos a partir del análisis de pequeños
fragmentos de la señal de voz (5- 20 ms), y
Coeficientes dinámicos, producto de la combinación de
componentes de diversos vectores.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 10
Los principales métodos de extracción paramétrica son [Álvarez 2001]:
1.3.1 Análisis por banco de filtros digitales
El uso de bancos de filtros digitales, implementados inicialmente como
filtros analógicos, ha sido históricamente la primera aproximación al
procesamiento del habla. Un banco de filtros paso banda puede
entenderse como un modelo sencillo de las etapas iniciales del sistema
auditivo humano. La señal inicial se descompone en un conjunto
discreto de muestras espectrales, que contienen una información
similar a la que se presenta en los niveles superiores del sistema
auditivo.
Con objeto de aproximarse a la sensibilidad del oído humano, que no
tiene una respuesta lineal en frecuencia, existen diferentes escalas.
Algunos ejemplos expresados de forma analítica, siendo f el valor de
frecuencia en Hz, son la escala de Bark:
y la escala de Mel:
Ésta última es la más usual en aplicaciones de tratamiento de la voz, y
será la utilizada en una de las dos técnicas que emplearemos en
nuestros experimentos (MFCC).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 11
Un banco de filtros está constituido por un conjunto de filtros, cada uno
de los cuales retiene la información de una serie determinada de
frecuencias del espectro. A su vez cada filtro puede ponderar de manera
diferente las frecuencias que quedan bajo su ámbito. Este tipo de
técnica generalmente se emplea de manera conjunta con otros métodos
como son el cálculo de coeficientes cepstrales (la técnica MFCC que,
como hemos dicho, emplearemos en nuestros experimentos).
1.3.2 Transformada discreta de Fourier
La transformada discreta de Fourier o DFT (Discrete Fourier Transform)
se define como:
donde N es el número de muestras de la ventana que se va a analizar.
La DFT es periódica en la frecuencia con periodo fs (frecuencia de
muestreo).
La motivación del uso de la DFT parte del hecho de la utilidad que tiene
descomponer la señal de voz de partida en sus componentes en
frecuencia.
Un aspecto importante si queremos usar la DFT con señales de voz es
que debemos asumir que al menos en periodos cortos de tiempo se
cumple que la señal es estacionaria. En la realidad esto no es
estrictamente así aunque podemos suponerlo; la solución consiste en
multiplicar la señal por una función ventana que sea nula fuera de un
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 12
determinado rango y reproducir el resultado de forma que tengamos un
número de bloques iguales. La ventana rectangular se define como:
Sin embargo la utilización de esta ventana trae consigo que en los
puntos de inicio y fin exista una fuerte discontinuidad. Para reducir el
efecto de discontinuidad al mínimo debemos emplear tipos de ventana
que tiendan a reducir a 0 los valores de las muestras en los extremos.
Aunque existe un buen número de tipos de ventana, la más común en
el análisis de la voz es la que se conoce como ventana de Hamming:
La complejidad de la DFT es alta y, con objeto de acelerar el cálculo de
este procedimiento, se emplea habitualmente lo que se conoce como
transformada rápida de Fourier o FFT (Fast Fourier Transform).
1.3.3 Predicción lineal
El método de predicción lineal o LP (Linear Prediction) es históricamente
uno de los métodos más importantes para el análisis de la voz. Su
fundamento se basa en establecer un modelo de filtro del tipo todo polo,
para la fuente de sonido. La principal motivación del modelo todo polo
viene dada porque permite describir la función de transferencia de un
tubo, que estuviese formado por diferentes secciones sin pérdidas.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 13
El método de predicción lineal constituye una aproximación razonable
al habla producida por la excitación del tracto vocal causada por el
conjunto de pulsos glotales. Con un número suficiente de parámetros el
modelo de predicción lineal puede constituir una aproximación
adecuada a la estructura espectral de todo tipo de sonidos.
El método de predicción lineal recibe este nombre porque pretende
extrapolar el valor de la siguiente muestra de voz x(n) como la suma
ponderada de muestras pasadas x(n-1), x(n-2), ..., x(n-K):
Para ello se debe realizar el cálculo de los coeficientes ai minimizando
alguna función de error E, concretamente de mínimos cuadrados, sobre
una ventana de tamaño N.
1.3.4 Análisis cepstral
Desde la introducción, en los primeros años de la década de los 70, de
las técnicas homomórficas de procesado de señal, su importancia
dentro del campo del reconocimiento de voz ha sido muy grande. Los
sistemas homomórficos son una clase de sistemas no lineales que
obedecen a un principio de superposición (los sistemas lineales
constituyen un caso especial).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 14
La motivación para realizar un procesado homomórfico del habla viene
de que estas técnicas pueden servir para separar la acción del tracto
vocal (filtro lineal variable en el tiempo) de la señal de excitación, como
se representa en la siguiente figura:
Figura 1.1: Técnica homomórfica de descomposición de la señal
de voz [Álvarez 2001]
La señal de voz s(n) se descompone en una parte de excitación e(n) y en
un filtro lineal H(eiθ). Así, en el dominio de la frecuencia tenemos:
Para la mayoría de las aplicaciones de voz sólo necesitamos la amplitud
espectral:
En el dominio logarítmico, las dos componentes anteriores pueden
separarse empleando técnicas convencionales de procesamiento de
señal.
Figura 1.2: Análisis cepstral partiendo de la transformada
discreta de Fourier [Álvarez 2001]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 15
En este caso, el valor c(n) se conoce como coeficientes cepstrales
derivados de la transformada de Fourier. Ns es el número de puntos con
los que se calculó la DFT.
A la hora de calcular un coeficiente cepstral es posible emplear bandas
definidas según escalas de Mel. Este tipo de parámetros se conoce como
coeficientes cepstrales con frecuencia en la escala de Mel o MFCC (Mel
Frequency Cepstral Coefficients), que será una de las dos técnicas
principales que emplearemos en nuestros experimentos. En la siguiente
figura se aprecia el esquema de parametrización con esta técnica.
Figura 1.3: Esquema de la parametrización para la obtención
de MFCC [Álvarez 2001]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 16
1.3.5 Predicción Lineal Perceptual
La técnica de predicción lineal perceptual o PLP (Perceptual Linear
Prediction), es en esencia una combinación de las técnicas de la
transformada discreta de Fourier y de predicción lineal como puede
verse en la figura:
Figura 1.4: Predicción lineal perceptual [Álvarez 2001]
Para obtener el análisis de banda crítica se utiliza primeramente la
transformada discreta de Fourier con una ventana de Hamming de 20
ms. Posteriormente se calcula el espectro de potencia y se transfiere a
una escala de Bark. El segundo paso consiste en la igualación de las
alturas perceptuales, lo que tiene su origen en la necesidad de
compensar la diferente percepción de alturas sonoras para diferentes
frecuencias. Tras la IDFT se calculan los coeficientes de autorregresión
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 17
de un modelo todo polo. Adicionalmente se pueden calcular a partir de
éstos los coeficientes cepstrales.
Como hemos venido comentando, esta técnica PLP junto con la anterior
MFCC serán las dos que emplearemos al realizar la segmentación
automática con nuestro sistema.
1.4 Los Modelos Ocultos de Markov
Terminaremos este capítulo introductorio definiendo los Modelos
Ocultos de Markov, que se encuentran en la base de los métodos más
empleados para realizar reconocimiento y segmentación del habla.
Un modelo oculto de Markov o HMM (Hidden Markov Model) es un
modelo estadístico en el que se asume que el sistema a modelar es un
proceso de Markov de parámetros desconocidos. El objetivo es
determinar los parámetros desconocidos (u ocultos, de ahí el nombre)
de dicha cadena a partir de los parámetros observables. Los parámetros
extraídos se pueden emplear para llevar a cabo sucesivos análisis, por
ejemplo en aplicaciones de reconocimiento de patrones.
En un modelo de Markov normal, el estado es visible directamente para
el observador, por lo que las probabilidades de transición entre estados
son los únicos parámetros. En un modelo oculto de Markov, el estado
no es visible directamente, sino que sólo lo son las variables influidas
por el estado. Cada estado tiene una distribución de probabilidad sobre
los posibles símbolos de salida. Consecuentemente, la secuencia de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 18
símbolos generada por un HMM proporciona cierta información acerca
de la secuencia de estados.
Cuando se aplican los modelos ocultos de Markov al reconocimiento de
la voz:
Los estados se interpretan como modelos acústicos, indicando las
ocurrencias de sonidos que son más probables durante los
correspondientes segmentos de habla.
Las transiciones incorporan restricciones de tipo temporal acerca
de cómo son las secuencias de aparición de esos sonidos.
Estados y transiciones pueden ser utilizados para modelar distintas
jerarquías del proceso del habla: desde fonemas hasta oraciones
pasando por palabras.
La utilización de este tipo de estructuras debe resolver 3 problemas
básicos:
1. Problema de reconocimiento
Consiste en escoger aquel modelo de entre un grupo de éstos, que mejor
represente al conjunto de etiquetas obtenidas a partir de la
cuantificación de las correspondientes plantillas espectrales.
Formalmente, conocida una secuencia de observaciones O={o1, o2, ..., oT}
y el correspondiente modelo de Markov λ=(A, B, π), siendo A={aij} la
distribución de probabilidad para la transición entre los estados i y j,
B={bj(k)} la distribución de probabilidad para la observación k en el
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
1. Introducción 19
estado j y π la distribución inicial de estados, se pretende calcular
Prob(O|λ). Una solución eficiente a este problema es el algoritmo hacia
adelante y atrás (algoritmo de forward-backward).
2. Problema de decodificación
Este problema consiste en descubrir la secuencia oculta de estados, es
decir, conocida una secuencia de observaciones O={o1, o2, ..., oT}
calcular la secuencia de estados I={i1, i2, ..., iT}, que sea óptima
siguiendo algún criterio. Este segundo problema puede resolverse a
partir del algoritmo de Viterbi.
3. Problema de aprendizaje o entrenamiento
Consiste en construir un modelo de manera que recoja el conocimiento
con el que se ha entrenado de forma óptima, es decir, construir el
modelo λ=(A, B, π) para que Prob(O|λ) sea máxima. El caso se resuelve a
través de un algoritmo iterativo que se conoce como algoritmo de Baum-
Welch. Este procedimiento proporciona un método para reestimar unos
nuevos valores de a'ij y b'j(k) de forma que se cumpla que Prob(O|λ´) ≥
Prob(O|λ).
No incluimos el desarrollo matemático de los tres algoritmos aquí
indicados (forward-backward, Viterbi y Baum-Welch) por considerar
que excede de los propósitos de este capítulo introductorio. No obstante,
una descripción detallada de los mismos puede encontrarse en [Young
2006].
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 20
2. SÍNTESIS DE VOZ Y SEGMENTACIÓN
AUTOMÁTICA DE UNIDADES
Continuando con el panorama general en el que se enmarca nuestro
proyecto, en este capítulo hablaremos brevemente de la síntesis de voz,
particularizaremos en la síntesis por concatenación de unidades (que es
la que hace uso de la segmentación automática), y terminaremos
hablando de la segmentación automática de unidades y comentando un
experimento anteriormente realizado en este sentido.
2.1 La síntesis de voz
Como comenta Gerardo Martínez en [Martínez 1998] muchos sistemas
de laboratorio y dispositivos comerciales realizan la conversión
automática de un texto a voz sintetizada. El progreso en este área ha
sido posible debido a los avances en la teoría lingüística, en el modelo
de caracterización acústica-fonética de los sonidos, en el modelado
matemático, en la programación estructurada y en el diseño hardware
de los ordenadores.
Los pasos seguidos en todo proceso de síntesis son: primero, un
conjunto de módulos analiza el texto de entrada para determinar la
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 21
estructura de la sentencia y la composición fonética de cada palabra y
un segundo conjunto de módulos transforma esta representación
lingüística abstracta en voz.
Los cuatro tipos principales en los que se pueden clasificar los sistemas
de síntesis de voz son:
Sintetizadores articulatorios. En éstos se realiza una analogía
entre parámetros relativos a los órganos articulatorios y sus
movimientos con parámetros circuitales. Pueden proporcionar
una calidad altísima, pero es muy difícil obtener y controlar
parámetros para un sintetizador de este tipo.
Sintetizadores por formantes. Son una serie de filtros que
modelan el tracto vocal, excitados por fuentes que simulan las
cuerdas vocales. Gozan de gran difusión.
Sintetizadores derivados de las técnicas de predicción lineal
(LPC). Son sintetizadores de análisis-síntesis, en los que los
parámetros que controlan la función de transferencia del filtro
que simula el tracto vocal son parámetros LPC.
Sintetizadores por concatenación de forma de onda.
Concatenan unidades pregrabadas para generar nuevas frases,
con lo que intentan aumentar la calidad de la señal generada
minimizando el ruido de codificación. La complejidad es alta, pero
la calidad obtenida es muy buena.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 22
Éste último tipo de sintetizador es el que está más íntimamente ligado a
nuestro proyecto, por lo que dedicaremos el siguiente epígrafe a su
descripción.
2.2 La síntesis por concatenación de unidades
Esta estrategia para sintetizar voz consiste en emplear trozos de voz
natural pregrabadas como bloques básicos que se concatenan para
reconstruir una expresión arbitraria [Martínez 1998].
El tipo de unidad a concatenar es un parámetro crítico para conseguir
una buena calidad de la voz sintetizada: hay que llegar a un
compromiso entre la calidad intersegmental posible (a mayor longitud
de los segmentos, menos puntos de concatenación y por lo tanto mayor
calidad) y la cantidad de memoria necesaria para almacenar las
unidades pregrabadas.
Los trozos grabados no pueden ser palabras por dos motivos
fundamentales. En primer lugar, la pronunciación de una frase es muy
diferente a la de una secuencia de palabras recitadas aisladamente, ya
que en una frase las palabras tienen una duración más corta que
cuando están aisladas y el ritmo, entonación y acentuación, que
dependen de factores semánticos y sintácticos, son totalmente
antinaturales cuando se concatenan palabras grabadas aisladamente.
Un segundo problema son las innumerables palabras existentes en un
idioma, si tenemos en cuenta por ejemplo los nombres propios, así
como la formación de palabras mediante sufijos, prefijos y
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 23
conjugaciones. La sílaba es una unidad interesante lingüísticamente,
pero hay un gran número de ellas. Otra unidad posible es el fonema,
pero el resultado de concatenar fonemas no es satisfactorio debido a
efectos coarticulatorios entre fonemas adyacentes que producen
cambios de las manifestaciones acústicas de un fonema dependiendo
del contexto [Martínez 1998]. Los efectos coarticulatorios tienden a
minimizarse en el centro acústico de un fonema, lo cual llevó a Peterson
a proponer el difonema, el trozo de voz que va desde la mitad de un
fonema a la mitad del siguiente fonema, como la unidad más
satisfactoria para la concatenación. En castellano, donde se pueden
considerar unos 30 alófonos, el número máximo de difonemas sería de
302 = 900, pero no todos se utilizan. Además puede ser necesario
introducir alófonos diferentes para hacer la distinción entre las vocales
acentuadas y átonas o la inclusión de trifonemas, que son una
extensión a agrupaciones de tres fonemas cuando los efectos de
coarticulación son tan grandes que no es posible la segmentación en
difonemas.
Se puede reducir la longitud de la memoria necesitada para el
almacenamiento de las unidades evitando las unidades difonema
formadas por consonante + consonante que no se puedan dar en el
lenguaje, y tratando algunos alófonos en determinados contextos como
una unidad de tipo fonema, como por ejemplo los fricativos sordos.
Otra elección crítica es la de la extracción de las unidades y la selección
del punto de corte. Los difonemas deben ser grabados por un locutor
que sea capaz de controlar y mantener constante la calidad de la voz de
forma que no haya cambios repentinos en el espectro de la fuente en
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 24
medio de las sílabas. La unidad (difonema, trifonema o fonema) debe ser
extraída de algún contexto puesto que no son unidades que puedan ser
grabadas aisladamente. Los contextos posibles son:
en frase natural: se graban frases diferentes que contienen al
menos una unidad.
en frase portadora: se graba una frase con una estructura fija
donde se cambia solamente una palabra o un par de palabras que
contienen la unidad a segmentar.
en palabra aislada
en logatomos: palabras cortas que incluyen la unidad requerida y
no tienen significado semántico.
Una vez obtenida la grabación se necesita marcar cada uno de los
fonemas (o difonemas) con sus fronteras (inicio y fin), marcaje que
resulta tremendamente laborioso para realizar de manera manual y que
puede dar lugar a errores, por lo que se hace necesario el uso de algún
sistema de segmentación automática como el que desarrollamos en
nuestro proyecto.
2.3 La segmentación automática de unidades
La segmentación consiste en delimitar mediante etiquetas la posición de
los fonemas dentro de las frases. Si dicho proceso de segmentación es
realizado manualmente por el usuario éste debe escuchar una a una las
locuciones, y colocar las etiquetas que aíslan cada uno de los fonemas
dentro de las mismas; este procesado manual requiere una gran
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 25
cantidad de tiempo y además, en algunos casos, lleva asociado también
errores. Estos errores pueden venir derivados del cansancio que este
trabajo implica, o en otros casos, de que al ser realizada la
segmentación por varias personas con el objetivo de reducir el volumen
de trabajo, se producen errores de criterio en la segmentación (distinto
criterio a la hora de segmentar algunos fonemas) que llevan a una falta
de uniformidad en la base de datos.
Como se comenta en [González 2000], algunos de dichos errores pueden
ser corregidos mediante el etiquetado automático, ya que por un lado no
es necesaria la edición manual para generar el etiquetado (los
desarrolladores se pueden centrar así en otros aspectos), y por otro
lado, al ser realizado todo el marcado por un mismo programa, el
criterio de segmentación de unidades siempre será el mismo. Se puede
pensar que es posible que se produzcan también errores de marcado,
que en algunos casos podrán ser mayores que con la segmentación
manual, hecho que puede quedar compensado por la considerable
reducción en el tiempo de procesado.
En [González 2000] se describen una serie de experimentos que se
llevaron a cabo en el seno del Grupo de Tecnologías del Habla para
realizar la segmentación de las frases componentes de una base de
datos (NatVox) de una manera automática. Se empleó un reconocedor
de palabras aisladas (a diferencia del nuestro, que es a nivel de
fonemas). Se emplearon para el entrenamiento y la evaluación
locuciones que contenían un total de 16062 alófonos, y para la
evaluación de la segmentación automática se consideraron como
erróneas aquellas etiquetas en las cuales la posición de la marca difería
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
2. Síntesis de voz y segmentación automática de unidades 26
en más de 20 milisegundos con respecto de la existente en el *.par que
había sido marcado manualmente (hay que tener en cuenta, que la
resolución del sistema, como ocurre con el nuestro, viene marcada por
el desplazamiento de tramas que se emplee, no pudiendo nunca ser
mayor que dicho desplazamiento, que tanto en su caso como en el
nuestro, es de 10 milisegundos). Con este umbral de 20 milisegundos
se obtuvo una tasa de acierto del 89% (tasa de error del 11%) y un error
medio cometido por marca del 9%.
A lo largo de los capítulos 4 a 7 se describirá nuestro sistema y las
bases de datos con las que trabajamos, y en el capítulo 8 describiremos
los experimentos realizados y las tasas de error que obtenemos con
nuestro sistema, considerando los mismos umbrales que acabamos de
comentar.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 27
3. EL HABLA CON EMOCIONES
Como se ha comentado en la introducción, las emociones alteran las
principales características de la voz, por lo que pueden tener una cierta
influencia en el proceso de segmentación del habla expresiva. En este
capítulo se estudiará el concepto de emoción, cuáles son los efectos que
las emociones pueden tener sobre las características de la voz, y los
rasgos distintivos de las distintas emociones, prestando especial
atención a aquellas que están presentes en las muestras de locuciones
de las bases de datos con las que trabajaremos.
3.1 El concepto de emoción y sus funciones
Existen numerosas maneras de definir y explicar el concepto de
emoción según los diferentes estudios que se han realizado sobre este
tema, pero en general la definición más ampliamente aceptada es la que
considera la emoción como un estado complejo del organismo que se
origina como respuesta a las informaciones que se reciben del entorno y
que predispone a una respuesta organizada.
Esta primera definición podría hacernos confundir el concepto de
emoción con el de estado de ánimo; no obstante, la diferencia entre
ambos es que mientras que las emociones surgen de forma repentina
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 28
en respuesta a un determinado estímulo y duran unos segundos o
minutos, los estados de ánimo son más ambiguos en su naturaleza,
perdurando durante horas o días. Por otro lado, más allá de emociones
y estados de ánimo, está el rasgo a largo plazo de la personalidad, que
puede definirse como el tono emocional característico de una persona a
lo largo del tiempo.
La emoción no es un fenómeno simple ya que depende de múltiples
factores. Según Izard una definición completa de emoción debe tener
en cuenta el sentimiento consciente de la emoción, los procesos que
ocurren en el sistema nervioso y en el cerebro y los modelos expresivos
observables de la emoción [Izard 1971].
Scherer afirma [Scherer 2001] que la emoción puede describirse
también como la interfaz del organismo con el mundo exterior,
señalando tres funciones principales de las emociones:
Reflejan la evaluación de la importancia de un estímulo en
particular en términos de las necesidades del organismo,
preferencias, intenciones…
Preparan fisiológica y físicamente al organismo para la acción
apropiada.
Comunican el estado del organismo y sus intenciones de
comportamiento a otros organismos que lo rodean.
Reeve por su parte le da a estas tres funciones los nombres de
adaptativa, social y motivacional [Reeve 1994]:
Función adaptativa: La emoción se encarga de preparar al
organismo para la acción, facilitando la conducta apropiada a
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 29
cada situación. Por tanto, las emociones desarrollan un papel
fundamental en lo que a la adaptación del organismo al entorno
se refiere.
Función social: Las emociones sirven para comunicar el estado
de ánimo de la persona. La expresión de las emociones permite a
los que nos rodean predecir el comportamiento asociado con las
mismas, de aquí el enorme valor que la emoción ostenta en los
procesos de relación interpersonal. Así, emociones como la
felicidad favorecen los vínculos sociales y las relaciones
interpersonales, mientras que otras como el enfado pueden
generar situaciones de confrontación. Por otro lado, la propia
represión de las emociones también tiene en ocasiones una
evidente función social, por cuanto que es socialmente necesaria
la inhibición de ciertas reacciones emocionales que podrían
alterar las relaciones sociales y afectar incluso a la propia
estructura y funcionamiento de grupos u otros sistemas de
organización social.
Función motivacional: La emoción dota de energía a la conducta
motivada. Una conducta "cargada" emocionalmente se realiza de
forma más vigorosa.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 30
3.2 Componentes de la emoción
Como ya hemos comentado, la emoción es un fenómeno complejo, y
esto implica que haya que tener en cuenta un gran número de factores
a la hora de su caracterización. Los principales componentes que debe
incorporar el estudio de una emoción son los siguientes [Fernández
2003]:
El componente fisiológico
Está relacionado con las respuestas psico-fisiológicas que tienen lugar
como resultado del fenómeno emocional. Son respuestas involuntarias.
Algunas de ellas pueden ser taquicardia, rubor, sudoración, sequedad
en la boca, variación en el tono muscular, etc.
El componente conductual-expresivo
Mediante la observación del comportamiento de un individuo se puede
deducir qué tipo de emociones está experimentando. Esto es debido a
que toda emoción lleva implícito un lenguaje no verbal que aporta
señales bastante precisas y que facilitan su identificación. Este lenguaje
no verbal viene dado en gran parte por las expresiones del rostro y el
tono de voz empleado. Esta componente de la emoción es en cierta
medida controlable y está muy influida por factores socioculturales.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 31
El componente experiencial - cognitivo
Este componente está relacionado con la vivencia afectiva, con el hecho
de sentir y de experimentar propiamente la emoción. Así, la experiencia
emocional puede variar en intensidad dependiendo de diversos factores,
como pueden ser la importancia que se le dé a la situación que genera
la emoción o su proximidad temporal.
3.3 La emoción y su efecto en el habla
Más allá de las componentes de la emoción, lo cierto es, como
afirmábamos al principio, que las emociones afectan al habla, como
apuntó por primera vez Darwin a finales del siglo XIX en su libro “La
Expresión de las emociones en el hombre y en los animales”, donde
describe las primeras investigaciones sobre cómo afectaban las
emociones al comportamiento y al lenguaje de los animales. A lo largo
de los años se ha avanzado en el estudio de los efectos de las emociones
en el habla, que han sido estudiados por investigadores acústicos que
han analizado la señal de voz, por lingüístas que han estudiado los
efectos léxicos y prosódicos, y por psicólogos. Gracias a estos esfuerzos
se ha conseguido identificar muchos de los componentes del habla que
se utilizan para expresar emociones, entre los que destacan el pitch o
frecuencia fundamental, la duración y la calidad de voz [Scherer 1979].
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 32
3.3.1 El Pitch
El pitch o frecuencia fundamental (f0) es la frecuencia fundamental a la
que las cuerdas vocales vibran. Las características de la frecuencia
fundamental están consideradas una de las principales portadoras de la
información sobre las emociones:
El valor medio del pitch refleja el nivel de excitación del locutor.
Una media elevada de f0 indica un mayor grado de excitación.
El rango del pitch es la distancia entre el valor máximo y mínimo
de la frecuencia fundamental. Indica también el grado de
exaltación del locutor. Un rango más extenso que el normal refleja
una excitación emocional o psicológica.
Las fluctuaciones en el pitch, descritas como la velocidad de las
fluctuaciones entre valores altos y bajos y si son abruptas o
suaves, son producidas psicológicamente. En general, la curva de
tono es discontinua para las emociones consideradas como
negativas (miedo, enfado) y es suave para las emociones positivas
(como la alegría).
3.3.2 La duración
La duración es la componente prosódica descrita por la velocidad del
habla y la situación de los acentos, y cuyos efectos son el ritmo y la
velocidad. El ritmo en el habla deriva de la situación de los acentos y de
la combinación de las duraciones de las pausas y de los fonemas. Las
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 33
emociones pueden distinguirse por una serie de parámetros que
conciernen a la duración, como son:
Velocidad de locución: Generalmente un locutor en estado de
excitación acortará la duración de las sílabas, con lo que la
velocidad de locución medida en sílabas por segundo o en
palabras por minuto se incrementará.
Número de pausas y su duración: Un locutor exaltado tenderá a
hablar rápidamente con menos pausas y más cortas, mientras
que un locutor deprimido hablará más lentamente, introduciendo
pausas más largas.
Cociente entre el tiempo de locución y el de pausas, como
medida que relaciona las dos variables anteriores.
3.3.3 La calidad de voz
La intensidad, las irregularidades en la voz, el cociente entre energías a
baja y alta frecuencia, el breathiness y la laringerización son algunas de
las características que diferencian la calidad de la voz.
Intensidad: Está relacionada con la percepción del volumen y se
refleja en la amplitud de la forma de onda.
Irregularidades vocales: Abarcan un gran rango de
características vocales. El jitter vocal refleja las fluctuaciones de
un pulso glotal al siguiente (como se observa en el enfado) o la
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 34
desaparición de voz en algunas emociones como la pena, en la
que el habla se convierte en un simple susurro.
El cociente entre energía de alta y baja frecuencia: Gran
cantidad de energía en las frecuencias altas se asocia con
agitación (enfado), mientras que baja concentración de energía en
las frecuencias altas se relaciona con depresión o calma (pena).
Breathiness y laringerización: Reflejan las características del
tracto vocal y están más relacionados con la personalización de
cada voz. El Breathiness describe la generación de ruido
respiratorio de forma que la componente fundamental tiende a ser
más fuerte, mientras que las frecuencias altas son reemplazadas
por ruido aspiratorio. La laringerización se caracteriza por una
vibración aperiódica de las cuerdas vocales, con un pulso glotal
estrecho y pitch bajo, lo que se traduce en una voz chirriante.
3.4 La clasificación de las emociones
Según los autores Larsen, McGraw y Cacioppo, la clasificación de las
distintas emociones existentes se puede realizar en base a dos enfoques
diferentes, el que considera las emociones de forma individual, y el que
las considera de forma dimensional:
Estudio discreto o específico de las emociones
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 35
Este enfoque se basa en el hecho de que algunas emociones poseen
unas características que las hace únicas y diferenciables del resto.
Siguiendo este criterio muchos analistas de las emociones han
distinguido entre emociones primarias y emociones secundarias.
Las emociones primarias vendrían determinadas por una expresión
facial característica y por una disposición típica de afrontamiento de las
situaciones. La mayoría de los analistas consideran sólo 6 emociones
primarias: alegría, tristeza, enfado (ira), sorpresa, miedo y asco.
Por su parte, las emociones secundarias no presentarían rasgos faciales
distintivos ni una tendencia específica a la acción, y derivarían de las
primarias, obteniéndose a veces como combinación de las mismas. Al
contrario que en el caso de las primarias, puede encontrarse un amplio
abanico de emociones secundarias como el aburrimiento, la
impaciencia, la ternura, la ironía, la queja, el anhelo, la satisfacción, el
ensueño, la coquetería…
Estudio dimensional de las emociones
Frente al enfoque anterior, este modo de clasificación tiene su
fundamento en la existencia de importantes diferencias individuales en
el modo en el que las personas pueden desarrollar una emoción, por lo
que se considera que el empleo de categorías discretas no es la mejor
forma de describir la realidad. En su lugar se utilizan unas dimensiones
generales que definen un mapa donde se sitúan todas las posibles
emociones que pueden tener lugar, incluidas las definidas en el método
anterior como primarias y secundarias.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 36
Entre las técnicas empleadas para la clasificación de las emociones
mediante este enfoque, la más utilizada es la desarrollada por Russell
[Russell 1980], que sugiere que todas las emociones pueden ser
ubicadas en el interior de un círculo definido en un espacio
bidimensional, siendo estas dimensiones:
La valencia afectiva: Permite diferenciar las emociones en función
de lo placenteras o agradables que sean (positivas versus
negativas). Así, un suceso desencadenará una emoción positiva
cuando favorezca el logro de determinados objetivos, mientras
que si el suceso aleja esos objetivos, la emoción que se
desencadenará tendrá valencia negativa. Así, podemos encontrar
la alegría y el enfado en los dos extremos del eje que representa la
valencia.
La actividad: Permite diferenciar las emociones por la presencia o
ausencia de energía y tensión.
Según este enfoque, la representación de las distintas emociones en
este plano bidimensional sería la siguiente:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 37
Figura 3.1: Representación bidimensional de las emociones
[Alcázar 2007]
En distintos estudios se ha demostrado que se confunden más entre sí
las emociones con un nivel similar de actividad (como por ejemplo
alegría y enfado) que las que presentan similitudes en el nivel de
valencia. Esto lleva a la conclusión de que la actividad como dimensión
está más correlacionada con las variables auditivas relativamente más
simples de la voz, como pueden ser el tono y la intensidad, mientras
que la valencia está probablemente relacionada con factores más sutiles
y complejos.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 38
3.5 Las emociones estudiadas con nuestro
segmentador fonético automático
Para el desarrollo de nuestro segmentador fonético automático se han
empleado dos bases de datos (se estudiarán en los capítulos La base de
datos SES y La base de datos SEV), que contienen locuciones con voz
neutra y con seis emociones primarias: alegría, tristeza, enfado,
sorpresa, asco y miedo. Las principales características de estas seis
emociones se enuncian a continuación:
El habla neutra suele caracterizarse por un tono con un rango de
variación estrecho y unas transiciones de f0 suaves, además de
una velocidad de locución alta.
La alegría se manifiesta en un incremento en el tono medio y en
su rango, así como un incremento en la velocidad de locución y
en la intensidad.
El habla triste exhibe un tono medio más bajo que el normal, un
estrecho rango y una velocidad de locución lenta.
El enfado se caracteriza por un tono medio alto (229 Hz), un
amplio rango de tono y una velocidad de locución rápida (190
palabras por minuto), con un 32% de pausas.
La sorpresa se caracteriza por un tono medio mayor que la voz
normal, una velocidad igual a la normal y un rango amplio.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
3. El habla con emociones 39
El miedo se caracteriza por un tono medio más elevado que la voz
neutral (254 Hz), un rango mayor, un gran número de cambios en
la curva de tono y una velocidad de locución rápida (202 palabras
por minuto).
El asco es la emoción que más difícilmente se puede caracterizar,
según los estudios realizados al respecto, aunque en la mayoría
de los casos suele presentar un tono medio más alto que la voz
neutral y una velocidad de locución más lenta.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 40
4. DESCRIPCIÓN DE LAS HERRAMIENTAS
EMPLEADAS
En este capítulo se describen las principales herramientas que se van a
emplear a lo largo del proyecto, fundamentalmente HTK y los lenguajes
de comandos y PERL.
4.1 HTK
Como se ha comentado en la introducción, nuestro sistema de
segmentación se basará en los Modelos Ocultos de Markov y se
implementará mediante el uso de las herramientas HTK (Hidden
Markov Model Toolkit).
HTK es un conjunto de herramientas de software para diseñar y
manipular modelos ocultos de Markov (HMM, Hidden Markov Models), y
se emplea en múltiples áreas del conocimiento cuando el problema a
resolver puede ser enfocado como un proceso de modelación Estocástico
Markoviano (Reconocimiento y síntesis de voz, reconocimiento de
caracteres y formas gráficas, análisis de vibraciones mecánicas,
determinación de secuencias válidas del ADN humano…), aunque su
uso principal y para el que fue diseñado es el desarrollo de sistemas de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 41
reconocimiento automático del habla. La mayoría de estos sistemas se
basan en la utilización de la técnica de análisis estocástico de los
Modelos Ocultos de Markov, lo que implica problemas de alto grado de
complejidad y el manejo de grandes bases de datos (archivos,
parámetros, modelos, diccionarios), por lo que se hace necesaria una
herramienta computacional efectiva, como HTK, para abordar dichos
problemas.
El desarrollo de HTK lo lleva a cabo el grupo del habla, visión y robótica
del Departamento de Ingeniería de la Universidad de Cambridge
(CUED). Actualmente HTK es de libre distribución y su código y librería,
programados en lenguaje C, pueden ser modificados en común acuerdo
con el CUED. Además la herramienta se encuentra disponible para
utilizarlo en diversas plataformas o sistemas operativos (Unix, Linux,
Windows y DOS).
4.1.1 Funcionamiento general de HTK
HTK dispone de una arquitectura flexible y autosuficiente. Es
controlado por módulos de librerías, que alimentan la interfaz de
funciones correspondiente: Manejo de archivos, operaciones
matemáticas, interacción con el sistema operativo... La utilización de
cualquier herramienta disponible depende de dos aspectos:
– Línea de comandos como interfaz con el sistema operativo.
Dispone de parámetros opcionales para controlar detalles
particulares en su ejecución.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 42
– Módulos de librerías: Gran parte de la funcionalidad de HTK se
encuentra en las librerías. Estos módulos presentan interfaces
que aseguran que cada herramienta se comporte de cara al
usuario de manera homogénea, y ofrecen el conjunto de
funciones más utilizadas.
La llamada a las herramientas
El volumen de archivos que HTK debe manejar y controlar es siempre
elevado, por lo que la utilización de comandos es fundamental; sólo así
será práctico de utilizar. La línea de llamada a comandos es como sigue:
herramienta [opciones] archivos
donde herramienta es cualquiera de las definidas en el paquete HTK
(HCopy, HLed, Hrest, etc.), archivos son los que se emplean en las
acciones llevadas a cabo por dicha herramienta, y [opciones] agrupa las
variables, parámetros del sistema y librerías.
Las opciones particulares son indicadas mediante un guión, seguido de
una letra, y acompañada del valor alfanumérico correspondiente, en su
caso. Las letras minúsculas indican opciones propias de la herramienta,
y el parámetro utilizado podrá tener diferentes significados, según la
herramienta a ejecutar. Las letras mayúsculas son utilizadas para
indicar opciones comunes a todas las herramientas del sistema, por
ejemplo: [Young 2006]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 43
Opción –C: Esta opción introduce ficheros de configuración. El
archivo indicado posee una lista de parámetros que serán
cargados durante la inicialización de la herramienta invocada.
Opción –S: Sirve para potenciar y flexibilizar el manejo de base de
datos (archivos). Por ejemplo: Indicará a la herramienta que el
archivo mencionado hace referencia a una lista de archivos (Muy
útil en etapas de entrenamiento).
Opción –A: Imprime la línea de comandos con sus argumentos.
Opción –D: Muestra por pantalla las variables de configuración
que se están utilizando.
Opción –T: Permite que durante la ejecución de la herramienta
aparezca información relativa a la ejecución de la misma (uso de
trazas).
Opción –L: Busca las etiquetas en el directorio especificado.
Opción –H: Carga el HMM como un archivo macro de extensión
mmf (Master Macro File).
Los valores para los parámetros pueden ser:
Números enteros o flotantes.
Strings.
Booleanos.
Las librerías en HTK Como acabamos de decir, cada librería es un conjunto de instrucciones
para lograr una función específica en las herramientas disponibles. Hay
librerías comunes a todos los comandos y otras son particulares. Para
controlar de manera más precisa el comportamiento de las librerías
haremos uso de variables de configuración.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 44
La siguiente figura muestra la estructura de software de una
herramienta típica de HTK:
Figura 4.1: Arquitectura de software en HTK [Young 2006]
Los principales módulos de librerías disponibles en HTK son los
siguientes:
HShell: Es la interfaz entre HTK y el sistema operativo.
HMem: Controla la gestión de memoria.
HMath: Ofrece funciones matemáticas, y maneja estructuras de
alto nivel como matrices y vectores.
HSigP: Ofrece operaciones de procesamiento de la señal
necesarias para el análisis de alocuciones.
HLabel: Módulo para el manejo de archivos de etiquetas.
HLM: Módulo para el manejo de archivos de modelos de
lenguajes.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 45
HNet: Módulo para el manejo de redes; soporta archivos con
formato Lattice y Networks, necesarios para la fase de
reconocimiento.
HDict: Módulo para el control del diccionario del sistema.
HVQ: Módulo para el manejo de codebook de vectores
cuantificados.
HModel: Módulo para la interpretación las definiciones de HMM.
HWave: Manejo de archivos de entrada y salida a nivel de señal
de audio.
HParm: Control de parametrización en señales de audio.
HAudio: Controla adquisición en vivo de señales de audio.
HGraf: Manejo gráfico de señales de audio.
HUtil: Provee rutinas de manipulación de HMM.
HTrain: Soporte para entrenamiento de modelos.
HAdapt: Provee soporte para las herramientas de adaptación del
reconocedor a uno o más locutores.
HRec: Conjunto de funciones para el procesado en etapa de
reconocimiento.
4.1.2 Parametrización con HTK
Dada una señal, debemos extraer su información, es decir, debemos
extraer los parámetros que caracterizan a la señal, los cuales nos
servirán para entrenar los HMM y efectuar el reconocimiento.
HTK acepta dos formatos de parametrización:
– Formato de parámetros HTK: Opción por defecto.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 46
– Formato de parámetros Esignal: Similar al formato HTK, sólo
presenta diferencias en las cabeceras de los archivos.
Existen tres posibilidades para la obtención de las muestras:
1. Archivos Parametrizados: Al experimentar con señales, lo primero
que debemos lograr es disponer de una base de datos parametrizada,
sólo así, posteriormente, podremos realizar múltiples experimentos.
Para construirla, HTK dispone de la herramienta HCopy. Las entradas
de HCopy son la señal en banda base (en formato wav) y un archivo de
configuración de la parametrización, el cual le indica a HTK la manera
de analizar los datos. HCopy entrega como salida un archivo de voz
parametrizada convertida en una matriz o vector de vectores.
2. Archivo de Señal: Para cualquier señal deberán tomarse las
muestras y parametrizarlas. Sólo así, HTK podrá interpretarlas.
3. Entrada Directa por Micrófono: Es especial para experiencias con
voz en vivo. Habrá que tener en cuenta el efecto del ruido ambiental y
obligatoriamente se debe filtrar.
En cuanto a la parametrización de la señal, como hemos comentado,
HTK soporta todo el proceso de parametrización por medio del comando
HCopy. Hcopy es una herramienta de propósito general que se emplea
para copiar, filtrar y extraer features de los ficheros de audio.
Por defecto HCopy realiza una simple copia del fichero de origen en el
fichero destino. Dicho comportamiento puede modificarse con las
opciones especificadas en el fichero de configuración. En este fichero
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 47
pueden detallarse un conjunto de transformaciones que se aplican
sobre el fichero origen y se guardan en el fichero destino. La idea es que
exista un tipo de parámetros origen y un tipo de parámetros destino de
forma que, especificando dichos tipos en el fichero de configuración,
HCopy realice la conversión entre ambos formatos.
Este archivo de configuración al que hacemos referencia puede ser un
archivo de texto codificado en ANSI. En él se debe indicar el tipo de
algoritmo a aplicar: Banco de Filtros, Cepstrum y MEL Cepstrum. Los
parámetros para especificar el archivo de configuración son:
Formato de datos: SOURCEFORMAT=HTK
Tipo de algoritmo y análisis: TARGETKIND. tenemos las
siguientes posibilidades [Carrillo 2007]:
ALGORITMO TIPO DE ANÁLISIS
LPC Predicción Lineal
LPREFC Coeficientes de Reflexión para LPC
LPCEPSTRA LPC con Cepstrum
LPDELCEP LPC Cepstrum - Plus de Coeficientes
IREFC LPC - Coeficientes de Reflexión
MFCC Coeficientes MEL Cepstrum
FBANK Banco de filtros de MEL con salida LOG
MELSPEC Banco de filtros de MEL con salida Lineal
Tamaño de la ventana de análisis: WINDOWSIZE
Desplazamiento de tramas: TARGETRATE.
Número de coeficientes cepstrales: NUMCEPS.
Filtro de Preénfasis: PREEMCOEF.
Número de bancos de filtros: NUMCHANS.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 48
Ganancia Cepstral: CEPLIFTER. Se emplea para reescalar los
coeficientes cepstrales de modo que todos estén en el mismo
orden de magnitud.
Para afinar en el análisis se emplea un grupo finito de coeficientes
extras:
Cantidad de Energía: _E
Energía total Suprimida: _N
Coeficientes Delta: _D
Coeficientes de Aceleración: _A
Uso de compresión: _C
Valor medio nulo: _Z
Coeficiente Cepstral nulo: _0
Por poner un ejemplo que utilizaremos en nuestro segmentador, por
medio de la variable TARGETKIND=MFCC_E_D_A HTK sabrá del tipo de
análisis; significa que el algoritmo es un banco de filtros con
coeficientes cepstrales MFCC, al que se le añade la energía _E, los
coeficientes Delta _D y los de aceleración _A. Un ejemplo de archivo de
configuración de la parametrización usado en nuestro segmentador se
muestra a continuación (es un extracto del fichero
config_hcopy_ses_mfcc_). El tamaño de la ventana para el análisis es de
25 ms y el tiempo para cada muestra alcanza los 10 ms.
SOURCEFORMAT = NOHEAD SOURCERATE = 625.0
SOURCEKIND = WAVEFORM
TARGETFORMAT = HTK
TARGETRATE = 100000.0
TARGETKIND = MFCC_E_D_A
HPARM: WINDOWSIZE = 250000.0
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 49
HPARM: NUMCEPS = 12 HPARM: USEHAMMING = T
HPARM: PREEMCOEF = 0.97
HPARM: NUMCHANS = 40
HPARM: CEPLIFTER = 22
La llamada para ejecutar HCopy es:
HCopy [opción] archivo_parametrización [opción] archivo
_salidaParametrizada.
Como las llamadas a las herramientas de HTK a veces pueden ser muy
complejas emplearemos de ahora en adelante diagramas en bloque que
ayuden a comprender el uso de la herramienta. Así, la llamada de
Hcopy respondería al siguiente diagrama de bloques:
Figura 4.2: Diagrama de bloques de la llamada a HCopy [Carrillo 2007]
El archivo_salidaParametrizada debe poseer extensión mfcc, indicando
con ello que los datos corresponden a vectores codificados según
coeficientes cepstrales de frecuencia MEL.
Para visualizar los resultados del proceso de parametrización, HTK
dispone del comando HList. Si el usuario desea conocer el vector de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 50
parametrización para alguna forma de onda en particular, la llamada
debe ser:
HList [opción] archivo_de_audio
Figura 4.3: Diagrama de bloques de la llamada a HList [Carrillo 2007]
La entrada es un archivo de audio, la señal de audio en formato wav.
HList entrega un archivo con el informe de la parametrización de las
muestras.
Análogamente, HTK dispone de recursos para realizar la cuantización
de los vectores (o etiquetado). Se puede optar por los modelos de
densidad discreta o continua; en estos últimos los vectores cuantizados
se agrupan como un codebook, lo cual permite acelerar el proceso de
reconocimiento reduciendo el tiempo de los cálculos, pero reduce la
precisión debido a que la tasa de error aumentará con facilidad, dando
lugar a reconocedores débiles. La herramienta HSlab es la encargada
de realizar el etiquetado en HTK. Se dispone para ello de una interfaz
gráfica que simplifica el proceso:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 51
Figura 4.4: Diagrama de bloques de la llamada a HSlab [Carrillo 2007]
Figura 4.5: Etiquetado de una señal de audio con HSlab [Carrillo 2007]
A pesar de su utilidad práctica, ni HList ni HSlab son necesarias para el
desarrollo de nuestro segmentador, por lo que se han descrito aquí
brevemente. En cambio HCopy sí es fundamental en nuestro proceso de
parametrización, por lo que volveremos a esta herramienta cuando
detallemos este proceso en el capítulo dedicado a los scripts del
segmentador.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 52
4.1.3 Creación de Modelos de Markov
El concepto de Modelo Oculto de Markov está ampliamente difundido;
su esquema se muestra en la siguiente figura:
Figura 4.6: Esquema de un HMM [Carrillo 2007]
Los elementos característicos de todo HMM, son:
Número de estados: N
Número de símbolos observables por estado: M
Probabilidad de transición entre estados: A={aij}
Distribución de Probabilidad de símbolos de observación: B=bj(k)
Distribución inicial de estados: Π={ πi}
Para que un HMM sea útil, deben responderse las tres preguntas
siguientes: [Carrillo 2007]
1.- ¿Para el modelo, cómo se evalúa la probabilidad de la secuencia
observada?
El algoritmo Fordward – Backward permite resolver este problema.
Consiste básicamente en un proceso que permite optimizar el cálculo de
la probabilidad, de lo contrario, el procesamiento (multiplicaciones y
adiciones) sería tan grande que no podría implementarse de manera
práctica. Con su aplicación, bastan 2TN2 operaciones de cómputo, en
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 53
vez de 2TNT operaciones al no utilizar el algoritmo, siendo T el número
de observaciones realizadas.
2.- ¿Cómo elegir la secuencia óptima de estados?
Este problema se puede resolver abordando la técnica de programación
dinámica, específicamente utilizando el algoritmo de Viterbi.
3.- ¿Cómo ajustar los parámetros del modelo?
Basándonos en algún criterio de optimización podríamos responder a
esta pregunta, y para ello es necesario utilizar el algoritmo de Baum –
Welch.
Implementación de un HMM
Como paso previo al entrenamiento de modelos, es necesario definir la
topología requerida para cada HMM. Las definiciones de cada modelo se
almacenan en archivos de texto donde se recogen todos los parámetros
de cada uno de ellos. El objetivo es diseñar un único prototipo de HMM
para especificar las características generales de todos los modelos que
más adelante formen parte del sistema.
Deben indicarse los siguientes parámetros:
Tipo de vector de observación.
Número de estados.
Número de flujos de datos (data streams) y su ancho.
Cada estado emisor (de cada flujo) se indica con el número de
componentes mixtas (mixtures component) de la gaussiana y su
correspondiente peso. Los parámetros de cada componente son:
Media y covarianza.
Parámetros opcionales (duración del vector y peso del flujo).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 54
Matriz de transición.
El modelo más sencillo será aquel que no tiene ningún parámetro
global, es decir, que no comparte ninguna característica de las
anteriormente nombradas con ningún otro modelo. La complejidad de
los modelos puede ir aumentando según se vayan compartiendo más
características (requiere uso de macros). Una macro es cualquiera de
los grupos de parámetros del modelo almacenado externamente al
mismo. Así, para hacer uso en un modelo de un parámetro definido
mediante una macro, sólo habrá que incluir una línea en la que se
llame a esa macro.
El lenguaje de definición de modelos utiliza el mismo carácter clave
para indicar las macro de los distintos parámetros (~tipo de macro). Sin
embargo, se pueden distinguir dos tipos de macros (según su uso):
– Macro para un modelo: Los parámetros internos de un modelo
concreto se escriben como unidades separadas (como archivos
diferentes). Se pueden hacer macros de todos los parámetros
indicados en un modelo. Las macros más empleadas son las de
los parámetros correspondientes a cada uno de los estados. De
este modo se puede tener, por ejemplo, la misma varianza en
todos los estados de un modelo.
– Macros comunes para varios modelos: Idéntico al anterior, pero
habrá varios modelos compartiendo la misma macro. Se lograría,
por ejemplo, que todos los modelos tengan algún estado con un
mismo vector de varianza.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 55
Se ha discutido ampliamente sobre cómo generar un prototipo de HMM,
llegándose a la siguiente conclusión: es más sencillo realizar un modelo
con parámetros aislados, pero querer lograr una elevada tasa de
aciertos en el reconocedor requerirá enlazar estados o modelos. La
opción más útil parece ser partir de un modelo sencillo, donde se
encuentren todos los parámetros que se van a manejar de modo
aislado.
Lenguaje para definición de modelos
HTK usa un lenguaje propio para definir los modelos, así todas las
herramientas funcionarán correctamente con el mismo HMM. Conviene
conocer este lenguaje para poder editar un prototipo acorde con
nuestras necesidades.
El ejemplo siguiente está extraído de uno de nuestros ficheros (models
de hmm1m1) y corresponde a un modelo de cinco estados, tres son de
emisión (los estados de entrada y salida no emiten. Ver figura 3.5). La
primera línea indica el nombre del HMM, ~h “nombre”. Aquí se está
definiendo el modelo (o alófono) llamado “J”. En la siguiente línea hay
que poner la palabra clave <BeginHMM>, que indica el punto a partir
del cual se encuentran los parámetros del modelo. Al final de la
definición habrá otra palabra clave complementaria <EndHMM>.
~o
<STREAMINFO> 1 13
<VECSIZE> 13<NULLD><MFCC_0><DIAGC>
~h "J"
<BEGINHMM>
<NUMSTATES> 5
<STATE> 2
<MEAN> 13
-2.206162e+002 -5.421960e+001 [...]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 56
<VARIANCE> 13
3.833246e+004 3.632157e+004 [...]
<GCONST> 1.631388e+002
<STATE> 3
<MEAN> 13
-2.181095e+002 -5.599409e+001 [...]
<VARIANCE> 13
3.833246e+004 3.685270e+004 [...]
<GCONST> 1.632600e+002
<STATE> 4
<MEAN> 13
-2.145374e+002 -6.134979e+001 [...]
<VARIANCE> 13
3.833246e+004 3.796980e+004 [...]
<GCONST> 1.634138e+002
<TRANSP> 5
0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000
0.000000e+000 6.734391e-001 3.265609e-001 0.000000e+000 0.000000e+000
0.000000e+000 0.000000e+000 6.734399e-001 3.265601e-001 0.000000e+000
0.000000e+000 0.000000e+000 0.000000e+000 6.734408e-001 3.265592e-001
0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000
<ENDHMM>
El orden dentro de la jerarquía es de mayor a menor importancia:
– <BeginHMM>, <EndHMM>
– Parámetros globales, número de estados, definición de cada
estado y matriz de transición entre estados.
– Número de flujos de dato y sus pesos.
– Número de componentes mixtas y sus pesos.
– Media y varianza de cada uno de las componentes mixtas.
Al principio se especifican los aspectos globales de todos los modelos
que conformen la base, los que suelen indicarse son: Tamaño de los
vectores de parámetros <VecSize> número entero y el algoritmo con el
que se han extraído la información de la forma de onda. El algoritmo se
pone entre llaves, como el resto de palabras clave. En este caso
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 57
<MFCC_0>. Para no dar lugar a errores, el nombre del algoritmo será el
indicado durante el proceso de parametrización. En la siguiente línea se
deben indicar el número de estados que componen el modelo, 5 en
nuestro caso. A partir de este punto se encuentra la definición de cada
estado. La información recogida para cada estado depende de cuántos
flujos de datos se utilizan y del número de componentes de mezcla
gaussiana en cada flujo. Existen también casos que mezclan varios
flujos de datos y cada uno de ellos cuenta con diversas componentes de
mezcla. Una vez alcanzada la componente de mezcla gaussiana como
unidad fundamental, los parámetros serán:
– Vector de valores medios.
– Vector de varianza, en alguno de los siguientes formatos:
Varianza. El vector es la diagonal de la matriz.
Covarianza. La distribución gaussiana se indica como una
matriz completa. Estas son simétricas, por lo que sólo se
almacena la diagonal superior.
Una vez que se han definido todas las componentes de mezcla de todos
los flujos y para todos los estados, el prototipo de HMM se completa con
la matriz de transición de estados <TransP> tamaño. Esta debe ser una
matriz cuadrada, cuyo tamaño hay que indicar siempre de modo
explícito, y debe corresponder con el número de estados definidos
anteriormente. La suma de todas las componentes de cada fila debe
resultar la unidad, excepto para el último estado, cuya suma debe ser
siempre cero (no se permite ninguna transición que parta del estado
final hacia alguno de los estados anteriores). Finalmente el modelo se
termina con <EndHMM>.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 58
4.1.4 Entrenamiento de los HMM
El entrenamiento de los HMM consiste básicamente en actualizar los
valores de los parámetros mediante diferentes algoritmos y, con ello,
conseguir modelos más ajustados a la realidad o aplicación. Por lo
tanto, debe ser un proceso optimizado. Consta de dos fases:
i) Inicialización, que se consigue por medio de la herramienta
HInit.
ii) Aplicación del algoritmo de Baum-Welch.
También está disponible la posibilidad de realizar un entrenamiento
global, lo cual siempre se debería realizar. HTK dispone de la
herramienta HERest para dicha tarea. Veamos pues las herramientas
para el entrenamiento:
HInit aprovecha las facilidades del segmentado de etiquetas para
detectar los diferentes alófonos. Los busca en cada modelo y
posteriormente utiliza el algoritmo de Viterbi para la estimación de las
medias y varianzas. El proceso se repite hasta que el algoritmo ya no
pueda mejorar la semejanza, que es calculada en paralelo. La llamada
para inicializar cada modelo de cada alófono se hace de modo iterativo,
como se muestra en la siguiente figura:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 59
Figura 4.7: Diagrama de bloques de la llamada a HInit [Carrillo 2007]
HInit [opción] datos_parametrizados [opción] directorio_destino [opción] \
archivo_fuente [opción] etiqueta [opción] directorio_fuente_etiquetas
HRest utiliza el algoritmo de Baum - Welch (reestimación de los
parámetros de los modelos aislados). Este modo de entrenamiento debe
realizarse de modo iterativo, para cada alófono del conjunto. Las
opciones de esta herramienta son muy poderosas y su diagrama de
llamada se muestra en la figura:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 60
Figura 4.8: Diagrama de bloques de la llamada a HRest [Carrillo 2007]
HERest realiza un entrenamiento global actualizando simultáneamente
todos los modelos del sistema. Se ignora la información de segmentado
en las etiquetas, pues sólo interesa conocer el mensaje que contiene la
frase. Cada etiqueta usada en este entrenamiento acumula estadísticas
provenientes del algoritmo Forward - Backward. Su diagrama de
llamada es mostrado en la figura:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 61
Figura 4.9: Diagrama de bloques de la llamada a HERest [Carrillo 2007]
El significado de cada archivo en fase de entrenamiento que se anota en
los diagramas anteriores es el siguiente:
Datos_parametrizados: Son los archivos que conforman la base de datos
parametrizada (archivos con extensión mfcc), a entrenar. Generalmente
se indica la manera de cómo acceder a esos datos bajo opción S (script).
Archivos_salida_Estadística: Es el archivo que genera el proceso
HERest, como resultado estadístico del análisis del entrenamiento.
Directorio_fuente_etiquetas: Es la ruta para alcanzar el archivo que
contienen la lista con todas las etiquetas del proceso.
Lista_archivos_modelos_ocultos_de_markov: Es la ruta para ubicar al
archivo con todos los modelos de Markov actualizados.
Lista_nombre_sonidos_a_reconocer: Es la indicación que caracteriza al
archivo de entrada que contiene la lista de todos los HMM del proceso.
En nuestro proyecto emplearemos la tercera de las herramientas,
HERest, para llevar a cabo el entrenamiento. Adicionalmente a ésta,
emplearemos la herramienta HCompV para los casos de experimentos
de normalización cepstral.
HCompV calcula la media y la covarianza de un conjunto de datos de
entrenamiento. Lo emplearemos en la fase de normalización Cepstral ya
que trabajaremos con dos tipos de normalizaciones: normalización
cepstral de la media (CMN, Cepstral Mean Normalisation) y
normalización cepstral de la varianza (CVN, Cepstral Variance
Normalisation).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 62
CMN, Normalización cepstral de la media
En el dominio de la frecuencia, el efecto de insertar un canal de
transmisión es multiplicar el espectro de la voz por la función
de transferencia del canal. En el dominio logarítmico de los
coeficientes cepstrales esta multiplicación se convierte en una
sencilla suma, que puede ser aproximadamente compensada
restando la media cepstral a todos los vectores de parámetros.
En la práctica, la media se estima a partir de una cantidad
limitada de datos, de forma que la cancelación del efecto del
canal de transmisión no es perfecta. La media se estima
calculando el promedio de cada parámetro cepstral a lo largo
del fichero o agrupación de ficheros en cuestión. Es importante
destacar que CMN se aplica a los coeficientes estáticos, luego
se calculan los coeficientes delta y aceleración, y por último se
realiza CVN sobre los tres tipos de coeficientes.
Respecto a la aplicación de CMN, el resultado de la estimación
de las medias cepstrales de los coeficientes estáticos se guarda
en un fichero. De modo que las herramientas de HTK que
necesiten trabajar con CMN tendrán que restar a cada fichero
de parámetros su correspondiente fichero de medias durante la
ejecución.
CVN, Normalización cepstral de la varianza
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 63
De un modo paralelo, también podemos normalizar la varianza
de los parámetros cepstrales. Con esto logramos que los
márgenes de variación de los parámetros en todos los ficheros
de la base de datos sean similares, hecho que favorecerá el
entrenamiento de los HMM. CVN se realiza normalizando a 1 la
varianza del fichero en cuestión dividiendo todos sus vectores
de parámetros por su varianza cepstral, y multiplicando
posteriormente por la varianza global.
2
2
fich
global
orignorm OO
La estimación de la varianza cepstral se obtiene calculando la
varianza de cada parámetro cepstral a lo largo de ese fichero o
agrupación de ficheros. Y por varianza global nos referimos a
la varianza de los parámetros cepstrales calculada a lo largo de
toda la base de datos. Al igual que CMN, CVN también se
realiza en tiempo de ejecución.
4.1.5 Red gramatical y Diccionario
Red gramatical es la secuencia de palabras que pueden reconocerse,
mientras que el término Diccionario describe los diferentes alófonos
que componen cada una de las palabras (red).
Pueden crearse distintos tipos de redes, dependiendo del modelo de
lenguaje utilizado. Si el problema consiste en reconocer señales de voz
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 64
con nombre y apellido, entonces un ejemplo de red gramatical será la
mostrada en la figura 3.9. La sintaxis divide la red en tres partes:
cabecera, nodos y enlaces. Los enlaces pueden ser: unigrama
(probabilidad de una palabra) o bigrama (transiciones posibles entre
unas palabras hacia otras).
Figura 4.10: Estructura de una red gramatical [Carrillo 2007]
Los valores de probabilidad de los enlaces dependen del modelo de
lenguaje usado. Se definen tres tipos:
i) Wordloop: Todos los enlaces son equiprobables.
ii) Bigrama: Cada enlace tendrá una probabilidad que se ajusta
al número de ocurrencias de esa transición en el texto de
entrada.
iii) Modelo propio: No asignan probabilidades, indica cuáles son
los enlaces permitidos. Esta estructura resulta ideal cuando se
usan diccionarios con muy pocas palabras.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 65
4.1.6 Reconocimiento y evaluación de resultados
Una vez configurada la red gramatical debemos ingresar a la etapa de
reconocimiento y evaluación de resultados. Esta opción sólo requiere de
archivos parametrizados y de un repertorio de alocuciones (base de
datos para el reconocimiento). Los resultados los da a conocer un
archivo de salida, siendo fundamental el porcentaje de reconocimiento.
Archivos MLF: En el proceso de reconocimiento se generan etiquetas de
los distintos archivos que se han utilizado. Cuantos más archivos se
reconozcan, más fiable podrá ser la estadística de aciertos que se
calcule. La manera natural de almacenar las etiquetas es utilizando un
archivo de etiquetas maestro (Master Label File: MLF). Éste cumple una
función idéntica a las macros de los HMM, va almacenando dentro de
un único archivo todas las etiquetas (de ahí su nombre).
HVite: Es la herramienta que maneja el algoritmo de Viterbi. Debe
proporcionar el camino de mayor probabilidad para la secuencia óptima
de estados. Cuanto más grande sea la red, más procesamiento requerirá
el algoritmo y, por lo tanto, más lento resultará el reconocimiento. Su
llamada la indica el siguiente diagrama de bloques:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 66
Figura 4.11: Diagrama de bloques de la llamada a HVite [Carrillo 2007]
HResults: Es la herramienta de HTK que entrega los resultados del
proceso de evaluación. Compara las etiquetas de entrada y las de
salida, dando lugar a una matriz de confusión de los distintos HMM
(calidad del proceso). La salida de este comando se realiza por pantalla
y para guardar los resultados habrá que usar un redireccionamiento
adecuado hacia un archivo de texto.
Figura 4.12: Diagrama de bloques de la llamada a HResults [Carrillo
2007]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 67
4.2 EL LENGUAJE DE SCRIPTS
Gran parte del desarrollo de nuestro segmentador automático lo
realizaremos mediante el uso de archivos de procesos por lotes o
scripts, cuya extensión es .bat, y que nos permiten codificar grandes
cadenas de instrucciones y agruparlas según el uso que se le da en el
programa global, la etapa del proceso de segmentación de que se trate,
etc. Por ello es interesante hacer una breve introducción al lenguaje de
scripts y a alguna de las instrucciones del mismo que empleamos en
nuestro proyecto.
La shell que emplearemos es la de Windows, que se basa en la del
antiguo sistema operativo MS-DOS. Un proceso por lotes es un archivo
de texto formado por varios comandos de la shell de Windows. Esta
secuencia de comandos se ejecuta de uno en uno, línea a línea, en el
mismo orden en que aparecen en el programa, como si se tecleara cada
uno delante del símbolo del sistema.
En algunas ocasiones, como en las ejecuciones de experimentos con el
segmentador que nos ocupa, el usuario escribe repetidamente la misma
secuencia de comandos para realizar algunas tareas comunes. Para
evitar eso podemos colocar esta secuencia de comandos en un archivo
de procesamiento por lotes y ejecutar automáticamente toda esa
secuencia de comandos. Para que puedan ser reconocidos por el
sistema Windows como archivos especiales, los archivos de
procesamiento por lotes, también conocidos como ficheros BAT o
scripts, deben llevar la extensión .BAT.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 68
4.2.1 Gestión de argumentos en los procesos por lotes
Los argumentos son informaciones adicionales colocadas detrás del
nombre de una orden. Si la mayoría de las órdenes del sistema admiten
argumentos o modificadores, también será posible gestionar
argumentos en los ficheros por lotes.
Un ejemplo del uso de argumentos en los scripts del segmentador se
observa en las dos primeras líneas de nuestro fichero experim.bat:
echo on
set FICH_LOG=log_%1_%5_%6_states%2_iter%3_gauss%4.log
Si ejecutamos este proceso por lotes o script, de la siguiente manera:
C:\> experim.bat mfcc 4 6 30 _cmn D_A_Z_0 39
tendríamos que esa línea se transformaría en:
set FICH_LOG =log_mfcc_cmn_D_A_Z_0_iter6_states4_gauss30.log
En la línea de comandos, cada parámetro debe estar separado con un
espacio en blanco. De la forma anteriormente explicada podemos
gestionar hasta nueve parámetros (del %1 al %9).
4.2.2 Comandos específicos para procesos por lotes
Aparte de los comandos usuales de la shell de Windows, en los procesos
por lotes podemos usar algunos comandos especiales, que nos permiten
programar estructuras complejas usando procesos. La referencia
completa de todos los comandos puede encontrarse en [Microsoft 2012].
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 69
Nosotros nos fijaremos especialmente en los comandos que empleamos
en nuestros scripts, describiendo la función que realizan, el formato con
el que se les debe llamar, y veremos un ejemplo de cada comando
sacado de nuestros scripts. De este modo, los comandos que
emplearemos son:
COMANDO CALL (llamar)
Función: Llama a un archivo de procesamiento por lotes desde
otro igual, sin salir del archivo que hizo la llamada. Es decir,
invoca la ejecución de otros archivos como una subrutina o una
función.
Formato: CALL nombre_del_script
Una vez terminada la ejecución del proceso por lotes llamado con
CALL, se reanuda la ejecución del archivo que hizo la llamada. Un
archivo de proceso por lotes, puede hacer una llamada repetitiva
a sí mismo (recursividad), siempre y cuando exista una condición
de finalización.
Ejemplo: Al estar nuestro segmentador programado de manera
modular, la gran mayoría de nuestros scripts llaman a otros, de
manera que la concatenación de los mismos da lugar al proceso
completo. Por ejemplo, en nuestro script full.bat encontramos
call limpia.bat
call experim.bat plp 5 5 5 _ 0_D_A 39
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 70
que llama a los scripts limpia.bat y experim.bat, para que se
ejecuten, acompañados en su caso de sus correspondientes
argumentos.
COMANDO ECHO (eco)
Función: Este comando activa y desactiva la salida de comandos
por pantalla, o escribe un mensaje por pantalla.
Formato: ECHO [ON] [OFF] [MENSAJE]
Echo ON: Nos permite ver en pantalla los comandos de DOS que
están siendo ejecutados desde un archivo de proceso por lotes.
Echo OFF: Desactiva la visualización en pantalla de los comandos.
El valor por defecto es ECHO ON.
Echo mensaje: Este comando nos permite imprimir mensajes en
la pantalla.
Si escribimos simplemente ECHO, se nos presentará en pantalla
el estado actual de ECHO.
Podemos insertar el símbolo @ (arroba), antes de una línea de
comandos en un archivo de proceso por lotes, para que no se
haga ECO de dicha línea.
Si queremos dejar en pantalla una línea en blanco, se usa ECHO.
(ECHO y un punto sin dejar espacios en blanco entre la O y el
punto).
Ejemplo: en nuestro script segm_monophones.bat la línea
siguiente escribe un mensaje por pantalla, que nos ayuda a saber
por qué parte del proceso se encuentra en este momento la
ejecución del segmentador:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 71
echo "Segmentation with one mixture HMM"
COMANDO GOTO (transferencia de control)
Función: Transfiere el control del proceso a una línea con
etiqueta, dentro del script.
Formato: GOTO [:] etiqueta
Etiqueta puede ser cualquier palabra que deseemos y se
reconocen porque empiezan por “:”.
Ejemplo: en varias partes de nuestro programa se presenta la
instrucción:
goto :FINAL
Al encontrarse nuestro programa un comando GOTO, se buscará
la etiqueta :FINAL en el script; si se encuentra, nuestro programa
saltará a dicha etiqueta y continuará en la línea que sigue a la
misma.
COMANDO PAUSE (pausa)
Función: Suspende la ejecución de un archivo de procesamiento
por lotes.
Formato: PAUSE (comentario)
Cuando se está ejecutando un archivo de procesamiento por
lotes, puede ser necesario cambiar el disco o realizar alguna otra
operación, por lo cual debemos pausar el proceso hasta que el
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 72
usuario pulse una tecla. El comando PAUSE suspende este
proceso temporalmente, hasta que se presione cualquier tecla; al
ejecutarse emite el siguiente mensaje: Pulse cualquier tecla
cuando esté listo(a)...
Pause comentario: Es útil cuando desea poner en pantalla un
mensaje especial. A menos que el ECHO esté desactivado, PAUSE
muestra ese comentario antes de pulsar tecla.
Ejemplo: en la implementación de nuestros scripts hemos
empleado en múltiples ocasiones el comando pause como forma
de establecer un punto de corte en el proceso, de modo que se
pueda revisar éste antes de pasar a la siguiente etapa.
COMANDO REM (recordatorio, comentario)
Función: Nos permite poner comentarios en el programa.
Formato: REM comentario
Ejemplo: en nuestro script segm_monophones.bat la línea
siguiente muestra un comentario, que nos servirá de control:
rem 1. SEGMENTATION with one mixture HMM
COMANDO IF (si)
Función: Desvía condicionalmente el proceso de ejecución de un
fichero por lotes.
Formato:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 73
IF [NOT] ERRORLEVEL número comando
IF [NOT] cadena1==cadena2 comando
IF [NOT] EXIST archivo comando
NOT especifica que Windows debe ejecutar el comando sólo si la
condición es falsa.
ERRORLEVEL número especifica una condición verdadera si el
último programa que se ejecutó devolvió un código de salida igual
o mayor que el número especificado.
cadena1==cadena2 especifica una condición verdadera si las
cadenas de texto especificadas coinciden.
EXIST archivo especifica una condición verdadera si el archivo
especificado existe.
comando especifica el comando que se ejecutará si se cumple la
condición. Comando puede ir seguido de la palabra clave ELSE y,
a continuación, un comando que se ejecutará si la condición
especificada es FALSA. La cláusula ELSE debe aparecer en la
misma línea que la del comando que sigue al IF.
También podemos realizar distintos tipos de comparaciones
usando el siguiente formato:
IF [/I] cadena1 comparación cadena2 comando
donde comparación puede ser:
EQU – igual (equal)
NEQ - no igual
LSS - menor que
LEQ - menor que o igual
GTR - mayor que
GEQ - mayor que o igual
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 74
Y el modificador /I, si se especifica, realiza comparaciones de
cadena que no distinguen entre mayúsculas y minúsculas. El
modificador /I también puede usarse en la forma
cadena1==cadena2 de IF.
Ejemplo: en nuestro script train_monophones.bat la línea
siguiente introduce una condición con if, de modo que las líneas
que se encuentran entre paréntesis sólo se ejecutarán si se
cumple dicha condición (en este caso, que se haya especificado
que se realice la normalización cepstral):
if %TIPO%==%TIPO_BASE%_cmn_cvn (
"%HTK_DIR%\HCompV.exe" -A -D -C %CONFIG_FILE_CMN% -c ..\cmn -q
m -k "*%%%%%%%%%%%%%%%%%%%%%%%%."%TIPO_BASE% -S
%LIST_FILE_TRAIN% > ..\cmn\HCompv.cmn.log
)
Comando FOR
Formato: FOR %%variable IN (conjunto) DO orden
Función: Este comando repite la orden especificada para cada
valor del conjunto. Conjunto es una lista de datos. En ella, se
pueden establecer varios nombres separados por espacios y
también utilizar comodines para representar ficheros o
directorios.
Ejemplo: en nuestro script segm_monophones.bat la línea
siguiente introduce una iteración con for:
for /L %%i in (1,1,%NUM_GAUSSIANS%) do call segm_gauss.bat %%i
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 75
Como se ve en el ejemplo, las variables del FOR no tienen un solo
% como los argumentos, ni están encerradas entre % como las
variables del sistema, sino que comienzan por %%.
4.3 EL LENGUAJE PERL
A lo largo de los distintos scripts fundamentales del segmentador
recurrimos en varias ocasiones al lenguaje de programación perl, para
realizar tareas de simplificación o automatización. Por ello, dedicaremos
ahora un apartado a realizar una breve descripción del mismo.
Perl (Practical Extraction and Report Language) es un lenguaje de
propósito general originalmente desarrollado para la manipulación de
texto y que ahora es utilizado para un amplio rango de tareas
incluyendo administración de sistemas, desarrollo web, programación
en red, desarrollo de GUI y más.
Se previó que fuera práctico (facilidad de uso, eficiente, completo) en
lugar de “bonito” (pequeño, elegante, mínimo). Sus principales
características son que es fácil de usar, soporta tanto la programación
estructurada como la programación orientada a objetos y la
programación funcional, tiene incorporado un poderoso sistema de
procesamiento de texto y una enorme colección de módulos disponibles
[Pérez 2008].
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 76
4.3.1 Estructura del lenguaje
Perl se considera un lenguaje interpretado, es decir, no es necesaria
una previa compilación para poder ejecutarse, lo único que se necesita
es pasarle al intérprete, perl, el código que queremos que ejecute.
Puede encontrarse amplia información sobre el lenguaje Perl en
[Perldoc 2012] y [Lizama 2012]. Nosotros nos detendremos en realizar
una breve explicación tan sólo de los elementos que componen las
instrucciones que se han empleado en la implementación de los
programas en perl que se utilizan en este proyecto:
Tipos de datos
Perl tiene tres tipos de datos: escalares, listas y hashes.
Un escalar es un sólo valor; puede ser un número, un string
(cadena de caracteres) o una referencia
Una lista es una colección ordenada de escalares (una variable
que almacena una lista se llama array)
Un hash, o memoria asociativa, es un mapeo de strings a
escalares; los strings se llaman claves y los escalares valores.
Todas las variables están precedidas por un símbolo, que identifica el
tipo de dato que es accedido (no el tipo de dato de la misma variable).
Se puede usar el mismo nombre para variables de diferentes tipos, sin
que tengan conflictos.
$var # un escalar
@var # un array
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 77
%var # un hash
Estructuras de control
Perl tiene estructuras de control orientadas a bloque, similares a las
que tienen los lenguajes de programación C y Java. Las condiciones
están rodeadas por paréntesis y los bloques subordinados mediante
llaves:
while (condición) {...}
while (condición) {...} continue {...}
for (expresión_inicial; expresión_condicional; expresión_incremental) {...}
if (condición) {...}
if (condición) {...} else {...}
if (condición) {...} elsif (condición) {...} else {...}
Nuestros programas en Perl hacen uso continuamente de las
estructuras de control, dado que son una buena manera de realizar
labores repetitivas de manera automatizada. Por ejemplo, en
GenProto.per tenemos este código:
if ($NumStates==1)
{
printf stdout "1.000e+0\n";
}
else
{
for ($i=0; $i<$NumStates; $i++)
{
que utiliza las estructuras de control if, else y for para ir creando la
matriz de transición de estados, según se explica en el apartado
dedicado a este programa (5.4.1).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 78
Expresiones regulares
El lenguaje Perl incluye una sintaxis especializada para escribir
expresiones regulares y el intérprete contiene un motor para emparejar
strings con expresiones regulares.
Existen tres operadores básicos en perl: el operador de cotejo (m//), el
de sustitución (s///) y el de traducción (tr///). El único empleado en el
desarrollo de este proyecto es el de sustitución.
El operador de sustitución (s///) es utilizado para sustituir alguna
cadena o expresión por otra. Su sintaxis es sencilla, basta con indicar
entre los dos primeros delimitadores (las barras) la cadena que
queremos que sea sustituida, y entre el segundo y el tercer delimitador
la cadena por la cual queremos sustituirla. Por ejemplo, el siguiente
comando convertiría la letra b en mayúscula:
$x =~ s/abc/aBc/;
En nuestro código encontramos un ejemplo del operador de sustitución
en el programa blancos2retornos.per:
s/[\s\t]+/\n/g;
que reemplaza lo que encuentra entre las dos primeras barras, [\s\t]+,
es decir, espacios y tabuladores, por lo que encuentra entre las últimas,
\n, esto es, retornos de carro. Estos indicadores con barra invertida son
llamados metasecuencias, que serán explicados a continuación. Antes
de ello sólo hay que indicar que el indicador g que se encuentra al final
de la línea es una opción, que sirve para indicarle a perl que repita la
sustitución en todas las ocurrencias de la cadena. Si no lo indicáramos
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 79
sustituiría el primer espacio que encontrara por un retorno de carro y
dejaría de realizar sustituciones en el resto del fichero.
Metasecuencias
En Perl se emplean metasecuencias, principalmente en las expresiones
regulares, para especificar condiciones de las cadenas de caracteres que
queremos modificar o tratar. Algunas de estas metasecuencias son:
\d: Cualquier dígito del 0 al 9.
\D: La mayúscula indica lo contrario de la minúscula; en este
caso, simboliza cualquier no-dígito.
\s: Cualquier espacio en blanco.
\S: Cualquier no-espacio.
\t: Cualquier tabulador.
\n: Cualquier retorno de carro.
\w: Cualquier secuencia de caracteres de palabra, es decir, todos
los caracteres alfanuméricos y el guión.
\W: Todos los caracteres no alfanuméricos.
+: Indica que el elemento o patrón que lo precede puede aparecer
una o más veces.
Un ejemplo de expresión regular que utilice estas metasecuencias
puede ser el siguiente:
if (m/\*(\s+)(\d+)(\s+)(\d+)(\s+)([a-zA-Záéíóú])/)
En este caso, la condición se cumplirá si se encuentra un * seguido de
uno o más espacios, seguido de uno o más números, a los que siguen
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 80
uno o más espacios seguidos de uno o más números y que termina con
uno o más espacios seguidos de un conjunto de letras.
Para finalizar veremos un ejemplo con todo lo que hemos explicado en
este apartado (estructuras de control, expresiones regulares y
metasecuencias). Está sacado de nuestro segmentador, lo encontramos
en el script setBD.bat, en el que se adaptan los ficheros de
configuración para que cambien la variable TARGETKIND por el tipo de
algoritmo y los coeficientes con los que se quiere llevar a cabo la
parametrización de los ficheros de voz. La instrucción es la siguiente:
while ($_=<stdin>) {
$v=uc\"%1_%6\";
s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-z_0-9]+/TARGETKIND = $v/i;
print;
}
Como se observa con la estructura de control while se van recorriendo
todas las líneas del fichero de configuración y se ejecutan las sentencias
que van entre llaves hasta que no queda ninguna línea más en el
fichero. A continuación se guarda en la variable $v el contenido de los
argumentos 1 y 6 (tipo de algoritmo de parametrización y coeficientes
extras, como se verá en el capítulo siguiente). A continuación
encontramos una expresión regular que hace uso de metasecuencias; se
trata del operador de sustitución s///, que indica que se debe cambiar
TARGETKIND[\s\t]+=[\s\t]+[a-zA-z_0-9]+
por
TARGETKIND = $v
es decir, cuando encuentre una línea que contenga TARGETKIND
seguido de uno o más espacios/tabuladores, un signo =, uno o más
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
4. Descripción de las herramientas empleadas 81
espacios/tabuladores, y una sucesión de letras, dígitos y guiones bajos,
sustituirá toda esa cadena por TARGETKIND = seguido del contenido de
la variable v que fue almacenado antes. La sentencia termina con la
opción i, que indica a perl que ignore el uso de mayúsculas y
minúsculas. Por último se imprime el contenido de la línea que se
estaba leyendo, con su correspondiente sustitución dado el caso.
Este ejemplo que contiene estructuras de control, expresiones regulares
y metasecuencias es muy representativo del tipo de labores que
realizaremos en perl para determinadas tareas de nuestro segmentador.
En el capítulo siguiente se explicarán los scripts del sistema, y se
dedicará un apartado especial a los programas desarrollados en perl.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 82
5. IMPLEMENTACIÓN DEL SEGMENTADOR:
ESTRUCTURA DEL PROGRAMA Y SUS
SCRIPTS
El segmentador fonético automático para habla expresiva está
desarrollado en una serie de scripts que se ejecutan desde la línea de
comandos de Windows o MS-DOS. Cada uno de estos scripts se
corresponde con una de las fases del proceso (acondicionamiento de
ficheros, parametrización, entrenamiento, reconocimiento,
segmentación y evaluación, entre otros) y en ellos se emplean las
herramientas que describíamos en el capítulo anterior, principalmente
aquellas proporcionadas por HTK.
En este capítulo haremos una descripción del programa completo,
analizando cada uno de estos scripts, así como los ficheros de
configuración empleados. Pero antes de nada, comenzaremos por
describir la estructura de directorios donde se encuentran ubicados
dichos scripts.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 83
5.1 LA ESTRUCTURA DE DIRECTORIOS DEL
SEGMENTADOR
La estructura de directorios del segmentador ha sido pensada para que
responda a los diferentes tipos de ficheros de los que se hace uso a lo
largo del programa, así como a las diferentes etapas por las que pasa el
proceso.
Siendo la carpeta base \usuarios_jcarmona\ la estructura de directorios
que se encuentran por debajo de éste es la siguiente:
\usuarios_jcarmona
\HMMs-CEU
\HTK
\htk 3.3
\segmentation
\experiments
\ses
\monophones
\sev
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 84
\monophones
\UPC
\monophones
\mfcc_par
\ses
\sev
\UPC
\parrafosDivididos_Completos
\segmenter
\cmn
\cvn
\labels
\lib
\lists
\scripts
\src_c
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 85
\gen_models
\score
\training
\SEV
\UPC
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 86
5.2 LOS SCRIPTS DEL SEGMENTADOR
El programa del segmentador consta de una serie de scripts, que se
encuentran en la carpeta scripts, y que se van ejecutando en cadena de
acuerdo con la siguiente secuencia:
A continuación se describe cada uno de los scripts fundamentales del
sistema.
FULL.BAT
EXPERIM.BAT
SETBD.BAT
PARAM.BAT
TRAIN_MONOPHONES.BAT
RECO_MONOPHONES.BAT
EVAL_MONOPHONES.BAT
SEGM_MONOPHONES.BAT
TRAIN_AUTO.BAT
RECO_GAUSS.BAT
SEGM_GAUSS.BAT
EVAL_GAUSS.BAT
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 87
5.2.1 Full.bat
El script que se debe ejecutar en primer lugar y que dará lugar a que
los demás lo vayan haciendo de forma consecutiva es full.bat. Contiene
tan sólo una llamada al siguiente script, experim.bat, con los siete
argumentos que se le deben pasar a dicho programa:
call experim.bat mfcc 5 5 10 _ 0_D_A 39
Dichos argumentos, cuyo uso iremos viendo más adelante, son los
siguientes:
[1]1: Tipo base del algoritmo de parametrización. Los valores
posibles son
- mfcc para bancos de filtros de coeficientes cepstrales con
frecuencias en la escala de Mel y
- plp para predicción lineal perceptual
[2]: Número de estados en los modelos ocultos de Markov
[3]: Número de iteraciones o reestimaciones de los modelos
[4]: Número de gaussianas con los que modelar cada estado
1 Nótese que comenzamos la numeración de los argumentos por [1], en lugar de por [0] como cabría
esperar al tratarse de una instrucción de lenguaje de comandos en la shell de Windows. Esto es así porque
la función principal de la instrucción es call, función que llama a otro script para ser ejecutado; este script
es precisamente el argumento [0] de la función principal, en nuestro caso, experim.bat.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 88
[5]: Indicador de si se va a emplear normalización cepstral en el
experimento o no, según se explicó en el capítulo anterior. Los valores
posibles son
- _ si no se va a emplear normalización cepstral
- _cmn_cvn para añadir al experimento normalización
cepstral de la media y de la varianza.
[6]: Indicadores del tipo de coeficientes que se añadirán en la
parametrización a los coeficientes cepstrales, separados por guión bajo.
De entre todos estos indicadores, que enumerábamos en el capítulo
anterior, los que emplearemos en nuestros experimentos serán:
- 0 para un primer coeficiente estático cero
- E para un coeficiente con la cantidad de energía media
- D para los coeficientes Delta
- A para los coeficientes de aceleración
- T para los coeficientes de tercera derivada
- Z para indicar valor medio nulo. Este coeficiente se emplea
en la normalización cepstral, por lo que si el indicador anterior fue
_cmn_cvn el sexto argumento debe contener por coherencia el indicador
_Z.
[7]: Número de coeficientes que contendrán los vectores de la
señal de audio parametrizada. Este número debe guardar relación con
el resto de argumentos del experimento que se quiere realizar. Tomemos
de nuevo la primera instrucción como ejemplo:
call experim.bat mfcc 5 5 10 _ 0_D_A 39
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 89
Nuestra señal parametrizada constará de 12 coeficientes cepstrales de
frecuencia MEL (así lo parametrizaremos en la variable NUMCEPS del
fichero de configuración que le pasaremos al HCopy más adelante), a los
que habrá que añadir 1 coeficiente estático cero (_0), 12 coeficientes
derivados (_D) más su correspondiente cero, y 12 coeficientes acelerados
(_A) más su correspondiente cero; en total suman 39 coeficientes, que
será el número que pasaremos como argumento en séptima posición.
De este modo serán admisibles como sexto y séptimo argumento, por
ejemplo,
0_D_A 39
E_D_A 39
0_D 26
E 13
pero no lo serán combinaciones como
E 39
0_D_A 13 ó
0 12.
Además de la instrucción que llama al script experim.bat, en full.bat
hemos añadido un primer script auxiliar limpia.bat que limpia ciertos
directorios que se van utilizando durante el proceso. Su contenido se
explica en el epígrafe dedicado a los scripts auxiliares, apartado 5.3.1.
Dado que queremos realizar múltiples experimentos con
configuraciones distintas, la sencillez del fichero full.bat lo hace ideal
para que en él tengamos almacenados diferentes tipos de experimentos
que serán comentados y descomentados (con una pareja de dos puntos
::) a medida que queramos ejecutar experimentos de una u otra
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 90
característica. De esta manera, un contenido habitual de full.bat es el
siguiente:
call limpia.bat
call experim.bat mfcc 5 5 10 _ 0 13
::call limpia.bat
::call experim.bat mfcc 5 5 10 _ D_0 26
::call limpia.bat
::call experim.bat mfcc 5 5 10 _ 0_D_A 39
::call limpia.bat
::call experim.bat plp 5 5 10 _ 0 13
::call limpia.bat
::call experim.bat plp 5 5 10 _ D_0 26
::call limpia.bat
::call experim.bat plp 5 5 10 _ 0_D_A 39
Lo que nos va a permitir hacer experimentos con 5 estados, 5
iteraciones y 10 gaussianas, utilizando los coeficientes _0, _D y _A de
forma acumulativa, tanto para la técnica mfcc como para plp. Con este
código ejecutaremos el primer experimento. Cuando éste haya acabado
bastará con comentar las dos primeras líneas, descomentar las dos
siguientes y volver a ejecutar full.bat, lo que dará lugar al comienzo de
nuevo de todo el proceso, esta vez con la segunda manera de definir el
proceso que hemos especificado.
5.2.2 Experim.bat
Este script es el corazón del segmentador, ya que es el que define la
estructura de las diferentes etapas del proceso, llamando a cada uno de
los scripts encargados de llevarlas a cabo.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 91
Experim.bat comienza definiendo el nombre del fichero de log:
echo on
set FICH_LOG=log_%1_%5_%6_states%2_iter%3_gauss%4.log
que en el caso del ejemplo que proponemos se convertirá en:
set FICH_LOG=log_mfcc_0_D_A_ states5_iter5_gauss10.log
A continuación experim.bat comienza a llamar a los diferentes scripts
del proceso, de manera que la ejecución pasará por el primero,
setbd.bat, volverá a experim.bat cuando termine, éste llamará al
segundo, param.bat, y así sucesivamente hasta haber pasado por todas
las etapas del proceso (setup y acondicionamiento de ficheros,
parametrización, entrenamiento, reconocimiento, segmentación y
evaluación):
call setBD.bat %1 %2 %3 %4 %5 %6 %7 > %FICH_LOG% 2>&1
call param.bat >> %FICH_LOG% 2>&1
call train_monophones.bat >> %FICH_LOG% 2>&1
call reco_monophones.bat >> %FICH_LOG% 2>&1
call segm_monophones.bat >> %FICH_LOG% 2>&1
call eval_monophones.bat >> %FICH_LOG% 2>&1
Las salidas por consola de los diferentes scripts las redireccionamos al
fichero de logs a través de los comandos > %FICH_LOG% 2>&1 (que crea
un fichero con el nombre que definimos en el primer set y lo rellena con
la salida de texto del primer script) y >> %FICH_LOG% 2>&1 (que
concatena la salida de los demás scripts a continuación de lo que ya
estaba escrito en el fichero). De esta manera conseguimos tener
guardado en un fichero de log el seguimiento de todas las instrucciones
que se han ido ejecutando en el proceso y los posibles resultados de
dichas instrucciones.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 92
5.2.3 SetBD.bat
El primero de los scripts a los que llama experim.bat es setBD.bat que
se corresponde con la primera etapa del proceso, la configuración del
sistema y el acondicionamiento de ficheros. En este script se elige la
base de datos con la que se va a trabajar, se define la estructura de
directorios, indicando los nombres de los que son fijos y creando los
necesarios para el experimento en curso, se crean los archivos de
etiquetas, etc. Veamos todas estas opciones de configuración del
sistema a medida que aparecen en el script.
En primer lugar definimos el entorno del ordenador sobre el que
ejecutaremos el segmentador, esto es, la unidad de disco. Al haber
estado realizando pruebas tanto en el ordenador portátil propio como en
una máquina del laboratorio tenemos en el código la opción de elegir
(comentando o descomentando) el entorno en el que nos encontramos:
set DISCO_BASE=c:
::set DISCO_BASE=h:
Indicamos al sistema mediante la variable IDENTIF si vamos a realizar
el proceso completo de segmentación (valor SEGMENTATION) o si por el
contrario sólo vamos a reconocer en el experimento actual (valor
IDENTIFICATION). En la mayoría de nuestros experimentos haremos
uso del proceso completo de segmentación:
::set IDENTIF=IDENTIFICATION
set IDENTIF=SEGMENTATION
En la mayoría de nuestros experimentos realizaremos entrenamiento de
los modelos, si bien en algún experimento nos podrá interesar utilizar
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 93
modelos ya entrenados. Para indicarle al sistema si entrenaremos o no
los modelos empleamos la variable ENTRENAR_MODELOS:
set ENTRENAR_MODELOS=SI
::set ENTRENAR_MODELOS=NO
Elegimos la base de datos con la que trabajaremos en el experimento
actual mediante la variable BD. Las distintas bases de datos que
empleamos en este proyecto se describen en el capítulo
conrrespondiente:
set BD=SES
::set BD=SEV
::set BD=UPC
A continuación se indica cuál es la versión de HTK que se va a utilizar.
Se tienen disponibles las versiones 3.3 y 3.4 de esta herramienta, por lo
que se puede decidir entre emplear una y otra con tan sólo indicar en
este script de configuración la carpeta donde hay que buscar el kit de
herramientas:
:: Versión del HTK - Primera línea para versión 3.3, segunda para 3.4
:: set HTK_DIR=%DISCO_BASE%\usuarios_jcarmona\htk.3.3
set HTK_DIR=%DISCO_BASE%\usuarios_jcarmona\HMMs-CEU\HTK\bin.win32
La elección de la versión de HTK será objeto de uno de los primeros
experimentos que se describen en el capítulo de ejecuciones y
resultados.
El siguiente grupo de líneas se encarga de definir la estructura de
directorios del segmentador (ver apartado 5.1). En primer lugar se
define el directorio base de todo el sistema de segmentación:
set BASE_DIR=%DISCO_BASE%\usuarios_jcarmona\segmentation
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 94
Este directorio base del sistema de segmentación incluye el
segmentador propiamente dicho y las carpetas que contienen los
archivos de sonidos y etiquetas de cada una de las bases de datos
empleadas. Así, se definen el directorio del segmentador
(SEGMENTER_DIR) y los subdirectorios que contienen las listas
(LISTS_DIR), las librerías (LIB_DIR), los archivos maestros de etiquetas
MLF (LABELS_DIR) y el código de dos programas empleados durante el
proceso y que serán explicados más adelante (BIN_DIR):
set SEGMENTER_DIR=%BASE_DIR%\segmenter
set BIN_DIR=%SEGMENTER_DIR%\src_c
set LISTS_DIR=%SEGMENTER_DIR%\lists
set LIB_DIR=%SEGMENTER_DIR%\lib
set LABELS_DIR=%SEGMENTER_DIR%\labels
Respecto a las etiquetas se define un directorio de entrada de las
mismas y uno de salida. Las etiquetas que se toman como entrada al
sistema procederán de un directorio u otro dependiendo de la base de
datos que se desee emplear, por lo que hemos hecho que esta variable
dependa en el código de la base de datos que hayamos elegido
anteriormente al dar valor a la variable BD:
if %BD%==SES (
set LABELS_IN_DIR=%BASE_DIR%\parrafosDivididos_Completos
)
if %BD%==SEV (
set LABELS_IN_DIR=%BASE_DIR%\SEV
)
if %BD%==UPC (
set LABELS_IN_DIR=%BASE_DIR%\UPC
)
set LABELS_OUT_DIR=%SEGMENTER_DIR%\labels
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 95
Se define ahora el directorio donde se guardarán los modelos y los
resultados de los experimentos ejecutados. Se tiene definida una
carpeta por cada base de datos, y dentro de ellas un directorio
(monophones) que contiene todas las carpetas que se generan cuando se
crean los modelos, hmm:
set EXPERIMENT_DIR=%BASE_DIR%\experiments\%BD%
set BASE_HMM_DIR=%EXPERIMENT_DIR%\monophones
set HMM_DIR=%BASE_HMM_DIR%\hmm
Se toman ahora los argumentos que hemos pasado al llamar a
experim.bat para establecer el tipo de técnica, que está definido como la
técnica base (mfcc o plp como explicábamos en el punto 5.2.1) y el
indicador de si se va a utilizar normalización cepstral o no, recogido en
el quinto argumento. Se definen también los parámetros empleados y el
tipo base concatenado con los parámetros (PAR_TYPE). Estas cuatro
variables se definen así porque serán utilizadas más adelante como
argumentos a pasar a las distintas herramientas HTK que se
ejecutarán:
:: Elección de técnica MFCC/PLP y parametrización
set TIPO_BASE=%1
set TIPO=%TIPO_BASE%%5%
set PARAMETROS=%6
set PAR_TYPE=%TIPO_BASE%_%6%
A continuación se captura también de los argumentos iniciales los
valores que queremos dar a las variables que contienen el número de
estados, de iteraciones, de gausianas y de coeficientes:
:: Configuración de los HMM (TRAIN_MONOPHONES.BAT)
set NUM_ESTADOS=%2
set NUM_ITERACIONES=%3
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 96
set NUM_GAUSSIANS=%4
set NUM_COEF=%7
En nuestro ejemplo estas variables habrían quedado configuradas de la
siguiente manera:
TIPO_BASE=mfcc
TIPO=mfcc_
PARAMETROS=0_D_A
PAR_TYPE=mfcc_0_D_A
NUM_ESTADOS=5
NUM_ITERACIONES=5
NUM_GAUSSIANS=10
NUM_COEF=39
El siguiente grupo de líneas está dedicado a definir los ficheros de
configuración que se pasarán a las diferentes herramientas de HTK que
emplearemos en el proceso. El primero de ellos es el archivo de
configuración de Hcopy, que será empleado durante la parametrización:
:: Fichero de configuración de HCopy (PARAM_MFCC.BAT)
set CONFIG_FILE_HCOPY=%LIB_DIR%\config_hcopy_%BD%_%TIPO%
copy %CONFIG_FILE_HCOPY% %LIB_DIR%\tmp.tmp
perl -e "while ($_=<stdin>){$v=uc \"%1_%6\";s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-
z_0-9]+/TARGETKIND = $v/i;print;}" < %LIB_DIR%\tmp.tmp >%CONFIG_FILE_HCOPY%
Como se observa el nombre del fichero de configuración se define
conteniendo la base de datos elegida y el tipo de parametrización; en
nuestro caso de ejemplo se llamaría por tanto config_hcopy_SES_mfcc_.
Las dos líneas siguientes sirven para adaptar la variable TARGETKIND
contenida dentro de este fichero de configuración al tipo de
parametrización empleada en el experimento actual. Esto lo hace
copiando primero el archivo de configuración tal y como lo encuentre en
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 97
un archivo temporal. Imaginemos que este archivo contenía
inicialmente TARGETKIND = PLP_0. En la siguiente línea, mediante una
instrucción perl cambiará el valor de esta variable al contenido de la
variable PAR_TYPE que ya hemos definido y sobrescribirá el archivo
config_hcopy_SES_mfcc_, de manera que al final éste contendrá el valor
TARGETKIND = MFCC_0_D_A. Este paso es necesario ya que es muy
importante que las herramientas de HTK reciban este parámetro por
medio del archivo de configuración de forma coherente con el
experimento actual, y mediante este acondicionamiento del fichero de
configuración se consigue dicha coherencia.
A continuación se definen y se acondicionan de la misma forma los
ficheros de configuración de HCompV, que se empleará en el
entrenamiento:
:: Ficheros de configuración de HCompV (TRAIN_MONOPHONES.BAT)
set CONFIG_FILE_HCOMPV=%LIB_DIR%\config_hcompv_%TIPO%
copy %CONFIG_FILE_HCOMPV% %LIB_DIR%\tmp.tmp
perl -e "while ($_=<stdin>){$v=uc \"%1_%6\";s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-
z_0-9]+/TARGETKIND = $v/i;print;}" < %LIB_DIR%\tmp.tmp
>%CONFIG_FILE_HCOMPV%
set CONFIG_FILE_CMN=%LIB_DIR%\config_%TIPO%.cmn
copy %CONFIG_FILE_CMN% %LIB_DIR%\tmp.tmp
perl -e "while ($_=<stdin>){$v=uc \"%1_%6\";s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-
z_0-9]+/TARGETKIND = $v/i;print;}" < %LIB_DIR%\tmp.tmp >%CONFIG_FILE_CMN%
set CONFIG_FILE_CVN=%LIB_DIR%\config_%TIPO%.cvn
copy %CONFIG_FILE_CVN% %LIB_DIR%\tmp.tmp
perl -e "while ($_=<stdin>){$v=uc \"%1_%6\";s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-
z_0-9]+/TARGETKIND = $v/i;print;}" < %LIB_DIR%\tmp.tmp >%CONFIG_FILE_CVN%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 98
y de HERest, que se emplea en el entrenamiento, y Hvite, que se utiliza
durante el reconocimiento y segmentación. Para ambas herramientas el
archivo de configuración será común:
:: Fichero de configuración de HERest (TRAIN_MONOPHONES.BAT) y HVite
(RECO_MONOPHONES.BAT)
set CONFIG_FILE_TRAIN=%LIB_DIR%\config_tr_%TIPO%
copy %CONFIG_FILE_TRAIN% %LIB_DIR%\tmp.tmp
perl -e "while ($_=<stdin>){$v=uc \"%1_%6\";s/TARGETKIND[\s\t]+=[\s\t]+[a-zA-
z_0-9]+/TARGETKIND = $v/i;print;}" < %LIB_DIR%\tmp.tmp >%CONFIG_FILE_TRAIN%
A continuación se genera el fichero de prototipos que se empleará
durante el entrenamiento. Para ello se renombra el fichero de prototipos
existente con el número de estados y el tipo de parametrización (en el
ejemplo se llamaría proto_5states_mfcc_) y mediante un programa en
perl, genProto.per se adapta este fichero, recreando una estructura que
se corresponda con el número de estados y coeficientes y con el tipo de
parametrización empleados. La explicación de genProto.per se encuentra
en el epígrafe dedicado a los programas en perl, apartado 5.4.1.
::Genera el fichero de prototipos en LIB
set Fichero_Proto=proto_%NUM_ESTADOS%states_%TIPO%
perl genProto.per %NUM_ESTADOS% %NUM_COEF% %PAR_TYPE%
>%LIB_DIR%\%Fichero_Proto%
Se define ahora la ubicación de los programas en C que se encuentran
en el directorio especificado en BIN_DIR, copiaModelos y score, y que
serán útiles durante el entrenamiento y la evaluación respectivamente:
:: Definición del directorio del programa copiaModelos (TRAIN_MONOPHONES.BAT)
set BIN_DIR_TRAIN=%BIN_DIR%\gen_models
:: Definición del directorio del programa score (EVAL_MONOPHONES.BAT)
set BIN_DIR_EVAL=%BIN_DIR%\score
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 99
Se definen a continuación los nombres de los ficheros de listas (.lis) que
contendrán las direcciones de todos los archivos parametrizados que se
emplearán como conjunto de datos para el entrenamiento (TRAIN), los
dos tipos de evaluaciones que realizaremos (TEST y TEST2) y el
conjunto total (TRAINTEST). Igualmente se definirán los ficheros de
script (.scp) que son los que relacionan las ubicaciones de los ficheros
de sonido originales con las de los archivos parametrizados (es decir, los
archivos de entrada y de salida del proceso de parametrización),
definidos también para esos cuatro conjuntos de datos:
:: Ficheros de listas
set LIST_FILE_TRAIN=%LISTS_DIR%\lab_htk_%BD%_train.lis
set LIST_FILE_TEST=%LISTS_DIR%\lab_htk_%BD%_test.lis
set LIST_FILE_TEST2=%LISTS_DIR%\lab_htk_%BD%_test2.lis
set LIST_FILE_TRAINTEST=%LISTS_DIR%\lab_htk_%BD%_traintest.lis
set SCP_FILE_TRAIN=%LISTS_DIR%\lab_htk_%BD%_train.scp
set SCP_FILE_TEST=%LISTS_DIR%\lab_htk_%BD%_test.scp
set SCP_FILE_TEST2=%LISTS_DIR%\lab_htk_%BD%_test2.scp
set SCP_FILE_TRAINTEST=%LISTS_DIR%\lab_htk_%BD%_traintest.scp
Definimos ahora los nombres de los ficheros maestros de etiquetas:
:: Ficheros de etiquetas
set LABEL_OUT_FILE_TRAIN=%LABELS_OUT_DIR%\%BD%_extracted_train.mlf
set
LABEL_OUT_FILE_TRAINTEST=%LABELS_OUT_DIR%\%BD%_extracted_traintest.mlf
set LABEL_OUT_FILE_TEST=%LABELS_OUT_DIR%\%BD%_extracted_test.mlf
set LABEL_OUT_FILE_TEST2=%LABELS_OUT_DIR%\%BD%_extracted_test2.mlf
Y definimos a continuación los nombres de la lista de fonemas, de la red
de fonemas, de la gramática empleada y del diccionario de fonemas:
:: Lista de fonemas
set PHONEME_LIST=%LIB_DIR%\phonemes_%BD%.lis
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 100
:: Ficheros de diccionario y red de fonemas
set NET=%LIB_DIR%\phon_network_%BD%.nwk
set FICH_SYN=%LIB_DIR%\phon_network_%BD%.syn
set DICT=%LIB_DIR%\monophones_%BD%.dct
Pasamos ahora a definir el tipo de ficheros de sonido que queremos
incluir en cada uno de los cuatro grupos que se utilizarán en el
experimento. Imaginemos por ejemplo que queremos realizar el
entrenamiento con las alocuciones de párrafos de SES para todas las
emociones, y que queremos evaluar los ficheros de frases de SES con
los modelos resultantes. Tendríamos que indicar los cuatro sets de
ficheros que queremos emplear, y lo hacemos nombrando esas variables
con las iniciales de los ficheros que comparten la característica que
pretendemos emplear, es decir para que el conjunto de ficheros con los
que vamos a entrenar sean los de párrafos de todas las emociones
indicaremos “r_a r_n r_s r_t r_e” dentro de la variable TRAIN_SET. Si
sólo quisiéramos los párrafos con emoción neutra indicaríamos sólo
“r_n”, que es el comienzo de los nombres de los ficheros que contienen
esas características. Por tanto, definiríamos el experimento comentado
de la siguiente manera:
SET TRAIN_SET=r_a r_n r_s r_t r_e
SET TEST_SET=fa fn fs ft fe
SET TEST_SET2=fa fn fs ft fe
SET TOTAL_SET=r_a r_n r_s r_t r_e fa fn fs ft fe
set
RESULTS_DIR=%BASE_HMM_DIR%\%BD%__R_ANSTE__FANSTE__%TIPO%_%PARAMET
ROS%_%IDENTIF%_MIXED_ states%NUM_ESTADOS%_iter%NUM_ITERACIONES%_
gauss%NUM_GAUSSIANS%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 101
El directorio donde se almacenarán los resultados debe tener un
nombre que sea lo suficientemente identificativo para que podamos
saber a qué experimento corresponden los resultados que contiene. En
nuestro caso este directorio será:
\experiments\SES\monophones\SES__R_ANSTE__FANSTE__mfcc__0_D_A_SEGM
ENTATION_MIXED_ states5_iter5_ gauss10
que como se observa contiene todos los parámetros de configuración
que hemos ido viendo a lo largo de este script.
La última tarea que realiza el script setBD.bat es el acondicionamiento
de los ficheros de listas. Véamos a qué nos referimos.
Como comentábamos antes, los ficheros de listas (.lis) son los que
contienen las direcciones de todos los archivos parametrizados. Por
ejemplo, el fichero lab_htk_SES_mfcc_fa.lis contiene líneas del estilo:
..\..\mfcc_par\SES\F_A_0103.mfc
..\..\mfcc_par\SES\F_A_0104.mfc
..\..\mfcc_par\SES\F_A_0105.mfc
…
es decir, la ubicación de todos los ficheros parametrizados de frases
alegres de la base de datos SES. Habrá por tanto tantos ficheros de este
estilo como combinaciones de BD-técnica-frases/párrafos-emoción
existan, es decir tendremos
lab_htk_SES_mfcc_fa.lis
lab_htk_SES_mfcc_r_a.lis
lab_htk_SES_plp_fa.lis
lab_htk_SES_plp_r_a.lis
lab_htk_SEV_mfcc_f_n.lis
lab_htk_UPC_plp_se.lis
etc., lo que da lugar a una gran cantidad de ficheros de listas.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 102
Se observa por tanto la necesidad de reunir en una sola lista las
ubicaciones de aquellos ficheros que se emplearán como conjunto de
datos para el entrenamiento (TRAIN), los dos tipos de evaluaciones que
realizaremos (TEST y TEST2) y el conjunto total (TRAINTEST) del
experimento concreto que vamos a realizar.
Del mismo modo, y como comentábamos antes también, los ficheros de
script (.scp) son los que relacionan las ubicaciones de los ficheros de
sonido originales con las de los archivos parametrizados (es decir, los
archivos de entrada y de salida del proceso de parametrización). Por
ejemplo, el fichero lab_htk_SES_mfcc_fa.scp contiene líneas del estilo:
..\..\parrafosDivididos_Completos\F_A_0103.PCM
..\..\mfcc_par\SES\F_A_0103.mfc
..\..\parrafosDivididos_Completos\F_A_0104.PCM
..\..\mfcc_par\SES\F_A_0104.mfc
..\..\parrafosDivididos_Completos\F_A_0105.PCM
..\..\mfcc_par\SES\F_A_0105.mfc
…
es decir, la relación de las ubicaciones de todos los ficheros originales
de frases alegres de la base de datos SES y la de sus respectivos
ficheros parametrizados. Habrá por tanto tantos ficheros de este estilo
como combinaciones de BD-técnica-frases/párrafos-emoción existan, es
decir tendremos
lab_htk_SES_mfcc_fa.scp
lab_htk_SES_mfcc_r_a.scp
lab_htk_SES_plp_fa.scp
lab_htk_SES_plp_r_a.scp
lab_htk_SEV_mfcc_f_n.scp
lab_htk_UPC_plp_se.scp
etc., lo que da lugar a una gran cantidad de ficheros de script.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 103
Se observa de nuevo la necesidad de reunir en una sola lista las
relaciones de ubicaciones de aquellos ficheros que se emplearán como
conjunto de datos para el entrenamiento (TRAIN), los dos tipos de
evaluaciones que realizaremos (TEST y TEST2) y el conjunto total
(TRAINTEST) del experimento concreto que vamos a realizar.
Esos cuatro ficheros de listas a emplear en el experimento y los cuatro
de script se crean de la siguiente manera. Recordemos que ya antes
habíamos definido sus nombres, en las variables
LIST_FILE_TRAIN
LIST_FILE_TEST
LIST_FILE_TEST2
LIST_FILE_TRAINTEST
SCP_FILE_TRAIN
SCP_FILE_TEST
SCP_FILE_TEST2
SCP_FILE_TRAINTEST
Ahora pues entraremos en el directorio de listas donde se encuentran y
empezaremos borrando el contenido de los que pudieran existir:
cd ..\lists
copy vacio.lis %LIST_FILE_TRAIN%
copy vacio.lis %LIST_FILE_TEST%
copy vacio.lis %LIST_FILE_TEST2%
copy vacio.lis %LIST_FILE_TRAINTEST%
copy vacio.lis %SCP_FILE_TRAIN%
copy vacio.lis %SCP_FILE_TEST%
copy vacio.lis %SCP_FILE_TEST2%
copy vacio.lis %SCP_FILE_TRAINTEST%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 104
Cogemos el contenido de los conjuntos de experimentos tal como
acabamos de definir y lo escribimos en ficheros .dep:
echo %TRAIN_SET% >train_set.dep
echo %TEST_SET% >test_set.dep
echo %TEST_SET2% >test_set2.dep
echo %TOTAL_SET% >total_set.dep
Según nuestro ejemplo, por tanto, el contenido del fichero train_set.dep
será
r_a r_n r_s r_t r_e
Ahora pasamos estas cadenas a ficheros .dp, en los que habremos
sustuído espacios por retornos de carro mediante el programa en perl
blancos2retornos.per (véase su código en el apartado 5.4.2):
perl blancos2retornos.per <train_set.dep >train_set.dp
perl blancos2retornos.per <test_set.dep >test_set.dp
perl blancos2retornos.per <test_set2.dep >test_set2.dp
perl blancos2retornos.per <total_set.dep >total_set.dp
Según nuestro ejemplo el contenido del fichero train_set.dp que hemos
creado será
r_a
r_n
r_s
r_t
r_e
Ahora emplearemos el programa mi_type.bat, que tan sólo escribe lo
que se le pasa como primer argumento en el fichero que le indiquemos
como segundo argumento (véase código en el apartado 5.3.2). Con él
iremos rellenando nuestros ficheros de listas con cada una de las listas
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 105
correpondientes a los conjuntos de datos que estén representados en el
archivo .dp anterior:
for /F %%i in (TRAIN_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.lis %%LIST_FILE_TRAIN%%
for /F %%i in (TEST_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.lis %%LIST_FILE_TEST%%
for /F %%i in (TEST_SET2.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.lis %%LIST_FILE_TEST2%%
for /F %%i in (TOTAL_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.lis %%LIST_FILE_TRAINTEST%%
Esto es, para cada línea que se encuentre en el fichero TRAIN_SET.dp,
cogerá el fichero de listas del indicador de esa línea en concreto y lo
volcará en el fichero global. De esta manera, y teniendo en cuenta el
fichero .dp anterior en el archivo lab_htk_SES_train.lis tendremos
volcado el contenido de los ficheros
lab_htk_SES_mfcc_r_a.lis
lab_htk_SES_mfcc_r_n.lis
lab_htk_SES_mfcc_r_s.lis
lab_htk_SES_mfcc_r_t.lis
lab_htk_SES_mfcc_r_e.lis
con lo que habremos conseguido tener en un solo fichero de lista todos
los archivos que se emplearán para el entrenamiento. El mismo
razonamiento se puede aplicar a los otros tres conjuntos de datos,
TEST_SET, TEST2_SET y TOTAL_SET.
Exactamente de la misma manera procederemos a rellenar los cuatro
ficheros globales de script:
for /F %%i in (TRAIN_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.scp %%SCP_FILE_TRAIN%%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 106
for /F %%i in (TEST_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.scp %%SCP_FILE_TEST%%
for /F %%i in (TEST_SET2.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.scp %%SCP_FILE_TEST2%%
for /F %%i in (TOTAL_SET.dp) do call ..\scripts\mi_type.bat
lab_htk_%BD%_%TIPO_BASE%_%%i.scp %%SCP_FILE_TRAINTEST%%
Por último, y para terminar el script de configuración, se vuelve al
directorio de scripts y se crea el directorio de resultados, de manera que
la estructura está ya lista para que se pueda comenzar con la primera
fase del proceso después de la configuración, la parametrización:
cd ..\scripts
md %RESULTS_DIR%
5.2.4 Param.bat
El proceso de parametrización, explicado en el apartado 4.1.2 del
capítulo anterior se implementa en el script param.bat. La estructura de
este script es muy simple, ya que tan sólo se realizan cuatro llamadas a
la herramienta HCopy, que como indicamos en su momento es la que
realiza una simple copia del fichero de origen en el fichero destino, pero
transformándolo según la configuración establecida en el fichero de
configuración que se le pase. Estas cuatro llamadas a HCopy son:
"%HTK_DIR%\HCopy.exe" -A -D -V -C %CONFIG_FILE_HCOPY% -n 1 -1 -L
%LABELS_IN_DIR% -l * -i %LABEL_OUT_FILE_TRAIN% -S %SCP_FILE_TRAIN%
"%HTK_DIR%\HCopy.exe" -A -D -V -C %CONFIG_FILE_HCOPY% -n 1 -1 -L
%LABELS_IN_DIR% -l * -i %LABEL_OUT_FILE_TEST% -S %SCP_FILE_TEST%
"%HTK_DIR%\HCopy.exe" -A -D -V -C %CONFIG_FILE_HCOPY% -n 1 -1 -L
%LABELS_IN_DIR% -l * -i %LABEL_OUT_FILE_TEST2% -S %SCP_FILE_TEST2%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 107
"%HTK_DIR%\HCopy.exe" -A -D -V -C %CONFIG_FILE_HCOPY% -n 1 -1 -L
%LABELS_IN_DIR% -l * -i %LABEL_OUT_FILE_TRAINTEST% -S %SCP_FILE_TRAINTEST%
Analicemos la primera llamada, la que parametriza los ficheros que se
utilizarán para entrenar (las otras tres son iguales pero se realizan
sobre los otros tres conjuntos de datos).
En la llamada a HCopy indicamos con los parámetros comunes (que
fueron explicados en el capítulo anterior) que deseamos que se imprima
por línea de comandos los argumentos que se le pasan (-A), las
variables de configuración que se están utilizando (-D) y la versión de la
herramienta (-V).
Mediante la opción –C indicamos a HCopy el archivo de configuración
que debe emplear, CONFIG_FILE_HCOPY. En el caso de nuestro ejemplo
éste es en concreto config_hcopy_SES_mfcc_ (véase contenido de este
fichero de configuración en Anexo 2).
A continuación incluímos la opción -n 1 -1. En HCopy, -n i [j] extrae el
segmento de voz correspondiente a la etiqueta i-ésima en el fichero
fuente. Si se especifica j, se extrae el segmento correspondiente a la
secuencia de etiquetas de la i a la j. Las etiquetas se numeran según su
posición en el archivo de etiquetas. Para empezar a contar desde el final
del fichero se puede emplear como índice un número negativo. Por
tanto, -n 1 -1 indica que el segmento a considerar empieza en la primera
etiqueta y termina en la última, es decir, se considerarán todas las
etiquetas del fichero.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 108
La opción –L indica a HCopy el directorio donde tiene que buscar los
ficheros de etiquetas, LABELS_IN_DIR. Si no pusiéramos nada buscaría
por defecto en el directorio actual, que al ser la carpeta scripts no
obtendríamos nada. En el ejemplo esta carpeta de etiquetas es
\segmentation\parrafosDivididos_Completos\ ya que estamos
considerando la base de datos SES.
–i indica el archivo maestro de etiquetas donde se escribirán las
etiquetas de salida, LABEL_OUT_FILE_TRAIN (en este ejemplo su
nombre será SES_extracted_train.mlf). La opción –l indica el directorio
para las etiquetas de salida. Si no se indica nada se emplea por defecto
el directorio actual, pero como la salida se dirige a un fichero MLF esta
opción se emplea para añadir una ruta al nombre de cada fichero
incluído en el MLF. En nuestro caso la opción -l * hará que un fichero
de etiquetas llamado F_A_0103.lab aparezca con el asterisco como
prefijo, apareciendo en el fichero MLF como */F_A_0103.lab. De esta
manera conseguimos generar un MLF independiente de la ubicación de
los archivos de datos correspondientes.
Por último con –S indicamos el fichero de script (SCP_FILE_TRAIN) que
utilizará HCopy para relacionar los ficheros de sonido original que
deberá parametrizar, con las ubicaciones donde dejará los ficheros
parametrizados.
Para el ejemplo esta llamada habrá quedado de la siguiente forma:
c:\usuarios_jcarmona\HMMs-CEU\HTK\bin.win32\HCopy.exe -A -D -V -C
c:\usuarios_jcarmona\segmentation\segmenter\lib\config_hcopy_SES_mfcc_ -n 1 -1 -L
c:\usuarios_jcarmona\segmentation\parrafosDivididos_Completos -l * -i
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 109
c:\usuarios_jcarmona\segmentation\segmenter\labels\SES_extracted_train.mlf -S
c:\usuarios_jcarmona\segmentation\segmenter\lists\lab_htk_SES_train.scp
y dará lugar a que HCopy coja de la carpeta
parrafosDivididos_Completos los ficheros incluídos en
lab_htk_SES_train.scp y los parametrice de acuerdo al archivo de
configuración, dejando los ficheros de salida en la carpeta mfcc_par que
le indica también lab_htk_SES_train.scp, así como todas las etiquetas
escritas en el archivo maestro de etiquetas SES_extracted_train.mlf.
El proceso es similar para los conjuntos de TEST, TEST2 y TRAINTEST.
A partir de ahora podemos dejar a un lado los ficheros de audio
originales, y trabajar tan sólo con los ficheros parametrizados en
formato HTK, que son los que entenderán el resto de herramientas HTK
que utilizaremos en las etapas subsiguientes, de las cuales la más
inmediata es el entrenamiento.
5.2.5 Train_monophones.bat
Este script lleva a cabo el proceso de entrenamiento mediante las
herramientas HCompV y HERest. Pero hay bastantes cosas que el script
tiene que hacer antes para poder llevar a cabo el entrenamiento.
La primera de ellas es crear una lista de fonemas. Para ello coge el
archivo maestro de etiquetas y le pasa el programa en perl mlf2fon.per
(véase explicación en el apartado 5.4.3), que lo que hace es recorrer el
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 110
archivo línea por línea e ir copiando en el fichero fonemas.dep todos los
fonemas que se va encontrando:
perl %LABELS_DIR%\mlf2fon.per <%LABEL_OUT_FILE_TRAINTEST%
>%LABELS_DIR%\fonemas.dep
Con el programa cuentalineas.per (véase 5.4.5), que tan sólo cuenta las
líneas existentes en un fichero dado, anotamos en el fichero
fonemas_totales.dep el número total de líneas (y por tanto de fonemas) a
modo de estadística; guardamos también este fichero en la carpeta de
resultados, ya que nos hará falta cuando cuantifiquemos la finura de
los resultados obtenidos por un experimento.
perl %LABELS_DIR%\cuentalineas.per <%LABELS_DIR%\fonemas.dep
>%LABELS_DIR%\fonemas_totales.dep
perl %LABELS_DIR%\cuentalineas.per <%LABELS_DIR%\fonemas.dep
>%RESULTS_DIR%\fonemas_totales.dep
Mediante el programa sort ordenamos el contenido del fichero
fonemas.dep por orden alfabético y lo escribimos en el fichero
fonemas.ord:
sort <%LABELS_DIR%\fonemas.dep >%LABELS_DIR%\fonemas.ord
Con el comando uniq eliminaremos de la lista ordenada todos los
fonemas repetidos, con lo que nos habremos quedado ya con la lista
definitiva de fonemas.
uniq <%LABELS_DIR%\fonemas.ord >%PHONEME_LIST%
Ahora repetimos todos los pasos pero obteniendo una lista adaptada
para ser utilizada como string por un programa en C:
perl %LABELS_DIR%\mlf2c.per <%LABEL_OUT_FILE_TRAINTEST% | rpsort /A |
uniq >%LABELS_DIR%\fonemas.c
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 111
TYPE %LABELS_DIR%\fonemas.c
La diferencia entre fonemas.c y la lista de fonemas creada
anteriormente es que en fonemas.c los fonemas van todos entre comillas
dobles y las líneas terminan con comas (para esto se emplea el
programa mlf2c.per, en lugar de mlf2fon.per; su código se encuentra en
el apartado 5.4.4).
A continuación, lo primero que se hace es la fase de normalización
cepstral, si el experimento ha sido definido para que se realice:
::Entramos en la fase de normalizacion Cepstral
cd ..\training
::Generamos los ficheros para CMN (~~GLOBAL~~)
if %TIPO%==%TIPO_BASE%_cmn_cvn (
"%HTK_DIR%\HCompV.exe" -A -D -C %CONFIG_FILE_CMN% -c ..\cmn -q m -k
"*%%%%%%%%%%%%%%%%%%%%%%%%."%TIPO_BASE% -S %LIST_FILE_TRAIN% >
..\cmn\HCompv.cmn.log
)
if %TIPO%==%TIPO_BASE%_cmn_cvn (
"%HTK_DIR%\HCompV.exe" -A -D -C %CONFIG_FILE_CMN% -c ..\cmn -q m -k
"*%%%%%%%%%%%%%%%%%%%%%%%%."%TIPO_BASE% -S %LIST_FILE_TEST% >
..\cmn\HCompv.TEST.cmn.log
)
::Generamos los ficheros para CVN~(~~GLOBAL~~)
if %TIPO%==%TIPO_BASE%_cmn_cvn (
"%HTK_DIR%\HCompV.exe" -A -D -C %CONFIG_FILE_CVN% -c ..\cvn -q nmv -k
"*%%%%%%%%%%%%%%%%%%%%%%%%."%TIPO_BASE% -S %LIST_FILE_TRAIN% >
..\cvn\HCompv.cvn.log
)
if %TIPO%==%TIPO_BASE%_cmn_cvn (
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 112
"%HTK_DIR%\HCompV.exe" -A -D -C %CONFIG_FILE_CVN% -c ..\cvn -q nmv -k
"*%%%%%%%%%%%%%%%%%%%%%%%%."%TIPO_BASE% -S %LIST_FILE_TEST% >
..\cvn\HCompv.TEST.cvn.log
)
Como se observa se llama dos veces a HCompV si se ha parametrizado
el experimento para que se realice normalización cepstral de la media y
de la varianza. El proceso de normalización en sí se explicó en el
capítulo anterior por lo que sólo veremos aquí el funcionamiento de la
llamada a HCompV.
Con la opción –C pasamos a HCompV el fichero de configuración
CONFIG_FILE_CMN ó CONFIG_FILE_CVN respectivamente.
La opción –c habilita el cálculo de estimaciones basadas en clusters de
las medias o varianzas, e indica el directorio donde deben almacenarse,
bien sea ..\cmn o bien ..\cvn.
Para la estimación de la media/varianza se pueden obtener diferentes
tipos de salidas, dependiendo de la combinación de valores nmv que se
le pueda dar a la opción –q. Así, n hace que se escriba en el fichero de
salida el número de frames en un clúster; m y v hacen que se incluyan
en el fichero de salida los vectores de media y varianza,
respectivamente.
La opción –k indica una máscara para la estimación basada en clústers
de las medias o varianzas. El nombre de cada archivo de sonido se
compara con la máscara y los caracteres que vayan en el lugar de un
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 113
símbolo % se usarán como nombre del clúster. Se estimará un vector de
media/varianza por cada clúster.
La opción –S indica el fichero de lista, LIST_FILE_TRAIN o
LIST_FILE_TEST, para indicarle a HCompv cuáles deben ser los ficheros
parametrizados que utilice.
Por último indicamos en la instrucción que se guarden las salidas por
pantalla en un fichero de log, para poder seguir aparte la marcha de la
normalización.
A continuación el script train_monophones.bat continúa con las
funciones que son comunes a todos los experimentos, incluyan
normalización o no. En primer lugar se inicializa el fichero de prototipos
para el experimento a partir del que se creó en el script setBD.bat, que
era una especie de plantilla vacía para los ficheros de prototipos. La
llamada a HCompV es la siguiente:
:: genera el fichero de prototipos en el directorio %HMM_DIR%1m0 a partir del
generado en %LIB_DIR%
:: genera el fichero vfloors
"%HTK_DIR%\HCompV.exe" -C %CONFIG_FILE_HCOMPV% -f 1.0 -m -S
%LIST_FILE_TRAIN% -M %HMM_DIR%1m0 %LIB_DIR%\%Fichero_Proto%
A pesar de que se emplea la misma herramienta, al ser distintas las
opciones que se le pasan en la instrucción, el comportamiento de
HCompV será ahora diferente al que presentaba durante la
normalización cepstral. HCompV calculará la media y la varianza
globales del conjunto de datos contenido en los ficheros que se indican
en la lista de archivos de entrenamiento, lista que se le pasa con la
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 114
opción –S, LIST_FILE_TRAIN, y utilizará dichos cálculos para que todas
las gaussianas del modelo concreto HMM tengan la misma media y la
misma varianza. El fichero inicial de prototipos, Fichero_Proto, contenía
todas las medias a 0 y todas las varianzas a 1; HCompV creará una
nueva versión del fichero de prototipos en la carpeta especificada por la
opción –M, %HMM_DIR%1m0, donde las medias cero y las varianzas
unitarias habrán sido sustituídas por la media y varianza globales. Esta
manera de inicializar los modelos es lo que se conoce como un esquema
de flat start.
En el fichero de configuración que se le pasa a HCompV con la opción –
C, CONFIG_FILE_HCOMPV (véase Anexo 2), el parámetro TARGETKIND
debe ser coherente con el que se haya definido en el prototipo. Es decir,
si el fichero de prototipos del modelo es del tipo MFCC_0_D_A, HCompV
deberá calcular las medias y las varianzas teniendo en cuenta también
los coeficientes delta y los acelerados que son añadidos a los estáticos.
Es por esta necesidad de que exista coherencia entre la definición del
modelo y la configuración de HCompV por lo que en setBD.bat, como
comentamos en su apartado correspondiente, se reescriben el fichero de
prototipos y el fichero de configuración para que el valor del parámetro
TARGETKIND sea igual, el que se haya definido para el experimento en
cuestión.
Hemos utilizado otras dos opciones al invocar a HCompV. –f hace que
durante el proceso se cree un fichero de suelos de varianzas llamado
vFloors. Éste será un vector con tantos elementos como el vector de
varianzas globales y cuyo valor será tantas veces el de éste último como
se indique a continuación de –f; en nuestro caso es 1, por lo que vFloors
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 115
será igual al vector de varianzas globales. Este vector se empleará, como
su propio nombre indica, para establecer un mínimo a las varianzas
calculadas en los siguientes pasos.
Por su parte la opción –m hace que se calculen las medias así como las
varianzas.
A partir del fichero vFloors obtenido tras invocar a HCompV como
acabamos de ver, y haciendo uso del programa macro.exe (véase Anexo
1), construímos un fichero de macros necesario para el entrenamiento
posterior de HMMs:
:: genera el fichero de macros a partir de vfloors generado por HCOMPV
%BIN_DIR_TRAIN%\macro.exe %NUM_COEF% %PAR_TYPE%
%HMM_DIR%1m0\vFloors %HMM_DIR%1m0\macros
A este programa se le pasa el número de coeficientes o tamaño del
vector, el tipo de parametrización, el archivo vFloors como fichero de
entrada, y la ubicación y nombre del archivo de salida, macros.
Como ejemplo, el fichero vFloors será de la forma:
~v varFloor1
<Variance> 39
5.518626e+001 4.687965e+001 7.382014e+001…
Mientras que macros contendrá:
~o
<STREAMINFO> 1 39
<VECSIZE> 39
<NULLD>
<mfcc_0_D_A>
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 116
~v varFloor1
<Variance> 39
5.518626e+001 4.687965e+001 7.382014e+001…
Dado el nuevo modelo prototipo que se crea en la carpeta definida por –
M, se debe crear también un archivo macro maestro (MMF, Master
Macro File) llamado models que contenga una copia de cada uno de los
HMMs requeridos. Su estructura es similar a la de los archivos
maestros de etiquetas MLF y trata de la misma manera de evitar tener
una gran cantidad de archivos de definición de HMMs individuales.
Mediante el uso del programa copiaModelos.exe (véase Anexo 1) se crea
el fichero de modelos models (que se construye copiando el prototipo y
reetiquetándolo para cada uno de los alófonos), el modelo de lenguaje y
el diccionario de test:
:: genera el fichero models en el directorio %HMM_DIR%1m0
:: genera el modelo de lenguaje y el diccionario de test en %LIB_DIR%
%BIN_DIR_TRAIN%\copiaModelos.exe %HMM_DIR%1m0\%Fichero_Proto%
%HMM_DIR%1m0\models %LIB_DIR%\phon_network_%BD%.syn
%LIB_DIR%\monophones_%BD%.dct %IDENTIF%
Tras la ejecución de la sentencia obtendríamos además del fichero de
modelos, un fichero de modelo de lenguaje, que en el caso de
phon_network_SES.syn sería:
$phon = \'a | \'a~ | \'e | \'e~ | \'i | \'i~ | \'o | \'o~ | \'u | B1 | CH | COMA |
D1 | DOS_PUNTOS | G1 | J | J\/ | LL | NN | N~ | PUNTO_Y_COMA | RR | R_f |
R_gru | X | a | a~ | b | d | e | e~ | f | g | i | j_c | j_d | k | l | m | n | o | o~ | p | r |
s | t | u | u~ | w_c | w_d | z;
(
< $phon >
)
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 117
y un fichero con el diccionario de fonemas de los ficheros de
entrenamiento. En el caso de monophones_SES.dct el resultado sería:
\'a \'a
\'a~ \'a~
\'e \'e
\'e~ \'e~
\'i \'i
\'i~ \'i~
\'o \'o
\'o~ \'o~
\'u \'u
B1 B1
[…]
Una vez tenemos los archivos de inicialización macros y models en la
carpeta %HMM_DIR%1m0, comenzaremos un proceso de reestimaciones
de manera iterativa, proceso mediante el cual iremos afinando el modelo
HMM, y para el cual emplearemos la herramienta de reestimación
embebida HEREst. Realizaremos tantas reestimaciones (y por tanto,
tantas llamadas a HERest) como haya sido definido en el experimento, y
haremos esas reestimaciones para el modelo con 1, 2, 3... gaussianas
hasta llegar al número de gaussianas que haya sido definido. Como este
número puede ser variable, ya que se define individualmente para cada
experimento, en train_monophones.bat se crea otro script que repetirá el
proceso tantas veces como número de gaussianas se indiquen. De esta
manera conseguimos independizar la parte fija del proceso de
entrenamiento (en el fichero train_monophones.bat) de aquella que será
variable para cada experimento (y que se generará cada vez en el script
train_auto.bat). Este último script se genera mediante el programa en
perl autoTrain.per (que se explica en el apartado 5.4.6), al que se le
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 118
pasan el número de gaussianas, iteraciones y estados del experimento
para que cree correctamente el script train_auto.bat, que será el
siguiente en ejecutarse:
echo on
perl autoTrain.per %NUM_GAUSSIANS% %NUM_ITERACIONES%
%NUM_ESTADOS% >train_auto.bat
call train_auto.bat
:FINAL
5.2.6 Train_auto.bat
Este script “hijo” que se genera desde el script “padre”
train_monophones.bat comienza creando en la carpeta de librerías un
fichero de tipo .hed para cada número de mezclas que se van a estimar;
su contenido será el comando que se le pasará al editor de modelos
HHEd para su correcta actualización:
MU %NUM_GAUSSIANS% {*.state[2-%NUM_STATES% -1].mix}
Por ejemplo, para la sexta mezcla gaussiana, con 5 estados, tendríamos
el fichero mix6.hed, cuyo contenido sería:
MU 6 {*.state[2-4].mix}
A continuación se crean tantos directorios de modelos hmm como
combinaciones se puedan dar entre el número de gaussianas y el
número de iteraciones, ya que estos directorios se definen como:
hmmimj
donde i es el número de gaussianas (i mezclas) y j es el número de
iteraciones. Así las instrucciones serán de este tipo:
mkdir ..\..\experiments\%BD%\monophones\hmm1m0\
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 119
mkdir ..\..\experiments\%BD%\monophones\hmm1m1\
mkdir ..\..\experiments\%BD%\monophones\hmm1m2\
mkdir ..\..\experiments\%BD%\monophones\hmm1m3\
mkdir ..\..\experiments\%BD%\monophones\hmm1m4\
mkdir ..\..\experiments\%BD%\monophones\hmm2m0\
…
mkdir ..\..\experiments\%BD%\monophones\hmm10m3\
mkdir ..\..\experiments\%BD%\monophones\hmm10m4\
Ahora es cuando empieza el proceso real de reestimación. Se trata de
llamar a la herramienta HERest tantas veces como número de
iteraciones se hayan definido, y repetir el experimento para los distintos
números de mezclas deseados. Por ejemplo, si hemos definido 10
gaussianas y 4 iteraciones, comenzaríamos por realizar el experimento
para 1 mezcla y se realizarían 4 reestimaciones del modelo:
:: 2. Entrenamiento del HMM con 1 mezclas
echo "Inicialización del HMM con 1 mezclas"
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%1m0\macros" -H
"%HMM_DIR%1m0\models" -M "%HMM_DIR%1m1" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%1m1\macros" -H
"%HMM_DIR%1m1\models" -M "%HMM_DIR%1m2" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%1m2\macros" -H
"%HMM_DIR%1m2\models" -M "%HMM_DIR%1m3" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%1m3\macros" -H
"%HMM_DIR%1m3\models" -M "%HMM_DIR%1m4" %PHONEME_LIST%
echo " Entrenamiento del HMM con 1 mezclas realizado: 4 iteraciones
completadas”
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 120
Mediante la primera instrucción se cargarán todos los modelos (los
ficheros macros y models contenidos en la carpeta hmm1m0 indicados
con la opción –H) de los fonemas indicados en la lista de fonemas
PHONEME_LIST, realizará una reestimación empleando los datos
indicados en el fichero de script que sigue a la opción –S, es decir,
LIST_FILE_TRAIN, y los nuevos modelos se guardarán en la carpeta
indicada por –M, en este caso, hmm1m1. Cada vez que se ejecuta
HERest se consigue una nueva reestimación, por lo que el proceso se
debe repetir tantas veces como iteraciones se deseen para el
experimento actual, tomando en cada reestimación como modelos de
entrada (-H) los que resultaron como salida (-M) de la iteración anterior.
De esta manera se creará un nuevo conjunto de modelos por cada
iteración, almacenados en su carpeta correspondiente, y la última de
éstas, en nuestro caso hmm1m4, contendrá el conjunto final de HMMs
reestimados tantas veces como iteraciones se hayan definido.
Una vez hemos realizado todas las iteraciones deseadas sobre los
modelos con una sóla mezcla, repetimos el proceso para 2 mezclas. Para
ello, lo primero que debemos hacer es actualizar los estados de los
modelos para que incluyan 2 mezclas. Esto lo conseguimos mediante el
editor de modelos HHEd:
:: 3. Entrenamiento del HMM con 2 mezclas
"%HTK_DIR%\HHEd.exe" -T 2 -H %HMM_DIR%1m%NUM_ITERACIONES%\macros -
H %HMM_DIR%1m%NUM_ITERACIONES%\models -M %HMM_DIR%2m0
%LIB_DIR%\mix2.hed %PHONEME_LIST%
Mediante esta instrucción HHEd cargará todos los modelos contenidos
en la última carpeta de 1 gaussiana (en nuestro caso hmm1m4)
realizará las transformaciones que le solicitamos y volverá a dejar los
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 121
modelos en la primera carpeta de 2 gaussianas, hmm2m0. Usamos de
nuevo los indicadores -H y -M para indicar el origen y el destino,
respectivamente.
En cuanto a las transformaciones que le solicitamos, lo hacemos
mediante un fichero de comandos de edición con extensión .hed, que
como vimos antes contiene un solo comando de tipo MU, en nuestro
caso:
MU 2 {*.state[2-4].mix}
Con este comando le indicamos a HHEd que queremos incrementar el
número de mezclas de todos los estados válidos (2 a 4) de cada modelo
a 2.
Una vez tenemos en hmm2m0 los modelos con 2 gaussianas se procede
a reestimar de la misma manera que se hizo con los modelos con 1
mezcla:
echo "Inicialización del HMM con 2 mezclas"
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%2m0\macros" -H
"%HMM_DIR%2m0\models" -M "%HMM_DIR%2m1" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%2m1\macros" -H
"%HMM_DIR%2m1\models" -M "%HMM_DIR%2m2" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%2m2\macros" -H
"%HMM_DIR%2m2\models" -M "%HMM_DIR%2m3" %PHONEME_LIST%
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%2m3\macros" -H
"%HMM_DIR%2m3\models" -M "%HMM_DIR%2m4" %PHONEME_LIST%
echo " Entrenamiento del HMM con 2 mezclas realizado: 4 iteraciones
completadas”
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 122
El script train_auto.bat repetirá el proceso para 3, 4… gaussianas, hasta
el número que se hubiera definido para el experimento en curso.
:: 4. Entrenamiento del HMM con 3 mezclas
"%HTK_DIR%\HHEd.exe" -T 2 -H %HMM_DIR%2m%NUM_ITERACIONES%\macros -
H %HMM_DIR%2m%NUM_ITERACIONES%\models -M %HMM_DIR%3m0
%LIB_DIR%\mix3.hed %PHONEME_LIST%
echo "Inicialización del HMM con 3 mezclas"
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%3m0\macros" -H
"%HMM_DIR%3m0\models" -M "%HMM_DIR%3m1" %PHONEME_LIST%
…
…
"%HTK_DIR%\HERest.exe" -C %CONFIG_FILE_TRAIN% -I
%LABEL_OUT_FILE_TRAIN% -S %LIST_FILE_TRAIN% -H "%HMM_DIR%10m3\macros" -H
"%HMM_DIR%10m3\models" -M "%HMM_DIR%10m4" %PHONEME_LIST%
echo " Entrenamiento del HMM con 10 mezclas realizado: 4 iteraciones
completadas”
5.2.7 Reco_monophones.bat
En el script reco_monophones.bat se lleva a cabo el proceso de
reconocimiento, que hará uso de las herramientas HVite y HResults.
Lo primero que se hace es establecer los flags (serán explicados cuando
se utilicen en la ejecución de HVite):
rem # Opciones de reconocimiento
set flags=-p 0.0 -s 0.0
A continuación se establece el nombre con el que comenzarán todos los
ficheros que se creen durante el proceso de reconocimiento, con la
variable BASE_RECO_FILE:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 123
rem # Ficheros de segmentación
set BASE_RECO_FILE=reco_mono
Ahora se genera la red de palabras mediante el uso de la herramienta
HParse. Ésta genera un archivo de red de palabras (en nuestro caso
fonemas) a partir de un fichero de texto que describe la sintaxis a
emplear por medio de un conjunto de reglas de traducción. La
instrucción es la siguiente:
rem # Generación de la red
"%HTK_DIR%\Hparse" %FICH_SYN% %NET%
En el caso de nuestro ejemplo, el fichero que contiene la sintaxis sería
phon_network_SES.syn, y el resultado de la ejecución de HParse, es
decir, la red generada, estaría en el fichero phon_network_SES.nwk
Por último este script llama a un script dependiente, reco_gauss.bat,
que deberá ejecutarse una vez por cada una de las gaussianas que se
han definido, para lo cual se procede con el siguiente bucle:
for /L %%i in (1,1,%NUM_GAUSSIANS%) do call reco_gauss.bat %%i
5.2.8 Reco_gauss.bat
Una vez se han definido los flags, la base para el nombre de los ficheros
de reconocimiento y se ha generado la red de fonemas, se puede
proceder a las tareas que son necesarias para realizar el reconocimiento
y la evaluación del mismo, y que se deben ejecutar para cada número
de gaussianas definido. Estas tareas son en concreto, dos ejecuciones
de HVite y otras dos de HResults.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 124
Para empezar, indicamos el nombre que queremos que reciban los
ficheros maestros de etiquetas (.MLF) que se generarán como resultado
del proceso de reconocimiento y los ficheros de resultados (.RES) que
generará la llamada a HResults, así como el directorio donde están
almacenados los modelos:
set RECO_FILE=%BASE_RECO_FILE%_%1%m.mlf
set RESULTS_FILE=%BASE_RECO_FILE%_%1%m.res
set RECO_FILE2=%BASE_RECO_FILE%_%1%m__2.mlf
set RESULTS_FILE2=%BASE_RECO_FILE%_%1%m__2.res
set DIR_GAUSS=%HMM_DIR%%1%
En el caso de nuestro ejemplo, para la primera gaussiana, estas
instrucciones quedarían en:
set RECO_FILE=reco_mono_1m.mlf
set RESULTS_FILE=reco_mono_1m.res
set RECO_FILE2=reco_mono_1m__2.mlf
set RESULTS_FILE2=reco_mono_1m__2.res
set DIR_GAUSS=
c:\usuarios_jcarmona\segmentation\experiments\SES\monophones\hmm1
Vendría ahora la ejecución del HVite con la que realizamos el
reconocimiento en sí:
"%HTK_DIR%\HVite" -A -D -C %CONFIG_FILE_TRAIN% -w %NET% -H
%DIR_GAUSS%m%NUM_ITERACIONES%\macros -H
%DIR_GAUSS%m%NUM_ITERACIONES%\models -S %LIST_FILE_TEST% -l * -y rec -i
%RESULTS_DIR%\%RECO_FILE% %flags% %DICT% %PHONEME_LIST%
HVite es un reconocedor de palabras de propósito general que emplea el
algoritmo de Viterbi y que hace casar el archivo que se quiere reconocer
con una red de modelos HMM y genera una transcripción para dicho
fichero de entrada. En la instrucción anterior:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 125
definimos con –S el script que contiene los ficheros de test que
queremos que sean reconocidos,
con –w indicamos la red de palabras con la que deberá realizarse
el reconocimiento y que obtuvimos con la ejecución de HParse,
con –H indicamos dónde se encuentran los ficheros de modelos y
macros correspondientes a los modelos HMM en cuestión,
con –i %RESULTS_DIR%\%RECO_FILE% indicamos que las
transcripciones de salida deben dirigirse al fichero MLF
RECO_FILE,
-l sirve para especificar el directorio donde se guardarán los
ficheros de etiquetas generados. Como la salida se dirige a un
fichero MLF, esta opción se utiliza para añadir una ruta al
nombre de cada fichero de salida. Al indicar –l * hacemos que al
nombre de un archivo de etiquetas llamado xxx se le añada un
prefijo según el patrón “*/xxx” en el fichero MLF se salida.
Hacemos esto así para que los MLF generados sean
independientes de la ruta en la que se encuentren los ficheros de
datos correspondientes,
con –y rec indicamos que los ficheros de etiquetas generados
deberán llevar la extensión .rec,
y el resto de opciones son las que ya utilizamos en otras
herramientas: -C para indicar el fichero de configuración, -A para
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 126
que se impriman los argumentos de la línea de comandos actual,
y –D para que se muestren los ajustes de configuración.
Una vez se ha producido el reconocimiento con HVite y que se han
generado los ficheros de etiquetas resultado de dicho reconocimiento,
ejecutamos HResults:
"%HTK_DIR%\HResults" -I %LABEL_OUT_FILE_TEST% %PHONEME_LIST%
%RESULTS_DIR%\%RECO_FILE% > %RESULTS_DIR%\%RESULTS_FILE%
HResults es la herramienta de análisis del rendimiento de HTK. Se le
pasa el archivo que se generó durante el reconocimiento RECO_FILE, la
lista de fonemas, y con –I cargamos los ficheros de etiquetas de
referencia para la evaluación del reconocimiento. La salida de los
resultados, en vez de que salga por pantalla, se redirige a un fichero de
resultados con el nombre que definimos al principio del script.
La ejecución de HVite y HResults se ha realizado para el conjunto de
ficheros de prueba LIST_FILE_TEST. Teniendo en cuenta que
trabajamos con dos conjuntos de prueba, para terminar el script se
repiten estas dos ejecuciones ahora para LIST_FILE_TEST2:
"%HTK_DIR%\HVite" -A -D -C %CONFIG_FILE_TRAIN% -w %NET% -H
%DIR_GAUSS%m%NUM_ITERACIONES%\macros -H
%DIR_GAUSS%m%NUM_ITERACIONES%\models -S %LIST_FILE_TEST2% -l * -y rec -i
%RESULTS_DIR%\%RECO_FILE2% %flags% %DICT% %PHONEME_LIST%
"%HTK_DIR%\HResults" -I %LABEL_OUT_FILE_TEST2% %PHONEME_LIST%
%RESULTS_DIR%\%RECO_FILE2% > %RESULTS_DIR%\%RESULTS_FILE2%
"%HTK_DIR%\HResults" -I %LABEL_OUT_FILE_TEST2% %PHONEME_LIST%
%RESULTS_DIR%\%RECO_FILE2% > %RESULTS_DIR%\%RESULTS_FILE2%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 127
5.2.9 Segm_monophones.bat
Este script se encarga del proceso de segmentación. Dado que éste se
realiza de forma similar al de reconocimiento, tanto segm_monophones
.bat como segm_gauss.bat seguirán la misma estructura que
reco_monophones.bat y reco_gauss.bat, respectivamente.
En el caso de segm_monophones.bat, tan sólo cambia con respecto a
reco_monophones.bat el nombre que le damos a los ficheros que
contendrán el resultado de la segmentación, y que en el caso de la
segmentación no necesitamos volver a crear el fichero de red de
palabras; el resto del script es idéntico:
rem # Opciones para la segmentación
set flags=-p 0.0 -s 0.0
rem # Ficheros de segmentación
set BASE_SEGM_FILE=segm_mono
for /L %%i in (1,1,%NUM_GAUSSIANS%) do call segm_gauss.bat %%i
5.2.10 Segm_gauss.bat
Como acabamos de comentar este script es muy similar a
reco_gauss.bat. Para empezar, indicamos el nombre que queremos que
reciban los ficheros maestros de etiquetas (.MLF) que se generarán
como resultado del proceso de segmentación, así como el directorio
donde están almacenados los modelos:
set SEGM_FILE=%BASE_SEGM_FILE%_%1%m.mlf
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 128
set SEGM_FILE2=%BASE_SEGM_FILE%_%1%m__2.mlf
set DIR_GAUSS=%HMM_DIR%%1%
En el caso de nuestro ejemplo estas instrucciones quedarían en:
set SEGM_FILE=segm_mono_1m.mlf
set SEGM_FILE2=segm_mono_1m__2.mlf
set DIR_GAUSS=
c:\usuarios_jcarmona\segmentation\experiments\SES\monophones\hmm1
La ejecución de la segmentación se realiza también mediante una
llamada a HVite:
"%HTK_DIR%\HVite" -A -D -C %CONFIG_FILE_TRAIN% -a -m -o SW -I
%LABEL_OUT_FILE_TEST% -H %DIR_GAUSS%m%NUM_ITERACIONES%\macros -H
%DIR_GAUSS%m%NUM_ITERACIONES%\models -S %LIST_FILE_TEST% -l * -y rec -i
%RESULTS_DIR%\%SEGM_FILE% %flags% %DICT% %PHONEME_LIST%
Puede observarse que esta instrucción es muy similar a la que se daba
en el caso del reconocimiento, pero presenta un par de diferencias; son
precisamente estos matices los que contienen la información necesaria
para que se realice la segmentación:
con –a indicamos que se debe realizar el alineamiento. HVite
cargará un fichero de etiquetas y creará una red de alineamiento
para cada fichero de test.
Con –m indicamos que durante el reconocimiento se guarden las
fronteras entre los modelos, es decir, el inicio y fin de cada
fonema. El fichero de etiquetas de salida contendrá múltiples
niveles. El primero será el número del modelo y el segundo el
nombre de la palabra (fonema en nuestro caso).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 129
Con –o indicamos cómo queremos darle formato a las etiquetas de
salida. A continuación de –o se incluye una cadena de letras
donde cada una será una opción de formato. En concreto usamos
SW. Con S hacemos que no se escriba en las etiquetas de salida
las puntuaciones acústica y de modelo, parámetros que no nos
interesan; con W hacemos que no se escriban las palabras
resultantes (en nuestro caso no tendría sentido, al estar
trabajando a nivel de fonema).
En lugar de pasarle a HVite una red de palabras con –w cargamos
con –I el fichero maestro de etiquetas LABEL_OUT_FILE_TEST.
Obviamente, se cambia %RECO_FILE% por %SEGM_FILE%.
Tras esta llamada a HVite tendremos en el directorio de resultados unos
ficheros de etiquetas de salida en los que en cada línea se indica el
inicio y fin del fonema y el nombre de dicho fonema. A diferencia del
resultado del reconocimiento, aquí lo que interesa no es el nombre del
fonema reconocido, que será siempre correcto puesto que para
segmentar le hemos pasado a HVite las trascripciones de los ficheros.
Lo que nos interesa será esos datos de principio y fin de fonema, que
constituyen la segmentación en sí misma de los ficheros de sonido. Por
ejemplo, el fichero segm_mono_1m.mlf tendrá un contenido como el
siguiente:
#!MLF!#
"*/F_A_0103.rec"
0 1100000 n
1100000 2000000 "'o"
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 130
2000000 2800000 k
2800000 3400000 "'e"
3400000 3800000 D1
3800000 4400000 a
...
Esto quiere decir que la segmentación del fichero de audio F_A_0103 da
como resultado que el fonema n se encuentra entre el segundo 0 y el
0.11 (la unidad temporal en HTK son 100ns, 1100000*100ns=0.11s), el
fonema 'o entre los segundos 0.11 y 0.2, y así sucesivamente.
A continuación se realiza la llamada a HResults, que también es similar
a la que realizamos en reco_gauss.bat, pero cambiando RECO_FILE por
SEGM_FILE. En este caso no guardamos el resultado, puesto que la
evaluación del rendimiento del reconocimiento debe dar siempre 100%
como comentamos antes; dejamos esta instrucción a efectos de poder
realizar esa comprobación, pero la evaluación de la segmentación la
realizaremos en el script siguiente.
"%HTK_DIR%\HResults" -I %LABEL_OUT_FILE_TEST% %PHONEME_LIST%
%RESULTS_DIR%\%SEGM_FILE%
Para terminar el script, y del mismo modo que se hacía en
reco_monophones.bat, se repiten las llamadas a HVite y HResults para el
conjunto de ficheros de prueba LIST_FILE_TEST2:
"%HTK_DIR%\HVite" -A -D -C %CONFIG_FILE_TRAIN% -a -m -o SW -I
%LABEL_OUT_FILE_TEST2% -H %DIR_GAUSS%m%NUM_ITERACIONES%\macros -H
%DIR_GAUSS%m%NUM_ITERACIONES%\models -S %LIST_FILE_TEST2% -l * -y rec -i
%RESULTS_DIR%\%SEGM_FILE2% %flags% %DICT% %PHONEME_LIST%
"%HTK_DIR%\HResults" -I %LABEL_OUT_FILE_TEST2% %PHONEME_LIST%
%RESULTS_DIR%\%SEGM_FILE2%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 131
5.2.11 Eval_monophones.bat
Entramos con este script en la última fase del proceso, la evaluación de
la segmentación. En esta fase repetiremos las mismas tareas para cada
gaussiana hasta el número que se haya definido en el experimento, por
lo que dichas tareas las implementamos en el script dependiente
reco_gauss.bat, que deberá ejecutarse una vez por cada una de las
gaussianas:
for /L %%i in (1,1,%NUM_GAUSSIANS%) do call eval_gauss.bat %%i
5.2.12 Eval_gauss.bat
En primer lugar definimos el nombre del archivo de etiquetas que
obtuvimos como salida de la ejecución de HVite con la que realizamos la
segmentación, LABEL_DEC_FILE; y los nombres de dos nuevos ficheros
que se crearán a continuación, uno de estadísticas (STATS_FILE) y otro
con el resultado de la evaluación (RESULTS_FILE):
set LABEL_DEC_FILE=%RESULTS_DIR%\segm_mono_%1%m.mlf
set STATS_FILE=%RESULTS_DIR%\segm_mono_%1%m.sta
set RESULTS_FILE=%RESULTS_DIR%\segm_mono_%1%m.res
Y hacemos las mismas definiciones para el segundo grupo de
evaluación:
set LABEL_DEC_FILE2=%RESULTS_DIR%\segm_mono_%1%m__2.mlf
set STATS_FILE2=%RESULTS_DIR%\segm_mono_%1%m__2.sta
set RESULTS_FILE2=%RESULTS_DIR%\segm_mono_%1%m__2.res
La evaluación de la segmentación la realizamos con el programa
score_mono.exe (cuyo código se encuentra en el Anexo 1):
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 132
%BIN_DIR_EVAL%\score_mono.exe %PHONEME_LIST%
%LABEL_OUT_FILE_TEST% %LABEL_DEC_FILE% %STATS_FILE% > %RESULTS_FILE%
%BIN_DIR_EVAL%\score_mono.exe %PHONEME_LIST%
%LABEL_OUT_FILE_TEST2% %LABEL_DEC_FILE2% %STATS_FILE2% >
%RESULTS_FILE2%
Al programa score_mono.exe le pasamos la lista de fonemas, el archivo
maestro de etiquetas de los ficheros de evaluación (que incluyen los
datos de segmentación manual previa), y el archivo de resultados del
proceso de segmentación (que incluye los datos de segmentación
calculado por HVite). Este programa compara los datos de segmentación
para cada uno de los fonemas entre ambas fuentes (la segmentación
manual y la segmentación resultado del proceso de nuestro sistema),
calcula las desviaciones de la segmentación de cada fonema y hace un
recuento de errores para 5 tolerancias diferentes (5, 10, 15, 20 y 25
ms). El programa genera (además de un fichero de estadísticas con
datos intermedios) una salida que dirigimos al fichero de resultados
para tener almacenados los datos calculados de la evaluación. Por
ejemplo, el fichero segm_mono_3m.res podrá contener líneas como las
siguientes:
Alphabet c:\usuarios_jcarmona\segmentation\segmenter\lib\phonemes_SES.lis
contains 51 phonemes
The number of reference label files is 151
The number of decoded label files is 151
Segmentation results
Instances for transition "'a"-B1 = 32
Total errors: Perc = 46.875000
Right errors: Perc = 46.666667 Average = 11.022301 ms
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 133
Left errors: Perc = 53.333333 Average = -11.382837 ms
Instances for transition "'a"-D1 = 28
Total errors: Perc = 64.285714
Right errors: Perc = 88.888889 Average = 11.087868 ms
Left errors: Perc = 11.111111 Average = -5.812550 ms
...
Total errors for tol 5.000000 ms = 63.468951
Como se observa, como resultado de la evaluación de la segmentación
tendremos el porcentaje de errores por la izquierda, por la derecha y
total, y la desviación media para cada una de las transiciones entre
fonemas. Finalmente tendremos 5 líneas de resumen como la última
expuesta, que contienen porcentaje de error total para las cinco
tolerancias comentadas. Será ese porcentaje de error el que
utilizaremos para determinar el grado de éxito que tienen los diferentes
experimentos que realizaremos con nuestro segmentador fonético
automático.
Llegados a este punto termina el flujo completo de ejecución del sistema
que habíamos comenzado con el script full.bat.
5.3 SCRIPTS AUXILIARES
En el apartado anterior hemos descrito los scripts fundamentales en
que se basa el segmentador fonético automático siguiendo el orden que
ocupa cada uno en el proceso, y hemos mencionado el uso de algunos
scripts que no son fundamentales en dicho proceso pero que han sido
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 134
desarrollados para simplificar o automatizar ciertas tareas que debían
realizarse a lo largo del proceso. Una vez estudiados los scripts
fundamentales del proceso dejamos indicado en este apartado el código
de dichos scripts auxiliares.
5.3.1 Limpia.bat
Como comentábamos al describir full.bat (apartado 5.2.1), este script
tan sólo limpia el contenido de ciertos directorios que se van generando
a lo largo del proceso, en concreto los ficheros de parametrización
generados por HCopy, el contenido de los directorios temporales usados
en la normalización cepstral y las listas .dep y .dp de patrones de tipo
de grabación-emoción con las que se indica al sistema que se va a
trabajar. Todo esto lo hace el programa con las siguientes líneas:
SETLOCAL
del ..\..\mfcc_par\ses\*.mfc
del ..\..\mfcc_par\ses\*.plp
del ..\..\mfcc_par\sev\*.mfc
del ..\..\mfcc_par\sev\*.plp
del ..\cmn\*.
del ..\cvn\*.
del ..\lists\*.dep
del ..\lists\*.dp
ENDLOCAL
5.3.2 Mi_type.bat
Como vimos al hablar del acondicionamiento de los ficheros de listas en
setBD.bat, este programa tan sólo escribe lo que se le pasa como primer
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 135
argumento en el fichero que le indiquemos como segundo argumento.
Esto se realiza con el siguiente código:
rem echo par1: %1
rem echo par2: %2
type %1 >> %2
5.3.3 Summary.bat
Como vimos al hablar de la evaluación de la segmentación
(eval_gauss.bat), en los ficheros de resultados de la evaluación tenemos,
entre otros muchos datos, el porcentaje de error global para cinco
niveles de tolerancia diferentes. De todo el fichero ése será el dato que
nos interese cuando ejecutemos un experimento determinado, por lo
que resulta de utilidad tener una manera rápida de extraer ese dato de
los ficheros de resultados y recogerlos de manera resumida en otro
fichero, que llamaremos summary.dep. En este sencillo script definimos
el umbral de tolerancia que nos interesa (variable
ERROR_THRESHOLD), y el programa irá entrando en cada directorio de
resultados y en cada fichero de resultados, y anotará en summary.dep
el porcentaje de error que ha obtenido para cada número de
gaussianas, además de otros datos como la fecha y hora, y el número
de fonemas totales del experimento. El código con el que se realiza esto
es el siguiente:
rem @echo off
set ERROR_THRESHOLD=20
set STRING_BUSCA="Total errors for tol %ERROR_THRESHOLD%.000000"
set FICH_DEP=SUMMARY.dep
dir /b *. >frases.dir
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 136
for /F %%i in (frases.dir) do (
cd %%i
echo -----------%date% %time%----------- >> SUMMARY.dep
echo -----------%date% %time%----------- >> ..\SUMMARY.dep
echo %%i >> SUMMARY.dep
echo %%i >> ..\SUMMARY.dep
type fonemas_totales.dep >> SUMMARY.dep
type fonemas_totales.dep >> ..\SUMMARY.dep
echo fonemas >> SUMMARY.dep
echo fonemas >> ..\SUMMARY.dep
find %STRING_BUSCA% segm*.res >> SUMMARY.dep
find %STRING_BUSCA% segm*.res >> ..\SUMMARY.dep
cd..
)
5.4 PROGRAMAS EN PERL USADOS EN EL
SEGMENTADOR
A lo largo de los distintos scripts fundamentales del segmentador hemos
recurrido en varias ocasiones al lenguaje de programación perl (que
explicamos en el capítulo dedicado a las herramientas empleadas), para
realizar tareas de simplificación o automatización. En algunas
ocasiones lo hemos hecho mediante instrucciones sencillas de perl
integradas en los scripts, en cuyo caso ya han sido comentadas; en
otras hemos desarrollado ficheros aparte con extensión .per que
incluyen dichas tareas deseadas, y hemos incluído en los scripts
instrucciones perl para ejecutar dichos ficheros. En este apartado
haremos una breve reseña del contenido de los mismos.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 137
5.4.1 GenProto.per
Este programa es empleado en la fase de acondicionamiento de ficheros
(setBD.bat) para generar el prototipo de los HMM. La estructura de
dicho prototipo de modelos fue explicada en el capítulo anterior. Para
construir dicha estructura se emplea el código que se detalla a
continuación.
La llamada a genProto.per que se realiza en setBD.bat es la siguiente:
perl genProto.per %NUM_ESTADOS% %NUM_COEF% %PAR_TYPE%
>%LIB_DIR%\%Fichero_Proto%
por lo que lo primero que haremos será capturar los tres argumentos
que le pasamos al programa:
$NumStates=$ARGV[0];
$NumParam=$ARGV[1];
$TipoParam=$ARGV[2];
Se comienza escribiendo el modelo (hemos dirigido la salida estándar al
fichero de prototipo) con las cabeceras adecuadas y adaptadas a los
parámetros dados:
printf stdout "<BeginHMM>\n";
printf stdout "<NumStates> %d <VecSize> %d <%s> <nullD>
<diagC>\n",$NumStates,$NumParam,$TipoParam;
printf stdout "<StreamInfo> 1 %d\n",$NumParam;
Ahora para cada uno de los estados válidos (excluídos el inicial y el
final, que como ya se comentó no contienen información) se crea la
estructura con una sóla mezcla gaussiana de la que cuelgan dos
vectores, el de la media y el de la varianza. El vector de media se
inicializa con tantos coeficientes como se le haya indicado al programa
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 138
con valor inicial 0, y el vector de varianza de la misma manera pero con
el valor inicial 1.
for ($i=2; $i<$NumStates; $i++)
{
printf stdout "<State> %d <NumMixes> 1\n",$i;
printf stdout "<Stream> 1\n";
printf stdout "<Mixture> 1 1.0\n";
printf stdout " <Mean> %d\n",$NumParam;
for ($j=0; $j<$NumParam; $j++)
{
printf stdout "0.0 ";
}
printf stdout "\n";
printf stdout " <Variance> %d\n",$NumParam;
for ($j=0; $j<$NumParam; $j++)
{
printf stdout "1.0 ";
}
printf stdout "\n";
}
A continuación se crea la matriz de transición de estados, que tendrá
tantas filas y columnas como estados. Por convenio la definimos de
manera que del primer estado siempre se pase al segundo (primera fila
con 1 en la segunda posición y los demás a 0), que el estado final sea no
emisor (última fila todos a 0), y que los estados intermedios, es decir,
los válidos, tengan equiprobabilidad de emitir y de saltar al siguiente
estado, sin permitir saltos a estados diferentes de ése (la fila 2 tendrá
0.5 en las posiciones 2 y 3, la fila 3 tendrá ese valor en las posiciones 3
y 4, y así sucesivamente; todas las demás posiciones estarán a 0).
printf stdout "<TransP> %d\n",$NumStates;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 139
if ($NumStates==1)
{
printf stdout "1.000e+0\n";
}
else
{
for ($i=0; $i<$NumStates; $i++)
{
for ($j=0; $j<$NumStates; $j++)
{
if ($i==0 && $j==1)
{
printf stdout "1.000e+0 ";
}
elsif ($i==0 || $i==$NumStates-1)
{
printf stdout "0.000e+0 ";
}
elsif ($i==$j)
{
printf stdout "5.000e-1 ";
}
elsif ($i+1==$j)
{
printf stdout "5.000e-1 ";
}
else
{
printf stdout "0.000e+0 ";
}
}
printf stdout "\n";
}
}
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 140
Por último se cierra el modelo con la etiqueta de finalización:
printf stdout "<EndHMM>\n";
5.4.2 Blancos2retornos.per
Este sencillo programa se utiliza durante el acondicionamiento de los
ficheros de listas en setBD.bat. Lo único que hace es escribir en líneas
separadas todo lo que se le pasa como entrada entre espacio y espacio.
De esta manera conseguimos copiar un fichero sustituyendo los
espacios que contiene por retornos de carro:
while ($_=<stdin>)
{
s/[\s\t]+/\n/g;
printf stdout $_;
}
5.4.3 Mlf2fon.per
Este programa en perl se utiliza durante el entrenamiento para crear la
lista de fonemas a partir del archivo maestro de etiquetas que contiene
las relativas a todas las alocuciones que se van a utilizar en el
experimento. Este programa va cogiendo cada una de las líneas de este
MLF, elimina el retorno de carro con la función chop, ignora la etiqueta
inicial #!MLF!#, las líneas que indican el nombre de la etiqueta (que
empiezan por ") y las líneas que separan unas etiquetas de otras
(marcadas con puntos .) y todas las demás líneas las trocea con la
función split. Como cada una de las líneas de fonemas tienen tres datos
separados por espacios o tabuladores (inicio, fin, y el propio fonema)
imprime el tercer trozo de cada línea, es decir, el propio fonema, y pasa
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 141
a la línea siguiente. De esta manera obtendremos una lista completa de
todos los fonemas en el orden en que van apareciendo en el MLF. El
código empleado es el siguiente:
while ($_=<stdin>)
{
chop;
if (/^#/)
{
}
elsif (/^\"/)
{
}
elsif (/^\./)
{
}
else
{
@c=split(/[\s\t]+/,$_);
printf stdout "%s\n",$c[2];
}
}
5.4.4 Mlf2c.per
Como hemos comentado en el apartado dedicado a
train_monophones.bat este programa en perl realiza la misma actividad
que mlf2fon.per pero haciendo que los fonemas vayan todos entre
comillas dobles y las líneas terminen con comas:
while ($_=<stdin>)
{
chop;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 142
if (/^#/)
{
}
elsif (/^\"/)
{
}
elsif (/^\./)
{
}
else
{
@c=split(/[\s\t]+/,$_);
$_=$c[2];
if (/\"/)
{
printf stdout "%s,\n",$c[2];
}
else
{
printf stdout "\"%s\",\n",$c[2];
}
}
}
5.4.5 Cuentalineas.per
Este sencillo programa tan sólo cuenta las líneas existentes en un
fichero dado. Como se puede ver en su código, emplea para ello un
contador que va incrementando en 1 cada vez que encuentra una línea
en la entrada, y cuando no quedan más líneas imprime dicho contador
actualizado:
$cont=0;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 143
while ($_=<stdin>){ #Va leyendo línea a línea y lo guarda en la variable $_
$cont++;
}
printf stdout "%d", $cont;
5.4.6 AutoTrain.per
Este programa se emplea, como hemos visto en este capítulo, para
generar el código correspondiente a la parte de la fase de entrenamiento
variable, es decir, a las tareas que dependen del número de gaussianas,
iteraciones y estados definidos en cada experimento concreto. Su
contenido ya se explicó al describir Train_auto.bat, por lo que dejamos
aquí indicado su código:
$NUM_GAUSSIANS=$ARGV[0];
$NUM_ITERATIONS=$ARGV[1];
$NUM_STATES=$ARGV[2];
for ($i=2; $i<=$NUM_GAUSSIANS; $i++)
{
printf stdout "echo MU %d {*.state[2-%d].mix}
>..\\lib\\mix%d.hed\n",$i,$NUM_STATES-1,$i;
}
for ($i=1; $i<=$NUM_GAUSSIANS; $i++)
{
for ($j=0; $j<=$NUM_ITERATIONS; $j++)
{
printf stdout "mkdir
..\\..\\experiments\\%%BD%%\\monophones\\hmm%dm%d\\\n",$i,$j;
}
}
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
5. Implementación del segmentador: Estructura del programa y sus scripts 144
for ($i=1; $i<=$NUM_GAUSSIANS; $i++)
{
printf stdout ":: %d. Entrenamiento del HMM con %d mezclas\n",$i+1,$i;
if ($i>1)
{
printf stdout "\"%%HTK_DIR%%\\HHEd.exe\" -T 2 -H
%%HMM_DIR%%%dm%%NUM_ITERACIONES%\\macros -H
%%HMM_DIR%%%dm%%NUM_ITERACIONES%%\\models -M %%HMM_DIR%%%dm0
%%LIB_DIR%%\\mix%d.hed %%PHONEME_LIST%%\n",$i-1,$i-1,$i,$i;
}
else
{
#printf stdout "\"%%HTK_DIR%%\\HERest.exe\" -C %%CONFIG_FILE_TRAIN%% -A
-V -D -I %%LABEL_OUT_FILE_TRAIN%% -S %%LIST_FILE_TRAIN%% -H
%%HMM_DIR%%1m0\\macros -H %%HMM_DIR%%1m0\\models -M
%%HMM_DIR%%1m1 %%PHONEME_LIST%%\n";
}
printf stdout "echo \"Inicializacion del HMM con %d mezclas\"\n",$i;
for ($j=0; $j<$NUM_ITERATIONS; $j++)
{
printf stdout "\"%%HTK_DIR%%\\HERest.exe\" -C %%CONFIG_FILE_TRAIN%%
-I %%LABEL_OUT_FILE_TRAIN%% -S %%LIST_FILE_TRAIN%% -H
\"%%HMM_DIR%%%dm%d\\macros\" -H \"%%HMM_DIR%%%dm%d\\models\" -M
\"%%HMM_DIR%%%dm%d\" %%PHONEME_LIST%%\n",$i,$j,$i,$j,$i,$j+1;
}
printf stdout "echo \"Entrenamiento del HMM con %d mezclas realizado: %d
iteraciones completadas\n\n",$i,$NUM_ITERATIONS;
}
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 145
6. DESCRIPCIÓN DE LA BASE DE DATOS
SES
Como vimos en la introducción, en este proyecto trataremos de
establecer en qué condiciones el segmentador realiza mejor su función
dependiendo de la parametrización concreta que se configure, de las
distintas combinaciones de locuciones cortas (frases) y largas (párrafos)
que se utilicen para el entrenamiento y para la evaluación, así como de
las combinaciones de emociones del locutor (neutro, alegría, sorpresa,
tristeza, enfado...) que se empleen para dichas etapas del proceso. Para
todo ello realizaremos experimentos de evaluación con las bases de
datos SES y SEV de habla expresiva en castellano, que contienen una
parte segmentada manualmente. En este capítulo describiremos la
primera de ellas.
6.1 La base de datos SES
La base de datos SES (Spanish Emotional Speech) está formada por tres
sesiones de grabación de habla con emociones interpretada por un
único actor masculino. Cada sesión de grabación incluye 30 palabras (2
minutos en total), 15 frases cortas (7 minutos) y 4 párrafos (39
minutos), aunque en nuestro proyecto sólo haremos uso de las frases y
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 146
los párrafos. Estas sesiones incluyen cuatro emociones primarias
(alegría, enfado en frío, sorpresa y tristeza) y voz interpretada según el
estado neutro.
Una muy amplia descripción de esta base de datos se encuentra en
[Montero 2003]. El propósito de la creación de la base de datos SES era
poder disponer de una base de datos de voz que simulara estados
emotivos, de manera que sobre ella se pudieran realizar análisis que
ayudaran a producir síntesis de voz con emociones. Aunque la base de
datos que se pretendía grabar era necesariamente pequeña, un
requisito era que contuviera suficiente diversidad de fenómenos
fonéticos y prosódicos para permitir cubrir un buen análisis y modelado
del habla emotiva. Con el fin de minimizar el efecto que un posible
contenido semántico emotivo pudiera tener sobre el habla, se emplearon
textos preferiblemente neutros desde un punto de vista del contenido.
Se agruparon estos textos en 3 categorías (frases cortas, palabras y
párrafos) interrelacionadas entre ellas, si bien en nuestros
experimentos, como dijimos antes, sólo emplearemos frases y párrafos.
6.1.1 Las frases cortas
Como se ha dicho, se pretendía, en primer lugar, que fueran frases de
carácter neutro, es decir, que no estuvieran preferentemente marcadas
por ningún tipo de emotividad. Se evitaron, pues, verbos con un
significado emotivo, así como las funciones conativas y la segunda
persona. Mayoritariamente, las frases son en tercera persona; se
incorporaron, sin embargo, algunas frases de primera persona que, sin
embargo, son plenamente declarativas. De esta manera era de esperar
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 147
que si a los significados meramente denotativos (de contenido
semántico no emotivo) se les incorporaban otros valores expresivos (una
voz que simula segmental y suprasegmentalmente una emoción), la
identificación de la emoción transmitida habría que achacársela a los
parámetros segmentales y suprasegmentales de la voz.
Se confeccionaron quince frases entre las que aparecen todos los
fonemas del español, así como sus alófonos más representativos. El
texto completo de las mismas puede consultarse en el Anexo 3.
La longitud de las quince frases cortas oscila entre las ocho y trece
sílabas, con un mínimo de tres sílabas tónicas y un máximo de cuatro.
Las palabras finales son, como es habitual en español,
mayoritariamente paroxítonas, aunque se incluyen también dos
terminaciones oxítonas.
Aunque se incluyeron cinco estructuras de carácter interrogativo, la
base de datos se centra en las declarativas, por lo que no se consideró
incorporar el modelo entonativo de todas las posibles interrogativas del
español, y se evitó, además, el uso de los pronombres interrogativos.
6.1.2 Los párrafos
A la base de datos SES se decidió incorporar la lectura de párrafos
cortos, ya que podía aportar alguna luz a la hora de establecer
diferencias entre los distintos modelos entonativos, en especial, en las
diferentes estructuras sintácticas [Montero 2003]. De ahí que se
consideraron tres párrafos de entre cuatro y ocho líneas, de carácter
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 148
neutro y donde, como en el caso de las frases cortas, se evitó el uso de
verbos y estructuras de marcada emotividad. Además, se incorporó un
cuarto párrafo, en el que se incluían, en el marco de una breve
estructura narrativa, doce de las quince frases cortas. Esto facilitaba
información en cuanto a las diferencias que podían observarse, no sólo
en función de los diferentes modelos emocionales entonativos, sino
comparar un mismo modelo en tres contextos diferentes.
El texto completo de los párrafos también puede consultarse en el
Anexo 3.
6.2 La grabación de la base de datos
Como se describe en [Montero 2003] los textos que se acaban de
describir fueron grabados en una sala acústicamente aislada y la
frecuencia de muestreo fue de 16 Khz. Los textos fueron interpretados
en 3 ocasiones cada uno (por lo que disponemos de 3 sesiones para
cada voz, excepto para la neutra, de la que disponemos de 2 sesiones)
por un actor profesional de 38 años, con acento castellano y con más de
diez años de experiencia. La múltiple grabación posibilitó que el actor
interpretase una misma frase de distintas maneras conscientes,
empleando patrones entonativos y rítmicos diferentes. Todo ello fue
realizado por el actor sin someterse a ningún esquema o modelo
prefijado, siendo libre de decidir cómo debía simular los estados
emocionales que se le encomendaron.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 149
6.3 Etiquetado y marcado de SES
Los dos mil fonemas por emoción fueron etiquetados fonéticamente de
manera completamente manual con la ayuda de la herramienta de
edición de voz PCV desarrollada en el proyecto VAESS [Montero 2003].
El marcado de F0 se llevó a cabo semiautomáticamente, con el
marcador de periodos de la frecuencia fundamental, empleado en
síntesis por difonemas, adaptado para procesar elocuciones más largas.
Los resultados obtenidos de esta manera fueron visualmente revisados
usando el mismo programa. Finalmente se resintetizaron las
grabaciones por medio de concatenación de difonemas, linealizando la
curva de F0 en el nivel de sílaba y cuantificando las duraciones a un
número entero de periodos de F0. Por ello fue necesario emplear un
algoritmo de concatenación con modificaciones prosódicas menores
durante la resíntesis. Esta segunda revisión por resíntesis se tradujo en
nuevas correcciones, especialmente de la curva de F0.
6.4 La base de datos SES en nuestro sistema
Para realizar la evaluación de nuestro sistema disponemos de las 15
frases cortas de SES, los 4 párrafos completos y además un conjunto de
frases obtenidas dividiendo los 4 párrafos. Los párrafos completos están
sin etiquetar, por lo que no podremos emplearlos como grupo de control
de nuestros experimentos, pero sí los usaremos para entrenar los
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 150
modelos. Por contra, las frases y los párrafos divididos sí están
segmentados manualmente.
Los ficheros de estos tres grupos los tenemos colocados en la carpeta
parrafosDividos_Completos de nuestro sistema (véase el capítulo
dedicado a la estructura del segmentador), y son de dos tipos:
Los archivos de audio en crudo (sin cabeceras), con extensión
.PCM y
las etiquetas de cada uno de esos ficheros, con extensión .lab
El nombre de todos los ficheros sigue el mismo patrón, tanto para los
ficheros de audio como para sus correspondientes etiquetas:
Las frases: F_X_ffss.{pcm,lab} , donde
- X es un carácter que indica el tipo de emoción (A=alegría,
E=enfado, S=sorpresa, T=tristeza, N=voz neutra)
- ff son dos dígitos que indican el número de frase, desde 01
hasta 15
- ss son dos dígitos que indican la sesión de grabación (01 y
02 son las sesiones de grabación con voz neutra; 03, 04 y 05 las
tres sesiones con voz alegre; 06, 07 y 08 las sesiones con voz
triste; 09, 10 y 11 las sesiones con voz enfadada; y 12, 13 y 14 las
sesiones con voz sorprendida).
Los párrafos completos: R_x_ppss.{pcm,lab} , donde
- x es un carácter que indica el tipo de emoción (a=alegría,
e=enfado, s=sorpresa, t=tristeza, n=voz neutra)
- pp son dos dígitos que indican el número de párrafo,
desde 01 hasta 04
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
6. Descripción de la base de datos SES 151
- ss son dos dígitos que indican la sesión de grabación (01 y
02 son las sesiones de grabación con voz neutra; 03, 04 y 05 las
tres sesiones con voz alegre; 06, 07 y 08 las sesiones con voz
triste; 09, 10 y 11 las sesiones con voz enfadada; y 12, 13 y 14 las
sesiones con voz sorprendida).
Los párrafos divididos: RXffppss.{pcm,lab} , donde
- X es un carácter que indica el tipo de emoción (A=alegría,
S=sorpresa, T=tristeza, N=voz neutra). No contamos con los
párrafos con voz de enfado divididos
- ff son dos dígitos que indican el número que ocupa la
frase de esta división dentro del párrafo correspondiente, desde
01 hasta el número máximo de frases que tenga el párrafo
- pp son dos dígitos que indican el número de párrafo,
desde 01 hasta 03. No contamos con el cuarto párrafo dividido
- ss son dos dígitos que indican la sesión de grabación. Sólo
se dividieron los párrafos de la primera sesión con cada emoción
(excepto la de enfado), con lo que estos dos dígitos serán 01 para
la sesión de grabación con voz neutra, 03 para la sesión con voz
alegre, 06 para la sesión con voz triste, y 12 para la sesión con
voz sorprendida.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 152
7. DESCRIPCIÓN DE LA BASE DE DATOS
SEV
En el capítulo anterior realizamos la descripción de la base de datos
SES. Ahora veremos la otra base de datos que vamos a utilizar para los
experimentos de evaluación del sistema de segmentación automática: la
base de datos SEV de habla expresiva en castellano.
7.1 La base de datos SEV
La base de datos SEV (Spanish Expressive Voices) fue desarrollada por
Roberto Barra Chicote en colaboración con el Grupo de Tecnología del
Habla de la UPM. Se puede encontrar amplia información en [Barra-
Chicote 2008] y [Barra-Chicote 2012]. Veamos algunos aspectos
importantes de SEV obtenidos de dichas fuentes.
La base de datos SEV fue creada para ser empleada en los campos del
análisis de emociones, el diseño de algoritmos de conversión de
emociones y la implementación de voz expresiva mediante diferentes
técnicas de síntesis, aunque puede ser empleada en más campos de
investigación, como detección visual de emociones o detección de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 153
rostros, ya que contiene también capturas de vídeo de los actores
representando las locuciones con voz expresiva.
Contiene locuciones de un actor varón (Joaquín) y una actriz (Rosa),
representando las mismas muestras en voz neutra, y en seis emociones
diferentes: alegría, enfado, sorpresa, tristeza, asco y miedo (éstas dos
últimas son una novedad con respecto a la anterior base de datos SES).
7.1.1 El contenido de voz de la base de datos
La base de datos SEV cuenta, como hemos dicho, con contenido de voz
y de vídeo. A su vez, el contenido de voz, que será el que nos interese
para nuestro estudio, está dividido en 4 grupos diferentes:
Corpus a nivel emocional: Los actores interpretaron 15 frases de
referencia de SES en cuatro ocasiones, aumentando
gradualmente el nivel emocional (nivel neutro, bajo, medio y alto).
Corpus para la síntesis basada en concatenación de difonemas:
Este corpus consta de 570 logatomos que cubren la principal
distribución de difonemas del idioma español, y están agrupados
en 114 locuciones que fueron interpretadas por los actores con
pausas entre las palabras, de modo que se grabaran de manera
aislada. Este corpus permite estudiar el impacto y la viabilidad de
comunicar contenido afectivo mediante palabras sin ningún
significado.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 154
Corpus para la síntesis basada en la selección de unidades: Este
corpus está compuesto por cien locuciones sacadas de la primera
parte de "Don Quijote de la Mancha" respetando la distribución de
alófonos de esta obra. Este amplio rango de unidades de alófonos
permite la síntesis basada en la técnica de selección de unidades.
Modelado de prosodia: Este último corpus consta de 376
locuciones provenientes de las 84 frases en que se dividen los
cuatro párrafos originales de SES. El objetivo de este corpus es
incluir aspectos prosódicos que hagan posible el estudio de la
prosodia en discursos, entrevistas, diálogos cortos o situaciones
de pregunta y respuesta.
7.2 Etiquetado y marcado de SEV
La base de datos SEV fue etiquetada automáticamente empleando las
herramientas de HTK. Además, un 5% de cada uno de los subcorpus de
SEV fue etiquetado manualmente, para que pudiera servir como cuerpo
de referencia para estudios sobre análisis del ritmo o, como es nuestro
caso, para estudiar la influencia del estado emocional en sistemas de
segmentación fonética automática como el nuestro.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 155
7.3 La base de datos SEV en nuestro sistema
Para realizar la evaluación de nuestro sistema, como acabamos de
comentar, vamos a contar con un subconjunto de frases de la base de
datos SEV, locutora Rosa, en concreto las que están segmentadas
manualmente. Se trata de 15 frases procedentes de tres de los cuatro
corpus que hemos comentado: 3 frases largas sacadas de los tres
primeros párrafos de SES, 2 frases largas provenientes del corpus
Quijote, y 10 frases pertenecientes al corpus de Prosodia, siendo unas
largas y otras cortas, e incluyendo 6 sentencias interrogativas. El texto
de todas las frases se puede consultar en el Anexo 3.
Los ficheros de estos tres grupos los tenemos colocados en la carpeta
SEV de nuestro sistema (véase el capítulo dedicado a la estructura del
segmentador), y son de dos tipos:
Los archivos de audio con extensión .wav y
las etiquetas de cada uno de esos ficheros, con extensión .lab
El nombre de todos los ficheros sigue el mismo patrón, tanto para los
ficheros de audio como para sus correspondientes etiquetas:
Las frases provenientes de SES: F_X_pffnl.ch1.{wav,lab} , donde
- X es un carácter que indica el tipo de emoción (A=alegría,
C=asco, E=enfado, M=miedo, S=sorpresa, T=tristeza, N=voz neutra)
- p es un dígito que indica el número de párrafo de SES,
desde 1 hasta 4
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 156
- ff son dos dígitos que indican el número de frase dentro
del párrafo
- n es un dígito que indica el nivel de emoción expresado,
desde 1 hasta 3
- l es un dígito que indica el locutor: 0 para la locutora
femenina (Rosa) y 1 para el locutor masculino (Joaquín).
Dentro de este corpus contamos con las frases de Rosa
segmentadas F_X_10130, F_X_20230 y F_X_30230.
Las frases provenientes del Quijote: Q_X_fff1l.ch1.{wav,lab} ,
donde
- X es un carácter que indica el tipo de emoción (A=alegría,
C=asco, E=enfado, M=miedo, S=sorpresa, T=tristeza, N=voz neutra)
- fff son tres dígitos que nos indican el número de frase
- l es un dígito que indica el locutor: 0 para la locutora
femenina (Rosa) y 1 para el locutor masculino (Joaquín).
De este corpus contamos con las frases de Rosa segmentadas
Q_X_00110, y Q_X_00210.
Las frases de Prosodia: P_X_ffffl.ch1.{wav,lab} , donde
- X es un carácter que indica el tipo de emoción (A=alegría,
C=asco, E=enfado, M=miedo, S=sorpresa, T=tristeza, N=voz neutra)
- ffff son cuatro dígitos que nos indican el número de frase
- l es un dígito que indica el locutor: 0 para la locutora
femenina (Rosa) y 1 para el locutor masculino (Joaquín).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
7. Descripción de la base de datos SEV 157
Del corpus de Prosodia contamos con las diez frases de Rosa
segmentadas siguientes: P_X_10110, P_X_10910, P_X_20510,
P_X_20610, P_X_30110, P_X_30210, P_X_41010, P_X_41050,
P_X_51010 y P_X_51080.
En cuanto a la parte de la base de datos SEV correspondiente al locutor
Joaquín no contamos con un conjunto de evaluación, pero igualmente
realizaremos su segmentación automática con nuestro sistema, y lo
evaluaremos eligiendo un número determinado de ficheros al azar de
cada emoción, y escuchando cada fonema de esta muestra con el
programa Praat.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 158
8. EJECUCIONES Y RESULTADOS
En este capítulo detallaremos el conjunto de ejecuciones de prueba que
hemos llevado a cabo con el segmentador fonético automático para
habla expresiva. El propósito de cada experimento será descubrir las
mejores combinaciones de parámetros de cara a obtener resultados
óptimos, así como estudiar el efecto de las diferentes emociones en
frases y párrafos empleados como entrenamiento o como locuciones a
segmentar.
Para cada una de las ejecuciones se mostrarán en tablas los porcentajes
de error obtenidos en la segmentación, para una tolerancia que, salvo
indicación en contrario, será de 20 ms. El resultado se ofrece para los
distintos números de gaussianas en orden creciente, y el resto de
parámetros empleados será indicado en cada uno de los experimentos.
8.1 ELECCIÓN DE LA VERSIÓN DE HTK
En el momento de comenzar este proyecto contábamos con dos
versiones distintas de la herramienta HTK, la 3.3, empleada hasta este
momento en el laboratorio, y la 3.4. Comenzamos comprobando si
existen diferencias en los resultados de las ejecuciones con ambas
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 159
versiones para decidir con qué versión de la herramienta trabajaremos
en adelante. Los resultados del experimento son los siguientes:
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
COEFICIENTES: _E_D_A (39)
ESTADOS: 5
ITERACIONES: 5
GAUSSIANAS: 5 BASE DE DATOS: SES
LOCUCIONES: FANSTE FANSTE
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 160
Comprobamos que los resultados son idénticos con ambas versiones de
la herramienta, por lo que de aquí en adelante emplearemos para todos
los experimentos la versión más reciente, es decir, la 3.4.
8.2 DETERMINACIÓN DEL NÚMERO ÓPTIMO DE
ESTADOS, ITERACIONES Y GAUSSIANAS
Con este experimento tratamos de determinar el número óptimo de tres
de los principales parámetros a definir en el proceso: el número de
estados de los modelos ocultos de Markov, el número de iteraciones
(reestimaciones de los modelos) a realizar durante el proceso y el
número de gaussianas con el que se modelan las variables de salida.
Para ello hemos realizado el entrenamiento y evaluación del conjunto de
frases y párrafos de SES con todas las emociones, tanto para MFCC
como para PLP, y hemos probado a dar valores del 1 al 10 a cada una
de las tres variables, dejando las otras dos fijas a 5. Los resultados
obtenidos son los siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 161
TIPO BASE: mfcc
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
LOCUCIONES: FANSTE FANSTE
1 60,924772 24,916148
2 35,912793
3 29,851461
4 28,869190
5 28,030666
1 35,625299
2 27,407762 21,466219
3 26,161955
4 25,778630
5 26,760901
1 33,109727 28,461907
2 29,563967 24,365117
3 28,941064 24,460949 21,825587
4 27,719214 24,988021
5 28,533781 25,083852
1 24,125539 26,449449
2 22,137039 22,496406
3 23,047437 23,047437
4 23,358888 23,358888 23,071394
5 23,694298 23,957834
1 24,916148 24,916148
2 21,466219 21,466219
3 21,825587 21,825587
4 23,071394 23,071394
5 23,622425 23,622425 23,622425
1 22,735985 23,310973
2 19,525635 21,034978
3 19,837087 21,729756
4 20,436033 22,927647
5 20,340201 23,909919
6 24,700527
1 24,940105 22,208912
2 21,849545 20,915189
3 21,370388 21,753713
4 21,538093 23,215141
5 21,897460 24,125539
6
7 25,706756
1 38,548155 21,442262
2 37,661715 20,651653
3 37,853378 21,849545
4 39,075228 23,215141
5 39,626258 24,125539
6
7
8 25,970292
1 61,879433 20,843316
2 60,714286 20,436033
3 61,372847 21,586009
4 62,082067 22,616195
5 62,335360 23,406804
6
7
8
9 26,209871
1 73,412010 20,268328
2 73,759111 20,699569
3 74,140923 21,921418
4 74,314474 22,759943
5 74,661576 24,245328
6
7
8
9
10 26,377575
MFCC
EXPERIMENTO
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 5
X = 9
GAUSSIANAS
X = 10
X = 6
X = 7
X = 8
X = 2
X = 3
X = 4
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 162
TIPO BASE: plp
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
LOCUCIONES: FANSTE FANSTE
1 60,448301 23,909376
2 35,454326
3 29,501085
4 27,717522
5 27,838033
1 34,924078
2 26,078573 21,691974
3 24,680646
4 24,632442
5 24,078091
1 29,284165 27,789829
2 26,512413 23,668354
3 27,042661 23,451434 22,656062
4 28,874428 24,295011
5 29,669800 25,283201
1 22,824777 25,524223
2 21,378645 22,872981
3 22,439142 22,607857
4 24,319113 23,499638 23,812967
5 25,596529 24,415522
1 23,909376 23,909376
2 21,691974 21,691974
3 22,656062 22,656062
4 23,812967 23,812967
5 24,198602 24,198602 24,198602
1 21,523259 22,776573
2 19,016631 20,751988
3 18,655098 22,222222
4 19,209448 23,523741
5 19,980718 24,656544
6 25,572427
1 24,005785 21,667872
2 22,125813 20,727886
3 21,716076 21,378645
4 22,029405 22,631960
5 22,607857 23,499638
6
7 26,464208
1 39,816823 20,920704
2 37,744035 20,462762
3 38,129670 21,282237
4 38,418896 22,125813
5 39,214268 23,451434
6
7
8 26,705230
1 62,248279 20,197638
2 61,279633 20,607375
3 61,509049 21,860689
4 62,044354 22,656062
5 62,120826 23,740660
6
7
8
9 26,898048
1 74,614846 19,691492
2 75,490196 20,800193
3 75,525210 21,234032
4 75,525210 22,174018
5 76,085434 24,198602
6
7
8
9
10 27,211376
PLP
EXPERIMENTO
GAUSSIANAS
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
X = 10
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 163
TIPO BASE: mfcc
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
1 63,319058 9,614561
2 21,991435
3 11,049251
4 10,021413
5 10,428266
1 23,790150
2 10,021413 9,486081
3 10,342612
4 9,892934
5 9,357602
1 20,406852 11,734475
2 16,680942 9,850107
3 18,115632 9,550321 9,207709
4 18,072805 9,528908
5 17,537473 9,550321
1 9,593148 9,957173
2 9,657388 9,507495
3 10,728051 9,164882
4 11,841542 9,143469 8,886510
5 12,184154 8,950749
1 9,614561 9,614561
2 9,486081 9,486081
3 9,207709 9,207709
4 8,886510 8,886510
5 8,993576 8,993576 8,993576
1 9,057816 9,528908
2 8,543897 9,507495
3 8,158458 9,721627
4 8,179872 9,635974
5 8,394004 9,743041
6 8,972163
1 16,877729 9,164882
2 16,244541 9,336188
3 15,938865 9,785867
4 16,943231 9,614561
5 17,008734 9,464668
6
7 9,229122
1 43,220036 8,929336
2 42,898032 8,950749
3 43,148479 9,678801
4 43,577818 9,743041
5 44,221825 9,614561
6
7
8 9,464668
1 68,190476 9,014989
2 66,666667 8,715203
3 67,523810 9,593148
4 67,238095 9,528908
5 68,285714 9,507495
6
7
8
9 9,550321
1 84,090909 8,843683
2 82,954545 8,672377
3 81,818182 9,250535
4 83,333333 9,507495
5 82,954545 9,357602
6
7
8
9
10 9,785867
X = 10
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
MFCC
EXPERIMENTO
GAUSSIANAS
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 164
TIPO BASE: plp
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
1 61,905782 9,443255
2 19,464668
3 11,177730
4 10,578158
5 10,085653
1 19,678801
2 9,486081 8,929336
3 9,593148
4 9,464668
5 9,421842
1 18,458244 10,728051
2 16,659529 9,079229
3 16,402570 9,314775 8,929336
4 16,873662 9,293362
5 17,216274 9,828694
1 9,336188 9,443255
2 10,278373 9,057816
3 10,856531 8,822270
4 11,905782 8,929336 8,779443
5 12,312634 9,036403
1 9,443255 9,443255
2 8,929336 8,929336
3 8,929336 8,929336
4 8,779443 8,779443
5 8,993576 8,993576 8,993576
1 8,629550 9,336188
2 7,944325 8,715203
3 7,665953 8,993576
4 7,708779 9,421842
5 7,944325 9,721627
6 8,929336
1 16,768559 9,057816
2 16,200873 8,886510
3 15,851528 9,143469
4 15,742358 9,528908
5 16,004367 9,635974
6
7 9,314775
1 42,719141 8,950749
2 42,826476 8,822270
3 42,182469 9,014989
4 42,468694 9,164882
5 42,218247 8,993576
6
7
8 9,507495
1 68,000000 8,886510
2 67,333333 8,672377
3 67,047619 8,993576
4 66,761905 8,907923
5 67,333333 9,250535
6
7
8
9 9,507495
1 84,090909 8,907923
2 79,924242 8,629550
3 79,924242 9,186296
4 81,060606 8,886510
5 81,439394 9,143469
6
7
8
9
10 9,550321
X = 10
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
PLP
EXPERIMENTO
GAUSSIANAS
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 165
Cuando utilizamos solamente frases para entrenar y evaluar (primera y
segunda tablas, para MFCC y PLP, respectivamente), podemos realizar
las siguientes observaciones:
Utilizando 3 estados (éste es el menor número posible, ya que dos
estados serán siempre el inicial y el final) el error obtenido es
bastante elevado, y este porcentaje de error va decreciendo al ir
aumentando el número de estados hasta llegar a 6, donde
encontramos el mínimo error posible. De 7 en adelante el error irá
disparándose con cada estado adicional. Por tanto 6 parece un
número óptimo de estados, combinado con 5 iteraciones y 2 (en el
caso de MFCC) ó 3 (en el caso de PLP) gaussianas.
El número de iteraciones tiene un comportamiento inversamente
proporcional con respecto a la tasa de error, como podíamos
haber sospechado a priori, dado que cada nueva iteración del
proceso que realicemos debería conducirnos a un resultado más
preciso. Observamos que por cada nueva iteración realizada el
error disminuye, por lo que podríamos pensar que lo mejor sería
utilizar un número muy alto de iteraciones. Pero por otra parte el
proceso completo se ralentiza enormemente con cada nueva
iteración que añadimos al mismo, por lo que podríamos
considerar un número óptimo de iteraciones aquella última
iteración que consiga una rebaja considerable de la tasa de error
sin convertir el proceso en desesperantemente largo. Para ello,
podemos calcular la mejora marginal de cada iteración, esto es, la
mejora en el porcentaje de error que consigue la adición de una
nueva iteración. Con los datos del experimento podemos realizar
los siguientes cálculos:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 166
ITERACIONES MFCC PLP
X=2 2,252036 3,639431
X=3 1,413513 0,626657
X=4 1,868711 0,843577
X=5 1,030187 0,915883
X=6 0,431241 0,939986
X=7 0,119789 0,024102
X=8 0,263536 0,265124
X=9 0,215620 0,265124
X=10 0,167705 0,506146
Realizar una segunda iteración nos produciría una mejora de la
tasa de error de un 2.25% y 3.64% dependiendo de la técnica, con
respecto al error obtenido en el experimento sin iteraciones,
mientras que la séptima iteración sólo introduciría una mejora de
0.12% y 0.02% con respecto a la sexta iteración, cantidades lo
suficientemente pequeñas como para que no nos merezca la pena
el tiempo empleado en dicha iteración. El número óptimo de
iteraciones según estos datos serían 5 ó 6, aunque incluso con 4
se obtienen resultados bastante aceptables.
Considerando por último el número de gaussianas, vemos que
para ambas técnicas el óptimo se encuentra en 2 mezclas
(manteniendo constantes los estados y las iteraciones a 5).
Combinando pues las conclusiones obtenidas sobre los números
óptimos de estados, iteraciones y gaussianas, y repitiendo el
experimento con dichos parámetros, vemos que el mínimo error posible
en el experimento con frases lo obtenemos en el caso de MFCC con 6
estados, 6 iteraciones y 2 gaussianas, para un error mínimo del
18.97%; y en el caso de PLP con 6 estados, 6 iteraciones y 3
gaussianas, consiguiendo un error mínimo del 18.37%
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 167
1 22,735985 20,843316
2 19,525635 18,974605
1 21,523259 20,245842
2 19,016631 18,582791
3 18,655098 18,365871
MFCC
PLP
GAUSSIANASESTADOS = 6
ITERACIONES = 5
ESTADOS = 6
ITERACIONES = 6
Una vez estudiado el experimento con frases pasamos a considerar
aquel en el que utilizamos frases y párrafos para entrenar y evaluamos
párrafos (tercera y cuarta tablas, para MFCC y PLP, respectivamente).
Podemos realizar ahora las siguientes observaciones:
Como observábamos en el experimento con frases, utilizando 3
estados el error obtenido es bastante elevado, y este porcentaje
de error va decreciendo al ir aumentando el número de estados
hasta llegar a 6, donde encontramos el mínimo error posible. De 7
en adelante el error irá disparándose con cada estado adicional.
Por tanto 6 parece un número óptimo de estados, combinado con
5 iteraciones y 3 gaussianas.
Considerando el número de iteraciones es cuando encontramos
las mayores diferencias con respecto al experimento con frases,
pues mientras que en aquel dicho número tenía un
comportamiento inversamente proporcional con respecto a la tasa
de error, en éste observamos que en ciertas ocasiones realizar
una nueva iteración hace que la tasa de error aumente, en lugar
de disminuir, es decir, parece que el sistema comienza a
particularizar en vez de generalizar, de manera que se
acostumbra a los datos pasados como entrenamiento, y comienza
a segmentar de peor manera. Y por otra parte el proceso completo
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 168
se ralentiza enormemente con cada nueva iteración que añadimos
al mismo, por lo que podríamos considerar un número óptimo de
iteraciones aquella última iteración que consiga una rebaja
considerable de la tasa de error sin convertir el proceso en
demasiado largo. Para ello, calculamos de nuevo la mejora
marginal de cada iteración, obteniendo lo siguiente:
ITERACIONES MFCC PLP
X=2 0,663811 0,663811
X=3 -0,171306 0,342613
X=4 0,578159 0,256959
X=5 0,064239 0,042827
X=6 -0,620985 0,064240
X=7 0,342613 -0,171307
X=8 0,235546 0,064240
X=9 0,214133 0,149893
X=10 0,042826 0,042827
Para el caso de MFCC vemos que la segunda y cuarta iteraciones
consiguen mejoras notables de la tasa de error, mientras que la
tercera y la sexta la empeoran, por lo que podríamos considerar 4
ó 5 el número óptimo de iteraciones. Para PLP vemos que la
segunda, tercera y cuarta iteraciones mejoran la tasa en más de
un cuarto de punto, mientras que de la quinta en adelante la
mejora obtenida es más reducida (la séptima iteración incluso la
empeora), por lo que podríamos dejar también en 4 ó 5 el número
óptimo de iteraciones.
Considerando por último el número de gaussianas, vemos que
para ambas técnicas el óptimo se encuentra en 4 mezclas
(manteniendo constantes los estados y las iteraciones a 5).
Combinando pues las conclusiones obtenidas sobre los números
óptimos de estados, iteraciones y gaussianas, y repitiendo el
experimento con parámetros en los entornos de dichas conclusiones,
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 169
vemos que el mínimo error posible en el experimento con párrafos lo
obtenemos en el caso de MFCC con 6 estados, 6 iteraciones y 5
gaussianas, para un error mínimo del 8.01%; y en el caso de PLP con 6
estados, 6 iteraciones y 2 gaussianas, consiguiendo un error mínimo del
7.60%.
1 9,079229 9,057816 8,822270
2 8,650964 8,543897 8,179872
3 8,522484 8,158458 8,115632
4 8,094218 8,179872 8,029979
5 8,179872 8,394004 8,008565
1 8,907923 8,629550 8,501071
2 8,179872 7,944325 7,601713
3 7,880086 7,665953 7,687366
4 8,029979 7,708779 7,730193
5 7,944325 7,944325 7,922912
PLP
ESTADOS = 6
ITERACIONES = 6GAUSSIANAS
ESTADOS = 6
ITERACIONES = 4
ESTADOS = 6
ITERACIONES = 5
MFCC
Estos resultados son bastante buenos para ambas técnicas, no
presentando diferencias significativas entre MFCC y PLP, al ser la
banda de confianza al 5% para el dato de MFCC de [7.70, 8.32] y la de
PLP de [7.30, 7.90]. Para calcular estos intervalos de confianza, y los
que se vayan presentando a lo largo del capítulo, utilizamos la fórmula
del intervalo de confianza para una proporción, al estar trabajando con
porcentajes de error. Según esta fórmula el intervalo de confianza para
estimar una proporción p, conocida una proporción muestral pn de una
muestra de tamaño n, a un nivel de confianza del (1-α)·100% es:
En nuestro caso, pn es el porcentaje de error al que se le quiere calcular
la banda de confianza, n es el número de instancias totales de
transición entre fonemas que contienen los ficheros segmentados, y
damos el valor 1.96 a zα/2 para un nivel de confianza estándar del 5%.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 170
8.3 COMBINACIONES DE COEFICIENTES
Como vimos en el capítulo 3, para afinar el análisis se suele emplear un
grupo finito de coeficientes extras. Vamos a realizar distintas
combinaciones posibles de dichos coeficientes extra para ver cómo
afectan al resultado obtenido por el segmentador. Los coeficientes que
combinaremos en el experimento son:
Coeficiente Cepstral cero: _0
Energía: _E
Coeficientes Delta: _D
Coeficientes de Aceleración: _A
Coeficientes de Tercera derivada: _T
Los resultados obtenidos para el experimento con frases son los
siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 171
TIP
O B
AS
E:
mfc
c
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
S
LO
CU
CIO
NE
S:
FA
NS
TE
-FA
NS
TE
126,5
45280
27,2
40057
28,4
13991
25,1
79684
23,3
34931
23,6
46382
23,6
94298
20,4
59990
20,8
43316
23,3
10973
20,2
92286
20,5
07906
224,0
77623
25,0
59895
25,8
50503
22,5
20364
21,0
11021
21,4
66219
21,4
90177
18
,42
35
75
18,9
74605
19,6
45424
17,5
85050
17
,10
58
94
323,6
22425
24,3
89075
25,4
43220
22,2
56828
20,6
03737
20,9
39147
21,8
01629
18,5
43364
19,1
42310
19,8
13129
17,7
52755
17,6
09008
423,1
19310
24,1
25539
25,7
78630
22,1
84954
20,6
75611
21,1
78725
22,0
89123
19,6
45424
19,9
56876
20,4
83948
18,1
60038
18,6
39195
523,8
85961
24,1
25539
26,0
18208
22,2
80786
21,5
38093
21,0
11021
22,3
04744
19,5
97508
20,4
83948
20,5
79780
18,3
27743
18,5
43364
24,2
50120
24,9
88021
26,3
00910
22,8
84523
21,4
32679
21,6
48299
22,2
75994
19,3
33972
19,8
80211
20,7
66651
18,4
23574
18,4
81073
CO
EF
ICIE
NT
ES
E_D
26
D_A
36
0_D
_A
39
G A U S S I A N A S
E_D
_A
39
E_D
_A
_T
52
0_D
_A
_T
52
D_A
_T
48
MF
CC
0 1
3E
13
0_E
14
D 2
40_D
26
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 172
TIP
O B
AS
E:
plp
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
S
LO
CU
CIO
NE
S:
FA
NS
TE
-FA
NS
TE
127,2
59581
27,6
21114
28,3
68282
24,2
95011
22,7
76573
23,0
41697
23,1
86310
19,9
08412
20,2
45842
24,3
67317
21,4
75054
20,8
48397
225,2
59099
25,1
14485
26,0
78573
22,6
56062
21,7
40178
21,5
71463
20,8
72499
18,3
89973
18,5
82791
21,3
78645
17,8
11521
17,6
42805
323,9
57580
23,7
40660
22,9
93492
22,4
63244
21,3
06339
20,6
79682
20,6
31477
18,9
44324
18
,36
58
71
21,0
41215
18,0
28441
17
,40
17
84
423,2
82719
22,7
04266
22,3
18631
22,9
93492
21,5
95565
21,0
65317
20,9
68908
19,6
43288
19,1
85346
21,7
64281
18,8
96120
18,2
45360
523,1
86310
22,8
48879
22,9
45288
22,8
48879
21,6
19667
21,1
13521
21,1
37624
20,1
25331
20,1
49434
21,3
54543
19,1
37141
19,1
61244
24,5
89058
24,4
05881
24,5
40853
23,0
51338
21,8
07664
21,4
94336
21,3
59364
19,4
02266
19,3
05857
21,9
81200
19,0
69655
18,6
59918
CO
EF
ICIE
NT
ES
0_D
_A
39
E_D
_A
39
G A U S S I A N A S
D_A
_T
48
0_D
_A
_T
52
E_D
_A
_T
52
PLP
0 1
3E
13
0_E
14
D 2
40_D
26
E_D
26
D_A
36
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 173
A la vista de los resultados podemos extraer las siguientes
conclusiones:
La inclusión únicamente del coeficiente cepstral cero (0 13)
presenta en general mejores resultados que la del coeficiente de
energía (E 13) en la técnica MFCC, y peores en la técnica PLP.
La inclusión de ambos coeficientes a la vez (0_E 14) parece
empeorar los resultados en ambas técnicas, excepto a partir de 3
gaussianas con PLP, donde mejora los resultados de ambos
coeficientes por separado (0 13 y E 13).
La inclusión de los coeficientes Delta (D 24) resulta ser mejor en
general que la simple inclusión de los coeficientes de los puntos
anteriores (0 13, E 13 y 0_E 14).
Añadir también los coeficientes de aceleración (D_A 36) mejora los
resultados. En el caso de MFCC conseguimos en torno a 1.5
puntos porcentuales de mejora de la tasa de error con 1
gaussiana y esta mejora va disminuyendo con el número de
gaussianas hasta ser prácticamente nula con 4 y más. En el caso
de PLP conseguimos para todas las gaussianas mejoras de entre 1
y 2 puntos porcentuales.
En cambio añadir los coeficientes de tercera derivada (D_A_T 48)
sólo mejora los resultados para MFCC (hasta 2 puntos con más
de 1 gaussiana), empeorándolos en el caso de PLP entre 0.2 y 1.2
puntos. Además se observa que el proceso se ralentiza bastante al
añadir estos coeficientes, por lo que normalmente no los
emplearemos en nuestros experimentos.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 174
Añadir a los coeficientes derivados el coeficiente cero mejora en
general los resultados (0_D 26 frente a D 24, 0_D_A 39 frente a
D_A 36, 0_D_A_T 52 frente a D_A_T 48), y lo mismo ocurre con la
energía (E_D 26 frente a D 24, E_D_A 39 frente a D_A 36,
E_D_A_T 52 frente a D_A_T 48). Cuál de estos dos coeficientes
añadidos a los derivados obtiene mejores resultados depende del
número de gaussianas y de la técnica empleada. Por ejemplo, con
2 gaussianas (que como vimos en el apartado 8.2 era un número
óptimo para frases combinado con 6 estados y 6 iteraciones) 0_D
26 obtiene un mejor resultado que E_D 26 con la técnica MFCC,
mientras que con la técnica PLP ocurre justo lo contrario.
Finalmente, considerando toda la tabla, con MFCC se obtienen los
mejores resultados con la combinación E_D_A_T 52 y 2
gaussianas, con una tasa de error del 17.11%. Si queremos
prescindir de los coeficientes de tercera derivada la mejor tasa de
error, del 18.42%, la obtenemos con los coeficientes 0_D_A 39 y 2
gaussianas. Por otro lado, con PLP la mejor combinación es
E_D_A_T 52 y 3 gaussianas, con una tasa de error del 17.40%;
prescindiendo de los coeficientes de tercera derivada la mejor
resulta ser E_D_A 39, con una tasa de error del 18.37%.
Veamos ahora los resultados obtenidos para el experimento con
párrafos:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 175
TIP
O B
AS
E:
mfc
c
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
S
LO
CU
CIO
NE
S:
FA
NS
TE
R_A
NS
TE
-RA
NS
T
112,0
55675
12,2
05567
11,7
13062
10,3
21199
9,7
85867
10,0
00000
9,2
71949
8,6
29550
8,8
22270
9,5
07495
8,8
00857
8,6
50964
210,9
20771
11,0
92077
10,6
42398
9,1
43469
8,7
58030
8,8
86510
8,6
50964
7,79
4433
8,1
79872
8,7
15203
8,1
37045
7,7
51606
310,5
35332
10,4
28266
10,2
78373
8,9
72163
9,1
22056
8,9
93576
8,4
58244
7,8
37259
8,1
15632
8,4
79657
7,9
22912
7,7
73019
410,3
42612
10,5
13919
10,1
49893
9,5
28908
8,9
93576
8,7
15203
8,6
50964
7,79
4433
8,0
29979
8,0
94218
7,9
87152
7,4
30407
510,3
64026
10,1
28480
9,8
92934
9,2
50535
8,7
79443
8,9
07923
8,7
79443
8,2
86938
8,0
08565
8,2
22698
7,4
94647
7,21
6274
10,8
43683
10,8
73662
10,5
35332
9,4
43255
9,0
87794
9,1
00642
8,7
62313
8,0
68523
8,2
31264
8,6
03854
8,0
68523
7,7
64454
G A U S S I A N A SMF
CC
CO
EF
ICIE
NT
ES
0 1
3E
13
0_E
14
D 2
40_D
26
E_D
26
D_A
36
0_D
_A
39
E_D
_A
39
D_A
_T
48
0_D
_A
_T
52
E_D
_A
_T
52
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 176
TIP
O B
AS
E:
plp
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
S
LO
CU
CIO
NE
S:
FA
NS
TE
R_A
NS
TE
-RA
NS
T
110,8
77944
11,0
06424
10,5
99572
9,5
93148
9,4
64668
9,5
50321
9,0
57816
8,5
01071
8,5
01071
9,3
14775
8,5
65310
8,6
29550
210,2
35546
10,6
42398
9,9
78587
9,0
79229
8,7
79443
8,9
50749
8,3
94004
7,43
0407
7,6
01713
8,3
72591
8,4
58244
7,6
65953
310,3
64026
10,6
20985
9,6
57388
8,7
79443
8,7
36617
8,6
93790
7,9
01499
7,7
51606
7,6
87366
8,1
37045
7,8
58672
7,40
8994
410,1
28480
10,0
00000
9,4
86081
8,8
86510
8,6
93790
8,4
36831
8,2
86938
7,6
65953
7,7
30193
8,4
15418
7,9
01499
7,6
01713
59,9
57173
9,6
78801
9,4
86081
8,8
43683
8,3
94004
8,5
86724
8,4
58244
7,6
44540
7,9
22912
8,5
86724
7,7
51606
7,7
94433
10,3
12634
10,3
89722
9,8
41542
9,0
36403
8,8
13704
8,8
43683
8,4
19700
7,7
98715
7,8
88651
8,5
65311
8,1
07066
7,8
20129
G A U S S I A N A S
PLP
CO
EF
ICIE
NT
ES
0 1
3E
13
0_E
14
D 2
40_D
26
E_D
26
D_A
36
0_D
_A
39
E_D
_A
39
D_A
_T
48
0_D
_A
_T
52
E_D
_A
_T
52
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 177
A la vista de los resultados podemos extraer las siguientes
conclusiones:
La inclusión únicamente del coeficiente cepstral cero (0 13)
presenta en general mejores resultados que la del coeficiente de
energía (E 13), salvo con 4 y 5 gaussianas en la técnica PLP y con
3 y 5 en la MFCC.
La inclusión de ambos coeficientes a la vez (0_E 14), al contrario
de lo que sucedía en el experimento con frases, mejora los
resultados en todos los casos.
La inclusión de los coeficientes Delta (D 24) resulta ser mejor en
todos los casos que la simple inclusión de los coeficientes de los
puntos anteriores (0 13, E 13 y 0_E 14).
Añadir también los coeficientes de aceleración (D_A 36) mejora de
nuevo los resultados, consiguiendo entre medio punto y 1 punto
porcentual de mejora de la tasa de error para ambas técnicas.
En cambio añadir los coeficientes de tercera derivada (D_A_T 48)
empeora los resultados para ambas técnicas (con frases parecía
funcionar mejor para MFCC), por lo que reforzamos nuestra idea
de no emplearlos de manera habitual en nuestros experimentos.
Añadir a los coeficientes acelerados el coeficiente cero mejora en
general los resultados (0_D 26 frente a D 24, 0_D_A 39 frente a
D_A 36, 0_D_A_T 52 frente a D_A_T 48), salvo algunas
excepciones que encontramos con 2 y 3 gaussianas. Con la
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 178
energía vemos que la mejora sucede en todos los casos (E_D 26
frente a D 24, E_D_A 39 frente a D_A 36 y E_D_A_T 52 frente a
D_A_T 48). Cuál de estos dos coeficientes añadidos a los
derivados obtiene mejores resultados depende del número de
gaussianas y de la técnica empleada. Por ejemplo, para MFCC con
3 gaussianas (que como vimos en el apartado 8.2 era un número
óptimo para párrafos combinado con 6 estados y 6 iteraciones)
E_D 26 y E_D_A_T 52 obtienen mejores resultados que 0_D 26 y
0_D_A_T 52, mientras que 0_D_A 39 es mejor que E_D_A 39. Lo
mismo ocurre con la técnica PLP y 4 gaussianas (que como vimos
en el apartado 8.2 era un número óptimo para párrafos
combinado con 6 estados y 6 iteraciones).
Finalmente, considerando toda la tabla, con MFCC se obtienen los
mejores resultados con la combinación E_D_A_T 52 y 5
gaussianas, con una tasa de error del 7.22%. Con PLP la mejor
combinación es también E_D_A_T 52 y 3 gaussianas, con una
tasa de error del 7.41%. Si prescindimos de las terceras
derivadas, la mejor combinación en ambas técnicas es 0_D_A 39;
en MFCC con 2 y 4 gaussianas se obtiene un 7.79% y en PLP con
2 gaussianas un 7.43%. La diferencia entre estos datos, obtenidos
con coeficientes derivados y acelerados, es significativa con
respecto al dato obtenido al no emplear estos coeficientes, al ser
el extremo superior de sus intervalos de confianza al 5% ([7.49,
8.10] para MFCC y [7.13, 7.73] para PLP) mucho menores que el
extremo inferior de los intervalos de confianza de los datos de
error sin estos coeficientes adicionales ([10.00, 10.69] para MFCC
y [9.62, 10.29] para PLP).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 179
8.4 COMBINACIONES DE FRASES Y PÁRRAFOS
COMO GRUPOS DE ENTRENAMIENTO Y
EVALUACIÓN
Como vimos en el capítulo dedicado a la base de datos SES, dicha base
de datos cuenta con locuciones basadas en frases (F) y locuciones
basadas en párrafos, estando estos últimos en dos grupos, uno de
párrafos sin segmentar (R_) y otro de párrafos segmentados (R). En este
experimento trataremos de observar qué ocurre cuando utilizamos cada
uno de estos tres grupos de locuciones como conjunto de entrenamiento
y de evaluación, realizando todas las combinaciones posibles, para ver
si el uso de uno u otro grupo produce mejores resultados de
segmentación automática.
Combinando dichos grupos de uno en uno, de dos en dos, y los tres
juntos, obtenemos 7 combinaciones, a saber:
NÚMERO DE
COMBINACIÓNFrases
Párrafos
sin segmentar
Párrafos
segmentados
NOMBRE DE LA
COMBINACIÓN
1 a r r FANSTE
2 r a r R_ANSTE
3 r r a RANST
4 a a r FANSTE_R_ANSTE
5 a r a FANSTE_RANST
6 r a a R_ANSTE_RANST
7 a a a FANSTE_R_ANSTE_RANST
Realizamos experimentos cruzando estas 7 combinaciones como grupos
de entrenamiento y evaluación, teniendo en cuenta que para evaluar
sólo podemos hacer uso de los conjuntos de locuciones segmentadas (es
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 180
decir, combinaciones 1, 3 y 5), y representamos los resultados en las
siguientes tablas:
TIPO BASE: mfcc
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
20,843316 19,501677 16,291327 16,674653 16,866315 15,908002 16,099665 17,45499357
18,974605 15,620508 15,740297 16,650695 16,602779 14,973646 16,482990 16,43507429
19,142310 14,350743 15,716339 16,530906 16,866315 14,758026 16,267369 16,233144
19,956876 14,662195 15,572592 16,147580 16,842357 15,189267 16,411116 16,39742614
20,483948 14,829899 15,548634 15,979875 17,129851 14,446574 15,500719 16,27421429
11,755889 9,914347 9,122056 8,822270 9,036403 8,650964 8,736617 9,434078
10,877944 8,158458 8,115632 8,179872 8,372591 8,329764 7,987152 8,574487571
11,113490 7,858672 8,415418 8,115632 8,286938 8,051392 7,837259 8,525543
11,284797 8,522484 8,993576 8,029979 8,522484 7,922912 7,858672 8,733557714
11,177730 8,972163 9,229122 8,008565 8,543897 7,922912 8,072805 8,846742
16,044776 14,439168 12,505654 12,528268 12,731796 12,075984 12,211669 13,21961643
14,699231 11,680235 11,714156 12,177748 12,256897 11,465400 11,996834 12,28435729
14,902759 10,922659 11,861149 12,087291 12,336047 11,216644 11,815920 12,16320986
15,377657 11,420172 12,098598 11,861149 12,449118 11,352329 11,895070 12,35058471
15,569878 11,736771 12,211669 11,770692 12,596110 11,001809 11,578471 12,3522
15,48034707 12,17267673 12,20908127 12,23767833 12,62932653 11,55104167 12,0501552
3 8,822881657
5 12,47399366
T
E
S
T
1 16,55897046
7MFCC
TRAINING
1 2 3 4 5 6
TIPO BASE: plp
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
20,245842 19,474572 16,775127 16,751024 16,461798 16,003856 15,859243 17,36735171
18,582791 16,341287 15,497710 15,907448 15,618221 14,967462 15,497710 16,058947
18,365871 15,256688 15,521812 16,196674 16,317185 15,473608 15,015666 16,021072
19,185346 15,280791 15,328995 16,268980 16,992046 15,039769 15,425404 16,217333
20,149434 14,774644 15,642323 16,510002 17,016148 15,594119 15,714630 16,4859
11,734475 9,850107 8,865096 8,501071 9,250535 8,415418 8,586724 9,314775143
10,171306 7,837259 7,708779 7,601713 7,880086 7,794433 7,687366 8,097277429
10,556745 7,623126 7,944325 7,687366 7,601713 7,237687 7,259101 7,987151857
10,513919 7,601713 8,115632 7,730193 7,687366 7,901499 7,623126 8,167635429
10,985011 7,794433 8,779443 7,922912 7,773019 8,222698 8,008565 8,498011571
15,738746 14,378047 12,586461 12,382356 12,643157 11,985486 12,008164 13,10320243
14,128586 11,838077 11,373172 11,509241 11,520581 11,169067 11,361832 11,84293657
14,230638 11,214423 11,509241 11,690668 11,702007 11,112371 10,908266 11,766802
14,593491 11,214423 11,509241 11,747364 12,064860 11,259780 11,293797 11,954708
15,296519 11,078354 12,008164 11,962808 12,121556 11,690668 11,633972 12,25600586
14,965248 12,10386293 11,94436807 12,02465467 12,1766852 11,59119473 11,59223773
16,43012074
3 8,412970286
5 12,18473097
6 7
T
E
S
T
1
1 2 3 4 5PLP
TRAINING
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 181
Vemos que los resultados obtenidos difieren mucho según el tipo de
locuciones que queremos segmentar y según el tipo de locuciones que
empleemos para entrenar al segmentador:
Vemos que las frases son las que "se dejan segmentar" de peor
manera, pues en todos los casos obtenemos tasas de error de
entre el 14 y el 21%.
o En MFCC los mejores resultados para segmentar frases los
obtenemos si entrenamos el segmentador con los párrafos
sin segmentar (combinación 2), con un error mínimo del
14.35%, o con todos los párrafos (combinación 6, 14.45%).
o En PLP las mejores combinaciones son las mismas:
párrafos sin segmentar (combinación 2) y todos los párrafos
(combinación 6), con un 14.77% y 14.97%,
respectivamente.
o En ambas técnicas los peores resultados los obtenemos si
prescindimos para el entrenamiento de los párrafos y sólo
entrenamos con frases (combinación 1), con errores
mínimos del 18.97% para MFCC y del 18.37% para PLP; es
lógico que esta combinación sea la peor para entrenar, ya
que las frases solas son las que contienen un menor
número de datos para entrenar los modelos.
Por otro lado vemos que en la segmentación de párrafos es donde
el segmentador consigue mejores resultados, con tasas de error
en el entorno del 7 -12%.
o En MFCC los mejores resultados para segmentar párrafos
los obtenemos si entrenamos el segmentador con todo el
corpus de la base de datos (combinación 7), con un error
mínimo del 7.84%. El resultado es prácticamente igual de
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 182
bueno (7.86%) si entrenamos sólo con párrafos sin
segmentar (combinación 2).
o En PLP el resultado óptimo (y de hecho el mejor de toda la
tabla en conjunto) se obtiene entrenando con todos los
párrafos (combinación 6), con un error mínimo del 7.24%.
Si añadimos al conjunto de entrenamiento las frases
(combinación 7) los resultados empeoran ligeramente, pero
seguimos obteniendo los segundos mejores resultados de la
tabla, con un 7.26% de error.
o Lo que parece peor con diferencia a la hora de segmentar
párrafos es entrenar con frases solamente (combinación 1),
con las que nuestra tasa de error mínima sube hasta el
10.88% para MFCC y 10.17% para PLP.
Por último, si queremos segmentar conjuntos de frases y párrafos
mezclados (combinación 5), obtendremos resultados a mitad de
camino entre los dos casos anteriores, es decir, entre segmentar
sólo frases o sólo párrafos, con tasas de error de entre el 10 y el
16%.
o Los mejores resultados para segmentar párrafos y frases los
obtenemos en MFCC si entrenamos el segmentador con
párrafos sin segmentar (combinación 2), con un error
mínimo del 10.92%, o con todos los párrafos (combinación
6, 11%).
o En PLP en cambio lo óptimo sería entrenar con toda la base
de datos (combinación 7, 10.91%), si bien no empeoraría
mucho la situación entrenando sólo con párrafos sin
segmentar (combinación 2, 11.08%).
o Y de nuevo también los peores resultados los obtenemos si
prescindimos para el entrenamiento de los párrafos y sólo
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 183
entrenamos con frases (combinación 1), con errores
mínimos del 14.70% para MFCC y del 14.13% para PLP.
Para terminar, si en lugar de buscar los máximos y mínimos puntuales,
promediáramos los resultados de las 5 gaussianas de cada grupo de
experimentos, tendríamos los siguientes resultados:
1 19,880211 15,793004 15,773838 16,396742 16,861523 15,055103 16,152372
3 11,241970 8,685225 8,775161 8,231264 8,552463 8,175589 8,098501
5 15,318860 12,039801 12,078245 12,085030 12,473994 11,422433 11,899593TEST
MFCCTRAINING
1 2 3 4 5 6 7
1 19,305857 16,225596 15,753193 16,326826 16,481080 15,415763 15,502531
3 10,792291 8,141328 8,282655 7,888651 8,038544 7,914347 7,832976
5 14,797596 11,944665 11,797256 11,858487 12,010432 11,443474 11,441206
PLPTRAINING
1 2 3 4 5 6 7
TEST
Observamos, en línea con nuestras conclusiones anteriores, que los
mejores datos de segmentación se producen al segmentar párrafos, y
que los mejores grupos de entrenamiento son toda la base de datos
(combinación 7, con 8.10% para MFCC y 7.83% para PLP), todos los
párrafos (combinación 6, con 8.18% y 7.91%) y frases y párrafos sin
segmentar (combinación 4, con 8.23% y 7.89%). Dado que las
combinaciones 6 y 7 requieren el doble de tiempo para realizar el
entrenamiento que la combinación 4, y que los resultados de ésta
última son muy similares, es este grupo de entrenamiento el que
estamos utilizando en la mayoría de nuestros experimentos.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 184
8.5 SEGMENTACIÓN INTEREMOCIONES
Como hemos venido afirmando, las emociones alteran las principales
características de la voz, por lo que pueden tener una cierta influencia
en el proceso de segmentación del habla expresiva. En este experimento
trataremos de evaluar dicha influencia realizando ejercicios de
segmentación con emociones cruzadas, es decir, entrenaremos al
segmentador con voz neutra y evaluaremos cómo segmenta locuciones
de voz expresiva, y entrenaremos con cada una de las distintas
emociones y observaremos cómo se segmentan los distintos tipos de
habla expresiva. Para ello realizaremos como siempre el experimento
primero con frases y después con párrafos. Los resultados obtenidos
con frases son los siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 185
TIPO BASE: mfcc
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
39,373602 21,252796 30,201342 30,201342 28,635347 16,890380 27,75913
38,255034 21,700224 28,970917 29,082774 24,832215 15,100671 26,32364
37,472036 19,910515 29,082774 28,411633 24,608501 15,883669 25,89485
37,919463 20,022371 28,523490 33,444816 24,944072 16,331096 26,86422
39,261745 21,364653 28,411633 34,448161 26,286353 16,442953 27,70258
34,002230 28,762542 38,015608 35,897436 31,995541 21,404682 31,67967
31,438127 27,536232 33,444816 31,995541 29,542921 19,509476 28,91119
32,329989 28,985507 33,779264 31,995541 27,759197 19,620959 29,07841
31,438127 29,208473 34,448161 32,664437 28,428094 19,843924 29,33854
30,992196 29,654404 35,562988 32,664437 29,542921 21,293200 29,95169
28,187919 20,637584 39,093960 26,510067 34,228188 15,604027 27,37696
25,838926 20,469799 34,228188 23,489933 29,026846 14,429530 24,58054
28,020134 19,966443 34,563758 27,348993 29,697987 15,436242 25,83893
29,194631 21,979866 35,402685 26,510067 31,040268 15,268456 26,566
30,033557 24,161074 36,241611 26,677852 30,704698 15,268456 27,18121
35,498320 27,771557 41,769317 43,784994 32,138858 21,388578 33,72527
31,354983 27,547592 38,073908 43,449048 29,675252 19,820829 31,6536
34,490482 28,667413 38,409854 44,232923 30,907055 19,932811 32,77342
35,274356 28,555431 38,521837 46,584546 31,243001 22,396417 33,7626
34,938410 27,883539 38,745801 47,816349 32,362822 22,844345 34,09854
37,695749 32,997763 43,064877 36,465324 40,492170 27,181208 36,31618
34,004474 32,997763 40,715884 33,221477 39,038031 24,496644 34,07905
36,465324 32,774049 40,604027 33,557047 38,926174 23,601790 34,3214
36,689038 31,655481 38,478747 34,116331 39,709172 24,384787 34,17226
36,241611 32,550336 37,919463 36,241611 40,380313 24,832215 34,69426
35,433637 26,689027 38,380450 34,786775 33,445137 20,843316 31,59639
32,630570 26,449449 35,146143 32,127456 30,522281 18,974605 29,30842
34,163872 26,497365 35,337805 33,397221 30,426449 19,142310 29,8275
34,451366 26,593196 35,050311 34,331576 31,073311 19,956876 30,24277
34,595113 27,335889 35,313848 35,146143 31,935793 20,483948 30,80179
33,92283 26,41928 35,85012 34,02006 31,45163 19,62028
33,20269
FANSTEFS
26,90889
TRAINING
FA FE FT
T
E
S
T FS
FN
FANSTE
29,7919
26,30872
FT 34,71663
MFCC
FA
FE
FN
30,35537
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 186
TIPO BASE: plp
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
42,953020 19,910515 35,011186 27,181208 28,411633 16,778523 28,37435
39,038031 19,463087 34,451902 23,266219 25,950783 15,436242 26,26771
38,366890 20,246085 31,991051 24,272931 25,279642 14,093960 25,70843
39,597315 18,903803 32,774049 24,272931 26,174497 15,100671 26,13721
39,709172 19,015660 32,885906 24,832215 27,628635 14,988814 26,51007
37,500000 28,325688 41,743119 35,206422 32,912844 21,444954 32,8555
33,944954 28,096330 41,513761 31,536697 30,275229 19,380734 30,79128
32,683486 27,866972 40,711009 30,963303 30,160550 20,642202 30,50459
37,729358 28,096330 40,940367 31,766055 29,931193 21,788991 31,70872
36,926606 28,555046 42,889908 31,766055 30,504587 21,444954 32,01453
35,738255 19,463087 43,456376 25,838926 31,711409 15,604027 28,63535
31,711409 18,959732 43,288591 21,476510 26,677852 13,590604 25,95078
32,046980 18,288591 42,617450 21,979866 28,355705 12,248322 25,92282
33,389262 18,456376 42,785235 21,308725 29,530201 13,590604 26,51007
33,892617 18,791946 43,791946 21,644295 31,208054 14,932886 27,37696
39,193729 29,227324 47,368421 38,297872 33,706607 19,932811 34,62113
34,826428 27,323628 44,008959 36,170213 32,362822 19,708847 32,40015
34,714446 26,539754 42,553191 36,730123 32,138858 20,492721 32,19485
36,618141 25,643897 41,881299 38,857783 32,810750 20,940649 32,79209
35,946249 26,427772 42,441209 40,537514 31,466965 22,844345 33,27734
37,024609 31,991051 46,196868 33,892617 40,604027 25,950783 35,94333
35,234899 30,648770 46,085011 31,991051 38,143177 23,154362 34,20955
37,024609 30,425056 44,630872 31,991051 38,814318 22,371365 34,20955
36,017897 29,418345 43,400447 32,438479 38,590604 22,706935 33,76212
36,129754 29,865772 42,170022 32,102908 39,038031 24,832215 34,02312
38,684020 26,223186 42,709087 32,513859 33,598457 20,245842 32,32908
35,189202 25,307303 41,769101 29,404676 30,971318 18,582791 30,20407
35,189202 25,114485 40,347072 29,693902 31,140034 18,365871 29,97509
36,900458 24,487828 40,178356 30,320559 31,549771 19,185346 30,43705
36,707640 24,921668 40,612196 30,778501 32,031815 20,149434 30,86688
36,35429 24,86684 41,24013 30,10112 31,72268 19,01769
FT 34,42953
FT
30,76243
26,59955
31,57492
26,87919
33,05711
FA
TRAININGPLP
FANSTEFSFNFE
FANSTE
FA
FE
FN
FS
T
E
S
T
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 187
Observando las tablas por columnas podemos realizar los siguientes
comentarios:
Si entrenamos al segmentador con voz neutra, los conjuntos de
frases con voz alegre serán los mejor segmentados (28.41% de
error para MFCC y 31.99% para PLP), mientras que las voces de
sorpresa y tristeza serán las peor segmentadas en MFCC (en el
entorno del 38%), y neutra y tristeza serán las peores en PLP (con
más del 42%).
Entrenando con voz alegre, las frases neutras serán las mejor
segmentadas con bastante diferencia (25.84% para MFCC y
31.71% para PLP), mientras que el resto de voces presentan tasas
de error muy parecidas, entre el 31-37% para MFCC y 33-38%
para PLP, con la particularidad de que en ambas técnicas la voz
peor segmentada será precisamente la alegre (37.47% y 38.37%
de error, respectivamente).
La voz enfadada como entrenamiento segmenta muy bien la voz
neutra (19.97% de error para MFCC y 18.29% para PLP) y la voz
alegre (19.91% y 18.90% respectivamente), mientras que a la voz
triste será a la que peor segmente (31.66% y 29.42%).
Empleando la voz de sorpresa como entrenamiento también
segmentaremos bien la voz neutra (23.49% de error para MFCC y
21.31% para PLP) y la voz alegre (28.41% y 23.27%
respectivamente), pero precisamente la voz sorprendida será la
peor segmentada (43.45% y 36.17% de error).
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 188
Entrenando con voz triste la voz mejor segmentada será la alegre
(24.61% para MFCC y 25.28% para PLP), mientras que
precisamente la voz triste será la peor segmentada (38.93% y
38.14%).
Por último, si empleamos como grupo de entrenamiento todas las
frases con las cinco emociones, vemos que la voz neutra es la
mejor segmentada (14.43% y 12.25%), seguida de la alegre, la
enfadada, la sorprendida, y en último lugar la triste (23.60% y
22.37%).
Considerando los valores medios podemos encontrar una posible
explicación al hecho de que en ocasiones un tipo de emoción segmente
mejor a otras que a sí misma, que es lo que a priori podríamos haber
pensado. Y es que, en media, las voces neutra (con 26.31% de error
para MFCC y 26.88% para PLP) y alegre (26.91% y 26.60%) se dejan
segmentar, por decirlo de alguna manera, de mejor forma que lo hacen
las voces de enfado, sorpresa y tristeza, por ese orden. Es decir, la
emoción mejor segmentada no depende tanto del tipo de emoción con
que entrenemos al segmentador, como de las propias características de
esa emoción, que la hacen de algún modo mejor o peor "segmentable".
Llegados a este punto queda preguntarnos cuál sería entonces el mejor
tipo de voz con el que entrenar a nuestro segmentador según el tipo de
voz que queramos segmentar. A la respuesta podemos llegar observando
la tabla por filas en lugar de por columnas. De esta manera vemos que:
El mejor resultado para todas las evaluaciones lo obtenemos
entrenando con el conjunto completo de frases, algo que en
principio podría parecer obvio porque la cantidad de muestras
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 189
que utilizamos para entrenar es cinco veces la que tenemos si
utilizamos una sola emoción. La diferencia con respecto a
entrenar con la mejor emoción suelta es significativa, al estar
muy por debajo los intervalos de confianza para el entrenamiento
con todas las frases, [18.44, 20.80] para MFCC y [17.85, 20.18]
para PLP, frente a los intervalos que presenta el entrenamiento
con una sola emoción, [25.11, 27.72] para MFCC y [23.58, 26.15]
para PLP.
Pero si sólo quisiéramos entrenar con una emoción en lugar del
conjunto completo de frases, ¿cuál debería ser la emoción elegida
si no conocemos qué tipo de emoción será la predominante en las
locuciones que queremos segmentar? En este caso, vemos que la
voz de enfado es la que consigue mejores resultados de
segmentación para todos los casos y en ambas técnicas, por lo
que, de querer entrenar con una sola emoción, ésta debería ser la
elegida. El valor medio de la tasa de error que conseguiríamos
sería del 26.42% con MFCC y del 24.87% con PLP.
El segundo, tercer y cuarto puesto como mejores emociones de
entrenamiento depende de la técnica empleada. En MFCC
después de la voz de enfado irán, por este orden, la tristeza, la
alegría y la sorpresa. Sus tasas medias de error son del 31.45%,
33.92% y 34.02%, respectivamente. En PLP el orden será
sorpresa (30.10%), tristeza (31.72%) y alegría (36.35%).
Por último, y fuera de la voz expresiva, la voz neutra consigue aún
peores resultados de segmentación en todos los casos, con una
tasa media de error del 35.85% para MFCC y del 41.24% para
PLP. Es decir, para segmentar frases con emoción es mejor
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 190
entrenar el segmentador con frases también con emoción que
entrenarlo con frases neutras.
Una vez estudiado el caso de las frases veremos si el experimento con
párrafos nos lleva a las mismas conclusiones o si se producen cambios
en las mismas:
TIPO BASE: mfcc
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
11,348123 42,406143 31,825939 37,798635 10,153584 9,044369 23,7628
7,764505 32,593857 20,392491 13,054608 8,361775 7,593857 14,96018
6,996587 20,477816 17,235495 9,470990 7,423208 7,252560 11,47611
6,996587 11,604096 16,382253 9,641638 7,252560 7,593857 9,911832
6,655290 11,348123 16,467577 9,812287 6,143345 8,276451 9,783846
10,623354 44,161545 31,957858 38,015803 7,638279 7,550483 23,32455
6,409131 31,431080 18,876207 13,345040 6,145742 5,882353 13,68159
5,794557 19,227392 15,364355 7,813872 5,004390 5,706760 9,818554
6,584723 10,711150 14,661984 8,516242 5,443371 6,057946 8,662569
6,760316 9,920983 15,276558 8,604039 5,092186 6,496927 8,691835
13,002566 44,739093 34,644996 39,178785 11,120616 8,896493 25,26376
9,409752 34,046193 23,182207 13,002566 8,383234 7,527802 15,92529
8,810950 21,129170 19,076133 10,008554 8,126604 7,185629 12,38951
7,442258 12,147134 17,621899 9,409752 7,955518 7,613345 10,36498
7,613345 11,462789 18,562874 10,350727 7,784431 7,442258 10,53607
21,344538 57,394958 41,680672 46,302521 16,554622 14,033613 32,88515
13,697479 38,571429 29,495798 24,453782 13,781513 11,512605 21,91877
13,277311 27,394958 23,865546 19,747899 14,117647 11,176471 18,26331
14,453782 17,394958 23,781513 18,151261 13,277311 12,689076 16,62465
14,537815 16,134454 22,941176 16,470588 13,109244 13,529412 16,12045
14,132762 47,237687 35,074946 40,364026 11,413276 9,914347 26,35617
9,357602 34,197002 23,040685 16,017131 9,207709 8,158458 16,6631
8,758030 22,098501 18,929336 11,820128 8,715203 7,858672 13,02998
8,907923 12,997859 18,158458 11,477516 8,522484 8,522484 11,43112
8,929336 12,248394 18,351178 11,349036 8,072805 8,972163 11,32049
9,984345 25,72307 22,67393 18,1671 9,152026 8,659536
MFCCTRAINING
R_A R_E R_N R_S R_T R_ANSTE
T
E
S
T
RA 13,97895
RN 12,83582
RANST 15,76017
RS 14,89592
RT 21,16247
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 191
TIPO BASE: plp
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SES
11,945392 38,139932 29,948805 15,443686 9,897611 8,361775 18,9562
6,911263 10,580205 16,211604 6,996587 7,252560 7,167235 9,186576
7,167235 9,641638 13,481229 7,508532 7,081911 6,996587 8,646189
6,655290 9,556314 13,566553 7,764505 7,081911 6,996587 8,603527
6,058020 9,556314 13,054608 7,849829 7,081911 7,679181 8,546644
12,028095 39,859526 26,777875 14,135206 7,813872 6,584723 17,86655
6,145742 8,779631 14,574188 6,321335 6,321335 4,828797 7,828505
5,092186 8,165057 11,501317 5,267779 6,672520 4,741001 6,906643
5,355575 7,638279 11,676910 5,267779 5,618964 4,916594 6,745684
5,882353 7,813872 11,237928 6,057946 5,618964 4,653205 6,877378
14,200171 37,639008 31,479897 15,568862 11,548332 8,896493 19,88879
8,468777 9,153122 19,161677 7,185629 8,896493 7,014542 9,98004
8,041061 9,153122 17,194183 7,271172 8,810950 7,014542 9,580838
8,383234 9,067579 16,595381 7,356715 8,468777 6,415740 9,381238
7,698888 9,153122 15,911035 7,784431 8,383234 7,014542 9,324209
22,773109 50,252101 39,747899 24,117647 16,638655 15,378151 28,15126
14,369748 16,470588 25,882353 14,453782 12,941176 12,184874 16,05042
14,453782 14,957983 23,109244 13,613445 12,941176 11,596639 15,11204
14,369748 15,126050 22,436975 13,949580 13,865546 11,932773 15,28011
13,949580 15,462185 21,344538 14,621849 13,613445 11,680672 15,11204
15,289079 41,520343 32,055675 17,366167 11,520343 9,850107 21,26695
9,014989 11,284797 19,014989 8,779443 8,886510 7,837259 10,803
8,736617 10,513919 16,381156 8,458244 8,907923 7,623126 10,1035
8,736617 10,385439 16,124197 8,629550 8,800857 7,601713 10,0464
8,436831 10,535332 15,438972 9,122056 8,715203 7,794433 10,00714
10,00654 16,81622 19,75637 10,43567 9,335207 8,110452
PLPTRAINING
RN 9,244952
R_A R_E R_N R_S R_T R_ANSTE
RT 17,94118
T
E
S
T
RA 10,78783
RANST 12,4454
RS 11,63102
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 192
Observando las tablas por columnas podemos realizar los siguientes
comentarios:
Entrenando al segmentador con un sólo conjunto de voces vemos
que los resultados son bastante uniformes: la voz neutra es
siempre la mejor segmentada, llegando a alcanzar un error
mínimo del 5% cuando se entrena con voces tristes en MFCC. La
segunda voz mejor segmentada en todos los casos es la alegre,
seguida de cerca por la sorprendida. La peor segmentada en todos
los casos es la voz triste.
Esto nos lleva a la misma conclusión de antes, esto es, la emoción
mejor segmentada no depende tanto del tipo de emoción con que
entrenemos al segmentador, como de las propias características
de esa emoción, que la hacen de algún modo mejor o peor
"segmentable".
De nuevo podríamos preguntarnos ahora cuál sería entonces el mejor
tipo de voz con el que entrenar a nuestro segmentador según el tipo de
voz que queramos segmentar. Observando de nuevo la tabla por filas en
lugar de por columnas, vemos que:
El mejor resultado para todas las evaluaciones lo obtenemos
entrenando con el conjunto completo de frases, algo que en
principio podría parecer obvio porque la cantidad de muestras
que utilizamos para entrenar es cinco veces la que tenemos si
utilizamos una sola emoción. No obstante, ahora la diferencia con
respecto a entrenar con la mejor emoción suelta no es
significativa con MFCC, al ser el extremo superior del intervalo de
confianza para el entrenamiento con todas las frases, [8.32, 9.00],
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 193
mayor que el extremo inferior del intervalo que presenta el
entrenamiento con una sola emoción, [8.56, 9.74]. Para PLP, en
cambio, la diferencia sí es significativa, teniendo un intervalo de
confianza de [7.78, 8.44] para el entrenamiento con todas las
frases, y de [8.74, 9.93] para el entrenamiento con la mejor
emoción.
Pero si sólo quisiéramos entrenar con una emoción en lugar del
conjunto completo de frases, ¿cuál debería ser la emoción elegida
si no conocemos qué tipo de emoción será la predominante en las
locuciones que queremos segmentar? En este caso, vemos que la
voz de tristeza es la que consigue mejores resultados de
segmentación en media en ambas técnicas, por lo que, de querer
entrenar con una sola emoción, ésta debería ser la elegida. El
valor medio de la tasa de error que conseguiríamos sería del
9.15% con MFCC y del 9.33% con PLP.
La voz alegre consigue también muy buenos resultados de
segmentación en ambas técnicas, sobre todo en PLP, donde
supera a la voz triste en determinados números de gaussianas.
Sus tasas medias de error son del 9.98% con MFCC y 10% con
PLP.
De nuevo la voz neutra es la que consigue peores resultados de
segmentación en todos los casos, con una tasa media de error del
22.67% para MFCC y del 19.76% para PLP. Es decir,
confirmamos la idea de que para segmentar frases con emoción es
mejor entrenar el segmentador con frases también con emoción
que entrenarlo con frases neutras.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 194
8.6 SEGMENTACIÓN CON NORMALIZACIÓN
CEPSTRAL
En el capítulo de herramientas explicamos la normalización cepstral, y
en el dedicado a los scripts del programa vimos cómo podíamos realizar
normalización cepstral de la media y la varianza en nuestros
experimentos. Veamos ahora cómo afecta a los resultados de
segmentación realizar dicha normalización. Para ello realizaremos
nuestro experimento habitual con los grupos de coeficientes _0, _0_D_A,
_E y _E_D_A añadiéndoles normalización cepstral de la media y la
varianza. Para ello añadimos el coeficiente _Z y el indicador _cmn_cvn.
Los resultados obtenidos son los siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 195
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: SES
LOCUCIONES: FANSTE FANSTE 1
26,5
45280
20,4
59990
27,2
40057
20,8
43316
26,7
12985
21,7
29756
26,7
84859
21,6
09966
224,0
77623
18,4
23575
25,0
59895
18,9
74605
24,3
17202
18,8
06900
24,4
13033
18,7
35026
323,6
22425
18,5
43364
24,3
89075
19,1
42310
24,3
17202
19,7
17298
24,4
60949
19,3
33972
423,1
19310
19,6
45424
24,1
25539
19,9
56876
24,4
84907
20,5
55822
24,0
05750
19,9
80834
523,8
85961
19,5
97508
24,1
25539
20,4
83948
24,4
13033
21,2
26641
24,0
53666
20,7
47484
24,2
50120
19,3
33972
24,9
88021
19,8
80211
24,8
49066
20,4
07283
24,7
43651
20,0
81456
127,2
59581
19,9
08412
27,6
21114
20,2
45842
25,9
58062
20,8
96602
26,3
67799
21,7
64281
225,2
59099
18,3
89973
25,1
14485
18,5
82791
24,6
08339
18,4
38178
24,7
04748
19,7
87901
323,9
57580
18,9
44324
23,7
40660
18,3
65871
23,9
81682
18,4
86382
24,3
43215
19,8
60207
423,2
82719
19,6
43288
22,7
04266
19,1
85346
23,5
71945
19,7
63799
24,4
39624
20,1
73536
523,1
86310
20,1
25331
22,8
48879
20,1
49434
23,3
55025
20,5
10966
24,2
70909
20,5
10966
24,5
89058
19,4
02266
24,4
05881
19,3
05857
24,2
95011
19,6
19185
24,8
25259
20,4
19378
PLP
_0
_0_D
_A
G A U S S I A N A S
_E
_E
_D
_A
SIN
NO
RM
AL
IZA
CIÓ
N C
EP
ST
RA
L (
_)
_0_Z
CO
N N
OR
MA
LIZ
AC
IÓN
CE
PS
TR
AL
(_
cm
n_
cvn
)
_0_D
_A
_Z
_E
_Z
_E
_D
_A
_Z
MF
CC
_0
_0_D
_A
G A U S S I A N A S
_E
_E
_D
_A
SIN
NO
RM
AL
IZA
CIÓ
N C
EP
ST
RA
L (
_)
_0_Z
CO
N N
OR
MA
LIZ
AC
IÓN
CE
PS
TR
AL
(_
cm
n_
cvn
)
_0_D
_A
_Z
_E
_Z
_E
_D
_A
_Z
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 196
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
112,0
55675
8,6
29550
12,2
05567
8,8
22270
10,9
85011
8,6
08137
11,1
13490
8,8
43683
210,9
20771
7,7
94433
11,0
92077
8,1
79872
9,6
57388
7,8
58672
9,9
78587
8,2
44111
310,5
35332
7,8
37259
10,4
28266
8,1
15632
8,7
79443
7,7
51606
9,2
50535
8,0
29979
410,3
42612
7,7
94433
10,5
13919
8,0
29979
8,8
22270
7,7
30193
9,0
14989
7,8
58672
510,3
64026
8,2
86938
10,1
28480
8,0
08565
8,8
00857
7,7
94433
8,9
50749
8,2
44111
10,8
43683
8,0
68523
10,8
73662
8,2
31264
9,4
08994
7,9
48608
9,6
61670
8,2
44111
110,8
77944
8,5
01071
11,0
06424
8,5
01071
10,4
71092
8,4
58244
10,7
28051
8,4
79657
210,2
35546
7,4
30407
10,6
42398
7,6
01713
9,8
07281
7,6
65953
10,1
28480
7,7
73019
310,3
64026
7,7
51606
10,6
20985
7,6
87366
9,5
07495
7,2
80514
9,3
36188
7,6
44540
410,1
28480
7,6
65953
10,0
00000
7,7
30193
9,1
86296
7,1
30621
9,0
36403
7,3
01927
59,9
57173
7,6
44540
9,6
78801
7,9
22912
8,8
65096
7,2
59101
9,0
57816
7,8
37259
10,3
12634
7,7
98715
10,3
89722
7,8
88651
9,5
67452
7,5
58887
9,6
57388
7,8
07280
_0_D
_A
_Z
_E
_Z
_E
_D
_A
_Z
G A U S S I A N A S
_E
_D
_A
_Z
G A U S S I A N A S
PLP
SIN
NO
RM
AL
IZA
CIÓ
N C
EP
ST
RA
L (
_)
CO
N N
OR
MA
LIZ
AC
IÓN
CE
PS
TR
AL
(_
cm
n_
cvn
)
_0
_0_D
_A
_E
_E
_D
_A
_0_Z
MF
CC
SIN
NO
RM
AL
IZA
CIÓ
N C
EP
ST
RA
L (
_)
CO
N N
OR
MA
LIZ
AC
IÓN
CE
PS
TR
AL
(_
cm
n_
cvn
)
_0
_0_D
_A
_E
_E
_D
_A
_0_Z
_0_D
_A
_Z
_E
_Z
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 197
En el experimento con frases la diferencia en los resultados de
segmentación al añadir la normalización cepstral es la siguiente:
_0 _0_D_A _E _E_D_A
-0,167705 -1,269766 0,455198 -0,766650
-0,239579 -0,383325 0,646862 0,239579
-0,694777 -1,173934 -0,071874 -0,191662
-1,365597 -0,910398 0,119789 -0,023958
-0,527072 -1,629133 0,071873 -0,263536
MFCC
_0 _0_D_A _E _E_D_A
1,301519 -0,988190 1,253315 -1,518439
0,650760 -0,048205 0,409737 -1,205110
-0,024102 0,457942 -0,602555 -1,494336
-0,289226 -0,120511 -1,735358 -0,988190
-0,168715 -0,385635 -1,422030 -0,361532
PLP
Mientras que en el experimento con párrafos la diferencia es:
_0 _0_D_A _E _E_D_A
1,070664 0,021413 1,092077 -0,021413
1,263383 -0,064239 1,113490 -0,064239
1,755889 0,085653 1,177731 0,085653
1,520342 0,064240 1,498930 0,171307
1,563169 0,492505 1,177731 -0,235546
MFCC
_0 _0_D_A _E _E_D_A
0,406852 0,042827 0,278373 0,021414
0,428265 -0,235546 0,513918 -0,171306
0,856531 0,471092 1,284797 0,042826
0,942184 0,535332 0,963597 0,428266
1,092077 0,385439 0,620985 0,085653
PLP
Por lo que se puede observar, la normalización cepstral sienta peor al
experimento con frases, lo que puede ser debido al menor número de
datos del que se dispone para realizar el entrenamiento y la evaluación.
En cambio con los párrafos, donde contamos con un cuerpo de datos
más amplio, la normalización mejora los resultados salvo determinadas
excepciones. En el caso de experimentos realizados solamente con
coeficientes estáticos (y con el coeficiente extra _0 o _E) la mejora se
produce en todos los casos, siendo más acusada con la técnica MFCC
que con la PLP. Cuando se utilizan coeficientes derivados la
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 198
normalización produce peores resultados con 2 gaussianas, y en el caso
de _E_D_A con MFCC también con 1 y 5 mezclas. En el resto de casos
se producen leves mejoras, que en sólo un par de casos llegan al medio
punto.
8.7 VARIACIÓN DEL NÚMERO DE CANALES
En este experimento y los dos siguientes probaremos a realizar los
experimentos dando diferentes valores a algunas de las variables
definidas en los ficheros de configuración, para ver cómo afecta a la
segmentación conseguida por nuestro sistema. Empezamos por el
número de canales utilizados para el análisis por bancos de filtros. Para
ello damos diferentes valores a la variable NUMCHANS en los ficheros de
configuración config_hcopy_SES_mfcc_ y config_hcopy_SES_plp_ y
obtenemos los siguientes resultados:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 199
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
COEFICIENTES: _E_D_A (39)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
18,950749 8,822270 8,608137 8,372591 8,608137 8,693790 8,843683 8,672377 8,822270
28,029979 7,837259 7,901499 7,794433 7,815846 7,944325 8,094218 8,137045 8,179872
37,623126 7,794433 7,880086 7,922912 8,051392 7,773019 7,965739 7,773019 8,115632
47,366167 7,516060 7,623126 7,366167 7,173448 7,751606 7,687366 7,644540 8,029979
57,537473 7,558887 7,944325 7,665953 7,708779 7,901499 7,922912 7,858672 8,008565
7,901499 7,905782 7,991435 7,824411 7,871520 8,012848 8,102784 8,017131 8,231264
19,014989 8,672377 8,629550 8,501071 8,394004 8,415418 8,394004 8,286938 8,265525
28,650964 7,773019 7,408994 7,601713 7,494647 7,751606 7,687366 7,773019 7,751606
37,773019 7,152034 7,430407 7,687366 7,537473 7,773019 7,751606 7,580300 7,537473
47,794433 7,044968 7,494647 7,730193 7,537473 7,922912 7,901499 7,837259 7,665953
58,029979 7,665953 7,387580 7,922912 7,730193 7,773019 7,965739 7,773019 8,008565
8,252677 7,661670 7,670236 7,888651 7,738758 7,927195 7,940043 7,850107 7,845824
PLP12 16
MFCC12 16
G
A
U
S
S
I
A
N
A
S
20 24 26 30 32
G
A
U
S
S
I
A
N
A
S
20 24 26 30
4036
36
NÚMERO DE CANALES
NÚMERO DE CANALES
32 40
En la técnica MFCC, con 3 y 5 gaussianas los mejores resultados los
obtenemos con 12 canales, mientras que para conseguir los mejores
resultados con 1 y 2 gaussianas tendríamos que doblar el número de
canales hasta 24. No obstante, el mejor dato se obtiene con 4
gaussianas y 26 canales, donde conseguimos un error mínimo del
7.17%.
Un número muy alto de canales sólo funciona con la técnica PLP y 1
sola gaussiana; para más de 1 gaussiana el número óptimo de canales
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 200
estará entre 16 y 20; el mejor dato lo conseguimos con 4 gaussianas y
16 canales, donde el error se ve reducido hasta el 7.04%.
8.8 VARIACIÓN DEL DESPLAZAMIENTO DE
TRAMAS Y DEL TAMAÑO DE LA VENTANA DE
ANÁLISIS
Ahora probamos a cambiar la forma en la que se toman los vectores de
parámetros a partir de la señal de audio, por medio de la variación de
dos variables que vimos en el capítulo de Herramientas:
el desplazamiento de tramas, es decir, la distancia entre donde
empieza a considerarse el primer vector y donde empieza a
considerarse el segundo, que en los ficheros de configuración
viene definido por la variable TARGETRATE, y
el tamaño de la ventana de análisis, es decir, el tamaño del
segmento de la forma de onda de la señal original que será
considerado para determinar cada vector de parámetros, y que en
los ficheros de configuración viene definido por la variable
WINDOWSIZE.
En nuestro sistema por defecto hemos venido empleando siempre un
desplazamiento de tramas de 10 ms, y un tamaño de ventana de 25 ms,
de manera que cada ventana se solapa con la anterior y la siguiente.
Dado que la unidad en HTK son 100 ns, estas dos variables vienen
definidas en los ficheros de configuración como:
TARGETRATE = 100000
WINDOWSIZE = 250000
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 201
Conservando la misma lógica de solapamiento de ventanas, probamos a
multiplicar ambos valores por 0.5 y por 1.5 para ver cómo una
disminución o un aumento de los mismos afecta a la segmentación.
Obtenemos los siguientes datos de evaluación:
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
COEFICIENTES: _E_D_A (39)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
12,055675 8,822270 43,829787
10,813704 8,179872 43,226950
10,813704 8,115632 44,539007
11,092077 8,029979 44,361702
10,235546 8,008565 45,035461
11,002141 8,231264 44,198581
11,627409 8,501071 42,943262
10,835118 7,601713 42,730496
10,663812 7,687366 42,765957
10,835118 7,730193 42,730496
9,871520 7,922912 43,404255
10,766595 7,888651 42,914893
PLPTAMAÑO DE LA VENTANA 12.5 ms
MFCCTAMAÑO DE LA VENTANA 12.5 ms
G
A
U
S
S
I
A
N
A
S
25 ms 32.5 ms
G
A
U
S
S
I
A
N
A
S
25 ms 32.5 ms
4
5
2
3
4
5
DESPLAZAMIENTO DE TRAMAS
DESPLAZAMIENTO DE TRAMAS 5 ms 10 ms 15 ms
1
10 ms 15 ms
1
2
3
5 ms
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 202
Hemos realizado este experimento con sólo un dato por arriba y uno por
abajo del empleado de manera habitual porque desplazamientos y
tamaños de ventana más pequeños arrojaban errores de memoria, y
mayores daban errores de procesamiento. No obstante con estos datos
nos es suficiente para ver que obtenemos peores resultados de
segmentación tanto si disminuimos como si aumentamos ambas
variables (siendo el error mucho mayor al aumentarlos), por lo que
podemos considerar óptimos el desplazamiento de 10 ms y el tamaño de
ventana de 25 ms que hemos venido empleando (y que, por otra parte,
suelen ser los valores más aceptados en todos los sistemas de
reconocimiento y segmentación consultados).
Estudiando los intervalos de confianza vemos que la diferencia entre los
errores medios del experimento con 10 y 25 ms y los del experimento
con 5 y 12.5 ms es significativa, al estar situadas las bandas del
primero (MFCC: [7.92, 8.54], PLP: [7.59, 8.19]) muy por debajo de las
del segundo (MFCC: [10.65, 11.35], PLP: [10.42, 11.12]).
Para ahondar un poco más en el resultado obtenido con un
desplazamiento de tramas menor, estudiamos el número de errores
cometidos por la segmentación automática y la desviación media de los
errores. Fijándonos por ejemplo en el dato de MFCC para 4 gaussianas,
que arroja una diferencia de dos puntos porcentuales al disminuir el
desplazamiento y el tamaño de ventana, estudiando los ficheros de
resultados y descomponiéndolos llegamos al siguiente resumen de
cálculos:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 203
DESPLAZAMIENTO 10 ms 5 ms
TAMAÑO VENTANA 25 ms 12.5 ms
INSTANCIAS 4670 4670
ERRORES 375 518
PORCENTAJE DE ERROR 8,029979% 11,092077%
DESV.M. (ms) 39,53749606 34,47562487
DESV.M. SIN V.A. (ms) 33,66866165 31,37126727
En la primera fila indicamos el número de instancias de transición
entre fonemas que se encuentran en los ficheros segmentados, y en la
siguiente el número de instancias que presentan error para cada
desplazamiento y tamaño de ventana. Entendemos como siempre que
una instancia ha resultado errónea cuando la frontera entre los dos
fonemas indicada por el segmentador automático se aleja más de 20 ms
de la frontera marcada en los ficheros de control (segmentados
manualmente). La siguiente fila indica el cociente de los dos datos
anteriores, es decir, el porcentaje de error que indicábamos en la
primera tabla. A continuación hemos calculado la desviación media en
ms de las instancias que presentaban error, y dado que en ambos casos
había un número pequeño de valores atípicos (valores muy altos de
desviación) que pueden falsear la media, hemos calculado también la
desviación media excluyendo un 1.35% de los valores extremos de la
muestra, obteniendo el dato de desviación media sin valores atípicos
que apuntamos en la última fila.
El resultado es interesante, ya que observamos que, en efecto, al
disminuir el desplazamiento de tramas y el tamaño de ventana el
número de errores es un 38% mayor, empeorando el porcentaje de error
al pasar del 8.03% al 11.09%; pero al mismo tiempo la desviación media
de los errores ha bajado más de 5 ms, al pasar de 39.54 a 34.48 ms.
Esta bajada también se da si no tenemos en cuenta los valores
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 204
extremos, al pasar la desviación media de 33.67 a 31.37 ms (más de 2
ms). Es decir, al disminuir el desplazamiento de tramas y el tamaño de
ventana a la mitad se mejora la desviación media de las fronteras
marcadas incorrectamente por el segmentador con respecto a las reales,
pero al mismo tiempo aumenta el número de desviaciones mayores de
20 ms, lo que hace que aumente el porcentaje de error de la
segmentación efectuada.
8.9 INCLUSIÓN DE FILTRADO
Hasta ahora hemos estado trabajando en todo el dominio de la
frecuencia, sin imponer límites superiores ni inferiores. Puede ser
interesante introducir filtros y observar cómo se comporta el
segmentador. HTK nos permite hacerlo mediante las variables LOFREQ
y HIFREQ en los ficheros de configuración. Introducimos primero un
filtro paso banda que elimine las frecuencias muy altas y las muy bajas,
digamos entre 125 y 7800 Hz. Con estos datos introduciremos también
sus respectivos filtros paso bajo y paso alto.
Más interesante aún será introducir un filtro que simule el canal
telefónico, de esta manera podremos observar cómo se comportaría el
segmentador si las locuciones hubieran sido grabadas por teléfono. Una
buena manera de simular dicho canal sería con un filtro de entre 300 y
3400 Hz. Al igual que antes, estudiaremos también el filtro paso bajo y
el filtro paso alto de ambas frecuencias. Los datos resultan ser:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 205
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: SES
LOCUCIONES: FANSTE R_ANSTE - RANST
18,822270 9,100642 8,993576 8,715203 10,963597 13,019272 9,336188
28,179872 8,029979 8,051392 8,051392 10,064240 12,976445 8,800857
38,115632 7,858672 7,730193 7,837259 9,850107 12,248394 8,800857
48,029979 7,987152 7,665953 7,944325 9,550321 11,927195 8,993576
58,008565 8,372591 8,137045 7,730193 9,571734 11,563169 8,693790
8,231264 8,269807 8,115632 8,055674 10,000000 12,346895 8,925054
18,501071 9,122056 9,122056 8,415418 10,556745 13,233405 9,764454
27,601713 8,158458 8,286938 7,858672 10,449679 11,905782 9,271949
37,687366 7,815846 7,751606 7,494647 9,850107 11,541756 8,736617
47,730193 7,708779 7,837259 7,794433 9,850107 10,792291 8,629550
57,922912 8,051392 8,265525 8,008565 10,235546 10,578158 8,779443
7,888651 8,171306 8,252677 7,914347 10,188437 11,610278 9,036403
FILTRADO
FILTRADO
LOFREQ = 300
HIFREQ = 3400
-
HIFREQ = 3400
G
A
U
S
S
I
A
N
A
S
-
HIFREQ = 3400
G
A
U
S
S
I
A
N
A
S
PLPSIN FILTRO
LOFREQ = 125
-
LOFREQ = 125
HIFREQ = 7800
-
HIFREQ = 7800
LOFREQ = 300
-
MFCCSIN FILTRO
LOFREQ = 125
-
LOFREQ = 125
HIFREQ = 7800
-
HIFREQ = 7800
LOFREQ = 300
-
LOFREQ = 300
HIFREQ = 3400
Si calculamos las diferencias entre las tasas de error del experimento
normal y el experimento con los distintos filtros, tendremos:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 206
-0,278372 -0,171306 0,107067 -2,141327 -4,197002 -0,513918
0,149893 0,128480 0,128480 -1,884368 -4,796573 -0,620985
0,256960 0,385439 0,278373 -1,734475 -4,132762 -0,685225
0,042827 0,364026 0,085654 -1,520342 -3,897216 -0,963597
-0,364026 -0,128480 0,278372 -1,563169 -3,554604 -0,685225
-0,620985 -0,620985 0,085653 -2,055674 -4,732334 -1,263383
-0,556745 -0,685225 -0,256959 -2,847966 -4,304069 -1,670236
-0,128480 -0,064240 0,192719 -2,162741 -3,854390 -1,049251
0,021414 -0,107066 -0,064240 -2,119914 -3,062098 -0,899357
-0,128480 -0,342613 -0,085653 -2,312634 -2,655246 -0,856531
LOFREQ = 300
HIFREQ = 3400
-
HIFREQ = 3400
MFCC
PLP
LOFREQ = 125
-
LOFREQ = 125
HIFREQ = 7800
-
HIFREQ = 7800
LOFREQ = 300
-
LOFREQ = 300
HIFREQ = 3400
-
HIFREQ = 3400
LOFREQ = 125
-
LOFREQ = 125
HIFREQ = 7800
-
HIFREQ = 7800
LOFREQ = 300
-
De este modo vemos que tan sólo la inclusión del filtro paso bajo con
frecuencia de corte superior a 7800 Hz parece mejorar un poco los
resultados del segmentador para la técnica MFCC y en dos casos de la
técnica PLP (1 y 3 gaussianas). En MFCC introducir además una
frecuencia de corte inferior a 125 Hz mejora los resultados con entre 2 y
4 gaussianas.
En cuanto al canal telefónico, el empeoramiento en el rendimiento del
segmentador es de entre 2.65 y 4.8 puntos porcentuales. Además
podemos observar que hay mucha más información en la señal de voz a
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 207
menos de 300 Hz que en la banda de 3400 Hz para arriba, ya que al
filtrar por encima de esta frecuencia el rendimiento se verá empeorado
entre 0.51 y 1.67 puntos, mientras que al filtrar por debajo de los 300
Hz el empeoramiento será aún más acentuado, entre 1.52 y 2.85
puntos porcentuales.
8.10 DETERMINACIÓN DEL NÚMERO ÓPTIMO DE
ESTADOS, ITERACIONES Y GAUSSIANAS CON SEV
Hasta ahora hemos desarrollado experimentos con la base de datos
SES. A partir de ahora comenzaremos a utilizar la base de datos SEV,
que fue descrita en su capítulo correspondiente, para evaluar el
rendimiento de nuestro segmentador con dicha base de datos. Vamos a
utilizar las locuciones de la locutora femenina (Rosa), de las cuales
disponemos de un subconjunto de locuciones segmentadas
manualmente. Comenzamos por el experimento en que tratamos de
determinar el número óptimo de los estados, iteraciones y gaussianas,
tal y como hicimos con SES en el apartado 8.2. Los resultados
obtenidos con SEV-Rosa son los siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 208
TIPO BASE: mfcc
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SEV
LOCUCIONES: FPQ_ANSTECM - FPQ_ANSTECM
1 87,626515 21,582324
2 49,878831
3 28,752673
4 22,851033
5 21,496793
1 50,677120
2 22,665716 19,885959
3 21,040627
4 20,313614
5 20,042766
1 37,947256 30,363507
2 26,500356 20,798289
3 27,298646 20,000000 19,472559
4 27,013542 19,301497
5 27,056308 19,344262
1 27,127584 23,478261
2 22,423378 19,586600
3 21,938703 19,472559
4 21,824661 19,387028 19,472559
5 22,295082 19,501069
1 21,582324 21,582324
2 19,885959 19,885959
3 19,472559 19,472559
4 19,472559 19,472559
5 19,173200 19,173200 19,173200
1 20,057021 21,097648
2 18,346401 19,672131
3 18,061297 19,101924
4 18,118318 19,073414
5 18,474697 19,486814
6 19,244476
1 21,582324 20,898076
2 20,741269 19,515324
3 20,456165 18,916607
4 20,242338 19,101924
5 20,156807 19,201711
6
7 19,372773
1 38,460442 20,755524
2 37,462580 19,372773
3 37,861725 18,973628
4 38,175339 18,802566
5 38,104063 19,187455
6
7
8 19,387028
1 62,355523 20,598717
2 60,907096 19,444048
3 60,512070 18,873842
4 60,790051 18,688525
5 60,614484 19,444048
6
7
8
9 19,401283
1 84,223623 20,612972
2 83,593232 19,558090
3 83,493696 18,973628
4 83,443928 19,130435
5 83,394161 19,586600
6
7
8
9
10 19,657876
MFCC
EXPERIMENTO
GAUSSIANAS
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
X = 10
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 209
TIPO BASE: plp
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SEV
LOCUCIONES: FPQ_ANSTECM - FPQ_ANSTECM
1 87,954383 21,596579
2 55,138988
3 32,715609
4 24,461867
5 23,022096
1 55,851746
2 23,891661 20,228083
3 20,684248
4 20,057021
5 19,771917
1 38,132573 32,387741
2 26,657163 20,441910
3 26,115467 19,358517 19,258731
4 25,716322 19,158945
5 25,331433 18,831076
1 24,960798 23,549537
2 22,038489 19,971490
3 21,753386 19,543835
4 21,126158 19,158945 19,173200
5 20,898076 18,788311
1 21,596579 21,596579
2 20,228083 20,228083
3 19,258731 19,258731
4 19,173200 19,173200
5 18,902352 18,902352 18,902352
1 19,657876 20,855310
2 18,731290 19,757662
3 18,189594 19,615110
4 18,203849 19,372773
5 18,175339 19,415538
6 19,287242
1 21,282965 20,598717
2 20,741269 19,429793
3 20,285103 19,002138
4 20,712758 19,258731
5 20,370634 19,287242
6
7 19,073414
1 37,690663 20,555952
2 36,721311 19,158945
3 36,336422 19,144690
4 36,421953 19,572345
5 36,635780 19,230221
6
7
8 18,802566
1 64,608632 20,541696
2 63,716167 19,144690
3 63,745428 19,244476
4 63,613753 19,814683
5 63,584492 19,600855
6
7
8
9 18,617249
1 84,389516 20,555952
2 83,858660 19,101924
3 83,593232 19,643621
4 83,477107 19,657876
5 83,410750 19,415538
6
7
8
9
10 18,503207
PLP
EXPERIMENTO
GAUSSIANAS
ESTADOS = X
ITERACIONES = 5
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = X
GAUSSIANAS = 5
ESTADOS = 5
ITERACIONES = 5
GAUSSIANAS = X
X = 10
T
É
R
M
I
N
O
V
A
R
I
A
B
L
E
X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 210
Podemos realizar las siguientes observaciones:
Exactamente igual que nos pasaba con la base de datos SES,
utilizando 3 estados con SEV el error obtenido es bastante
elevado, y este porcentaje de error va decreciendo al ir
aumentando el número de estados hasta llegar a 6, donde
encontramos el mínimo error posible. De 7 en adelante el error irá
disparándose con cada estado adicional. Por tanto 6 parece un
número óptimo de estados, combinado con 5 iteraciones y 3-5
gaussianas.
Considerando el número de iteraciones nos ocurre lo mismo que
nos pasaba con SES, es decir, observamos que en ciertas
ocasiones realizar una nueva iteración hace que la tasa de error
aumente, en lugar de disminuir, es decir, parece que el sistema
comienza a particularizar en lugar de generalizar. Y por otra parte
el proceso completo se ralentiza enormemente con cada nueva
iteración que añadimos al mismo, por lo que podríamos
considerar un número óptimo de iteraciones aquella última
iteración que consiga una rebaja considerable de la tasa de error
sin convertir el proceso en demasiado largo. Para ello, calculamos
la mejora marginal de cada iteración, obteniendo lo siguiente:
ITERACIONES MFCC PLP
X=2 1,454027 3,250179
X=3 0,741269 0,940841
X=4 -0,085531 0,042765
X=5 0,213828 -0,114041
X=6 0,099786 -0,470421
X=7 0,156807 0,370635
X=8 0,114041 -0,142552
X=9 0,114041 0,000000
X=10 -0,285103 0,042766
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 211
Realizar una segunda iteración nos produciría una mejora de la
tasa de error de un 1.45% y 3.25% dependiendo de la técnica, con
respecto al error obtenido en el experimento sin iteraciones. El
número óptimo de iteraciones según estos datos serían 5 ó 6 con
MFCC, y 4 con PLP, ya que con esta técnica a partir de la quinta
iteración se obtienen datos peores.
Considerando por último el número de gaussianas, vemos que
para MFCC el óptimo se encuentra en 5 mezclas, mientras que en
PLP se encuentra en 10 mezclas (manteniendo, eso sí, constantes
los estados y las iteraciones a 5).
8.11 COMBINACIONES DE COEFICIENTES CON
SEV
Como ya hicimos con SES en el apartado 8.3, vamos a realizar distintas
combinaciones posibles de los coeficientes extra para ver cómo afectan
al resultado obtenido por el segmentador. Los coeficientes que
combinaremos en el experimento son:
Coeficiente Cepstral cero: _0
Energía: _E
Coeficientes Delta: _D
Coeficientes de Aceleración: _A
Coeficientes de Tercera derivada: _T
Los resultados obtenidos para el experimento con SEV son los
siguientes:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 212
TIP
O B
AS
E:
mfc
c
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
V
LO
CU
CIO
NE
S:
FP
Q_A
NS
TE
CM
- F
PQ
_A
NS
TE
CM
124,1
19743
24,1
91019
24,3
90592
22,3
94868
21,8
81682
21,5
96579
22,7
79758
19,6
86386
19,4
01283
22,1
38275
21,9
52958
20,6
12972
223,3
21454
23,8
91661
23,2
50178
20,9
40841
21,1
26158
20,2
42338
21,3
25731
18,6
88525
18,2
46614
21,5
11048
21,3
82751
19,7
00641
322,9
08054
23,2
07413
22,7
79758
20,8
69565
21,1
11903
20,2
13828
20,6
98503
17,8
90235
18,0
61297
21,4
96793
21,2
40200
19,8
28938
422,5
94440
22,8
65289
22,6
79971
20,3
99145
21,5
68068
20,3
56379
20,4
84676
17,6
33642
18,0
47042
21,4
54027
20,8
12545
19,6
72131
522,3
80613
22,7
36992
22,4
09123
20,8
41055
21,6
10834
20,6
55738
20,5
55952
17,5
9087
718,1
32573
21,6
67855
20,3
70634
19,8
28938
23,0
64861
23,3
78475
23,1
01924
21,0
89095
21,4
59729
20,6
12972
21,1
68924
18,2
97933
18,3
77762
21,6
53600
21,1
51818
19,9
28724
G A U S S I A N A SMF
CC
CO
EF
ICIE
NT
ES
0 1
3E
13
0_E
14
D 2
40_D
26
E_D
26
D_A
36
0_D
_A
39
E_D
_A
39
D_A
_T
48
0_D
_A
_T
52
E_D
_A
_T
52
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 213
TIP
O B
AS
E:
plp
ES
TA
DO
S:
6
ITE
RA
CIO
NE
S:
6
GA
US
SIA
NA
S:
5
BA
SE
DE
DA
TO
S:
SE
V
LO
CU
CIO
NE
S:
FP
Q_A
NS
TE
CM
- F
PQ
_A
NS
TE
CM
124,3
90592
24,7
32716
24,0
62723
22,4
23378
22,2
09551
22,0
52744
22,8
22523
20,0
71276
19,3
01497
23,0
07840
21,9
10192
20,5
98717
223,3
64220
23,6
77833
22,6
94227
21,2
25944
21,4
39772
20,6
12972
20,5
41696
19,0
16393
18,4
74697
21,9
95723
21,2
82965
20,2
56593
322,2
95082
22,9
93585
22,3
52103
20,4
84676
20,5
84462
19,8
28938
20,2
85103
18,3
7491
118,4
46187
21,2
68710
20,5
27441
19,6
00855
422,0
81254
22,5
80185
21,7
10620
20,2
13828
19,9
85745
19,3
87028
20,4
13400
18,5
03207
18,5
60228
21,4
25517
20,0
42766
19,5
01069
522,1
24020
22,4
94654
21,8
67427
20,2
99359
19,9
85745
19,5
58090
20,3
70634
18,7
17035
18,5
45973
20,8
83820
20,3
56379
19,5
86600
22,8
51034
23,2
95795
22,5
37420
20,9
29437
20,8
41055
20,2
87954
20,8
86671
18,9
36564
18,6
65716
21,7
16322
20,8
23949
19,9
08767
G A U S S I A N A S
PLP
CO
EF
ICIE
NT
ES
0 1
3E
13
0_E
14
D 2
40_D
26
E_D
26
D_A
36
0_D
_A
39
E_D
_A
39
D_A
_T
48
0_D
_A
_T
52
E_D
_A
_T
52
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 214
A la vista de los resultados podemos extraer las siguientes
conclusiones:
La inclusión únicamente del coeficiente cepstral cero (0 13)
presenta en todos los casos mejores resultados que la del
coeficiente de energía (E 13).
La inclusión de ambos coeficientes a la vez (0_E 14), mejora en
general los resultados en la técnica PLP, pero empeora los de 0 13
en MFCC para determinados números de gaussianas.
La inclusión de los coeficientes Delta (D 24) resulta ser mejor en
todos los casos que la simple inclusión de los coeficientes de los
puntos anteriores (0 13, E 13 y 0_E 14).
Añadir también los coeficientes de aceleración (D_A 36) no mejora
en todos los casos los resultados, como ocurría con SES. Por
ejemplo, con PLP y 1 gaussiana el error aumenta un 0.4%,
mientras que con 2 gaussianas disminuye en un 0.68%.
Añadir los coeficientes de tercera derivada (D_A_T 48) empeora los
resultados para ambas técnicas, como ocurría con SES, con la
única excepción de MFCC con 1 gaussiana.
Añadir a los coeficientes acelerados el coeficiente cero mejora en
general los resultados (0_D_A 39 frente a D_A 36, 0_D_A_T 52
frente a D_A_T 48), salvo algunas excepciones que encontramos
con 0_D 26 frente a D 24. Con la energía vemos que la mejora
sucede en todos los casos (E_D 26 frente a D 24, E_D_A 39 frente
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 215
a D_A 36 y E_D_A_T 52 frente a D_A_T 48). Cuál de estos dos
coeficientes añadidos a los derivados obtiene mejores resultados
depende del número de gaussianas y de la técnica empleada. Por
ejemplo, para MFCC con 3 gaussianas E_D 26 y E_D_A_T 52
obtienen mejores resultados que 0_D 26 y 0_D_A_T 52, mientras
que 0_D_A 39 es mejor que E_D_A 39.
Finalmente, considerando toda la tabla, con MFCC se obtienen los
mejores resultados con la combinación 0_D_A 39 y 5 gaussianas,
con una tasa de error del 17.59%. Con PLP la mejor combinación
es también 0_D_A 39 con 3 gaussianas, con una tasa de error del
18.37%. La diferencia entre estos datos, obtenidos con
coeficientes derivados y acelerados, es significativa con respecto
al dato obtenido al no emplear estos coeficientes, al ser el extremo
superior de sus intervalos de confianza al 5% ([16.71, 18.48] para
MFCC y [17.48, 19.27] para PLP) mucho menores que el extremo
inferior de los intervalos de confianza de los datos de error sin
estos coeficientes adicionales ([21.41, 23.35] para MFCC y [21.12,
23.04] para PLP).
8.12 SEGMENTACIÓN INTEREMOCIONES CON
SEV
A continuación veremos el experimento de segmentación interemociones
que describimos en el apartado 8.5, con la base de datos SEV. Este
experimento cobra especial interés ahora, ya que en SEV tenemos dos
nuevas emociones, el asco y el miedo. La matriz de resultados de la
segmentación cruzada interemociones es la siguiente:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 216
TIPO BASE: mfcc
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SEV
13,925328 21,392533 20,887992 21,493441 16,750757 17,356206 34,106963 13,118063 19,87891
13,521695 18,163471 19,071645 18,365288 15,136226 17,154390 23,007064 12,512614 17,11655
13,723512 17,053481 18,668012 17,658930 16,347124 17,860747 22,906155 12,916246 17,14178
13,824420 16,750757 17,961655 18,668012 15,237134 18,264379 21,190716 13,319879 16,90212
13,622603 16,952573 18,869828 17,558022 15,539859 18,163471 21,594349 13,521695 16,9778
27,582846 37,621832 33,138402 37,426901 29,629630 31,481481 45,419103 26,315789 33,577
27,485380 33,235867 29,824561 33,333333 28,752437 31,384016 35,867446 25,243665 30,64084
27,680312 31,481481 30,116959 33,723197 28,849903 30,799220 34,113060 26,023392 30,34844
27,095517 30,604288 31,189084 32,846004 28,460039 30,994152 34,307992 26,608187 30,26316
26,608187 30,701754 32,066277 32,748538 28,947368 30,019493 34,113060 25,828460 30,12914
22,032193 29,979879 29,979879 28,973843 23,239437 26,559356 39,839034 21,730382 27,79175
21,227364 25,955734 26,156942 24,346076 22,132797 24,245473 27,565392 19,718310 23,91851
22,535211 25,553320 26,156942 24,949698 22,334004 25,150905 26,257545 19,215292 24,01911
22,334004 25,150905 26,659960 24,245473 22,635815 25,855131 25,553320 18,008048 23,80533
22,837022 26,458753 26,458753 25,050302 22,837022 26,559356 26,458753 18,108652 24,34608
20,119522 27,290837 25,498008 35,956175 21,314741 23,705179 38,844622 18,326693 26,38197
18,525896 23,505976 21,613546 30,179283 20,717131 22,609562 29,183267 16,633466 22,87102
19,123506 23,406375 21,015936 28,585657 19,820717 21,115538 25,697211 14,641434 21,6758
18,426295 21,015936 20,517928 27,689243 19,322709 21,812749 25,099602 14,342629 21,02839
17,529880 21,513944 21,115538 27,290837 19,123506 21,115538 24,800797 15,637450 21,01594
14,530777 21,594349 17,154390 23,612513 15,438951 17,457114 30,373360 12,008073 19,02119
14,732593 16,851665 15,438951 19,273461 15,338042 16,952573 20,080727 12,108981 16,34712
14,429869 16,044400 15,237134 19,374369 15,338042 16,750757 18,768920 11,806256 15,96872
14,934410 16,246216 15,741675 20,282543 15,237134 18,163471 19,475277 12,714430 16,59939
14,530777 16,952573 16,246216 19,878910 15,438951 18,062563 18,768920 12,714430 16,57417
15,539859 22,300706 20,484359 25,529768 18,062563 22,906155 35,116044 14,530777 21,80878
15,943491 18,365288 17,457114 18,869828 16,548940 21,190716 24,318870 13,622603 18,28961
14,934410 16,044400 17,658930 18,869828 17,053481 21,695257 21,695257 14,228052 17,77245
15,338042 16,145308 18,163471 19,979818 16,448032 21,796165 21,594349 14,429869 17,98688
14,833502 16,448032 19,071645 19,979818 17,356206 21,796165 21,695257 14,328961 18,1887
38,212181 40,373281 33,988212 40,962672 33,693517 39,587426 49,705305 29,273084 38,22446
35,166994 35,461690 31,335953 34,479371 31,237721 39,980354 39,390963 27,406680 34,30747
34,282908 35,952849 30,648330 35,461690 32,612967 38,212181 38,408644 27,111984 34,08644
34,577603 36,345776 30,058939 36,247544 31,630648 38,113949 38,015717 26,424361 33,92682
35,658153 35,461690 29,567780 35,461690 31,925344 37,721022 38,212181 26,326130 33,79175
21,796151 28,738418 25,944405 30,648610 22,665716 25,659301 39,130435 19,401283 26,74804
21,026372 24,590164 23,050606 25,630791 21,482537 24,875267 28,567356 18,246614 23,43371
21,040627 23,734854 22,851033 25,602281 21,838917 24,590164 26,913756 18,061297 23,07912
21,012117 23,264433 22,965075 25,787598 21,354241 25,074840 26,543122 18,047042 23,00606
20,883820 23,578047 23,406985 25,502495 21,667855 24,846757 26,600143 18,132573 23,07733
21,07913 24,7071 23,58598 26,5631 21,73745 24,94096 29,4825 18,31735
FPQ_N 16,90212
FPQ_M FPQ_N
FPQ_A
FPQ_C
FPQ_E
23,86885
T
E
S
T
FPQ_S
FPQ_E
FPQ_*
30,99172
24,77616
FPQ_T 34,86739
MFCC
FPQ_M
TRAINING
FPQ_A FPQ_C FPQ_T
18,80928
FPQ_*FPQ_S
17,60343
22,59462
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 217
TIPO BASE: plp
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
COEFICIENTES: _E_D_A (39)
BASE DE DATOS: SEV
16,145308 27,346115 20,787084 42,986882 16,347124 23,915237 48,335015 14,530777 26,29919
15,338042 20,787084 16,750757 32,189707 14,228052 21,392533 26,639758 12,613522 19,99243
15,237134 19,979818 16,548940 29,263370 14,530777 21,796165 26,740666 12,714430 19,60141
15,136226 19,878910 16,851665 30,676085 14,228052 21,493441 25,933401 12,815338 19,62664
15,237134 19,374369 16,952573 30,877901 15,136226 20,887992 25,529768 12,916246 19,61403
29,337232 42,397661 32,846004 52,729045 30,799220 35,380117 61,403509 26,023392 38,86452
29,142300 35,477583 29,532164 45,614035 30,019493 34,892788 39,961014 26,023392 33,83285
27,290448 34,307992 29,044834 42,690058 29,824561 34,015595 37,621832 26,023392 32,60234
26,900585 33,235867 30,019493 43,957115 28,947368 34,307992 37,231969 25,925926 32,56579
27,192982 33,528265 30,701754 44,152047 29,434698 34,210526 36,647173 26,900585 32,846
23,038229 33,702213 26,156942 48,088531 23,440644 31,690141 53,118712 19,517103 32,34406
24,748491 26,156942 23,843058 36,921529 22,132797 30,281690 32,092555 17,907445 26,76056
24,245473 26,156942 23,742455 35,915493 22,032193 30,684105 30,482897 19,315895 26,57193
23,843058 25,251509 24,647887 35,814889 21,931590 30,181087 30,281690 19,617706 26,44618
23,943662 24,346076 24,547284 35,513078 22,132797 30,482897 30,583501 18,209256 26,21982
20,219124 30,776892 25,000000 65,537849 23,406375 29,183267 51,095618 18,824701 33,00548
21,314741 24,302789 20,717131 53,486056 22,709163 26,494024 30,179283 16,932271 27,01693
19,621514 23,705179 20,617530 51,992032 22,211155 25,697211 29,780876 16,135458 26,22012
19,521912 23,605578 22,310757 51,693227 21,812749 25,000000 28,884462 16,235060 26,13297
19,422311 23,207171 20,717131 51,494024 20,617530 26,095618 29,282869 16,035857 25,85906
15,741675 23,915237 16,347124 42,785066 15,741675 22,805247 39,051463 12,209889 23,57467
15,338042 18,970737 14,833502 29,767911 16,145308 22,098890 24,520686 12,108981 19,22301
15,741675 18,768920 13,420787 28,052472 16,044400 20,887992 23,208880 12,411705 18,5671
15,640767 18,567104 14,228052 28,859738 15,539859 20,484359 23,107972 13,420787 18,73108
15,943491 18,768920 14,429869 29,364279 15,943491 21,695257 23,410696 12,714430 19,0338
18,365288 26,841574 19,778002 44,399596 17,961655 26,034309 44,197780 15,237134 26,60192
17,658930 20,887992 16,548940 33,905146 16,952573 24,823411 25,327952 14,228052 21,29162
17,356206 20,181635 17,053481 33,097881 17,255298 24,217962 24,823411 13,824420 20,97629
17,356206 17,759839 17,759839 32,795156 17,053481 23,915237 23,713421 14,833502 20,64834
17,255298 18,869828 18,062563 31,786075 16,649849 23,814329 24,621594 15,237134 20,78708
37,917485 41,944990 36,345776 54,322200 34,970530 42,337917 62,868369 28,290766 42,37475
37,131631 36,345776 31,434185 47,642436 32,514735 40,667976 48,035363 28,978389 37,84381
35,756385 36,542240 33,005894 47,838900 33,988212 39,783890 47,151277 28,192534 37,78242
36,738703 36,738703 32,121807 46,463654 33,497053 40,766208 46,463654 26,620825 37,42633
36,149312 35,854617 32,612967 48,133595 34,086444 40,962672 46,463654 27,308448 37,69646
23,050606 32,501782 25,402708 50,178190 23,321454 30,263721 51,532431 19,301497 31,94405
23,036351 26,215253 22,024234 40,014255 22,181041 28,738418 32,487527 18,474697 26,64647
22,252316 25,744833 21,995723 38,488952 22,352103 28,225232 31,489665 18,446187 26,12438
22,238061 25,089095 22,637206 38,688525 21,938703 28,096935 30,890948 18,560228 26,01746
22,238061 24,932288 22,651461 38,845331 22,081254 28,382038 31,019244 18,545973 26,08696
22,49456 26,82416 22,87574 41,17556 22,30354 28,67711 35,40531 18,60408
FPQ_N 19,82593
FPQ_M FPQ_N
FPQ_*
FPQ_A
FPQ_C
FPQ_E
FPQ_S
T
E
S
T
TRAININGPLP
FPQ_*FPQ_SFPQ_EFPQ_C
27,36386
21,02674
34,1423
27,66851
22,06105
FPQ_A
27,64691
FPQ_T 38,62475
FPQ_T
FPQ_M
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 218
Observando las tablas por columnas podemos realizar los siguientes
comentarios:
Entrenando al segmentador con un sólo conjunto de voces vemos
que los resultados son bastante uniformes: las voces mejor
segmentadas suelen ser la neutra (con un error medio del 16.90%
para MFCC y 19.83% para PLP), la alegre (17.60% y 21.03%) y la
sorprendida (18.81% y 22.06%). Las peor segmentadas en todos
los casos son el asco (30.99% y 34.14%) y la tristeza (34.87% y
38.62%).
Esto nos lleva a la misma conclusión a la que llegamos en el
apartado 8.5, esto es, la emoción mejor segmentada no depende
tanto del tipo de emoción con que entrenemos al segmentador,
como de las propias características de esa emoción, que la hacen
de algún modo mejor o peor "segmentable".
De nuevo podríamos preguntarnos ahora cuál sería entonces el mejor
tipo de voz con el que entrenar a nuestro segmentador según el tipo de
voz que queramos segmentar. Observando la tabla por filas en lugar de
por columnas, vemos que:
El mejor resultado para todas las evaluaciones lo obtenemos
entrenando con el conjunto completo de frases, algo que en
principio podría parecer obvio porque la cantidad de muestras
que utilizamos para entrenar es siete veces la que tenemos si
utilizamos una sola emoción. La diferencia con respecto a
entrenar con la mejor emoción suelta es significativa, al estar
muy por debajo los intervalos de confianza para el entrenamiento
con todas las frases, [17.42, 19.22] para MFCC y [17.70, 19.51]
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 219
para PLP, frente a los intervalos que presenta el entrenamiento
con una sola emoción, [20.13, 22.03] para MFCC y [21.34, 23.27]
para PLP.
Pero si sólo quisiéramos entrenar con una emoción en lugar del
conjunto completo de frases, ¿cuál debería ser la emoción elegida
si no conocemos qué tipo de emoción será la predominante en las
locuciones que queremos segmentar? En este caso, vemos que las
voces neutra y alegre son las que consiguen mejores resultados
de segmentación en media en ambas técnicas, por lo que, de
querer entrenar con una sola emoción, deberíamos elegir una de
éstas. El valor medio de la tasa de error que conseguiríamos con
la voz alegre sería del 21.08% con MFCC y del 22.49% con PLP,
mientras que con la voz neutra sería del 21.74% y 22.30%
respectivamente.
La voz que consigue peores resultados de segmentación en MFCC
es la triste, con una tasa media de error del 29.48%; y en PLP el
miedo, con una tasa media de error del 41.18%.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 220
8.13 SEGMENTACIÓN CON EL LOCUTOR
MASCULINO DE SEV
Hemos desarrollado varios experimentos con las locuciones de la
locutora femenina (Rosa) de SEV, de las cuales disponemos de un
subconjunto de locuciones segmentadas manualmente, y hemos podido
realizar una evaluación de la segmentación automática de las mismas.
Para el locutor masculino de SEV, Joaquín, no podemos realizar una
evaluación numérica al no contar con locuciones segmentadas
manualmente. No obstante, hemos realizado el entrenamiento del
sistema con el conjunto total de locuciones de Joaquín y las hemos
segmentado automáticamente. A continuación hemos elegido algunos
ficheros de salida al azar, y hemos escuchado cada fonema de esta
muestra con el programa Praat. Con este programa visualizamos la
representación de la señal de voz de cada uno de los ficheros, con la
superposición de las marcas resultantes del proceso de segmentación
automático, y escuchamos cada uno de los trozos de audio
comprendidos entre dichas marcas. El resultado nos ha parecido
bastante aceptable ya que por lo general dichos trozos de audio se
correspondían de manera bastante precisa con los fonemas que
trataban de delimitar. No obstante, hemos encontrado también errores
en algunos casos especialmente conflictivos, como por ejemplo en la
transición entre dos vocales en un diptongo, en la transición entre
silencios y principios o finales de palabras, y en las consonantes
oclusivas en las que, debido a sus características, en ocasiones
confunde el principio del fonema con silencios.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 221
8.14 SEGMENTACIÓN CON LA BASE DE DATOS
UPC
Después de haber realizado distintos experimentos con las bases de
datos SES y SEV, utilizaremos ahora una base de datos diferentes a
esas dos. La base de datos UPC comprende dos grupos de frases cortas
y largas; el primero, etiquetado como PA, contiene 151 locuciones,
mientras que el segundo, etiquetado como SE, contiene 506 locuciones.
Todas son con voz neutra. No obstante, y aunque no podamos
experimentar con emociones con esta base de datos, nos servirá para
hacernos una idea de cómo puede funcionar el proceso de segmentación
aplicando nuestro segmentador fonético automático a un conjunto de
locuciones externas. Con los parámetros habituales (6 estados, 6
iteraciones y 5 gaussianas, y los coeficientes _E_D_A) realizaremos tres
experimentos, uno entrenando con el primer grupo de locuciones y
evaluando el otro, el segundo con dichos grupos intercambiados, y uno
tercero entrenando con toda la base de datos y segmentándola toda.
Éstos son los resultados:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 222
TIPO BASE: mfcc (Primera tabla); plp (segunda tabla)
COEFICIENTES: _E_D_A (39)
ESTADOS: 6
ITERACIONES: 6
GAUSSIANAS: 5
BASE DE DATOS: UPC
110,588290 12,875150 11,456666 11,640035
211,077761 12,469988 11,173679 11,573809
311,239379 13,227791 11,353762 11,940311
410,906908 13,047719 11,773954 11,909527
511,825822 12,522509 11,828264 12,058865
11,127632 12,828631 11,517265
111,691910 13,452881 12,311342 12,485378
211,516439 12,597539 11,728219 11,947399
311,211673 12,732593 11,482392 11,808886
410,754525 12,627551 11,539561 11,640546
511,036202 12,154862 11,645324 11,612129
11,242150 12,713085 11,741368
11,82450947
11,89886753
G
A
U
S
S
I
A
N
A
S
G
A
U
S
S
I
A
N
A
S
PLP TRAIN - PA
TEST - SE
TRAIN - SE
TEST - PA
TRAIN - PA y SE
TEST - PA y SE
MFCC TRAIN - PA
TEST - SE
TRAIN - SE
TEST - PA
TRAIN - PA y SE
TEST - PA y SE
EXPERIMENTO
EXPERIMENTO
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
8. Ejecuciones y resultados 223
Los mejores resultados de segmentación se obtienen entrenando el
segmentador con el conjunto de locuciones PA y evaluando el conjunto
SE, mientras que los peores resultados se obtienen con el experimento
contrario. El error mínimo se consigue en MFCC con una sola
gaussiana, alcanzando un 10.59%, mientras que en PLP el error
mínimo se consigue con 4 gaussianas, un 10.75%.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 224
9. CONCLUSIONES Y LÍNEAS FUTURAS DE
INVESTIGACIÓN
Analizando las actividades que hemos desarrollado a lo largo de este
proyecto podemos extraer las conclusiones que detallamos en este
capítulo, así como sugerir posibles líneas futuras de investigación.
9.1 Conclusiones
9.1.1 Conclusiones acerca del sistema
Nuestro sistema presenta una cierta complejidad al contar en su
desarrollo con varios entornos y lenguajes de programación: se
emplean herramientas HTK, scripts de comandos de DOS en
ficheros .bat, programas desarrollados en perl, y un par de
programas desarrollados en lenguaje C.
Todo el desarrollo está basado en herramientas y programas
Open Source, por lo que pueden ser utilizados con libertad.
Nuestro sistema se pone a disposición de quienes pudieran tener
interés en el futuro de realizar trabajos de segmentación
automática o de modificar el código para desarrollos posteriores.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 225
Las bases de datos empleadas en este proyecto, en cambio, sí son
propietarias.
Hemos empleado nuestro sistema para segmentar archivos de voz
en castellano, partiendo de un fichero de audio en formato .wav o
.pcm, y de un fichero .lab que contiene la transcripción fonética
de la locución. Este fichero .lab a su vez fue generado con el
programa graf2fon a partir de un fichero .data que contiene una
lista con el nombre de los ficheros de la base de datos y su
correspondiente texto.
Nuestro sistema se caracteriza por soportar una alta
automatización y permitir una gran configurabilidad. En este
sentido hemos ido añadiendo nuevas funciones al desarrollo de
nuestro sistema, entre las cuales podemos incluir las siguientes:
o Se pueden definir distintas variables en el fichero de
lanzamiento (full.bat) y el sistema genera o modifica de
manera automática los ficheros necesarios para que el
experimento se ejecute con esas variables. De esta manera
se puede cambiar el algoritmo de parametrización, el
número de estados de los modelos, las gaussianas por
estado, el número de iteraciones a realizar, los coeficientes
extra a añadir al proceso (deltas, aceleraciones, cero, de
energía), y si se desea o no realizar normalización cepstral.
El usuario sólo tiene que definir dichas variables una vez y
no tiene que modificar nada más ya que el sistema realizará
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 226
automáticamente las modificaciones necesarias para tener
en cuenta el valor de estas variables.
o Para conseguir esto hemos hecho que los ficheros de
configuración se generen automáticamente a partir de una
plantilla inicial y se tengan en cuenta las variables
definidas por el usuario.
o Del mismo modo hemos modificado los scripts dedicados al
entrenamiento, reconocimiento y segmentación para que
generen automáticamente otros scripts dependientes de las
variables definidas por el usuario. Por ejemplo, el script
encargado del entrenamiento generará en tiempo de
ejecución otro script que tendrá en cuenta el número de
iteraciones deseadas por el usuario y realizará el número
correspondiente de llamadas a la herramienta HVite.
o Igualmente los modelos se generan a partir de un prototipo
vacío con una estructura dependiente del número de
estados y gaussianas que defina el usuario. Los modelos se
irán actualizando automáticamente para todas las
gaussianas desde 1 hasta el número indicado.
o El fichero de lanzamiento full.bat permite definir de manera
muy sencilla una batería de diferentes experimentos, con
diferentes variables deseadas por el usuario, de modo que
se efectúa un barrido de experimentos de manera
desatendida. Esto es especialmente útil teniendo en cuenta
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 227
que en ocasiones un experimento con un conjunto de
entrenamiento muy amplio puede tardar mucho tiempo en
completarse. Al desarrollarlo así hemos conseguido que el
usuario pueda definir un conjunto grande de diferentes
experimentos y pueda dejar la máquina funcionando
durante horas, sabiendo que éstos se irán ejecutando de
manera sucesiva sin que sea necesaria su intervención.
o Se ha automatizado también la generación de la lista y la
red de fonemas, de la gramática empleada y del diccionario
de fonemas. Esto permite que nuestro sistema funcione con
cualquier base de datos que se quiera utilizar
independientemente del tipo de alfabeto o diccionario que
utilice; el sistema aprenderá dicho alfabeto y generará
automáticamente el diccionario, la gramática y la red para
cada ejecución de experimentos. Hemos comprobado esta
robustez frente a distintos alfabetos con los experimentos
que hemos realizado, por ejemplo con SEV, que tenía un
alfabeto diferente a SES y el sistema se adaptó y funcionó
correctamente, y del mismo modo ocurrió con UPC.
o El sistema permite al usuario definir de manera separada
los conjuntos de locuciones a emplear para el
entrenamiento y para la segmentación y posterior
evaluación, de modo que se puede entrenar con un
conjunto de datos y segmentar ésos mismos, o entrenar con
unos datos y segmentar otros diferentes.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 228
o Además el sistema permite definir dos conjuntos diferentes
de evaluación (test1 y test2), es decir, se puede entrenar
con un conjunto de datos y realizar la segmentación de dos
conjuntos diferentes con resultados de la evaluación
calculados por separado para cada uno de ellos. Un posible
uso de esto es cuando se quiere segmentar manualmente
una base de datos que tiene una parte de las locuciones
segmentadas de manera manual; para uno de los conjuntos
de test definiríamos los ficheros marcados manualmente,
de manera que se segmentaran y obtuviéramos la
evaluación de su precisión, y para el otro conjunto
definiríamos el resto de ficheros, de modo que aunque éstos
no puedan ser utilizados para evaluar la bondad del
sistema sí sean también segmentados automáticamente.
Nuestro sistema tiene también la propiedad de ser modular,
existen variables que pueden ser ajustadas para que el sistema
realice reconocimiento y segmentación o sólo uno de los dos
procesos, y también para que realice el entrenamiento de los
modelos o bien se salte esa etapa y realice la segmentación
automática con modelos ya entrenados (si bien esta opción sí
requeriría de un trabajo previo de adaptación de ciertos ficheros y
su colocación en los directorios adecuados para que el sistema los
tenga en cuenta y funcione adecuadamente).
Por último nuestro sistema es en general portable entre
ordenadores con sistema operativo Windows, ya que ha sido
probado con éxito en tres versiones de este SO (Windows 2000,
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 229
Windows XP y Windows 7). Para ser utilizado en otros sistemas
operativos como Linux sí se necesitaría un mayor trabajo de
adaptación del código del sistema.
9.1.2 Conclusiones acerca de los experimentos realizados
En este proyecto hemos ejecutado experimentos sobre una base
de datos, SES, que ya había sido utilizada con anterioridad, pero
en esta ocasión hemos tratado de realizar un conjunto de
experimentos más amplio y exhaustivo. Asimismo, hemos
trabajado con dos bases de datos nuevas: SEV-Rosa, segmentada
manualmente en parte, y UPC, segmentada manualmente por
completo, para las que hemos podido obtener datos de evaluación
del resultado de la segmentación automática. Por último hemos
trabajado con SEV-Joaquín, que no contiene marcas manuales; la
segmentación automática de estos ficheros obtenida con nuestro
sistema se ha utilizado para formar parte del conjunto de datos
de entrenamiento en la competición Albayzín 2012 de síntesis.
Como conclusión común a todos los experimentos realizados con
SES tenemos que el entrenamiento con frases produce peores
resultados en general que el entrenamiento con párrafos, debido a
la menor cantidad de datos de entrada, por lo que en estas
conclusiones resumiremos sólo los resultados obtenidos con
párrafos.
Para empezar comprobamos que utilizar las versiones 3.3 o 3.4 de
HTK no producía resultados diferentes, como esperábamos, ya
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 230
que la nueva versión no introducía cambios en las herramientas
empleadas por nuestro sistema.
Realizamos un experimento para determinar el número óptimo de
estados, iteraciones y gaussianas, obteniendo con SES que el
menor error se da con 6 estados y 6 iteraciones, y un número de
gaussianas de 5 para MFCC y de 2 para PLP. Obtuvimos unos
errores mínimos del 8.01% y del 7.60%, respectivamente, no
siendo la diferencia entre técnicas significativa. Observamos que
hay asimetría de resultados entre bases de datos ya que con SEV
el número óptimo de estados sería 6, el de iteraciones 5 ó 6 con
MFCC y 4 con PLP, y el de gaussianas 5 con MFCC y 10 con PLP.
En el experimento en el que combinamos coeficientes extra de
todas las formas posibles concluimos:
o Que la inclusión únicamente del coeficiente cepstral cero
presenta en general mejores resultados que la del
coeficiente de energía, y que incluir ambos a la vez mejora
aún más los resultados.
o Que la inclusión de coeficientes Delta es mejor que la
combinación anterior, y que la inclusión además de los
coeficientes de aceleración mejora aún más los resultados.
o Que en cambio los coeficientes de tercera derivada
empeoran los resultados y ralentizan enormemente el
proceso.
o Que la combinación de coeficientes Delta y de aceleración
con los coeficientes cero y de energía resulta ser mejor tan
sólo en determinados casos, no en todos. Con 0_D_A
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 231
llegamos a alcanzar un nivel de error de 7.79% con MFCC y
7.43% con PLP.
o Estas conclusiones obtenidas con SES son básicamente las
mismas que obtenemos con SEV, con algunas diferencias;
por ejemplo, con SEV la inclusión de coeficientes de
aceleración no mejora los resultados en todos los casos.
Hicimos un experimento para comprobar si era mejor entrenar
con frases o párrafos y sus diferentes combinaciones en SES y
llegamos a la conclusión de que los mejores datos de
segmentación se producen al segmentar párrafos, y que los
mejores grupos de entrenamiento son toda la base de datos, todos
los párrafos, y frases y párrafos sin segmentar, y dado que esta
última combinación alcanzaba resultados similares a los
anteriores y que el tiempo de proceso se reducía a la mitad, es la
que decidimos emplear para la mayoría de nuestros experimentos.
Realizamos un experimento de segmentación interemociones, es
decir, cruzamos cada una de las emociones como grupos de
entrenamiento y evaluación. Hay que decir ante todo que los
resultados obtenidos dependen de muchos factores, como el
locutor y la base de datos, por lo que las afirmaciones que se
hagan se entenderán sujetas a estas condiciones. Y se debe tener
en cuenta que el considerar como error las fronteras que excedan
en 20 ms de las marcadas manualmente penaliza a las emociones
con un ritmo más lento, al ser más probable que incurran en esta
desviación. Considerando todo esto, algunas conclusiones que
obtuvimos fueron:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 232
o Para segmentar frases con emoción es mejor entrenar el
segmentador con frases también con emoción que
entrenarlo con frases neutras.
o La voz neutra es la mejor segmentada, llegando a alcanzar
un error mínimo del 5% cuando se entrena con voces
tristes en MFCC. La peor segmentada en todos los casos es
la voz triste.
o Si sólo quisiéramos entrenar con una emoción en lugar del
conjunto completo de frases, la voz de tristeza debería ser la
elegida. Con la alegre también se consiguen buenos
resultados.
o La voz neutra como entrenamiento es la que consigue
peores resultados de segmentación en todos los casos, por
lo que confirmamos la idea de que para segmentar párrafos
con emoción es mejor entrenar el segmentador con párrafos
también con emoción que entrenarlo con frases neutras.
o Estas conclusiones son válidas con SES pero no con SEV.
Con esta base de datos vimos que las voces que consiguen
mejores resultados de segmentación son la neutra y la
alegre, mientras que las que peor sirven para entrenar al
sistema son la tristeza y el miedo.
Vimos que realizar la normalización cepstral de la media y la
varianza mejoraba en general los resultados, siendo la mejora
más acusada con la técnica MFCC que con la PLP, debido a las
características de ambas técnicas. Llegamos a obtener un 7.73%
de error con MFCC y un 7.13% con PLP.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 233
Hicimos varios experimentos modificando algunas de las variables
definidas en los ficheros de configuración. El primero de ellos fue
variar el número de canales (o bandas de energía). Vimos que en
MFCC los resultados óptimos se obtenían con entre 12 y 26
canales, obteniendo con éstos últimos un error mínimo del
7.17%. En PLP el número óptimo estaba entre 16 y 20, llegando a
obtener con 16 canales un error mínimo del 7.04%. No hay
diferencias significativas al aumentar o disminuir un poco el
número de canales, éstas sólo se obtienen si se toman valores
extremos de esta variable.
Variando el desplazamiento de tramas y el tamaño de la ventana
de análisis confirmamos que los valores usualmente empleados
(10 y 25 ms) son los óptimos, y que variar estos datos, a la baja y
sobre todo al alza, produce empeoramientos que sí son
significativos. Vimos también que al disminuir el desplazamiento
de tramas y el tamaño de ventana a la mitad se mejora la
desviación media de las fronteras marcadas incorrectamente por
el segmentador con respecto a las reales, ya que mejora la
resolución, pero al mismo tiempo aumenta el número de
desviaciones mayores de 20 ms, lo que hace que aumente el
porcentaje de error de la segmentación efectuada.
Realizamos otro experimento consistente en introducir un filtrado
de diferentes tipos (paso bajo, alto y banda) y a diferentes
frecuencias, y vimos que tan sólo la inclusión del filtro paso bajo
con frecuencia de corte superior a 7800 Hz parecía mejorar un
poco los resultados del segmentador. En general los mejores
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 234
resultados se daban sin filtrado, lo que se debe a que la base de
datos SES tiene unas muy buenas condiciones de ruido y no
necesita que éste sea filtrado. También simulamos un canal
telefónico que empeoraba el rendimiento del segmentador entre
2.65 y 4.8 puntos porcentuales, y pudimos observar que hay
mucha más información en la señal de voz a menos de 300 Hz
que en la banda de 3400 Hz para arriba.
Después de realizar numerosos experimentos con SES y con SEV-
Rosa, segmentamos la base de datos SEV-Joaquín y evaluamos al
azar varios ficheros estudiándolos con Praat. El resultado nos
pareció bastante aceptable ya que por lo general los trozos de
audio se correspondían de manera bastante precisa con los
fonemas que trataban de delimitar, si bien encontramos algunos
errores en casos concretos como en la transición entre dos
vocales en un diptongo, en la transición entre silencios y
principios o finales de palabras, y en las consonantes oclusivas.
Por último segmentamos la base de datos UPC, con locuciones
sólo neutras, y alcanzamos unos errores mínimos del 10.59% con
MFCC, y del 10.75% con PLP.
A lo largo de los distintos experimentos hemos visto que
obtenemos mejores tasas de error con SES (en torno al 7-8%) que
con UPC (más del 10%) y con SEV-Rosa (en torno al 17-18%).
Esto puede depender de muchos factores relativos a la propia
base de datos, entre los que puede encontrarse la corrección del
marcaje manual o las características de la voz del locutor y su
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 235
naturalidad al realizar las grabaciones. Se puede observar
también que las voces de mujer (SEV-Rosa y UPC) han obtenido
peores resultados que la voz masculina de SES, y sabemos que en
general es más difícil realizar el reconocimiento de una voz de
mujer que una de hombre, por lo que quizá este efecto se
produzca también en el caso de la segmentación, aunque esto no
deja de ser una hipótesis.
9.2 Líneas futuras de investigación
Entre las tareas que podrían realizarse para profundizar en la línea
abierta por este proyecto podríamos enumerar las siguientes:
Mejorar el programa graf2fon para tener en cuenta el efecto de
coarticulación entre palabras (por ejemplo, que se fundieran una
palabra que termina por a con la siguiente que empieza por a).
Segmentar la base de datos UPC con emociones tanto para la
locutora como para el locutor (a la hora de hacer nuestros
experimentos sólo contábamos con locuciones neutras con voz
femenina).
Experimentar con modelos independientes de locutor, o probar
con modelos independientes, realizar adaptación y comprobar si
se mejora la segmentación automática. En [Pérez 2008] se
comprobó que el reconocimiento sí mejoraba tras realizar
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
9. Conclusiones y líneas futuras de investigación 236
adaptación, por lo que sería interesante comprobar si se produce
también una mejora de la segmentación o no.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
10. Bibliografía 237
10. BIBLIOGRAFÍA
1. [Álvarez 2001] Agustín Álvarez Marquina: "Apuntes de
Fundamentos del Reconocimiento Automático de la Voz". Departamento
de Arquitectura y Tecnología de Sistemas Informáticos. Facultad de
Informática. Madrid. UPM. 2001.
2. [Young 2006] S. Young, G. Evermann, M. Gales, y otros: "The HTK
Book (for HTK Version 3.4)". Cambridge University Engineering
Department. Diciembre de 2006.
3. [Martínez 1998] Gerardo Martínez Salas: "Adaptación de un
modelo de duraciones y entonación para sintetizar habla con emociones".
Proyecto fin de carrera. ETSI Telecomunicación. Madrid. UPM. 1998.
4. [González 2000] Mario González del Campo Muñoz: "Síntesis de
voz por selección de unidades. Aplicación a síntesis de dominio
restringido". Proyecto fin de carrera. ETSI Telecomunicación. Madrid.
UPM. 2000.
5. [Alcázar 2007] Rosario Alcázar Prior: "Desarrollo de un conversor
texto-voz con emociones y aplicación a la interacción hablada en entornos
inteligentes". Proyecto fin de carrera. ETSI Telecomunicación. Madrid.
UPM. 2007.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
10. Bibliografía 238
6. [Izard 1971] C. Izard: "The face of emotion". Appleton-Century-
Crofts. New York. 1971.
7. [Scherer 2001] K. R. Scherer: "Appraisal considered as a process
of multilevel sequential checking". In "Appraisal processes in emotion:
theory, methods, research" (eds Scherer K. R., Schorr A., Johnstone T.),
pp. 92–120. Oxford University Press. New York. 2001.
8. [Reeve 1994] J. M. Reeve: "Emoción y motivación". McGraw-Hill.
1994.
9. [Fernández 2003] E. G. Fernández Abascal, M. P. Jiménez
Sánchez, M. D. Martín Díaz: "Emoción y motivación. La adaptación
humana". Centro de Estudios Ramón Areces. 2003.
10. [Scherer 1979] K. R. Scherer: “Personality markers in speech”.
Cambridge University Press. 1979.
11. [Russell 1980] J. A. Russell: "A circumplex model of affect". Vol.
39, nº 6. 1161-1178. 1980.
12. [Carrillo 2007] R. Carrillo Aguilar: "Diseño y manipulación de
Modelos Ocultos de Markov, utilizando herramientas HTK. Una tutoría".
Ingeniare, revista chilena de ingeniería, vol. 15, nº 1, pp. 18-26. 2007.
13. [Microsoft 2012] Microsoft: "Windows XP Professional Product
Documentation. Command-line reference."
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
10. Bibliografía 239
http://www.microsoft.com/resources/documentation/windows/xp/all/
proddocs/en-us/ntcmds.mspx. 2012
14. [Equinoccial 2010] Unidad Educativa Equinoccial: "Apuntes sobre
la shell de MS-DOS". http://www.equinoccial.edu.ec. Ecuador. 2010.
15. [Perldoc 2012] "Official documentation for the Perl programming
language". http://perldoc.perl.org
16. [Lizama 2012] Uriel Lizama: “Tutoriales Perl en español”.
http://perlenespanol.com
17. [Pérez 2008] Nuria Pérez Magariños: "Mejora de la interfaz vocal de
control de un robot autónomo móvil. Adaptación acústica y generación
supervisada de mapas". Proyecto fin de carrera. ETSI Telecomunicación.
Madrid. UPM. 2008.
18. [Montero 2003] Juan Manuel Montero Martínez: "Estrategias para
la mejora de la naturalidad y la incorporación de variedad emocional a la
conversión texto a voz en castellano". Tesis doctoral. ETSI
Telecomunicación. Madrid. UPM. 2003.
19. [Barra-Chicote 2008] R. Barra-Chicote, J.M. Montero, J. Macias-
Guarasa, S.L. Lufti, J.M. Lucas, F. Fernandez-Martinez, L.F. Dharo, R.
San-Segundo, J. Ferreiros, R. Cordoba, M. Pardo: "Spanish Expressive
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
10. Bibliografía 240
Voices: corpus for emotion research in Spanish". In proceedings of 6th
international conference on Language Resources and Evaluation.
Marrakech (Morocco). 2008.
20. [Barra-Chicote 2012] Roberto Barra-Chicote: Website dedicado a
la base de datos SEV - http://lorien.die.upm.es/~barra/voices/
21. [Torre 2003] D. Torre Toledano, L. A. Hernández Gómez, L.
Villarrubia Grande: "Automatic Phonetic Segmentation". IEEE
Transactions on speech and audio processing, Vol 11. Nº 6. Nov 2003.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
11. Pliego de condiciones 241
11. PLIEGO DE CONDICIONES
11.1 Condiciones generales
La obra será realizada bajo la dirección técnica de un Ingeniero de
Telecomunicación y el número de programadores necesarios.
La ejecución material de la obra se llevará a cabo por el procedimiento
de contratación directa. El contratista tiene derecho a obtener, a su
costa, copias del pliego de condiciones y del presupuesto. El ingeniero,
si el contratista lo solicita, autorizará estas copias con su firma,
después de confrontarlas.
Se abonará al contratista la obra que realmente se ejecute, de acuerdo
con el proyecto que sirve de base para la contrata.
Todas las modificaciones ordenadas por el ingeniero-director de las
obras, con arreglo a sus facultades, o autorizadas por la superioridad,
serán realizadas siempre que se ajusten a los conceptos de los pliegos
de condiciones y su importe no exceda la cifra total de los presupuestos
aprobados.
El contratista, o el organismo correspondiente, quedan obligados a
abonar al ingeniero autor del proyecto y director de obra, así como a
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
11. Pliego de condiciones 242
sus ayudantes, el importe de sus respectivos honorarios facultativos por
dirección técnica y administración, con arreglo a las tarifas y honorarios
vigentes.
Tanto en las certificaciones de obra como en la liquidación final, se
abonarán las obras realizadas por el contratista a los precios de
ejecución material que figuran en el presupuesto, por cada unidad de
obra.
En el caso excepcional en el que se ejecute algún trabajo no consignado
en la contrata, siendo admisible a juicio del ingeniero-director de las
obras, se pondrá en conocimiento del organismo correspondiente,
proponiendo a la vez la variación de precios estimada por el ingeniero.
Cuando se juzgue necesario ejecutar obras que no figuren en el
presupuesto de la contrata, se evaluará su importe a los precios
asignados a ésta u otras obras análogas.
Si el contratista introduce en el proyecto, con autorización del
ingeniero-director de la obra, alguna mejora en su elaboración, no
tendrá derecho sino a lo que le correspondería si hubiese efectuado la
obra estrictamente contratada.
El ingeniero redactor del proyecto se reserva el derecho de percibir todo
ingreso que en concepto de derechos de autor pudiera derivarse de una
posterior comercialización, reservándose además el derecho de
introducir cuantas modificaciones crea convenientes.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
11. Pliego de condiciones 243
11.2 Condiciones generales a todos los programas
• Estarán realizados en lenguajes estándar.
• Se entregarán tres copias de los listados para cada programa o
subrutina.
• Los programas y subrutinas deberán ir documentados, indicando
brevemente su función, entradas y salidas, y cualquier otra información
de interés.
• Se entregará, junto con los programas, un manual de uso e
instalación.
11.3 Condiciones generales de prueba
Los programas y subrutinas que se entreguen deberán funcionar sobre
un ordenador PC o compatible con microprocesador Intel Core i7 1600
MHz o superior y con, al menos, 6 GB de RAM. Se ejecutarán bajo
sistema operativo Windows 7 Home Premium o superior, en entorno
local.
Solamente se aceptarán los programas si funcionan correctamente en
todas sus partes, rechazándose en caso contrario. Si, por causas
debidas al contratista, los programas no funcionaran bajo las
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
11. Pliego de condiciones 244
condiciones expuestas anteriormente, la empresa contratante se
reservará el derecho de rescindir el contrato.
11.4 Recursos materiales
• Ordenador PC compatible, Intel Core i7 1600 MHz, 6 GB de
memoria RAM y 500 GB de disco duro.
• Altavoces.
• Tarjeta de red Ethernet.
11.5 Recursos lógicos
• Sistema operativo Windows 7 Home Premium.
• Compilador Microsoft Visual C++ 6.0
• Office 2007.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 245
12. PRESUPUESTO
El presupuesto consta de cuatro apartados: el cálculo del presupuesto
de ejecución material, el presupuesto de ejecución por contrata que
incluirá el cálculo de los gastos generales y del beneficio industrial, el
coste de la dirección de obra y, por último, el presupuesto total, suma
de todos los conceptos anteriores.
Todas las cantidades que aparecen están contempladas en Euros.
12.1 Presupuesto de ejecución material
Se incluye en este presupuesto los gastos en herramientas empleadas,
tanto hardware como software, así como la mano de obra.
En la ejecución de este proyecto han participado las siguientes
personas:
• Un Ingeniero Superior de Telecomunicación, encargado del
desarrollo y redacción del proyecto, así como de la obtención e
interpretación de los resultados.
• Un mecanógrafo, encargado de la escritura del proyecto en un
procesador de textos, elaboración de gráficos, etc.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 246
12.1.1 Relación de salarios
Partimos del sueldo base mensual de cada una de las personas que han
intervenido en el proyecto para calcular el sueldo base diario respectivo.
A éste habrá que añadir las obligaciones sociales.
Sueldo base
mensual Sueldo base
diario Gratificación
Sueldo total diario
Ingeniero
Superior de Telecomunicación
1.334,59 44,49 6,07 50,56
Mecanógrafo
632,49 21,08 5,67 26,76
12.1.2 Relación de obligaciones sociales
CONCEPTO Vacaciones anuales retribuidas 8,33%
Indemnización por despido 1,60%
Seguro de accidentes 7,00%
Subsidio familiar 2,90%
Subsidio de vejez 1,80%
Abono días festivos 12,00%
Días de enfermedad 0,75%
Plus de cargas sociales 4,25%
Otros conceptos 15,00%
TOTAL 53,63%
12.1.3 Relación de salarios efectivos totales
Sueldo diario Obligaciones
sociales Total/día
Ingeniero Superior de
Telecomunicación
50,56 27,11 77,67
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 247
Mecanógrafo
26,76 14,35 41,1
12.1.4 Coste de la mano de obra
Para calcular el coste de la mano de obra basta con aplicar el número
de días trabajado por cada persona por el salario respectivo.
Días
Salario(€)/día
Total (€)
Ingeniero Superior
de Telecomunicación
330 77,67 25.630,7
Mecanógrafo
40 41,1 1.644,13
TOTAL COSTE DE MANO DE OBRA
27.274,83
12.1.5 Coste total de materiales
Para la ejecución de este proyecto se han empleado un ordenador
personal tipo PC basado en el microprocesador Intel Core i7 y una
impresora HP Officejet 6500 Wireless, para la elaboración de toda la
documentación necesaria. También se incluyen los gastos de material
fungible y de oficina.
Los costes referentes a los materiales utilizados se reflejan en la
siguiente tabla:
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 248
Precio (€) Uso (meses)
Amortización (años)
Total (€)
1 ordenador personal para diseño
1.502,53 12 5 300,51
Compilador Microsoft Visual C++
420,71 12 5 84.14
Impresora HP Officejet 6500 780,71 1 5 13,01
Placa de red Ethernet 120,2 - - 120,2
Material fungible y de oficina 120,2 - - 120,2
TOTAL GASTO DE MATERIAL 638,06
12.1.6 Importe total del presupuesto de ejecución
material
El presupuesto de ejecución material se calcula basándose en los costes
de mano de obra y los costes materiales.
CONCEPTO IMPORTE (€)
COSTE TOTAL DE MATERIALES
638,06
COSTE TOTAL DE MANO DE OBRA
27.274,83
TOTAL PRESUPUESTO DE EJECUCIÓN MATERIAL
27.912,89
12.2 Importe de ejecución por contrata
Al importe de ejecución material hay que añadirle los siguientes
conceptos:
CONCEPTO
IMPORTE (€)
GASTOS GENERALES Y FINANCIEROS (22%)
6.140,83
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 249
BENEFICIO INDUSTRIAL (6%)
1.674,77
TOTAL G.G. Y B.I.
7.815,6
Resultando:
IMPORTE DE EJECUCIÓN POR CONTRATA
35.728,49
12.3 Honorarios Facultativos
Este proyecto se encuadra dentro del grupo XII: Aplicaciones de la
Electrónica y Aparatos de Telecomunicación. Si se aplican las tarifas
correspondientes sobre el importe del presupuesto de ejecución material
se tiene:
Hasta 30.050,61 (Coef. 1,0 sobre 7%)
2.103,54
Hasta 60.101,21 (Coef. 0,9 sobre 7%)
359,16
TOTAL HONORARIOS FACULTATIVOS (€)
2.462,7
Los honorarios que hay que aplicar son los correspondientes tanto por
redacción del proyecto como por dirección, por lo que el total de
honorarios es:
Honorarios de Ingeniero por redacción
2.462,7
Honorarios de Ingeniero por dirección
2.462,7
TOTAL HONORARIOS 4.925,4
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
12. Presupuesto 250
12.4 Importe Total del Proyecto
El Importe Total del Proyecto es la suma del Importe de Ejecución por
Contrata, los Honorarios de Redacción y los Honorarios de Dirección, al
cual habrá que aplicar el 18% de IVA.
EJECUCIÓN POR CONTRATA
35.728,49
HONORARIOS
4.925,40
IMPORTE
40.653,89
IVA (18%)
7.317,70
IMPORTE TOTAL
47.971,59
El importe total del presente proyecto asciende a la cantidad de
CUARENTA Y SIETE MIL NOVECIENTOS SETENTA Y UN euros CON
CINCUENTA Y NUEVE céntimos.
EL INGENIERO AUTOR DEL PROYECTO
Fdo: Juan Carmona Mariscal
MADRID, JULIO DE 2012
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 251
ANEXO 1. PROGRAMAS AJENOS
EMPLEADOS
En el capítulo dedicado a la implementación del segmentador fonético
automático describimos detalladamente el código de los scripts que
hemos desarrollado para hacer funcionar dicho sistema. En
determinados momentos del proceso hicimos uso de programas
desarrollados por terceros, dejando indicado en ese capítulo la función
que tenían. En este anexo incluimos el código de dichos programas,
donde se deja constancia de la autoría de los mismos.
A.1.1 Macro.exe
#include "stdio.h"
/*******************************************************************/
/****************** Macro file Generator ************************/
/*******************************************************************/
/* */
/* This program takes the vFloors file that is created */
/* after invoking HCompV and generates a Macro file */
/* required for further HMM training */
/* */
/******************************************************************/
/* Title : macro_gen.c */
/* Author: Gary Lee */
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 252
/* Date: 30 March 1998 */
/* Version: 1 */
/* Change History: */
/* Author of modifications: Günter Hirsch / Ericsson */
/* - 2 additional input parameters defined to achieve */
/* a more global usability */
/* - <VECSIZE> and <PARAMETER_TYPE> */
/* - output file name also input parameter */
/* */
/******************************************************************/
/*===========================================================*/
/* Copyright(c) 1998 MOTOROLA LAND MOBILE PRODUCTS SECTOR */
/* Jays Close, Viables Ind. Estate */
/* Basingstoke, England */
/*---------------------------------------------------------------------------------------------------------------*/
/* ALL RIGHTS RESERVED: */
/* No part of this software may be reproduced in any form */
/* or by any means or used to make any derivative work */
/* (such as transformation or adaptation) without the */
/* authorisation of the relevant authority in MOTOROLA'S LAND */
/* MOBILE PRODUCTS SECTOR. */
/*===========================================================*/
int main(int argc, char *argv[])
{
FILE *fp;
FILE *outfile;
char c;
if(argc != 5)
{ printf("Usage: %s VECSIZE PARAMETER_TYPE infile outfile\n", argv[0]);
exit(1);
}
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 253
if ( (fp = fopen(argv[3], "r")) == NULL)
{
fprintf(stderr, "cannot open file %s!\n", argv[3]);
exit(-1);
}
if ( (outfile = fopen(argv[4], "w")) == NULL)
{
fprintf(stderr, "cannot open file %s!\n", argv[4]);
exit(-1);
}
fprintf(outfile, "~o\n<STREAMINFO> 1 %s\n", argv[1]);
fprintf(outfile, "<VECSIZE> %s\n", argv[1]);
fprintf(outfile, "<NULLD>\n<%s>\n", argv[2]);
while((c=getc(fp))!=EOF)
fprintf(outfile,"%c",c);
fclose(fp);
fclose(outfile);
return(0);
}
A.1.2 CopiaModelos.exe
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define FALSE 0
#define TRUE 1
//SES
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 254
#define NELEMS(a) (sizeof(a)/sizeof(a[0]))
/*******************************************************************/
/****************** Model file Generator ************************/
/*******************************************************************/
/* */
/* This program takes the hmmdef file and */
/* generates a HMM Model file */
/* */
/* */
/*******************************************************************/
/* Title : models_gen.c */
/* Author: Gary Lee */
/* Date: 27 March 1998 */
/* Version: 1 */
/* Change History: version 1.1 7th July 1998 */
/* cure of seg fault on sun */
/* char c, entry[9]; -> char c, entry[90]; */
/* */
/*******************************************************************/
/* */
/* The execution of htk's HCompV cmd generates a */
/* file (hmmdef) that gives the initial training */
/* parameters; which is the same for each digit. */
/* However, as we model sil differently from the */
/* rest of the digits. We have to create a new */
/* model file. model_gen.c creates a models file */
/* with sil explictly defined to a 5 states, 10 */
/* mixture model. */
/*******************************************************************/
/*===========================================================*/
/* Copyright(c) 1998 MOTOROLA LAND MOBILE PRODUCTS SECTOR */
/* Jays Close, Viables Ind. Estate */
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 255
/* Basingstoke, England */
/*---------------------------------------------------------------------------------------------------------------*/
/* ALL RIGHTS RESERVED: */
/* No part of this software may be reproduced in any form */
/* or by any means or used to make any derivative work */
/* (such as transformation or adaptation) without the */
/* authorisation of the relevant authority in MOTOROLA'S LAND */
/* MOBILE PRODUCTS SECTOR. */
/*===========================================================*/
#define MAX_NUM_FON 1000
#define MAX_LONG_FON 100
char listaFonemas[MAX_NUM_FON+1][MAX_LONG_FON];
int CargaFonemas(char *fon)
{
FILE *fp=fopen(fon,"rt");
int cont=0;
int tieneComaInicial=0;
if (fp==NULL)
{
printf("falta el fichero %s\n",fon);
exit(1);
}
while (feof(fp)==0)
{
char linea[MAX_LONG_FON];
int j,k;
if (fgets(linea,MAX_LONG_FON,fp)==NULL)
break;
for (j=0,k=0; linea[k]!=0; k++)
{
if (linea[k]!='"' && linea[k]!=' ' && linea[k]!=',' && linea[k]!='\n' && linea[k]!='\r')
listaFonemas[cont][j++]=linea[k];
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 256
}
listaFonemas[cont][j]=0;
cont++;
listaFonemas[cont][0]=0;
}
fclose(fp);
if (strcmp(listaFonemas[0],"COMA")==0)
tieneComaInicial=1;
return tieneComaInicial;
}
void fonemaImprimir(char *fon,FILE *fp)
{
int i;
for (i=0; i<strlen(fon); i++)
{
if (fon[i]=='\'' || fon[i]=='/')
fprintf(fp,"\\");
fprintf(fp,"%c",fon[i]);
}
}
int main(int argc, char *argv[])
{
int CAT=FALSE, i;
FILE *fp;
FILE *outfile;
char c, entry[90];
int tieneComaInicial=CargaFonemas("..\\labels\\fonemas.c");
if(argc !=6)
{ printf("Usage: infile outfile phon_network.syn monophones.dct modo\n");
exit(1);
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 257
}
outfile = fopen(argv[2], "w");
if (outfile==NULL)
{
printf("no se puede abrir %s",argv[2]);
exit(1);
}
for (i=1; listaFonemas[i-1][0]!=0; i++)
{
fp = fopen(argv[1], "r");
if (fp==NULL)
{
printf("no se puede abrir %s",argv[1]);
exit(1);
}
CAT=FALSE;
while(CAT==FALSE)
{
fscanf(fp,"%s",entry);
if(strncmp(entry,"\"hmmdef\"",8)==0||
strncmp(entry,"\"proto",6)==0)
{
fprintf(outfile,"~h \"%s\"",listaFonemas[i-1]);
CAT=TRUE;
}
}
if(CAT==TRUE)
{
while((c=getc(fp))!=EOF) fprintf(outfile,"%c",c);
fclose(fp);
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 258
}
else
MessageBox(NULL,"falta la sección hmmdef o
proto",argv[1],MB_OK);
}
// ATAJO:
// .syn
outfile = fopen(argv[3], "wt");
if (outfile==NULL)
{
printf("no se puede abrir %s",argv[3]);
exit(1);
}
fprintf(outfile,"$phon = ");
if (strcmp(argv[5],"IDENTIFICATION")==0)
{
fonemaImprimir(listaFonemas[tieneComaInicial],outfile); // SALTA LA COMA
for (i=tieneComaInicial+1; listaFonemas[i][0]!=0; i++)
{
fprintf(outfile," | ");
fonemaImprimir(listaFonemas[i],outfile);
}
if (tieneComaInicial)
fprintf(outfile,";\n(\nCOMA $phon COMA\n)\n");
else
fprintf(outfile,";\n(\n$phon\n)\n");
}
else
{
fonemaImprimir(listaFonemas[0],outfile);
for (i=1; listaFonemas[i][0]!=0; i++)
{
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 259
fprintf(outfile," | ");
fonemaImprimir(listaFonemas[i],outfile);
}
fprintf(outfile,";\n(\n< $phon >\n)\n");
}
fclose(outfile);
//.dct
outfile = fopen(argv[4], "wt");
if (outfile==NULL)
{
printf("no se puede abrir %s",argv[4]);
exit(1);
}
for (i=0; listaFonemas[i][0]!=0; i++)
{
fonemaImprimir(listaFonemas[i],outfile);
fprintf(outfile," ");
fonemaImprimir(listaFonemas[i],outfile);
fprintf(outfile,"\n");
}
fclose(outfile);
return(0);
}
A.1.3 Score_mono.exe
/****************************************************************************/
#ifdef DOCUMENTATION
.MODULE score_mono.c
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 260
.LIBRARY score
.TYPE programa
.DESCRIPTION
.SYSTEM Unix (SunOS 4.1.3)
.APPLICATION score
.ARGUMENTS Ver score
.NARRATIVE
.RETURNS == 0 Si no hubo error
< 0 En caso contrario
.AUTHOR AGA Ascensión Gallardo Antolín
.COMMENTS
.LANGUAGE C
.ENDOC END DOCUMENTATION
#endif /* #ifdef DOCUMENTATION */
/****************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include "libscore.h"
int main(int argc, char *argv[])
{
int i, j, err = 0;
char alphName[MAX_PATH];
char mlfNameRef[MAX_PATH];
char mlfNameDec[MAX_PATH];
char resultsName[MAX_PATH];
TAlph alph; /* Alphabet */
TLabelSeg *labelRef; /* Reference labels */
TLabelSeg *labelDec; /* Decoded labels */
int nFilesRef = 0, nFilesDec = 0;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 261
TTransition *segResults;
float tol[5] = {5*1e-3, 10*1e-3, 15*1e-3, 20*1e-3, 25*1e-3}; /* Tolerance */
float trans_errors, total_errors, total_instances;
/* Configuration options */
if (argc < 5)
{
printf("USAGE: score alphabet ref_labels dec_labels results_file");
err = -1;
return err;
}
strcpy (alphName, argv[1]);
strcpy (mlfNameRef, argv[2]);
strcpy (mlfNameDec, argv[3]);
strcpy (resultsName, argv[4]);
/* Read the alphabet */
//alph = (TAlph *)malloc(sizeof(TLabelSeg));
if ((err = ReadAlphabet(alphName, (TAlph *)&alph)) != 0)
{
printf("Cannot read the alphabet file %s\n", alphName);
err = -2;
return err;
}
printf("Alphabet %s contains %d phonemes\n", alphName, alph.nPhons);
/* Read the number of files in the reference label file */
if ((nFilesRef = ReadNumFiles(mlfNameRef)) <= 0)
{
printf("Cannot read number of files from file %s\n", mlfNameRef);
err = -3;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 262
return err;
}
printf ("The number of reference label files is %d\n", nFilesRef);
/* Alloc memory for reference labels */
labelRef = (TLabelSeg *)malloc(sizeof(TLabelSeg)*nFilesRef);
if (labelRef == NULL)
{
printf("Avalaible memory exhausted for labels in %s\n", mlfNameRef);
err = -4;
return err;
}
/* Read the reference labels */
if ((err = LoadLabels(mlfNameRef, labelRef, alph)) != 0)
{
printf("Cannot read from file %s\n", err);
err = -5;
return err;
}
/* Read the number of files in the decoded label file */
if ((nFilesDec = ReadNumFiles(mlfNameDec)) <= 0)
{
printf("Cannot read number of files from file %s\n", mlfNameDec);
err = -6;
return err;
}
printf ("The number of decoded label files is %d\n", nFilesDec);
/* Alloc memory for decoded labels */
labelDec = (TLabelSeg *)malloc(sizeof(TLabelSeg)*nFilesDec);
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 263
if (labelDec == NULL)
{
printf("Avalaible memory exhausted for labels in %s\n", mlfNameDec);
err = -7;
return err;
}
/* Read the reference labels */
if ((err = LoadLabels(mlfNameDec, labelDec, alph)) != 0)
{
printf("Cannot read from file %s\n", err);
err = -8;
return err;
}
/* Alloc memory for the structure containing the evaluation results */
segResults = (TTransition *)malloc(sizeof(TTransition)*alph.nPhons*alph.nPhons);
if (segResults == NULL)
{
printf("Avalaible memory exhausted for the structure with the evaluation
results\n");
err = -9;
return err;
}
/* Evalution of the time boundaries for the five tolerances considered */
for (i = 0; i < 5; i++)
{
if ((err = EvaluationBoundaries(nFilesRef, labelRef, nFilesDec, labelDec,
alph, tol[i], segResults)) != 0)
{
printf("Error in the evaluation process per tolerances\n");
err = -10;
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 264
return err;
}
total_errors = 0;
total_instances = 0;
printf("\nSegmentation results\n\n");
for (j = 0; j < alph.nPhons*alph.nPhons-1; j++)
{
if (segResults[j].nInstances)
{
printf("Instances for transition %s-%s = %d\n",
segResults[j].nameTransition[0],
segResults[j].nameTransition[1], segResults[j].nInstances);
trans_errors = segResults[j].errorMarks[0]+segResults[j].errorMarks[1];
printf("Total errors: Perc = %f\n",
(float)(trans_errors)/(float)segResults[j].nInstances*100);
if (trans_errors)
{
printf("Right errors: Perc = %f ",
(float)segResults[j].errorMarks[0]/(float)trans_errors*100);
if (segResults[j].errorMarks[0])
printf("Average = %f ms\n",
(float)segResults[j].shiftMarks[0]*1e3/(float)segResults[j].errorMarks[0]);
else
printf("Average = 0.0 ms\n");
printf("Left errors: Perc = %f ",
(float)segResults[j].errorMarks[1]/(float)trans_errors*100);
if (segResults[j].errorMarks[1])
printf("Average = %f ms\n",
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 265
(float)segResults[j].shiftMarks[1]*1e3/(float)segResults[j].errorMarks[1]);
else
printf("Average = 0.0 ms\n");
} /* if (trans_errors) */
printf("\n");
total_instances += segResults[j].nInstances;
total_errors += trans_errors;
} /* if (segResults[j].nInstances) */
} /* for (j = 0; j < alph.nPhons*alph.nPhons-1; j++)*/
printf("***********************************************\n");
printf("Total errors for tol %f ms = %f\n",
tol[i]*1e3, (float)total_errors/(float)total_instances*100);
} /* for (i = 0; i < 5; i++) */
/* Evalution of the time boundaries and output to a file */
if ((err = EvaluationBoundariesDet(nFilesRef, labelRef, nFilesDec, labelDec,
alph, resultsName)) != 0)
{
printf("Error in the evaluation process in file %s\n", resultsName);
err = -11;
return err;
}
/* Free memory */
UnloadAlphabet((TAlph *)&alph);
if (labelRef != NULL)
free(labelRef);
if (labelDec != NULL)
free(labelDec);
if (segResults != NULL)
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.1. Programas ajenos empleados 266
free(segResults);
printf("Exiting program %s with code %d\n", argv[0], (int)err);
return err;
} /* End of Main */
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 267
ANEXO 2. FICHEROS DE CONFIGURACIÓN
En el capítulo dedicado a la implementación del segmentador fonético
automático describimos detalladamente el código de los scripts que
hemos desarrollado para hacer funcionar dicho sistema. Muchas de las
herramientas de HTK hacen uso de ficheros de configuración cuyo
contenido relevante ha sido explicado en dicho capítulo. En este anexo
incluimos el contenido estándar de estos ficheros de configuración, si
bien se debe tener en cuenta que algunas variables pueden sufrir
modificaciones en ciertos momentos del proceso o dependiendo del
experimento que hayamos ejecutado, modificaciones que han sido
explicadas en el capítulo correspondiente.
A.2.1 CONFIG_FILE_HCOPY : config_hcopy_SES_mfcc_
MAXTRYOPEN = 2
SOURCEFORMAT = NOHEAD
SOURCERATE = 625.0
SOURCEKIND = WAVEFORM
TARGETFORMAT = HTK
TARGETRATE = 100000.0
TARGETKIND = MFCC_E_D_A
HPARM: SAVECOMPRESSED = T
HPARM: SAVEWITHCRC = T
HPARM: ZMEANSOURCE = T
HPARM: WINDOWSIZE = 250000.0
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 268
HPARM: USEHAMMING = T
HPARM: PREEMCOEF = 0.97
HPARM: NUMCHANS = 40
HPARM: LPCORDER = 12
HPARM: COMPRESSFACT = 0.3333333
HPARM: NUMCEPS = 12
HPARM: CEPLIFTER = 22
HPARM: ESCALE = 1.0
HPARM: ENORMALISE = T
HPARM: SILFLOOR = 50.0
HPARM: USEPOWER = T
HPARM: CEPSCALE = 10
# Next lines to read & write binary data machine dependent
#HPARM: LOFREQ = 125
#HPARM: HIFREQ = 7800
HPARAM: TRACE = 1
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
A.2.2 CONFIG_FILE_HCOPY : config_hcopy_SES_plp_
# template used for front end processing
MAXTRYOPEN = 2
SOURCEFORMAT = NOHEAD
SOURCERATE = 625.0
SOURCEKIND = WAVEFORM
TARGETFORMAT = HTK
TARGETRATE = 100000.0
#TARGETKIND = PLP_0_D_A
TARGETKIND = PLP_0_D_A
HPARM: SAVECOMPRESSED = T
HPARM: SAVEWITHCRC = T
HPARM: ZMEANSOURCE = T
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 269
HPARM: WINDOWSIZE = 250000.0
HPARM: USEHAMMING = T
HPARM: PREEMCOEF = 0.97
HPARM: NUMCHANS = 24
HPARM: LPCORDER = 12
HPARM: COMPRESSFACT = 0.3333333
HPARM: NUMCEPS = 12
HPARM: CEPLIFTER = 22
HPARM: ESCALE = 1.0
HPARM: ENORMALISE = T
HPARM: SILFLOOR = 50.0
HPARM: USEPOWER = T
HPARM: CEPSCALE = 10
# Next lines to read & write binary data machine dependent
#HPARM: LOFREQ = 125
#HPARM: HIFREQ = 7800
HPARAM: TRACE = 1
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
A.2.3 CONFIG_FILE_HCOMPV : config_hcompv_mfcc_
TARGETKIND = MFCC_E_D_A #Basic parametisation
MAXTRYOPEN = 2
#DELTAWINDOW = 3
#ACCWINDOW = 2
HNET:TRACE = 1
FORCEOUT = T # Needed for no token survived
# next line to read data machine dependent
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 270
A.2.4 CONFIG_FILE_HCOMPV : config_hcompv_plp_
TARGETKIND = PLP_E_D_A #Basic parametisation
MAXTRYOPEN = 2
#DELTAWINDOW = 3
#ACCWINDOW = 2
HNET:TRACE = 1
FORCEOUT = T # Needed for no token survived
# next line to read data machine dependent
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
A.2.5 CONFIG_FILE_CMN : config_mfcc_cmn_cvn.cmn
TARGETKIND = MFCC_0_D_A_Z # Basic parameterisation
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
A.2.6 CONFIG_FILE_CMN : config_plp_cmn_cvn.cmn
TARGETKIND = PLP_0_D_A_Z # Basic parameterisation
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
A.2.7 CONFIG_FILE_CVN : config_mfcc_cmn_cvn.cvn
TARGETKIND = MFCC_0_D_A_Z
MAXTRYOPEN = 2
CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
CMEANMASK = *%%%%%%%%%%%%.mfc
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 271
A.2.8 CONFIG_FILE_CVN : config_plp_cmn_cvn.cvn
TARGETKIND = PLP_0_D_A_Z
MAXTRYOPEN = 2
CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
CMEANMASK = *%%%%%%%%%%%%.plp
A.2.9 CONFIG_FILE_TRAIN : config_tr_mfcc_
HPARM: TARGETKIND = MFCC_E_D_A
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
#HFWDBKWD: PRUNEINIT = 200.0
#HFWDBKWD: PRUNEINC = 200.0
#HFWDBKWD: PRUNELIM = 1200.1
#HFWDBKWD: MINFORPROB = 20.0
HFWDBKWD: TRACE = 1
#CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
#CMEANMASK = *%%%%%%%%%%%%.mfc
#VARSCALEDIR = /usuarios_jcarmona/segmentation/segmenter/cvn
#VARSCALEMASK = *%%%%%%%%%%%%.mfc
A.2.10 CONFIG_FILE_TRAIN : config_tr_mfcc_cmn_cvn
HPARM: TARGETKIND = MFCC_0_D_A_Z
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
#HFWDBKWD: PRUNEINIT = 200.0
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 272
#HFWDBKWD: PRUNEINC = 200.0
#HFWDBKWD: PRUNELIM = 1200.1
#HFWDBKWD: MINFORPROB = 20.0
HFWDBKWD: TRACE = 1
CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
CMEANMASK = *%%%%%%%%%%%%.mfc
VARSCALEDIR = /usuarios_jcarmona/segmentation/segmenter/cvn
VARSCALEMASK = *%%%%%%%%%%%%.mfc
A.2.11 CONFIG_FILE_TRAIN : config_tr_plp_
HPARM: TARGETKIND = PLP_E_D_A
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
#NATURALWRITEORDER = TRUE
#HFWDBKWD: PRUNEINIT = 200.0
#HFWDBKWD: PRUNEINC = 200.0
#HFWDBKWD: PRUNELIM = 1200.1
#HFWDBKWD: MINFORPROB = 20.0
HFWDBKWD: TRACE = 1
#CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
#CMEANMASK = *%%%%%%%%%%%%.plp
#VARSCALEDIR = /usuarios_jcarmona/segmentation/segmenter/cvn
#VARSCALEMASK = *%%%%%%%%%%%%.plp
A.2.12 CONFIG_FILE_TRAIN : config_tr_plp_cmn_cvn
HPARM: TARGETKIND = PLP_0_D_A_Z
MAXTRYOPEN = 2
#NATURALREADORDER = TRUE
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.2. Ficheros de configuración 273
#NATURALWRITEORDER = TRUE
#HFWDBKWD: PRUNEINIT = 200.0
#HFWDBKWD: PRUNEINC = 200.0
#HFWDBKWD: PRUNELIM = 1200.1
#HFWDBKWD: MINFORPROB = 20.0
HFWDBKWD: TRACE = 1
CMEANDIR = /usuarios_jcarmona/segmentation/segmenter/cmn
CMEANMASK = *%%%%%%%%%%%%.plp
VARSCALEDIR = /usuarios_jcarmona/segmentation/segmenter/cvn
VARSCALEMASK = *%%%%%%%%%%%%.plp
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.3. Textos de las bases de datos empleadas 274
ANEXO 3. TEXTOS DE LAS BASES DE
DATOS EMPLEADAS
A.3.1 BASE DE DATOS SES: PÁRRAFOS (R)
Párrafo 1
Los participantes en el Congreso marcharon después a El Escorial. Se
trasladaron allí en un amplio autobús, en el que un guía iba explicando
los monumentos relevantes del recorrido. La visita al monasterio fue
comentada por el mismo guía que debía saber mucho sobre El Greco,
en cuyo cuadro "el martirio de San Mauricio" se extendió ampliamente;
no debía ser igual su conocimiento del resto de los cuadros que
componían la pinacoteca, sobre los cuales pasó como un rayo, dando
lugar a sonrisas cómplices.
Párrafo 2
Sergio era un joven serio y trabajador que vivía cerca de la hospedería
del Monasterio de Guadalupe, en las Villuercas, comarca perteneciente
a la provincia de Cáceres. Se ganaba la vida vendiendo recuerdos
alusivos a la Virgen Morenita, desde llaveros a platos con la imagen
grabada en esmalte vidriado. Tenía un problema y era que su tiendecita
era de mala construcción y estaba en una parte del pueblo muy
empinada, fenómeno por otra parte normal en aquel lugar. Había
mucho turismo en la zona. Sergio tuvo la mala suerte de perder su
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.3. Textos de las bases de datos empleadas 275
tienda en las últimas inundaciones, pues un corrimiento de tierras se la
llevó por delante, con lo cual se le acabó su modo de vida.
Párrafo 3
Pablo estudiaba en la Universidad Politécnica de Madrid y estaba
deseando regresar a Medellín; echaba de menos los productos de la
matanza y los quesos frescos que hacía su abuela. Ya faltaba poco para
las vacaciones; entonces volvería a las orillas del Guadiana, bajo los
chopos. Su deseo era tan grande que a veces se le hacían años los
pocos días que faltaban.
Párrafo 4
La vida diaria a menudo no es tan fácil, aunque estemos en el final del
siglo veinte. Sobre todo cuando los dos en la pareja trabajan. Siempre
hay que preguntarse si ya se cambió la ropa, si la puerta tiene el cerrojo
o si tengo la llave en el bolsillo. Yo llevo al niño en el coche. Todos los
días; al colegio. Pero ¿quién hace la compra? Al final de la semana todo
se acaba. No queda fruta los viernes. Los sábados dejaron la cuenta al
cero. Y los domingos, aunque te dices que vivirás una feliz experiencia,
la cosa no es tan sencilla: el niño sale con sus amigos. ¿Hay algún chico
en la esquina? ¿Se cayó en el jardín? Desde luego, siempre gozan de
perfecta salud y yo estoy aquí preocupándome por nada.
Definitivamente, vivir no es tan sencillo ni al final del siglo veinte.
A.3.2 BASE DE DATOS SES: FRASES (F)
01: No queda fruta los viernes
02: ¿Ya se cambió de ropa?
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.3. Textos de las bases de datos empleadas 276
03: ¿Hay algún chico en la esquina?
04: El final del siglo veinte.
05: ¿La puerta tiene cerrojo?
06: Tengo la llave en el bolsillo.
07: ¿Se cayó en el jardín?
08: ¿Rompió la yema del huevo?
09: Gozan de perfecta salud.
10: Vivirás una feliz experiencia.
11: Dejaron la deuda al cero
12: Le gusta mucho el gregoriano.
13: Yo llevo al niño en el coche.
14: Llegó la reina del puño cerrado.
15: Arrizabalaga dejará la reyerta.
A.3.3 BASE DE DATOS SEV: FRASES PROVENIENTES DE
SES (F)
101: Los participantes en el Congreso marcharon después a El
Escorial.
202: Se ganaba la vida vendiendo recuerdos alusivos a la Virgen
Morenita, desde llaveros a platos con la imagen grabada en
esmalte vidriado.
302: Echaba de menos los productos de la matanza y los quesos
frescos que hacía su abuela.
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.3. Textos de las bases de datos empleadas 277
A.3.4 BASE DE DATOS SEV: FRASES PROVENIENTES DEL
QUIJOTE (Q)
00110: Tirad, llegad, venid y ofendedme en cuanto pudiéres, que
vosotros veréis el pago que lleváis de vuestra sandez y demasía.
00210: Y tal es la suavidad de la voz con que los canta, que
encanta.
A.3.5 BASE DE DATOS SEV: FRASES PROVENIENTES DE
PROSODIA (P)
10110: Al leer la palabra "plan", hay ya quien se figura que voy a
desenvainar un proyecto de ley con quinientos o mil artículos y
un haz de reglamentos complementarios.
10910: Yo les contesto que quien en realidad da una broma al
país es el ministro, que, puesto de gran uniforme, sube a la
tribuna parlamentaria y lee una ley de instrucción pública con
arreglo a los últimos adelantos pedagógicos.
20510: ¿A usted qué impresión le hacía tener un padre marino?
20610: Pues, realmente, muy poca.
30110: Usted tiene un oficio muy interesante, ¿podría explicarme
un poco cómo llegó a él?
30210: Bueno, a mí siempre me habían interesado las Ciencias
Naturales, y tuve la gran suerte de poder empezar a trabajar con
un gran maestro, aquí, en el museo.
41010: ¿Vienes?
41050: ¿Te vienes?
Desarrollo de un segmentador fonético automático para habla expresiva
basado en modelos ocultos de Markov Juan Carmona Mariscal
A.3. Textos de las bases de datos empleadas 278
51010: ¿Estarán allí?
51080: ¿En dónde trabajas?