proyecto - Grupo de Tecnología del Habla

Anuncio
Capítulo 1
Introducción
Capítulo 1: Introducción.
1.1. Introducción.
El progresivo desarrollo tecnológico, unido al abaratamiento de los equipos ha
llevado a la presencia de los ordenadores prácticamente en todos los ámbitos de nuestro
quehacer diario. Dado el alto grado de convivencia que esto implica, no son de extrañar
los intentos por parte de la ciencia de elaborar una forma de comunicación más natural
con las máquinas, en el sentido de posibilitar una comunicación oral con las mismas y,
por lo tanto, hacer que los seres humanos sean menos reticentes a su utilización.
Dentro de las ventajas que nos ofrece la comunicación oral con las máquinas
frente al empleo de los métodos tradicionales, podríamos citar, entre otras, que además
de ser más reconfortante de cara a los usuarios (al tratarse del modo de comunicación
más natural y extendido entre los seres humanos), posibilita la realización de otras
tareas de forma simultánea a dicha comunicación, facilita el acceso telefónico a un
terminal y adicionalmente, de que las salidas vocales tienen un coste muy bajo y
permiten acceder a una gran cantidad de información en poco tiempo. Sin embargo,
también conviene considerar que la voz puede interferir con otros sistemas de
comunicación o con otras señales sonoras, además de ser fácilmente interceptable por
terceros y no permite dejar constancia de los mensajes con la misma facilidad que
cuando la interacción se realiza a través de una pantalla. A pesar de todo esto no parece
exagerado afirmar que en muchos casos las ventajas superan con creces a los
inconvenientes.
Una comunicación oral bidireccional con las máquinas hace necesaria la
existencia por un lado, de un módulo que sea capaz de recoger y descodificar los
mensajes orales que le lleguen a la máquina, y por otro, de un módulo que sea capaz de
codificar y emitir mensajes que sean comprendidos por los seres humanos. En la
dirección reseñada han ido apareciendo diversas técnicas de reconocimiento
(descodificación) y síntesis (codificación) de voz, que pretenden hacer posible esta
bidireccionalidad, tratando de conseguir un alto grado de calidad y flexibilidad que haga
1
Capítulo 1
Introducción
posible adaptarse a las diferentes aplicaciones que vayan apareciendo progresivamente,
a cambio de un procesamiento no demasiado complejo en las señales, que haga factible
la utilización de estos sistemas a gran escala.
Dentro de la parte relativa a la síntesis de voz, resulta inevitable hablar de los
sistemas de Conversión Texto-Voz, que realizan en primer lugar una traducción
completa de los textos escritos a una representación lingüística del mensaje (no hay que
olvidar que el habla es un fenómeno complejo que incluye aspectos que no pueden
quedar reflejados simplemente mediante una representación textual) -en lo que se
conoce como procesado lingüístico prosódico- y, posteriormente, de esta representación
a una onda acústica – lo que recibe el nombre de procesado acústico-, constituyendo
esta fase el proceso de síntesis en sí.
Conviene destacar el hecho de que al constituir esta última fase la representación
más visible de los resultados, en ocasiones se tiende a confundir los términos Conversor
Texto-Voz y sintetizador de forma de onda, no siendo ni mucho menos esto correcto, ya
que no debemos olvidarnos de la vital importancia de un correcto funcionamiento de los
módulos previos del Conversor de cara a obtener unos resultados satisfactorios en el
sintetizador de forma de onda (que como luego veremos simplemente se limita a tratar
de conseguir una forma de onda con las características determinadas por estas fases
anteriores). Dentro de las características que cabría exigir a un Conversor Texto-Habla
ideal podríamos citar:
-
Capacidad de ofrecer una calidad elevada en los enunciados (en lo
que se refiere a naturalidad, inteligibilidad e incluso intencionalidad o
emotividad).
-
Flexibilidad de cara a reproducir cualquier mensaje que se pueda
presentar en las comunicaciones ordinarias.
-
Procesamiento relativamente simple y rápido de las formas de
onda.
2
Capítulo 1
Introducción
La implantación de los sistemas de síntesis de voz en aplicaciones reales hoy en
día ha sido posible, sobre todo, gracias a los avances que se han producido en la
segunda mitad de este siglo, avances no sólo en los campos de la ingeniería electrónica
o la computación (como cabría pensar en primera instancia), sino también en el campo
de los conocimientos lingüísticos. Es importante reseñar el hecho de que los avances en
las tecnologías del habla exigen, entre otras cosas, alcanzar un nivel de conocimientos
fonéticos sin los cuales no es posible llegar al grado de adecuación que permita el
desarrollo de aplicaciones, y es por este motivo por el que el diseño o evaluación de
sistemas, requiere muchas veces de la colaboración de expertos en temas relacionados
con la lingüística, y no meramente con aspectos técnicos.
Aunque si bien el campo de posibles aplicaciones de la síntesis de voz se
presenta como algo muy extenso, no conviene olvidar que el empleo de estas técnicas se
debe restringir a lugares muy puntuales, con el fin de evitar efectos contrarios al
buscado; es lo que se conoce como la “contaminación sonora” por voces sintéticas.
Dentro de las aplicaciones desarrolladas en la actualidad podríamos citar entre otras:
· Máquinas lectoras para ciegos.
· Ayudas para los disminuidos físicos.
· Enseñanza asistida por ordenador.
· Terminales hablantes...
Para terminar esta introducción, convendría reseñar que la definitiva
implantación de estas aplicaciones está condicionada al soporte de un sintetizador de
forma de onda que sea capaz de entregar una señal acústica de calidad “humana”. En
este sentido el trabajo por parte de los investigadores es continuo, buscando dotar a la
voz sintética de la mayor calidad posible, partiendo siempre de la base de la
inteligibilidad y tratando de hallar aquellas características que contribuyan más
firmemente a una mayor aceptación por parte del ser humano: entonación, expresión de
emociones..., hecho que no hace sino ampliar aún más el espectro de posibles
aplicaciones en los años venideros.
3
Capítulo 1
Introducción
1.2.Descripción general de los Conversores Texto-Voz.
Como ya fue citado en el apartado anterior, una conversión automática de texto a
voz supone una serie de procesos de tipo muy diverso. Por un lado, es necesario realizar
un conjunto de tareas de tipo lingüístico que, partiendo del análisis del texto de entrada,
puedan proporcionar datos útiles para la correcta y natural lectura del texto. Por otro
lado, es necesario generar una señal de voz mediante métodos electrónicos, lo cual
supone el empleo de técnicas de procesado digital de voz.
Un Conversor Texto-Voz general puede ser representado mediante un diagrama
de bloques [Saíz, 00], en el cual se puede apreciar esta dualidad de tareas que es
necesario llevar a cabo. Por un lado, aparecería un bloque de procesado lingüístico y
por otro lado un bloque de síntesis de voz. Dentro del primero se pueden distinguir los
siguientes módulos fundamentales —aunque pueden existir algunos más—:
preprocesador, categorizador, estructurador, conversor grafema-alófono, pausador y
síntesis prosódica
TEXTO
PROCESADO LINGÜÍSTICO
SÍNTESIS
Preprocesador
Categorizador
Estructurador
Conv.
grafemaalófono
Pausador
Síntesis
Prosódica
DE VOZ
VOZ
La principal función del bloque de procesado lingüístico, es la de determinar la
secuencia de sonidos que hay que producir para sintetizar correctamente el texto de
entrada. Los resultados generados en este bloque se pasarán al bloque de síntesis, que
procesará los datos y generará los sonidos. En este bloque se llevan a cabo
fundamentalmente dos tareas: obtener la cadena de sonidos (alófonos) correspondientes
al texto de entrada, y obtener información prosódica para su producción.
4
Capítulo 1
Introducción
Pasamos a describir brevemente la funcionalidad de cada uno de los módulos
que componen este bloque (información más detallada puede encontrarse en [Saíz, 00]):
-
Preprocesador. Un texto puede contener expresiones que no están
constituidas directamente por letras y palabras, y que es necesario interpretar
para que puedan ser tratadas por el resto de los módulos que constituyen el
bloque de procesado lingüístico del Conversor. El preprocesador se encarga
de sustituir estas expresiones por la secuencia de caracteres alfabéticos que
equivaldrían a la lectura que haría una persona.
-
Categorizador. La principal tarea de este módulo es la de asignar categorías a
las palabras con el objetivo de que el Conversor haga una lectura “con
sentido” de los textos (añadiendo, por ejemplo, pausas que no venían
marcadas ortográficamente). Las categorías que se asignan no son
exactamente categorías gramaticales, sino un conjunto de códigos que en
muchos casos se corresponden con verdaderas categorías gramaticales, pues
descubrir la estructura sintáctica sigue siendo una labor demasiado compleja
si no se ponen restricciones a la gramática [Jiménez, 99].
-
Estructurador. La misión de este módulo es la de realizar un análisis
sintáctico de las frases [Polanco, 00].
-
Conversor grafema-alófono. Este módulo es el que se encarga de determinar
cuál es la secuencia de alófonos que corresponde a la secuencia de letras de
una frase. Hay que tener en cuenta que la correspondencia entre letras
(grafemas) y sonidos (alófonos) no es tal que siempre la misma letra
produzca el mismo alófono, sino que la conversión depende de una serie de
reglas
-
Pausador. El pausador se encarga de introducir, en el discurso, pausas
adicionales a las que van indicadas mediante signos ortográficos. La
principal razón para introducir pausas es simular el comportamiento real de
5
Capítulo 1
Introducción
un lector humano. La introducción de las pausas debe hacerse de acuerdo
con la estructura sintáctica del mensaje para intentar reforzarla, ayudando así
a la comprensibilidad del mismo.
-
Síntesis prosódica. Los principales aspectos de la prosodia que se fijan en
este módulo son, además de las pausas, la duración de los alófonos, la
evolución temporal de la frecuencia fundamental (o contorno de F0) y el
contorno de la energía o amplitud de la señal de voz.
La misión del bloque de síntesis de voz es la de generar sonidos tan similares a
la voz como sea posible, presentando un alto grado de flexibilidad en cuanto a su
capacidad para ser controlado, de modo que se pueda variar la realización de los
sonidos.
La información de entrada a este bloque incluye la secuencia de alófonos que
hay que generar, y los datos de prosodia (típicamente, duración de los alófonos,
contorno de frecuencia fundamental, y contorno de energía o amplitud).
Hay dos enfoques que, en cierto modo, determinan el tipo de sintetizador que se
emplee. El primero de ellos, que podríamos denominar «modelo de sistema», intenta
modelar, con mayor o menor detalle, el mecanismo de producción de la voz. Este
enfoque ha dado origen a dos tipos de sintetizadores: los sintetizadores articulatorios y
los sintetizadores de formantes. El segundo enfoque, que podríamos llamar «modelo de
señal», es el que intenta modelar no el mecanismo de producción, sino la señal de voz;
dentro de este enfoque se encuentran los sintetizadores por concatenación. Los distintos
tipos de sintetizadores serán explicados más adelante.
6
Capítulo 2
Sistemas de síntesis de voz
Capítulo 2: Sistemas de síntesis de voz.
2.1. Introducción.
Si bien existen varias clasificaciones posibles de los sistemas de síntesis de voz,
la más común de todas ellas es aquella que se refiere al tipo de codificación de la señal
de voz y al número de reglas que se necesitan para su reconstrucción posterior. Así
podemos distinguir [Galanes, 95]:
- Sintetizadores articulatorios.
En los sintetizadores articulatorios el objetivo es el de controlar un modelo del
aparato fonador, de manera semejante a como lo hace el cerebro, constituyendo los
parámetros de control (parámetros circuitales) de dicho modelo, la posición de los
distintos órganos articulatorios y las leyes que rigen su movimiento.
Estos sintetizadores presentan la dificultad de la obtención y control de
parámetros para su manejo (dificultad en el análisis de la posición y movimiento de los
órganos articulatorios de una persona que habla normalmente, así como de cara a la
coordinación y derivación de la gran cantidad de parámetros de control, existentes a la
entrada del sintetizador), lo que ha motivado que sean actualmente los menos
desarrollados.
- Sintetizadores por formantes.
Están constituidos por una serie de filtros que modelan las resonancias
(formantes) del tracto vocal, y que están excitados por un sistema de fuentes que
modelan tanto la vibración de las cuerdas vocales como el ruido que se produce en la
fricación. La principal ventaja que ofrecen estos sistemas es que trabajan con
parámetros que mantienen una relación directa con el mecanismo de producción del
habla, y son fácilmente manipulables de cara al control del sintetizador.
7
Capítulo 2
Sistemas de síntesis de voz
Dependiendo del control que se haga de los parámetros, se puede establecer una
subdivisión entre:
- Sistemas de síntesis por regla: los parámetros se calculan con arreglo a
un conjunto de reglas dependientes del contexto (un fonema de una clase
precedido por otro de otra clase presenta un espectro de una forma determinada).
- Sistemas de análisis-síntesis: los parámetros se obtienen por análisis o
parametrización de segmentos de voz natural.
Los sintetizadores por formantes gozan de gran difusión por el atractivo que
presentan para estudios fonéticos.
FUENTE
FILTRO
F1
FILTRO
F2
FREC
PRIMER
FORMANTE
FILTRO
F3
FREC
SEGUNDO
FORMANTE
FREC
TERCER
FORMANTE
SINTETIZADOR POR FORMANTES EN SERIE
F0 Y AMPLIT 1º
FORMANTE
F1
F0 Y AMPLIT 2º
FORMANTE
FUENTE
+
F2
F0 Y AMPLIT 3º
FORMANTE
F3
SINTETIZADOR POR FORMANTES EN PARALELO
Figura 2.1. Esquema básico de los sintetizadores por formantes.
8
Capítulo 2
Sistemas de síntesis de voz
- Sintetizadores derivados de las técnicas de predicción lineal (LPC).
Se basan en la posibilidad de modelar el tracto vocal como una serie de cilindros
huecos de diámetro variable. Las propiedades de la onda sonora, después de haber
pasado por todos ellos, pueden predecirse teniendo en cuenta que cada uno de los
cilindros condiciona la forma de la onda sonora al entrar en el siguiente. Este cálculo
complejo se simplifica mediante la utilización de la predicción lineal, y aprovechando la
periodicidad de la onda sonora.
Existen varias clases dependiendo del método concreto de codificación
empleado, siendo los más extendidos hoy día los sintetizadores multipulso (MLPC).
Como características generales cabría citar su baja complejidad y su buena calidad.
- Sintetizadores por concatenación de forma de onda.
En estos sintetizadores se intenta aumentar la calidad de la señal generada por
medio de una minimización del ruido de codificación, para lo que se concatenan
unidades digitalizadas (pregrabadas) y se ajusta su prosodia original a la de la nueva
frase. Podemos distinguir entre:
- Sintetizadores basados en métodos PSOLA (Pitch-Synchronous OverlapAdd). Este tipo concreto va a ser el que nosotros utilizamos y será explicado más
adelante.
- Sistemas basados en Codificación Armónica.
- Codificadores multibanda.
A cambio de su elevada complejidad, estos son los sistemas que nos ofrecen una
mayor calidad.
Como un caso especial de este tipo de sintetizadores, se encuentran los
sintetizadores por selección. Estos sistemas se basan en la selección de las unidades a
concatenar de cara a la síntesis en función de sus características prosódicas. En este tipo
de sintetizadores, a diferencia de los casos anteriores no se realiza ningún tipo de
9
Capítulo 2
Sistemas de síntesis de voz
codificación ni de modificación prosódica, concatenándose directamente las unidades
pregrabadas.
2.1.1. Comparación De Los Sistemas De Síntesis Más Utilizados
Haciendo un resúmen de todo lo dicho hasta ahora, tenemos que los
sintetizadores por formantes presentan la ventaja de permitir manipular las
características de la fuente de voz. Por el contrario, en los sintetizadores por
concatenación la fuente de voz es única y corresponde a la grabación de los difonemas,
lo que debe realizarse por un locutor capaz de controlar y mantener constante la calidad
de la voz para evitar cambios repentinos en el espectro de la fuente en el medio de las
sílabas.
En cuanto a la calidad de la voz sintética, con el método de concatenación se
consiguen mejores resultados. Además la síntesis por concatenación permite alcanzar un
alto grado de naturalidad.
10
Capítulo 2
Sistemas de síntesis de voz
2.2. La síntesis TD-PSOLA.
La síntesis TD-PSOLA (Time Domain Pitch-Synchronous Overlap-Add) forma
parte de las técnicas de síntesis por concatenación de forma de onda, que como ya se
subrayó en el capítulo anterior tratan de conseguir una mejora en la calidad de la síntesis
a través de la concatenación de unidades digitalizadas pregrabadas, minimizándose así
el ruido de codificación. Adicionalmente al proceso de adquisición y grabado de dichas
unidades, será necesario un procesado previo de las mismas con el fin de obtener la
información prosódica de las mismas que necesita el algoritmo.
Dado que la concatenación directa de unidades no es posible (al tener éstas
normalmente una prosodia distinta de la buscada), el principal problema que se va a
plantear reside en las modificaciones que son necesarias para adaptar la prosodia de las
unidades pregrabadas, a la prosodia del texto (procedente del bloque de procesado
lingüístico del Conversor Texto-Voz) en donde se desean utilizar, sin que se produzcan
pérdidas graves o apreciables de calidad. El algoritmo TD-PSOLA, al igual que el resto
de técnicas PSOLA trata de hacer dicha adaptación a través de modificaciones en la
transformada de Fourier, afectando dichas modificaciones de forma conjunta a la
frecuencia fundamental y a la duración de las unidades.
Hay que destacar que también es posible realizar una modificación de la energía
de las unidades, aunque este aspecto se puede considerar como un toque final de calidad
en los sistemas, debiéndonos centrar fundamentalmente en los dos primeros y dejando
este último para las fases finales de desarrollo. En relación a este aspecto, el tratamiento
más frecuente que se llevará a cabo será el de hacer una normalización de las energías
de las unidades de la base de datos con respecto de un valor determinado, dado que en
principio las unidades vendrán de contextos diferentes, y tendrán energías muy distintas.
El fín perseguido con dicha normalización es el de conseguir que a la hora de
concatenar las unidades, todas ellas posean aproximadamente la misma energía,
traduciéndose este aspecto en enunciados con una intensidad sonora aproximadamente
uniforme, y por lo tanto con una mayor calidad.
11
Capítulo 2
Sistemas de síntesis de voz
El algoritmo TD-PSOLA presenta la ventaja frente al resto de métodos PSOLA
de que, al hacerse todas las modificaciones en el dominio temporal, se elimina la carga
de cálculo debida a la FFT. Teóricamente, nos ofrece la posibilidad de modificar la
frecuencia en un rango de, aproximadamente, unas dos octavas (de la mitad de la
frecuencia original al doble de ésta), aunque en la práctica el intervalo permitido se
acorta bastante si queremos mantener un determinado grado de calidad.
El proceso de síntesis.
Como ya se dijo anteriormente, el punto de partida de la síntesis es una
secuencia de unidades digitalizadas pregrabadas a concatenar, cuyas características
prosódicas tendremos que modificar para adaptarnos a las de una determinada secuencia
objetivo que habrá sido generada previamente a partir de un texto por un módulo
anterior del Conversor Texto-Voz. Este módulo es el encargado de generar la prosodia
de dicho texto de una forma automática, es decir, a partir de un texto de entrada que es
lo que se desea sintetizar se encargará de generar otro fichero de texto que constituirá la
entrada del sintetizador. En este fichero, además de aparecer las unidades procedentes
de la base de datos que serán necesarias para sintetizar el texto, lo hará la prosodia de
dichas unidades en la frase en concreto, esto es, sus características de duración y tono
medio, ya que como se reseñó anteriormente una simple representación textual de los
mensajes no nos sirve para poder modelar el fenómeno del habla.
Las unidades a considerar pueden ser fonemas, difonemas o trifonemas, estando
en todos los casos éstas constituidas por una serie de periodos básicos de señal que
vienen delimitados por las marcas de pitch (marcas colocadas sobre la señal que tratan
de reflejar los momentos de cierre de la glotis). Estas marcas reciben el nombre de
marcas de análisis, y son provenientes del procesado previo que fue citado al comienzo
del apartado.
12
Capítulo 2
Sistemas de síntesis de voz
Figura 2.2. Señal de voz con sus marcas de pitch.
1
1
2
3
4
2
3
4
Fig. 2.3 Marcas de pitch y periodos de la señal.
La forma que tiene el algoritmo TD-PSOLA de conseguir las modificación de
las características prosódicas de las unidades almacenadas en la base de datos es
mediante la repetición en el tiempo de los periodos básicos constituyentes de las mismas
con una determinada cadencia, lo que consigue modificar la estructura de armónicos de
las unidades originales sin llegar a perturbar el espectro “fino” de la señal. Estos
periodos básicos se enventanan de una forma síncrona con las marcas de pitch, de tal
forma que la longitud de las ventanas sea siempre mayor que un periodo fundamental,
existiendo un solape entre periodos consecutivos. Habitualmente el enventanado
realizado es de Tukey, con una longitud de ventana que es el doble del periodo
13
Capítulo 2
Sistemas de síntesis de voz
fundamental y centrado en las marcas de pitch, hecho que contribuye a minimizar el
efecto de la reverberación producido por la copia de señales a corto plazo y a suavizar
las transiciones espectrales.
El primer paso a seguir, una vez realizado el enventanado de la señal de análisis,
será el cálculo del número de marcas de pitch que tendrá la señal sintetizada:
nº _ marcas_ s intesis 
duracion
1
T0 medio
Donde T0medio es el periodo medio del difonema a generar.
En cuanto a la posición de dichas marcas, hay que tener en cuenta que el tono no
va a ser constante a lo largo de la unidad a generar, no encontrándose por lo tanto las
marcas de pitch equiespaciadas a lo largo de la misma. Partiremos de un valor inicial
para el primer periodo del difonema, T0inicial, debiendo terminar en un valor T0final
para el último periodo. Una posibilidad que presenta la ventaja de conseguir una
evolución continua de la entonación, es la de suponer que la curva de tono se comporta
de forma lineal a lo largo de la unidad. De esta forma se puede determinar la posición de
las marcas de síntesis sin más que calcular el escalón de la curva de síntesis. Así:
escalon
T0 final T0inicial
n º _ marcas_ s int esis  2
marcai   T0inicial i  escalon (i  1)
To
To+esc
To+2esc
Fig. 2.4 Posición de las marcas de síntesis.
14
To+3esc
Capítulo 2
Sistemas de síntesis de voz
El siguiente paso a realizar, consiste en establecer una correlación entre los
periodos de la señal de análisis y los periodos de la señal de síntesis, de cara a realizar la
copia o la supresión de los periodos de la señal original del eje de análisis al de síntesis.
Dado que cada uno de los nuevos periodos a generar, en principio, tendrá una duración
diferente a la del periodo original del que provienen, habrá que realizar una serie de
transformaciones sobre los mismos que básicamente consistirán en lo siguiente:
- Si el periodo a generar tiene una duración inferior a la del periodo original
eliminaremos muestras del mismo.
- Si por el contrario la duración es mayor, completaremos con ceros las muestras
del periodo original.
Eje de análisis
1
2
3
Eje de síntesis
1
2
2
3
Fig. 2.5 Correlación entre los ejes de análisis y síntesis.
El último paso para la obtención de la señal sintetizada consiste en un filtrado
Overlapp-Add entre los periodos consecutivos y enventanados de la señal de síntesis. Al
igual que el enventanado de análisis, el enventanado en la síntesis también es de Tukey,
tiene un tamaño de dos periodos básicos de señal, y está centrado en las marcas de pitch
de síntesis. Con este proceso conseguimos una señal simétrica a partir de un espectro
15
Capítulo 2
Sistemas de síntesis de voz
modificado de forma arbitraria. Más información sobre el algoritmo TD-PSOLA se
puede encontrar en [Galanes, 95].
16
Capítulo 3
La base de datos
Capítulo 3: La base de datos.
3.1. Introducción.
Puesto que el método escogido en este trabajo para realizar la síntesis de voz es
el de síntesis por concatenación utilizando el algoritmo TD-PSOLA, la base de datos va
a constituir uno de los aspectos fundamentales de nuestro sistema, dado que es el lugar
en donde se van a almacenar las unidades digitalizadas pregrabadas que, junto con la
información asociada a las mismas, luego deberá emplear el sintetizador.
La elección del tipo de unidades a almacenar, así como la clase de información
asociada a las mismas, dependerá de la aplicación en concreto, existiendo múltiples
posibilidades. Centrándonos en primer lugar en el tipo de unidades que ibamos a
almacenar, en nuestro caso se escogió el difonema (segmento que abarca desde la zona
estable de un fonema hasta la zona estable del siguiente fonema, incluyendo la
transición entre ambos fonemas consecutivos) ya que supuso la mejor alternativa, al
mantenerse de esta forma una buena relación entre el tamaño necesario para el
almacenamiento de la base de datos de unidades, y el bajo ruido por concatenación para
generar las distintas secuencias objetivo. Así:
- Aunque la calidad no resulta tan elevada como en el caso de almacenar
directamente palabras y frases (al ser necesario un mayor número de concatenaciones),
con un número mucho más reducido de unidades es posible dotar al sistema de una
flexibilidad que resultaría impracticable con las anteriores, dado el altísimo coste de
almacenamiento necesario. Hay que tener en cuenta que, si empleásemos palabras en la
base de datos, sería necesario almacenar todas aquellas que pudiesen darse en una
conversación cualquiera (en todos sus posibles contextos y valores prosódicos), lo que
claramente resultaría prohibitivo desde el punto de vista del coste de almacenamiento.
Una solución parcial a este efecto, podría ser grabar bases de datos específicas para las
distintas aplicaciones, pero este hecho eliminaría la componente de flexibilidad de las
mismas, y además no haría posible la reutilización de las bases de datos entre
17
Capítulo 3
La base de datos
aplicaciones, lo que aumentaría mucho el trabajo de cara a la elaboración de nuevas
aplicaciones, al ser necesario cada vez repetir todo el proceso de creación de la base de
datos para dichas aplicaciones.
- A pesar de que el coste de almacenamiento es mayor que en el caso de emplear
una base de datos de fonemas, al ser más reducido el número de fonemas existentes,
éstos presentan la desventaja de estar sometidos a fuertes variaciones contextuales, lo
que origina problemas importantes de concatenación. El difonema, además de necesitar
un menor número de concatenaciones que el fonema (con lo que esto conlleva en cuanto
a distorsión) elude el problema de la unión en las zonas finales de los fonemas, que
típicamente se caracterizan por su inestabilidad reduciéndose mucho la calidad de la
síntesis al resultar muy patentes los efectos de coarticulación entre unidades.
Otro aspecto a tener en cuenta que se encuentra relacionado con el tipo de
unidad a emplear, es el hecho de que en la base de datos se permitió la existencia de
varias instancias de una misma unidad. Con esta estrategia, pese a aumentarse la
capacidad necesaria de almacenamiento, se contribuye a una gran mejora en la calidad
final de la síntesis, al dotar al sistema de la posibilidad de escoger aquellas unidades que
mejor se ajusten a la prosodia objetivo, reduciéndose de este modo la distorsión global
generada por el sintetizador al realizar el procesado de señal, y generándose por lo tanto
una voz sintética de mayor calidad (en cuanto a naturalidad e inteligibilidad).
En lo respectivo al tipo de información que almacenar asociada a las unidades,
se podría hacer una clara división de las características que resulta necesario almacenar,
en función de los requisitos de los distintos módulos del conversor Texto-Voz que
hacen uso de la base de datos. Por un lado se encuentran aquellas características
relacionadas con la duración, tono medio y posición de las marcas de tono, que
básicamente son empleadas por el sintetizador, y por otro lado tenemos un conjunto de
características empleadas en el programa de selección de unidades, cuya elección se
hizo teniendo en cuenta aquellas características tanto acústicas como prosódicas que se
consideró que podían contribuir mayormente a disminuir la distorsión procedente de la
concatenación de unidades.
18
Capítulo 3
La base de datos
3.2. Adquisición y marcado de la base de datos.
El primer paso de cara a la construcción de la base de datos es la grabación de
las frases y párrafos que deben contener los difonemas de la base de datos.
La base de datos de voz femenina.En cuanto a la base de datos de voz femenina empleada en la síntesis de dominio
restringido, se utilizó el mismo material que fue empleado por el GTH para la
elaboración de la base de datos dentro del proyecto de mejora de calidad de voz
femenina realizado para la empresa Natural Vox. La síntesis de dominio restringido
presenta la característica de que el conjunto de valores que van a ser sintetizados se
encuentra hasta cierto punto predeterminado, a diferencia de lo que ocurriría en una
aplicación de una síntesis de propósito general, en la que en principio los enunciados a
sintetizar podrían ser cualesquiera.
En un principio, se partió de un conjunto de frases-patrón constituidas por un
determinado enunciado, que era fijo para todas ellas, y una serie de campos variables,
que constituían aquellos que más tarde serían sintetizados (eran los que determinaban el
conjunto de valores a sintetizar en la aplicación). Dado que los valores a ser sintetizados
tenían que sonar dentro de dichas frases patrón, y que además lo harían siempre en una
determinada posición, lo lógico era grabar los difonemas dentro de dichas frases patrón,
para que a la hora de ser pronunciados siguiesen la prosodia que tendrían normalmente
en la frase, consiguiéndose de este modo una mayor naturalidad y derivada de esta una
mayor calidad. Hay que destacar que en dichas frases-patrón la grabación del campo
variable se hacía precedida de una pequeña pausa con el objeto de limitar la variedad
prosódica.
En definitiva, se disponía de un conjunto de frases que servían como portadoras
para unos determinados fonemas, sirviendo toda la frase como soporte para conseguir
19
Capítulo 3
La base de datos
que la palabra en concreto que a nosotros nos interesaba, no se pronunciase de forma
aislada, obteniendo de este modo una mayor naturalidad aunque, si bien es cierto, a
costa de la pérdida de algo de calidad acústica al no remarcarse tanto los difonemas a
extraer, y venir influenciados éstos por el contexto en concreto.
Como ya se ha dicho, se partió de un conjunto de 22 frases patrón iniciales que
eran las siguientes [Montero, 99]:
1. La nacional I tiene, en sentido salida de Madrid, en la provincia de Álava,
circulación interrumpida en NOMBRE DE POBLACIÓN, entre los puntos
kilométricos 15 al 20.
2. La nacional I tiene, en Madrid, el puerto de NOMBRE DE PUERTO, con
cadenas.
3. La nacional I tiene, en Madrid los puertos de NOMBRE DE PUERTO y
NOMBRE DE PUERTO cerrados.
4. El
tren
Estrella,
NOMBRE
DE
POBLACIÓN-
NOMBRE
DE
POBLACIÓN, sale a las HORA llega a las HORA.
5. La última estación por la que ha pasado el tren Estrella, con origen en Irún y
destino a Madrid, es NOMBRE DE POBLACIÓN, y llegará a su destino
con 25 minutos de retraso.
6. De acuerdo, Señor APELLIDO, ¿Qué operación desea?
7. ¿Qué operación desea Señor APELLIDO?
8. Señor APELLIDO, ¿qué operación desea?
9. El último movimiento contabilizado en su cuenta de ahorro es el siguiente: el
uno de Enero MOVIMIENTO, diez mil pesetas.
10. Los últimos movimientos contabilizados en su cuenta de ahorro son los
siguientes: el uno de febrero cargo por MOVIMIENTO, 5685 ptas; el 13 de
febrero abono por MOVIMIENTO, 6587 ptas. Y finalmente, el 16 de
febrero cargo por MOVIMIENTO, 16789 ptas.
11. La próxima vez puede acceder a esta operación diciendo:
PALABRA
CLAVE.
12. El estado del cheque de 300.000 pesetas es de ESTADO DE CHEQUE.
13. Se lo enviamos al número NUMERO DE TELÉFONO.
20
Capítulo 3
La base de datos
14. Repasemos los datos, quiere hacer un traspaso a su TIPO DE CUENTA, de
la oficina 1.234 de la entidad ENTIDAD por importe de 25.000 pesetas.
15. Diga los cuatro dígitos de la coordenada LETRA-NUMERO.
16. ¿A su TIPO DE CUENTA?
17. Repasemos los datos, quiere suscribir en FONDO 25.000 pesetas.
18. ¿De su FONDO 3457?
19. ¿Quiere conocer el valor de la DIVISA?
20. Un momento, le pasamos con NOMBRE Y APELLIDO.
21. ¿Desea información sobre TIPO DE INFORMACIÓN?
22. La A-483 Carretera de POBLACIÓN, tiene, en sentido ascendente de
kilometraje, circulación intensa.
Tras analizar la estructura de las frases patrón propuestas en un principio, se
realizaron una serie de agrupaciones de los campos variables de dichas frases para
grabar la base de datos de prosodia. Como se cita en [Montero, 99], estos agrupamientos
se realizaron en función de las similitudes prosódico-fonéticas existentes entre dichas
frases, llegándose a las siguientes conclusiones:
-
Frases 1, 2, 3, 4, 5, 22: los nombres propios de poblaciones y puertos de
montaña en oraciones enunciativas y con situación entre pausas podían ser
agrupados,
dando
lugar
al
campo
variable
NOMBRE
PROPIO
ENUNCIATIVA.
-
Frases 6, 8: los nombres propios de persona (incluyendo la combinación:
nombre de pila + apellidos) en oraciones enunciativas y posición entre
pausas podían ser agrupados junto a los anteriores, ampliando el ámbito de
NOMBRE PROPIO ENUNCIATIVA.
-
Frase 20: los nombres propios de persona en oraciones enunciativas y
posición final de frase y entre pausas, también se podían agrupar dentro del
campo NOMBRE PROPIO ENUNCIATIVA, haciéndose observar la
necesidad de que las grabaciones fuesen realizadas con prosodia neutralizada
(sin énfasis especial debido a estar en posición final de frase).
-
Frase 7: los nombres propios de persona en oraciones enunciativas y
posición final de frase, dan lugar al campo variable NOMBRE PROPIO
INTERROGATIVA. Al tratarse de un campo que es generalizable (a pesar
21
Capítulo 3
La base de datos
de que dicha generalización no fuese aplicada a los servicios telefónicos de
Natural Vox que se encontraban en funcionamiento) se consideró necesaria
la ampliación del corpus de prosodia con la inclusión de nombres propios
completos y nombres de poblaciones y puertos, en oraciones interrogativas y
posición final.
-
Frases 9, 10: al responder los movimientos bancarios a una sintaxis no
habitual en el lenguaje escrito o hablado –presentan unas estructuras
sintácticas simplificadas basadas en secuencias de sustantivos, con
importante omisión de elementos de enlace (preposiciones) y escasez de
adjetivos- pasan a formar parte del campo variable SINTAXIS SIMPLE
ENUNCIATIVA,
que
fue
necesario
completar
con
artículos
y
preposiciones. Este campo también puede incluir nombres propios.
-
Frase 11: puesto que las palabras clave de un servicio telefónico bancario
presentaban características similares a los movimientos bancarios, se decidió
integrarlas en el campo SINTAXIS SIMPLE ENUNCIATIVA, grabando
dichas palabras con prosodia neutralizada.
-
Frases 14, 17: dado que los tipos de cuentas y nombres de entidades
implicaban igualmente la lectura de nombres compuestos de acuerdo con una
sintaxis restringida, también se les agrupo en el campo SINTAXIS SIMPLE
ENUNCIATIVA.
-
Frases 16, 19, 21: los campos variables contenidos en todas estas frases
tenían en común el pertenecer a frases patrón interrogativas y el encontrarse
en posición final de frase. Por ello, se agruparon dentro del campo
SINTAXIS SIMPLE INTERROGATIVA. A fin de completar este campo
de cara a futuras aplicaciones, se planteó su ampliación con la inclusión de
compuestos (movimientos bancarios, etc y nombres propios), en oraciones
interrogativas y posición final.
-
Frase 4: para la síntesis de horas en posición final o no final, se pensó que
compensaba la utilización de técnicas de concatenación de mensajes
pregrabados sin modificación prosódica.
-
Frase 12: dada la poca variedad de vocabulario relacionada con el estado de
un cheque, se pensó que podría ser preferible tratar este caso mediante la
reproducción de mensajes pregrabados.
22
Capítulo 3
-
La base de datos
Frase 13: el tratamiento de números de teléfono podría ser igualmente un
caso de reproducción de mensajes pregrabados, ya que resultan de utilidad
general para numerosas aplicaciones.
-
Frase 15: sintetizar una letra y un número es una tarea que puede ser
fácilmente resuelta mediante mensajes pregrabados, dada la escasa variedad
que va a presentar este campo.
Al final de todo este análisis se llegó a los siguientes campos variables:
1. NOMBRE PROPIO ENUNCIATIVA: se grabó una base de datos con
nombres de puertos, personas, etc en oraciones enunciativas y posición
entre-pausas.
2. NOMBRE PROPIO INTERROGATIVA: se decidió incluir este caso en el
campo 4, que se cita más adelante.
3. SINTAXIS SIMPLE ENUNCIATIVA: Se grabó una base de datos con
sintagmas nominales de variada complejidad, en oraciones enunciativas y
posición entre-pausas.
4. SINTAXIS SIMPLE INTERROGATIVA: se grabó una base de datos con
sintagmas nominales de variada complejidad, en oraciones interrogativas. Se
amplió la base de datos con apellidos, etc. con el objeto de poseer un mayor
número de datos que nos ayudasen a obtener datos sobre la prosodia que
fuesen más fiables.
5. HORAS: se decidió reproducir este campo en lugar de sintetizarlo.
6. TELÉFONOS: se decidió reproducir este campo.
7. LETRA-NÚMERO: se decidió reproducir este campo.
Por todo lo dicho anteriormente, al final se pasó del conjunto inicial de 22 frases
a un total de 19, eliminándose de la propuesta inicial las frases 7 (nombre propio en
interrogativa), 13 (número de teléfono) y 15 (letras y números) [Montero, 99].
Una vez determinadas las distintas agrupaciones de campos variables y frases
portadoras con vistas a la grabación de la base de datos, el siguiente paso consistió en
seleccionar dentro de la lista global con todos los valores de dichos que debían ser
sintetizados en la aplicación, un conjunto reducido a partir del cual se pudiesen obtener
23
Capítulo 3
La base de datos
datos fiables sobre la curva de entonación a seguir. Con este subconjunto del total debía
ser posible elaborar un modelo de entonación y duraciones adecuado para la generación
de la prosodia automática, y poder resintetizar cualquiera de los valores propuestos.
De cara a seleccionar las frases que iban a ser finalmente grabadas (los distintos
“valores” de entre la lista total que íbamos a grabar, de tal modo que a partir de esta
reducida selección se pudiesen obtener datos “fiables” sobre la generación de prosodia
automática, y así poder sintetizar satisfactoriamente todo el conjunto de posibles
valores), se siguieron una serie de criterios en función de todos los aspectos que influían
en la síntesis de la prosodia de un texto general. Dado que tan sólo podíamos grabar
unas 600 frases, y que con esta cantidad resultaba imposible reproducir la distribución
de probabilidad general de un texto general (aproximadamente la misma distribución de
probabilidad de fonemas y contextos, de sílabas acentuadas, diptongos...) se optó por
emplear los siguientes criterios de selección:
-
Criterio
fonético:
se
intentó
conseguir
una
distribución
fonética
(probabilidad de aparición de cada fonema) que no se alejase más allá de un
5 % (como máximo) de la distribución original de la base de datos de que se
disponía (con la totalidad de valores).
-
Criterio silábico: se trató de reproducir la distribución original de sílabas
acentuadas/no acentuadas, abiertas/cerradas, con diptongo/sin diptongo, en
posición final/en posición no final, siguiendo el mismo criterio del 5 % de
desviación máxima.
-
Criterio acentual: se buscó una distribución adecuada de palabras
acentuadas/palabras función, oxítonas/paróxitonas/proparoxítonas.
-
Criterios de palabras: dado que los nombres que iban a ser sintetizados
podían ser compuestos, se buscó reproducir la base de datos original en
cuanto a número de palabras por campo variable y número de sílabas por
palabra.
En cuanto a la selección de valores para la base de datos de nombres propios,
estos fueron resumidos mediante un programa automático de selección de nombres a
partir de las listas completas del GTH y Natural Vox de puertos, pueblos y apellidos.
Para el resumen de los apellidos se mezclaron criterios de selección probabilística (se
24
Capítulo 3
La base de datos
tomaron los apellidos más frecuentes presentes en las guías telefónicas españolas) y de
resumen automático. En total, se decidió grabar un total de 660 frases distribuídas según
se indica a continuación:
· Frases 2 y 3: 3 campos variables, 50 puertos por campo: 150 puertos, 100
frases.
· Frases 6, 7 y 17: 3 campos variables: 360 apellidos (150 apellidos simples
resumidos, 130 apellidos simples muy frecuentes y 80 apellidos compuestos: 80
apellidos simples muy frecuentes + 80 apellidos simples resumidos), 360 frases.
· Frases 1, 4, 5 y 19: 5 campos variables, 50 pueblos por campo: 250 pueblos,
200 frases.
Para la base de datos con sintagmas nominales en oraciones enunciativas se
grabaron las listas completas asociadas a los campos variables (no había que resumir
datos al carecer de una cantidad mayor que el número de frases a grabar), salvo en el
caso de los bancos, en cuyo caso se empleó una combinación del resumen automático y
un conjunto de bancos de nombre no castellano elegidos manualmente. En total, había
307 frases repartidas según sigue:
· Frases 8 y 9: 4 campos variables: 150 movimientos bancarios (36+3*38), 74
frases (36+38).
· Frase 10: 1 campo variable: 23 operaciones bancarias, 23 frases.
· Frase 11: 1 campo variable: 7 estados de cheques, 7 frases.
· Frase 12: 2 campos variables: 43 tipos de cuentas y tarjetas, 172 nombres de
bancos (157 nombres castellanos resumidos + 15 no castellanos elegidos
manualmente), 172 frases (43 + 43 + 43+ 28+ 15).
· Frase 14: 1 campo variable: 31 fondos de inversión, 31 frases.
En cuanto a la base de datos con sintagmas nominales en oraciones
interrogativas, dado que no había una gran variedad de datos, se grabaron las listas
completas asociadas a los campos variables, ampliándolas con movimientos bancarios
(escogidos manualmente de manera que el número de palabras contenido no fuese
superior a 3 en cada movimiento seleccionado, cuidando de no repetir las palabras más
25
Capítulo 3
La base de datos
frecuentes en este tipo de textos) y completándolo con apellidos y pueblos
seleccionados automáticamente.
De este modo se pretendía conseguir un mayor número de datos de cara a la
elaboración del modelo de entonación para la generación de la prosodia automática. Al
final resultó un total de 600 frases distribuidas de la siguiente forma:
· Frase 13: 1 campo variable: 43 tipos de cuentas y tarjetas + 34 movimientos
seleccionados + 123 apellidos resumidos, 200 frases.
· Frase 15: 1 campo variable: 31 fondos de inversión + 46 movimientos
seleccionados + 123 apellidos resumidos, 200 frases.
· Frases 16 y 18: 2 campos variables: 10 divisas, 20 “tipos de información” +
48 movimientos seleccionados + 122 apellidos resumidos, 200 frases.
La base de datos de emociones.
A diferencia del caso de la base de datos de voz femenina, en el que se realizó la
grabación de los difonemas empleando frases portadoras para los mismos, en este caso
se grabaron un conjunto de párrafos, frases e incluso palabras aisladas, empleándose
luego todos los difonemas de la frase o párrafo para la constitución de la base de datos.
Además, hay que tener en cuenta que el propósito que se pretendía con esta base de
datos era completamente diferente al anterior, ya que en este caso se trataba de emplear
dicha base de datos en un sintetizador de propósito general (en teoría debería ser posible
sintetizar cualquier enunciado de la lengua castellana).
Para la creación de la base de datos "de emociones" se utilizó un conjunto de
frases y párrafos grabados bajo un formato *.pcm para cada una de las emociones con
las que se iba a trabajar, esto es:
· neutra: 15 frases + 34 frases en párrafos (aproximadamente unas 1400
unidades).
· tristeza: 15 frases + 31 frases en párrafos (aproximadamente unas 1250
unidades).
26
Capítulo 3
La base de datos
· alegría: 15 frases + 41 frases en párrafos (aproximadamente unas 1230
unidades).
· sorpresa: 15 frases + 45 frases en párrafos (aproximadamente unas 1250
unidades).
Hay que destacar que fue necesario construir una base de datos independiente
para cada emoción, siendo en principio todas las frases y párrafos a emplear
enunciativos.
El marcado de la base de datos.Una vez obtenidos los ficheros *.pcm con las frases portadoras para la base de
datos destinada a la síntesis de dominio restringido, y con las frases y párrafos para la
síntesis con emociones, el siguiente paso a seguir fue el de la segmentación y marcado
de dicha información, proceso que fue dirigido por D. Juán Manuel Montero (profesor
perteneciente al Grupo de Tecnología del Habla de la ETSIT). Para llevar a cabo dicho
marcado, se empleó la herramienta PCV para Windows desarrollada por el GTH que,
entre otras cosas, nos permite la visualización y el análisis de la señal vocal.
Conviene aclarar que el proceso seguido a la hora del marcado fue exactamente
el mismo, tanto para el caso de la base de datos de voz femenina como para el caso de la
base de datos de emociones, con la única diferencia de que en el caso de la base de
datos de voz femenina solamente se hacía el marcado de la parte que nos interesaba,
esto es, sólo se marcaba dentro de la frase portadora la parte correspondiente al campo
variable, que era la fuente de la que se iban a obtener los difonemas.
La herramienta PCV para Windows nos permitió marcar la duración y tono de
los archivos de voz, generándose un archivo con extensión *.par para cada frase, donde
se guardaba la información relativa a la duración y tono de los fonemas contenidos en la
misma (en el caso de la base de datos para la síntesis de dominio restringido sólo
apareceía la información sobre la parte marcada, que como ya se dijo se correspondía
con el campo variable de la frase portadora).
27
Capítulo 3
La base de datos
La segmentación de las frases en fonemas se realizó de forma manual. Mediante
la escucha de cada una de las frases se fueron colocando las etiquetas que intentaban
aislar los distintos fonemas que estaban presentes en la misma, asociando una
determinada letra a cada etiqueta, correspondiéndose normalmente dicha etiqueta con el
nombre del fonema (estas etiquetas debían estar de acuerdo con la lista de etiquetas
permitidas para los fonemas definidas en el programa, que más tarde realizaba la
extracción automática de los difonemas).
La información sobre la segmentación de la frase en fonemas quedaba registrada
en el fichero *.par de la frase en concreto, en el que además de aparecer el nombre dado
por el usuario para cada etiqueta aparecían las posiciones del comienzo y final de las
mismas dentro de la frase, expresándose ambos valores en milisegundos.
Figura 3.1 Etiquetas generadas mediante el programa PCV-GTH.
28
Capítulo 3
LBR:
LBR:
LBR:
LBR:
LBR:
LBR:
0.098250,
0.180875,
0.255750,
0.287313,
0.348125,
0.445688,
La base de datos
0.180875,
0.255688,
0.286313,
0.345938,
0.445688,
0.618563,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
X
A
R
D
I
N
Figura 3.2 Líneas identificativas de las etiquetas en el fichero *.par
En cuanto a la generación de las marcas de tono (marcado de las frases), el
programa PCV emplea un método semiautomático de generación de la curva de tono.
La aplicación dispone de una utilidad para la extracción del tono o marcado de la
excitación glotal automática, de tal modo que coloca de forma automática las marcas de
tono en el fichero. Sin embargo, posteriormente resulta necesario realizar una revisión
manual de dicho marcado con el objeto de corregir los errores producidos en la
generación automática de marcas de tono (omisión de marcas debida a la falta de
energía en la señal, duplicado de la frecuencia fundamental...).
Esta revisión manual tuvo una mayor importancia, sobre todo en aquellas
emociones en las que la forma de onda presentaba una mayor cantidad de
irregularidades (como es el caso por ejemplo de la sorpresa o el enfado), ya que al
tratarse de señales con formas de onda que en muchos casos no presentan demasiada
periodicidad y que se ven sometidas a cambios muy bruscos de intensidad y ritmo, el
programa cometía muchos errores en la generación automática de las marcas,
debiéndose recurrir prácticamente en estos casos al marcado manual de los ficheros por
parte de una persona experta en dicho proceso.
El algoritmo empleado por el programa PCV para la extracción de las marcas de
tono se basa en la búsqueda del punto de máxima energía de la señal de voz, o lo que es
lo mismo, el punto de cierre de la glotis, colocándose una marca en cada periodo de voz.
Para buscar dicho punto se combinan dos estimadores: el máximo de la envolvente de
Hilbert y el punto de excitación causal del filtro de síntesis LPC que produce un mínimo
error cuadrático medio en el periodo a tratar. Al igual que en el caso de las etiquetas, las
29
Capítulo 3
La base de datos
información sobre las marcas de pitch así como su posición dentro del fichero se
almacenaba en el fichero de parámetros (*.par) de la frase.
Figura 3.3 Detalle de las marcas de tono y curva de tono
PIT:
PIT:
PIT:
PIT:
PIT:
PIT:
PIT:
PIT:
PIT:
0.181688,
0.190125,
0.199375,
0.208625,
0.217688,
0.227125,
0.236750,
0.246688,
0.256125,
118.518517
108.108109
108.108109
110.344826
105.960266
103.896103
100.628929
105.960266
84.210526
Figura 3.4 Posición y distancia en tono con respecto de la marca anterior en el fichero
*.par
30
Capítulo 3
La base de datos
3.3. Extracción de los difonemas.
Una vez que se dispuso del conjunto de ficheros *.par revisados, con la
información sobre la duración y posición de los fonemas (segmentación) y posición de
las marcas de tono (marcado), de cada una de las frases que fueron grabadas, el
siguiente paso a seguir fue proceder a la extracción de los difonemas contenidos en
dichas frases, de cara a posteriormente generar la base de datos con todos esos
difonemas.
Con el objetivo de agilizar y hacer más sencillo en todo lo posible el proceso de
extracción de los difonemas de cada una de las frases constituyentes de la base de datos,
lo que se hizo fue emplear un conjunto de ficheros por lotes de MSDOS (*.bat) que se
encargaban de realizar toda la secuencia de procesos de una manera automática. Hay
que destacar que el proceso seguido para la extracción de la base de datos fue el mismo
para los dos tipos de bases de datos (dominio restringido y emociones -esta última en
realidad sería una para cada tipo de emoción contemplada).
El proceso comenzaba haciendo una llamada al fichero regenera.bat:
del pal.dep
call borra.bat
for %i in (@frases.dir) gosub :PROCESA
call curvaf0.bat
quit
:PROCESA
set FRASE=%i
cd %FRASE
copy ..\gendb.ini
copy ..\sacadif.ini
copy ..\raw.ini
copy ..\atonas.lis
call ..\superbat @%FRASE.dir
call ..\promedio.bat %FRASE
type pal.dep >>..\pal.dep
cd ..
return
31
Capítulo 3
La base de datos
El programa comenzaba haciendo una llamada al fichero por lotes borra.bat,
que básicamente se encargaba de eliminar toda la información sobre extracción de
difonemas que se hubiese producido en un procesamiento anterior. Para ello, debemos
tener en cuenta que la manera de almacenar la información relativa a dicho análisis
siempre era la misma, siguiendo una estructura de directorios de la forma:
frases.dir
frase1
·bv01001
·bv01002
....
frase1.dir
frase5
·bv05001
·bv05002
...
frase5.dir
.......
Como se puede ver, había una serie de carpetas de nombre frase*, que lo que
contenían era la información asociada a las frases que se habían grabado de dicho tipo
(ver el epígrafe anterior), guardando la información de cada frase en concreto en una
subcarpeta con el nombre de dicha frase, así el directorio frase 2 contendría todas
aquellas frases en las que el campo variable era un nombre de puerto ("La nacional I
tiene, en Madrid, el puerto de NOMBRE DE PUERTO, con cadenas.") y la carpeta
bv201 contendría la información relativa a la primera frase grabada de este tipo.
Una vez eliminada la información residual procedente de procesamientos
anteriores, comenzaba realmente el proceso de la extracción de difonemas. El fichero
regenera.bat leía la información contenida en el fichero frases.dir, que no era otra cosa
que una lista con los tipos de frase que debía procesar (frase1, frase2 .....). Para cada una
32
Capítulo 3
La base de datos
de dichas "frases" (en realidad como hemos visto se trataba de un grupo de frases con
una estructura común) se llamaba a la subrutina PROCESA. En esta rutina lo que se
hacía era leer de un fichero contenido en el directorio de la frase (frase*), y de nombre
frase*.dir -siendo * el número concreto de frase-, la lista de frases que debían ser
procesadas. Este fichero de nombre frase*.dir se le pasaba como argumento a otro
fichero por lotes de nombre SUPERBAT.BAT, que era el encargado de hacer la
llamada a los distintos programas involucrados en la extración de los difonemas.
El fichero SUPERBAT.BAT disponía de una serie de parámetros que
posibilitaban que trabajase de varias maneras:
· MODO_CD_SIN_TEXTOS : a 0 indica que los ficheros *.par y *.txt se leen
del CD-ROM y el *.pcm del disco duro; a 1 indica que los ficheros *.par y *.txt se leen
del disco duro y los *.pcm del CD-ROM. Para la generación de las bases de datos de
emociones, este valor se pone a 0.
· MODO_COPIA: a 1 indica que para cada procesamiento se crea un directorio
de nombre PCM_TMP, en el cual se guarda una copia de los ficheros *.pcm *.par y
*.txt, eliminándose toda la información contenida en dicho directorio procedente de
procesamientos anteriores.
· RES_DEBUG: a 1 indica que, tras la ejecución de cada uno de los programas
que componen el proceso, se muestra en pantalla el fichero de depuración asociado a los
mismos.
A su vez, el programa podía recibir como argumento o bien un fichero *.par
(dando como argumento al programa el nombre del fichero, p. ej. superbat.bat bv101),
o bien una lista con los nombres de los ficheros *.par que debía tratar. Estas listas se
encontraban dentro de un fichero, y la forma de decirle al programa que el argumento
(fichero) que le estábamos pasando en realidad lo que contenía era una lista de ficheros,
era escribiendo antes del nombre del fichero el símbolo @ (p. ej. superbat.bat
@frase1.dir)
Al ejecutar el fichero por lotes SUPERBAT.BAT en realidad estábamos
realizando, además de la extracción de los difonemas, una resíntesis de cada una de las
frases contenidas en el fichero frase*.dir, para lo cual se hacía uso de todo el conjunto
33
Capítulo 3
La base de datos
de programas que posteriormente tendrían que ser empleados en el sistema completo.
Esto es, en primer lugar se hacía una llamada al programa encargado de extraer los
difonemas de la frase a partir de la información contenida en el fichero *.par, luego se
construía una base de datos con todos los difonemas de la frase que acababan de ser
extraidos y, por último, se empleaba esta base de datos para tratar de resintetizar la frase
original.
Dado que en la resíntesis se empleaban los difonemas originales, el sintetizador
no debería encontrarse en principio con ningún problema de cara a obtener unos
resultados con una calidad bastante elevada (similar a la de la frase original), ya que las
modificaciones prosódicas que debería realizar sobre las unidades tendrían que ser
mínimas, limitándose a meros redondeos en las duraciones y a una linealización del
tono fundamental, por parte del algoritmo TD-PSOLA.
El hecho de realizar una resíntesis completa de los ficheros, en lugar de ejecutar
exclusivamente el programa que extraía los difonemas de los mismos, se justifica de la
siguiente manera:
Puesto que la revisión manual de todos y cada uno de los ficheros de parámetros
hubiera resultado muy costosa desde un punto de vista temporal, se recurrió a una
solución un poco más compleja para la extracción de los difonemas que la simple
ejecución del programa de extracción, permitiendo esta estrategia, en la mayor parte de
los casos, detectar aquellas frases que contenían errores de marcado, sin tener que
revisar todo el fichero de parámetros (*.par).
Durante la aplicación del fichero por lotes a las diferentes frases de que
disponíamos, nos encontramos con dos tipos de situaciones diferentes, aparte de
aquellas en las que la resíntesis se producía de forma satisfactoria y que, por lo tanto, en
principio no eran susceptibles de una revisión detallada. Por un lado nos encontramos
con frases que el fichero por lotes no era capaz de resintetizar como consecuencia de
algún error grave en el fichero de parámetros (*.par) de la misma (del tipo de etiquetas
mal marcadas o sin marcas de pitch en su interior, o de generación de tonos nulos para
algunos difonemas). La forma de corregir estos errores casi siempre es la misma, y
consiste en la revisión manual de los ficheros y en la corrección del problema causante
34
Capítulo 3
La base de datos
del error a través del programa de edición PCV-GTH, debiendo posteriormente repetir
el proceso de la resíntesis para cerciorarse de que el problema ha sido resuelto de una
forma satisfactoria.
Por otro lado nos encontramos con aquellas frases que el fichero por lotes
conseguía resintetizar sin ningún problema pero que por el contrario, al ser escuchadas,
presentaban una calidad muy inferior a la que cabría esperar. En este caso la solución no
se presenta como algo tan directo, siendo necesario recurrir a los distintos ficheros de
depuración generados por los programas ejecutados, pudiendo de este modo detectar el
programa concreto que se encontró con alguna situación anómala y tratando de
corregirla correspondiéndose estos errores más bien con errores internos de los
programas o situaciones no previstas por los mismos.
El
primer
programa
que
se
ejecutaba
en
SUPERBAT.BAT
era
SACADIF32.exe (desarrollado en el GTH), que era el programa encargado de hacer la
extracción automática de los difonemas de la frase. Este programa recibía como
argumentos el fichero de muestras (*.pcm), de parámetros (*.par) y con el texto de la
frase (*.txt).
La extracción de los difonemas en SACADIF32.exe se hace de forma
automática, a partir de la información contenida en el fichero de parámetros asociado a
la frase, basándose para ello en una serie de reglas dependientes del tipo de fonema, con
el fin de determinar el punto de corte óptimo del mismo (aquel en el que la señal de voz
presenta una mayor estabilidad y que por lo tanto nos ofrece mayores ventajas de cara al
pegado). Así, por ejemplo en el caso de los sonidos vocálicos se supone que el punto de
máxima estabilidad se encuentra justo en la zona central, en los sonidos fricativos se
corta por las zonas inicial y final, y en los sonidos oclusivos se tiende a cortar por el
silencio inicial... (estos dos últimos para reducir el número de unidades a generar).
Hay que destacar que todo este conjunto de reglas de carácter “estático” suponen
una solución al problema que no siempre va a ser la más adecuada, traduciéndose este
aspecto en algunos casos concretos en la generación de difonemas que no van a ser muy
estables en la zona de concatenación, lo que influirá negativamente en calidad de la
síntesis.
35
Capítulo 3
La base de datos
El programa genera un conjunto de ficheros que contienen distinta información
relacionada con los difonemas. Los ficheros que se producen tienen como nombre el del
difonema extraído de la frase y las posibilidades para las extensiones son:
-
*.mst: muestras del difonema. Se añaden 512 bytes correspondientes a la
cabecera de los ficheros.
-
*.par: marcas de pitch para cada difonema, así como etiquetado del mismo.
-
*.mar: posición de las marcas del difonema (en formato binario). Contiene
información sobre el número de muestras, número de marcas, posición -en
número de muestras- de dichas marcas y frecuencia de muestreo.
-
*.ram: posición de las marcas en formato texto. Contiene la misma
información que el *.mar.
-
*.mfc: coeficientes mel frequency cepstrum de las tramas del difonema.
-
*.ene: coeficientes de energía en bandas logarítmicas de las tramas del
difonema. Estas bandas son las mismas que se emplean para el cálculo de los
coeficientes *.mfc.
Además de esto, se genera un fichero asociado a la frase con extensión *.di que
contiene todas los difonemas de la misma junto a sus características prosódicas de
duración y tono.
X 41 47
XA 79 108
AR 53 96
R1_ 15 91
_D1 29 112
D1I 78 128
IN 135 81
N_ 88 81
__ 9 100
Figura 3.5 Aspecto típico de un fichero *.di.
El programa también genera un fichero de nombre listetiq que contiene una lista
con los difonemas presentes en la frase y un archivo con el nombre de la frase y
36
Capítulo 3
La base de datos
extensión *.crr. En este archivo aparece toda la información contenida en el fichero
*.par -con el mismo formato para etiquetas y marcas de tono- y además aparecen unas
nuevas secciones de la forma:
LBO: muestra_inicio, muestra_media, muestra_fin, fonema (empleado para
SPEECHDAT)
y
LBB: muestra_inicio, muestra_fin, fonema (empleado para la generación de la
curva de tono)
Adicionalmente se genera un fichero con el nombre de la frase y extensión
*.dps, en el cual aparecen todos los mensajes de depuración que saca el programa
SACADIF32.exe por pantalla. Entre estos mensajes cabe destacar los siguientes:
-
información sobre fonemas remarcados, como en el caso de las oclusivas o
fricativas, en los cuales se obvian las marcas generadas por el programa PCV
y se colocan unas nuevas con una frecuencia fija.
-
información sobre el alineamiento entre el fichero *.txt de la frase y el *.par
de la misma, y en caso de existir diferencias entre ellos, éstas se notifican al
usuario.
-
información sobre la extracción de los difonemas en cuanto a su localización
y duración.
-
cálculo del pitch de los difonemas: se calcula además de las marcas de tono
contenidas dentro del difonema, el tono medio del mismo. Este tono medio
luego puede ser corregido en función de si difiere más alla de un tanto por
ciento del de los fonemas fiables presentes en el mismo (normalmente suele
ser una vocal, en cuyo caso pasa a tener ese valor) o en el caso de tratarse de
un difonema sordo.
Por último, también se crea un fichero con el nombre de la frase y extensión
*.dep, en el cual aparece la misma información que en el fichero *.crr en el que
aparecen las correcciones citadas anteriormente.
Una vez que fueron extraídos los difonemas de la frase, el siguiente paso a
seguir era el de generar una pequeña base de datos con los mismos para realizar más
37
Capítulo 3
La base de datos
tarde la resíntesis de la frase y comprobar de este modo que los difonemas habían sido
bien generados. Para ello, en primer lugar se ejecutaba el programa lista.per que lo que
hacía era pasar del formato de los ficheros *.di de las frases al formato que leía el
programa gendb32.exe (el encargado de generar la base de datos) que era de la
siguiente forma:
AB1 74 155 (formato del *.di con nombre, duración y tono final)
frente a
AB1@1 AB1 74 160 155 bv01026/ KA frase1/ (formato extendido con nombre
renombrado, nombre de la etiqueta, duración, tonos inicial y final, directorio de
procedencia, unidad anterior en la frase original y frase de procedencia)
Este cambio de formato fue motivado por las nuevas características que había
que almacenar en la base de datos de cara a la selección de unidades, pero este aspecto
será tratado más adelante.
Una vez efectuado el cambio de formato, obteniendo como resultado el fichero
listetiq.lis, se ejecutaba el programa GENDB32.exe (una versión modificada de la
desarrollada en el GTH) que recibía como argumentos este fichero, y el nombre del
fichero que iba a contener la base de datos (*.dfm). El programa iba tomando la
información contenida en los ficheros *.mst y *.mar asociados a los distintos difonemas
que aparecían en listetiq.lis, y la iba almacenando en el fichero de la base de datos.
Además de obtenerse como resultado el fichero *.dfm con la base de datos en sí,
también se generaban entre otros un fichero con extensión *.mfd que contenía la misma
información que el *.dfm pero en formato texto, un fichero con extensión *.gdb con
información de depuración.
El último paso en la resíntesis estaba constituido por la ejecución del programa
CONCA32.exe (desarrollado en el GTH), que recibía como argumento de entrada el
fichero *.di que había generado SACADIF32.exe y que generaba el fichero con la frase
sintetizada (pru.mst), y un fichero con extensión *.dpc que contenía información de
depuración.
38
Capítulo 3
La base de datos
Al final de todo el proceso se comprimían todos los ficheros generados por los
distintos programas en un fichero con el nombre de la frase y con extensión *.arj, que se
almacenaba dentro del directorio correspondiente a la frase.
3.4. Generación de la base de datos.
El último paso de cara a la generación de la base de datos consistió en agrupar
en un único fichero los difonemas procedentes de las distintas frases que habían sido
extraidos en las fases anteriores. Este fichero se suele identificar por medio de una
extensión *.dfm y constituye la base de datos en sí al contener para cada difonema,
además de sus muestras todos los datos asociados al mismo en cuanto a marcas de tono
y su posición, duración, tonos inicial y final... Además se trata del fichero del que
tomarán la información tanto el programa de selección de unidades- de cara a escoger
las unidades que mejor se ajusten a nuestras necesidades en un momento concretocomo el sintetizador de forma de onda para generar la señal final con la secuencia
sintetizada.
El mecanismo que se empleó para recoger toda la información en un único
fichero consistió en lo siguiente:
Se realizó un programa de proceso por lotes (*.bat) de MS-DOS de nombre
Crea_Bd.bat.
SET DIRECTORIO_LISTA=D:\usuarios\mario\src\emocion
SET EMOCION=%1
del %EMOCION.dep
for %i in (@frases.dir) gosub :PROCESA
EDIT %EMOCION.dep
iff %@FILES[%EMOCION.prb]==0 then
buscadb.exe %EMOCION.dep
ELSE
buscadb.exe %EMOCION.dep %EMOCION.prb
endiff
EDIT listetiq
gendb32.exe listetiq %EMOCION.dfm > %EMOCION.dpg
quit
39
Capítulo 3
La base de datos
:PROCESA
set FRASE=%i
cd %FRASE
for %j in (@%FRASE.dir) do gosub procesa2
cd ..
return
:procesa2
echo %j
cd %j
ARJ x -y *.arj *.di *.pcm *.mst *.mar *.mfc *.ene *.par
for %k in (*.di) gosub procesa3
cd ..
return
:procesa3
echo %j/%k
echo FICHERO: %j
PERL %DIRECTORIO_LISTA\LISTA.PER %j %i<%k
>>%DIRECTORIO_LISTA\%EMOCION.dep
return
El programa *.bat recibía como argumento el nombre de la "emoción" de la base
de datos que ibamos a generar. A continuación el programa leía el contenido del fichero
frases.dir, que por similitud con lo que fue explicado en el epígrafe anterior contenía
una lista con las frases (en realidad con el tipo de frase) que iban a emplearse en la
creación de la base de datos. En el caso de las emociones, la estructura de directorios
que se empleó fue la misma que para la síntesis de dominio restringido, esto es:
frases.dir
neutra
rn010101
rn010201
....
neutra.dir
sorpresa
rs010112
rs010212
....
sorpresa.dir
.....
40
Capítulo 3
La base de datos
Durante el procesamiento se iban recorriendo uno a uno los directorios de las
frases, dentro de las cuales había un fichero que contenía toda la lista de frases a
emplear (frase*.dir). Para cada frase, se descomprimía toda la información relativa a los
ficheros *.MST, *.MFC, *.PAR, *.ENE, *.MAR, *.PCM y *.DI. A continuación se
tomaba la información contenida en el fichero *.DI, y previo paso por el programa
lista.per para cambiar el formato de las etiquetas, esta información se iba agregando a
un gran fichero cuyo nombre es el nombre de la emoción, y cuya extensión es *.DEP.
$, = ' ';
# set output field separator
$\ = "\n"; # set output record separator
$tonoant=-1;
$difonemaAnt="__";
# recorre el fichero de entrada l'inea a l'inea
while (<STDIN>)
{
# elimina el \n del final de la l'inea
chop;
# crea un array de variables 'campos' en el que cada posici'on
# del array contiene uno de los campos de la l'inea le'ida:
# el separador de campos es el espacio en blanco
@campos=split(/ /,$_,9999);
if ($tonoant==-1)
{
$tonoant=$campos[2];
}
# escribe la salida: todas las variables comienzan por $
# los 'indices de los arrays comienzan en 0
printf "%s %s %s %s %s %s/ %s %s\n",
$campos[0],$campos[0],$campos[1],$tonoant,$campos[2],$ARGV[0],$difonemaAnt,$ARGV[1];
$tonoant=$campos[2];
$difonemaAnt=$campos[0];
}
Como se puede ver, el programa iba recorriendo línea a línea el fichero de
entrada (con el formato ya visto para los ficheros *.DI), y creaba un array de datos (el
array CAMPOS[ ]), con los distintos campos (nombre de la unidad -$CAMPOS[0]-,
duración -$CAMPOS[1] – y tono final -$CAMPOS[2]) contenidos en dichas líneas.
Posteriormente reorganizaba los campos según el formato que necesitaba el programa
que generaba la base de datos, y añadía los datos del tono inicial de la unidad (tomado
del tono final de la unidad anterior, y en caso de ser la primera unidad del fichero se
copiaba del tono final de dicha unidad) y del contexto fonético de procedencia (etiqueta
41
Capítulo 3
La base de datos
de la unidad de la línea anteior del fichero). También se añadía para cada línea el
nombre del fichero de que procedía la etiqueta, nombre que se obtenía del argumento de
entrada al programa ($ARGV[0]) y de la frase portadora ($ARGV[1]).
Tras haber recorrido todos los directorios contenidos en frases.dir y en los
ficheros de la forma frase*.dir de cada una de las frases involucradas, se obtuvo como
resultado toda la lista de etiquetas disponibles,
contenida en el
fichero
“EMOCIÓN”.dep. A pesar de que este fichero ya era una lista con todos los difonemas
disponibles y sus características prosódicas, aún no tenía el formato adecuado para
facilitar la búsqueda en el mismo, careciendo además de información sobre algunas de
las características de las unidades. Por lo tanto era necesario aún el paso por un
programa adicional, que era buscadb.exe.
Este programa recibía como argumento el fichero *.DEP de la emoción
generado anteriormente, y se encargaba de ordenar la lista en él contenida
alfabéticamente, para facilitar la búsqueda en la base de datos, incluyendo además la
información sobre los coeficientes *.MFC de cada uno de los difonemas (en realidad
solamente sobre los coeficientes pertenecientes a la primera y última trama de cada
unidad). El hecho de incluir información en el fichero listetiq sobre los coeficientes
*.MFC, fue por razones de eficiencia, ya que al hacerlo de este modo se minimizaban
drásticamente los accesos a disco duro y con ello el tiempo derivado de cargar dichos
datos a la hora de realizar la búsqueda de unidades.
A la hora de ejecutar el programa buscadb.exe vemos que en el fichero *.BAT
se comprobaba previamente si existía algún fichero con el nombre de la emoción y con
la extensión *.PRB, en cuyo caso se pasaba también este fichero como argumento de
entrada al programa. En este fichero se contenía una lista con las etiquetas asociadas a
difonemas que deseábamos que fuesen excluidos a la hora de generar la base de datos,
por tratarse generalmente de difonemas mal generados o de mala calidad. Este fichero
se creaba de una forma manual, añadiendo aquellos difonemas que tras ser utilizados en
la síntesis veíamos que debían ser excluidos de la base de datos. De esta manera, al
tratarse de un proceso de generación automático de la base de datos, en las siguientes
generaciones de la base de datos estos difonemas se saltarían, contribuyendo este hecho
a mejorar la calidad de la síntesis.
42
Capítulo 3
La base de datos
Además de todo lo anterior, el programa se encargaba también de renombrar
algunas de las unidades, dado que, al haber múltiples instancias de cada difonema en la
base de datos, la única forma de distinguirlas entre sí sólo podía ser a partir de su
nombre.
El criterio escogido para diferenciar las distintas instancias de cada difonema,
fue concatenar al final del nombre del mismo una cadena de la forma @X, donde X era
un número que se iba incrementando cada vez que aparecía una nueva instancia de la
unidad. Así, la primera vez que apareciese una unidad su nombre no se modificaría, la
segunda se le añadiría la cadena @1, la tercera vez @2 y así sucesivamente.
El resultado de la ejecución del programa era un fichero de nombre listetiq, en el
cual se hallaban todas las "etiquetas" asociadas a los difonemas constituyentes de la
base de datos ordenadas alfabéticamente. El formato típico de las “etiquetas” del fichero
listetiq era el siguiente:
AB1@1 AB1 71 157 129 bv417/ YA frase4/ 0 0
mfc: 2205 125 -24 25 22 3 13 -17 -14 2 97.135773
mfc: 1715 165 41 35 17 15 8 5 -1 -1 83.122070
La primera línea de cada etiqueta estaba compuesta por una serie de campos, que
representaban por orden:
-
nombre que va a tener la unidad dentro de la base de datos para
que pueda ser identificada de forma unívoca.
-
nombre de la unidad dentro de la frase original.
-
duración de la unidad expresada en milisegundos.
-
tono inicial de la unidad expresado en hertzios.
-
tono final de la unidad expresado en hertzios.
-
directorio en el que se encuentra la unidad.
-
nombre de la unidad precedente en la frase original.
-
frase a la que pertenece el directorio.
-
cluster asociado a la trama de mfc's inicial.
43
Capítulo 3
La base de datos
-
cluster asociado a la trama de mfc's final.
En cuanto a las dos últimas líneas, se trataba de los coeficientes mfc (mel
frequency cepstrum) de la primera y ultima trama del difonema respectivamente, cuya
utilidad y significado serán descritos más adelante. Estos coeficientes, a diferencia de
los datos anteriores no se extraían directamente del fichero *.di, sino que se encontraban
en los ficheros con extensión *.mfc que había para cada difonema dentro de los
directorios.
El fichero listetiq así modificado era el argumento de entrada del programa que
generaba el fichero de la base de datos en sí, que al igual que en el epígrafe anterior era
gendb32.exe. Como ya se explicó, este programa se encargaba de copiar para cada
“etiqueta” contenida en el fichero listetiq, los ficheros *.mst (fichero con las muestras
del difonema) y *.mar (fichero con las marcas y su posición) contenidos en el directorio
dado por la etiqueta, junto al resto de información de la misma (duración, tono,
coeficientes mfc ...) en un fichero con extensión *.dfm con un formato de 32 bits, que
constituiría la base de datos con toda la información necesaria sobre los difonemas que
requerirían los programas posteriores.
44
Capítulo 4
La selección de unidades
Capítulo 4: La selección de unidades.
El propósito fundamental de este epígrafe es el de explicar con todo grado de
detalle el mecanismo empleado por los distintos programas realizados para seleccionar a
partir de un texto objetivo a sintetizar (que contiene las características prosódicas de las
unidades, procedente del bloque de procesado lingüístico del Conversor Texto-Voz), las
unidades concretas de la base de datos que van a ser finalmente empleadas en la síntesis.
Como ya se reseñó anteriormente, el principal objetivo que se persigue en este
trabajo es mejorar la calidad de la síntesis de voz mediante la introducción de una
mayor variedad de unidades de la que nos encontraríamos en una base de datos de
difonemas convencional. Tradicionalmente, en este tipo de bases de datos se trabaja con
una sola instancia para cada tipo de unidad, teniendo esta unidad una serie de
características prosódicas (tono y duración) que la hacen que pueda ser considerada
como un ejemplo “típico” de la misma. Como es lógico pensar, con una sola instancia
de cada unidad no resulta posible representar todas las posibles combinaciones de tono
y duración que se van producir en la práctica (combinaciones que van a ser pedidas por
el programa que se encarga de generar la prosodia automática), de tal forma que en
algunas ocasiones se dará la circunstancia de que las características prosódicas de la
unidad objetivo no diferirán mucho de las de nuestra unidad patrón de la base de datos,
en cuyo caso no será muy grande la distorsión producida al adaptar la prosodia de la
unidad original a la de la unidad objetivo mediante TD-PSOLA y en consecuencia no
deteriorándose mucho la calidad de la síntesis. Sin embargo, en otras muchas ocasiones
la prosodia original será tan diferente de la perseguida, que las modificaciones
prosódicas que sea necesario realizar a la unidad para adaptarse a dichas características
pueden hacer que la distorsión introducida lleve incluso a hacer irreconocible la unidad
en el resultado final, lo que se traducirá en una importante degradación de la calidad de
la voz sintética generada.
Otro aspecto a tener en cuenta, además de la modificación en la prosodia de las
unidades, lo constituye el hecho de que éstas no se graban de forma aislada. En efecto,
las unidades son extraídas de un determinado contexto fonético, que por lo general no
45
Capítulo 4
La selección de unidades
tiene porque ser igual al contexto fonético en el que van a ser empleadas en la síntesis.
Este hecho se traduce en que una misma unidad procedente de distintos contextos
fonéticos, debido a los efectos de coarticulación entre los sonidos, va a tener distintas
estructuras de formantes y, en definitiva, un espectro diferente, lo que puede producir la
sensación de que se trata de diferentes unidades cuando la escuchemos. Esto,
evidentemente, también va a influir en la calidad de la síntesis.
Con el objetivo de mejorar dentro de lo posible estos dos efectos explicados
anteriormente, lo que se hizo fue introducir una mayor variedad de unidades en la base
de datos. Para ello, se introdujeron en la base de datos varias instancias para cada
unidad, lo que la dotó de una mayor variedad prosódica y de contextos fonéticos por
unidad debiendo este efecto revertir de una manera directa sobre la calidad final de la
síntesis. Esto es así porque el algoritmo TD-PSOLA se verá obligado a realizar cambios
mucho menos drásticos sobre la estructura de las unidades, reduciéndose por lo tanto
bastante la distorsión introducida al realizar el procesado de señal.
El hecho de construir bases de datos con varias instancias de cada unidad nos
permite modelar con mayor grado de detalle el lenguaje natural, pudiéndonos adaptar a
distintos acentos, entonaciones, expresión de emociones ... además de eliminarse la
necesidad de construir bases de datos específicas para cada aplicación, lo que resulta
claramente ventajoso desde el punto de vista de los desarrolladores de las mismas.
Llevando a su extremo la idea de introducir varias instancias para cada unidad de
la base de datos, si dispusiésemos de un buen conjunto de instancias para cada unidad –
no en cuanto al número sino en el sentido de ser bastante representativas de las distintas
posibilidades en cuanto a características prosódicas y contextos fonéticos que se nos
pueden presentar en el lenguaje natural- se podría pensar incluso en eliminar el
procesamiento de señal posterior. Es decir, se podría pensar en realizar la concatenación
directa de las unidades de la base de datos más adecuadas para cada caso particular con
su prosodia original, eliminándose la carga de cálculo asociada al TD-PSOLA. De esta
forma se eliminaría la distorsión derivada de modificar las unidades, aunque en algunos
casos se podría apreciar claramente un cambio en la prosodia y ritmo de los resultados
frente al objetivo buscado, lo que no sería ni mucho menos positivo. Si consiguiésemos
una “buena” base de datos la desviación no debería ser demasiada, quedando
46
Capítulo 4
La selección de unidades
compensada con creces por la drástica reducción de la complejidad de la síntesis, al
quedar reducida al mero pegado de unidades directamente tomadas de la base de datos.
Un aspecto muy importante a tener en cuenta al margen de lo anterior, es el
hecho de que dado el carácter finito de la base de datos hay que tener presente el hecho
de que incluso la mejor selección nunca se ajustará por completo a la pronunciación
buscada, por lo que siempre será necesario un procesado de señal posterior (TDPSOLA) que llevará asociado una distorsión. El objetivo perseguido con todo esto es
realizar la selección de unidades de tal forma que el procesado de señal adicional sea
mínimo y, por lo tanto, la distorsión introducida también lo sea.
La introducción de varias instancias de cada unidad en la base de datos hizo
aparecer dos nuevos aspectos que no se encontraban presentes en la metodología
clásica. Por un lado, fue necesario determinar el mecanismo a emplear de cara a
seleccionar las unidades de la base de datos, de tal forma que dicha selección
minimizase la distorsión producida al concatenar mediante TD-PSOLA. Por otro lado
apareció el aspecto de la capacidad de almacenamiento necesaria para trabajar con esta
estrategia de “grandes” bases de datos.
En relación a este último aspecto, es lógico pensar que el hecho de introducir un
mayor número de unidades tiene el efecto beneficioso de mejorar la calidad de la
síntesis [Black, 91], pero también hay que tener en cuenta que lleva asociado el aspecto
de necesitar una mayor capacidad de almacenamiento, lo que se traduce en ficheros que
contienen bases de datos mucho más grandes (al contener no sólo un mayor número de
unidades, sino también características adicionales a tener en cuenta de cada una de ellas
de cara a la selección) y, sobre todo, de tiempos de búsqueda y de proceso cuando
dichos ficheros son mucho mayores. En este sentido conviene darse cuenta de que no es
posible tratar de mejorar la calidad de la síntesis sólo a base de introducir una mayor
cantidad de unidades, ya que el tamaño de los ficheros y, sobre todo, los tiempos de
búsqueda en los ficheros y de ejecución de los programas asociados, llevarían a que la
síntesis en tiempo real sería impracticable, careciendo en ese caso por completo de
utilidad.
47
Capítulo 4
La selección de unidades
Con el objetivo de reducir la capacidad de almacenamiento necesaria se
emplearon distintas técnicas cuyo objetivo era eliminar aquellas unidades de la base de
datos que resultaban redundantes tanto desde un punto de vista prosódico, como de
contexto fonético, llegándose de este modo a un compromiso entre el tamaño de los
ficheros y la “calidad” de la base de datos. Este último aspecto se tratará más adelante.
4.1. El proceso de la síntesis por selección de
unidades.
En este apartado se va a explicar el mecanismo que fue necesario seguir para
realizar todo el proceso de la síntesis, partiendo del texto con la secuencia objetivo hasta
obtener como resultado el fichero con la secuencia sintetizada.
Al igual que en todos los procedimientos anteriores, para realizar la síntesis era
necesario ejecutar una determinada secuencia de programas para llegar al resultado
final. Para automatizar en el mayor grado posible este proceso se realizó un fichero por
lotes (*.bat) de MS-DOS que se encargaba de hacer las distintas llamadas con los
argumentos adecuados. Este fichero se llamaba sintetiza.bat y su contenido se describe
a continuación:
SET DIR_FRASES = D:\SINTESIS\FRASES
SET DIR_PRUEBAS =D:\SINTESIS
CD % DIR_FRASES
for %i in (*.uni) gosub :SINTETIZA
quit
:SINTETIZA
cd %DIR_FRASES
copy "%@NAME["%i"].uni" %DIR_PRUEBAS\prueba.di
cd %DIR_PRUEBAS
bunidad2.exe prueba listetiq >dep.dep
gendb32.exe prueba.lis pru.dfm >prueba.dpg
conca32.exe prueba.dif >prueba.dpc
return
48
Capítulo 4
La selección de unidades
En primer lugar, podemos ver que se definían dos directorios de trabajo. El
primero de ellos, DIR_FRASES, era aquel en el que se encontraban almacenados todos
los ficheros que contenían los distintos textos a sintetizar (generados por el programa
que da lugar a la prosodia automática). Estos ficheros se distinguían por una extensión
de la forma *.uni y tenían exactamente el mismo formato que los ficheros *.DI, esto es,
las líneas del fichero eran de la forma:
NOMBRE_UD
DURACION_UD TONOFINAL_UD
El otro directorio, de nombre DIR_PRUEBAS, era aquel en el que se iban
almacenando los distintos resultados, y que además contenía todos los programas
involucrados en la secuencia de la síntesis.
Una vez definidos estos directorios, el programa iba al directorio que contenía
los textos objetivo y, para cada uno de ellos, se realizaba todo el proceso de la síntesis.
El primer paso de cara sintetizar un texto determinado era cambiar la extensión de los
ficheros de *.uni a *.di para seguir con el criterio que había sido empleado hasta aquel
momento. Como se puede ver en el código del programa, no se realizaba simplemente
un cambio en la extensión de los ficheros, sino que se renombraba todo el fichero. Esto
fue hecho así porque los nombres que tenían dichos ficheros (que eran los que generaba
el programa con la prosodia automática) contenían, en algunos casos, espacios y en
ocasiones, eran demasiado largos, dando problemas al pasar dichos nombres como
argumentos a los programas.
Tras cambiarse el nombre del fichero, la primera llamada se hacía al programa
BUNIDAD2.exe, que recibía como argumentos el nombre de dicho fichero (con la lista
de difonemas objetivo a sintetizar), y el nombre del fichero que contenía la lista con
todas las unidades disponibles (en realidad las etiquetas asociadas a dichas unidades),
que en nuestro caso siempre iba a ser el fichero listetiq. El resultado de la ejecución de
este programa era otro fichero con el mismo nombre que el *.DI pero en este caso de
extensión *.DIF , que contenía la lista con los difonemas que habían sido seleccionados
dentro del total, en función de los distintos criterios que serán explicados más adelante.
49
Capítulo 4
La selección de unidades
El formato del fichero *.DIF era el mismo que el del *.DI; es más, en realidad se
trataba de una “copia” de este con la diferencia de que aparecían las etiquetas de las
unidades concretas que habían sido seleccionadas, pero con la duración y tono final
pedidos en el *.DI.
Además de esto, el programa también generaba un fichero con el mismo nombre
del *.DI, pero con la extensión *.INF, en el cual se hacía un resumen de las unidades
que habían sido seleccionadas, sacando la información sobre las características
prosódicas originales y las buscadas, y dándonos además información sobre la
localización de los ficheros y sobre el contexto fonético de procedencia. El aspecto
típico de estos ficheros es el siguiente:
Unidad: UE@6 directorio: BV19048/
Unidad anterior: ALU
duracion original: 72
duracion pedida: 60
tonos originales: 172 204
tonos pedidos: 185 201
Por último, también se generaba un fichero con el mismo nombre que los
anteriores y extensión *.LIS, que contenía una lista con todas las unidades
seleccionadas (ordenadas alfabéticamente), junto con la información sobre los
directorios de localización. Este fichero era el que empleaba el programa que generaba
la base de datos de cara a copiar la información sobre las unidades en la misma. El
formato típico de una línea de estos ficheros es el siguiente (básicamente es el mismo
que se sigue en el fichero listetiq):
AD1@25 AD1 70 178 167 BV01040/ MA FRASE1
El siguiente paso de cara a la síntesis consistía en generar la base de datos con
las unidades seleccionadas. Hay que destacar que, durante el periodo de desarrollo de
las aplicaciones ,se optó por esta estrategia de generar una base de datos que contuviese
tan sólo los difonemas que iban a ser empleados cada vez que se iba a generar una frase,
en lugar de generar toda la base de datos completa de una forma previa y cargar toda
esta base de datos de cara a la síntesis TD-PSOLA. Esto se hizo de esta manera con el
50
Capítulo 4
La selección de unidades
fin de reducir el tiempo de proceso al tratarse de ficheros con un tamaño
considerablemente grande, ya que el programa que generaba la síntesis TD-PSOLA en
primer lugar hacía una carga de toda la base de datos y una normalizacíon de las
energías de las unidades requiriendo este proceso mucho tiempo cuando los ficheros
eran muy grandes.
El programa que generaba la base de datos era el mismo que ya fue empleado en
el apartado anterior, esto es, GENDB32.EXE, recibiendo por lo tanto los mismos
argumentos (la lista con los difonemas de la frase a generar *.LIS y el nombre que iba a
tener la base de datos generada *.DFM) y generando los mismos ficheros de salida.
A continuación se hacía una llamada al programa CONCA32.EXE, que era el
encargado de realizar la síntesis según el algoritmo TD-PSOLA. Este programa recibía
como argumentos el nombre del fichero *.DIF que generó BUNIDAD2.EXE con la lista
de unidades a emplear y la base de datos que contenía dichas unidades. Al final de la
ejecución del programa se generaba un fichero de nombre pru.mst que contenía el
resultado de la síntesis TD-PSOLA.
Al final de todo el proceso se renombraban todos los ficheros “importantes”
(*.MST ...) según el nombre original de la frase de procedencia para evitar que los
ficheros se sobreescribieran en los siguientes procesamientos. Hay que destacar que en
cada uno de los procesamientos las salidas por pantalla de los distintos programas
ejecutados se redirigían a unos ficheros de texto con el fín de depurar los resultados
obtenidos.
4.2. El modelo de selección de unidades.
Como ya se citó, el punto de partida para el programa de selección de unidades
era un fichero de texto procedente de un modulo anterior del Conversor Texto-Voz que
contenía la secuencia de difonemas a sintetizar, acompañados de sus características de
duración y tono medio. El objetivo perseguido por el algoritmo de selección de
unidades era buscar la secuencia de unidades procedentes de la base de datos que mejor
se ajustase a la de la secuencia objetivo, en el sentido de que la utilización de dicha
secuencia tuviese como resultado la minimización de la distorsión en la síntesis
51
Capítulo 4
La selección de unidades
(distorsión que se produce durante el procesamiento de señal que lleva a cabo el
algoritmo TD-PSOLA).
Dentro de la base de datos cada unidad llevaba asociado un vector de parámetros
que la caracterizaba, siendo esta información en la que nos ibamos a basar de cara a la
selección. En nuestro caso, la información que se guardaba para cada unidad estaba
contenida en el fichero listetiq que, como ya fue descrito anteriormente, guardaba para
cada elemento de la base de datos las características que a continuación se relacionan:
-
una etiqueta que identificaba de forma unívoca a la unidad. Estas
etiquetas son necesarias para distinguir unas unidades de otras, y son
generadas según el mecanismo que ya fue explicado en el epígrafe anterior
durante la creación del fichero listetiq, esto es, concatenando al nombre
original de la unidad una cadena de la forma @XX siendo XX el número de
veces que había aparecido hasta aquel instante la unidad en la base de datos.
-
una etiqueta con el nombre original de la unidad dentro de la frase
de la que fue extraída. Esta información se guardaba para luego poder copiar
los ficheros de muestras y marcas asociados a la unidad, ya que estos estaban
contenidos en el directorio para la frase que generó sacadif32 (el programa
de extracción de los difonemas) y eran de la forma NOMBRE.mst y
NOMBRE.mar, siendo NOMBRE el nombre de la unidad dentro de esa
frase.
-
la duración de la unidad expresada en milisegundos. Esta
duración no era exactamente la duración de la unidad completa, sino que se
trataba de la duración entre la primera y última marca de pitch. Esto se hacía
así para adaptarnos a la manera en que trabaja TD-PSOLA, ya que TDPSOLA trabaja copiando periodos de señal, que vienen delimitados por las
marcas de pitch, siendo por lo tanto esta la información que a nosotros nos
interesa.
-
los tonos inicial y final de la unidad expresados en Hz. Hay que
destacar que la información sobre el tono final es la que nos daba
52
Capítulo 4
La selección de unidades
sacadif32.exe, y que la del tono inicial la tomábamos a partir del tono final
de la unidad anterior de la frase de que fue extraída el difonema. Este aspecto
nos presentaba un pequeño problema, ya que en el caso de las primeras
unidades de las frases carecíamos de una unidad anterior que nos
determinase el tono inicial de la frase. La solución adoptada fue la de copiar
el tono inicial del tono final, haciendo que la unidad tuviese una curva de
entonación lineal. Este criterio de generación del tono inicial fue el mismo
que se siguió a la hora de cargar la información del fichero con la prosodia
objetivo para evitar que se pudiesen producir efectos “extraños” derivados de
una falta de unificación de criterios.
-
el nombre del directorio en el que están almacenados los ficheros
de muestras y marcas asociados a la unidad (bv* para la síntesis de dominio
restringido ó r* para el caso de la síntesis de emociones).
-
la etiqueta de la unidad precedente en la frase de la que había sido
extraída la unidad de cara a poder determinar el contexto fonético de
procedencia.
-
la frase o emoción de que procedía la unidad. Toda esta
información relacionada con directorios y frases realmente no era empleada
por el programa de selección de unidades, pero era necesario almacenarla de
cara a que luego el programa que genera la base de datos fuese capaz de
recuperar los ficheros que le estabamos pidiendo.
-
los coeficientes mel cepstrum de la primera y última trama de la
unidad de cara a disponer de información sobre las características espectrales
sin necesidad de tener que recurrir a las muestras.
Con el fin de determinar qué unidad concreta de la base de datos tenía las
características que mejor se ajustaban a las de la unidad/secuencia de unidades objetivo
debíamos tener en cuenta los distintos factores que iban a influir en la distorsión. Así, se
pudo distinguir en principio los siguientes factores causantes de la distorsión [Black,
91]:
53
Capítulo 4
La selección de unidades
- Distorsión producida por la sustitución:
Esta distorsión se produce como consecuencia de la sustitución de la unidad
objetivo por una unidad de la base de datos, que generalmente poseerá unas
características prosódicas diferentes de las buscadas, siendo necesario un procesamiento
de señal mediante TD-PSOLA, que es el que precisamente da lugar a esta distorsión.
Como ya se señaló anteriormente, las características finitas de la base de datos harán
que esta distorsión siempre se encuentre presente (aún tratándose de una unidad con
exactamente las mismas características prosódicas que las buscadas, se generará una
distorsión en la misma derivada de los distintos redondeos que se producen en el
procesado).
- Distorsión producida por la concatenación:
Esta distorsión se genera al pegar unidades de la base de datos que provienen de
contextos fonéticos diferentes. En general, al proceder las unidades de lugares diferentes
van a tener características espectrales diferentes en la zona de pegado, existiendo una
discontinuidad que influirá negativamente sobre la calidad de la síntesis al poderse
percibir en mayor o menor grado sonidos similares a una pequeña explosión en las
uniones entre unidades [Hunt, 96].
secuencia objetivo
oi-1
oi
oi+1
dist. sustitución
ui-1
ui
u i+1
secuencia de unidades
dist. concatenación
Figura 4.1 Componentes de la distorsión.
54
Capítulo 4
La selección de unidades
4.3. El programa BUNIDAD2.EXE.
Como ya se citó en la descripción global del proceso de la síntesis, este
programa era el encargado de seleccionar la secuencia óptima de unidades de la base de
datos que mejor se ajustaba a una secuencia objetivo, en el sentido de que al emplear
dichas unidades en la síntesis la distorsión derivada del procesamiento llevado a cabo
por TD-PSOLA fuese mínima.
Para poder cuantificar la distorsión introducida por el sintetizador al modificar la
prosodia de las unidades, se definieron una serie de distancias entre las distintas
características contempladas en los vectores que representaban a cada unidad y las
características demandadas por el fichero que contenía la secuencia de unidades
objetivo acompañadas de su prosodia (*.di). Se definió una distancia asociada a cada
característica que tratara de medir la distorsión derivada del hecho de emplear una
unidad de la base de datos con un valor dado para dicha característica, en lugar del valor
pedido para la unidad correspondiente de la secuencia objetivo, considerándose la
distorsión global como una suma ponderada de todas estas distancias. Al tratarse de una
suma ponderada se pudo controlar la importancia relativa que se asignaba a cada
distancia dentro de la distorsión global, sin más que modificar los valores de los pesos
asociados a cada una de ellas, y pudiendo incluso llegar a anular alguno de los factores
considerados inicialmente (asignando un peso de valor nulo a dicha distancia) en caso
de considerar que su importancia no resultaba significativa de cara a la medida de la
distorsión. En cuanto a la definición de las distancias parciales nos encontramos con dos
casos bien diferenciados:
-
Distancia entre características que tomaban valores dentro de un rango
aproximadamente continuo.
-
Distancia entre características que no toman valores en un rango continuo o
cuyos valores no guardan ninguna relación de orden aparente entre sí.
En el primer caso, en el que los valores de las características se movían en un
rango “continuo” –como puede ser el caso de la duración de las unidades o su tono- la
55
Capítulo 4
La selección de unidades
definición de distancias se presentó como una tarea más sencilla de realizar que en el
caso de características del segundo grupo descrito, como puede ser el contexto fonético.
En el primero de los casos, la definición de las distancias siempre implicaba alguna
variación sobre la distancia euclídea entre las características, pero en el segundo, al no
ser posible establecer una relación de orden, no se pudo recurrir a esta estrategia. En
este segundo caso lo que se hizo fue recurrir a distancias que, o bien no penalizasen en
absoluto la elección de la unidad (al tratarse de una unidad compatible con lo que
estábamos buscando, asignando un valor cero a la distancia), o bien hiciesen prohibitiva
la elección de la unidad (asignando un valor muy grande a la distancia, de tal forma que
se pusiese en clara desventaja a esta unidad frente a unidades del mismo tipo de cara a
la selección).
Hay que tener en cuenta que nuestras distancias no debían, en ningún caso,
eliminar unidades por muy malas que fuesen desde el punto de vista de la distorsión, ya
que el algoritmo de selección siempre debía proporcionar al menos una unidad de la
base de datos para que fuese empleada en la síntesis. Por lo tanto, la estrategia a seguir
fue la de asignar distancias muy grandes a las unidades “malas”, teniendo en cuenta, que
en caso de no disponer de una unidad que se ajustase apropiadamente a las condiciones
de búsqueda, se seleccionaría aquella unidad dentro de las “malas” que mejor se
ajustase a nuestros propósitos. Este hecho lógicamente se reflejaría de forma negativa
sobre la calidad de la síntesis, pero hay que considerar que esta reducción en la calidad
no sería consecuencia de un defecto del algoritmo de selección de unidades, sino más
bien de la calidad de la base de datos empleada en cuanto a la variedad de unidades
presente en la misma.
Asociadas a los distintos factores detectados que influían en la distorsión se
decidió emplear las siguientes distancias:
- Distancia entre la duración de las unidades.
- Distancia entre los tonos.
- Distancia entre los contextos fonéticos.
- Distancia asociada a la concatenación de unidades.
56
Capítulo 4
La selección de unidades
Las dos primeras distancias vienen asociadas a la distorsión citada anteriormente
derivada de la sustitución de unidades, mientras que las dos últimas engloban el
fenómeno de la distorsión en el pegado de las mismas.
De este modo, la expresión global de la distorsión introducida en la síntesis
quedaría como sigue:
n
Dglobal   ( pduración  distduracion (ui , oi )  ptono  disttono (ui , oi )  pconcat  distconc (ui , ui1 )  pcontex  distcontex (ui , oi ))
i 1
Donde:
-
Dglobal es la distorsión global procedente de la síntesis de toda la
secuencia objetivo.
-
n es el numero de unidades a sintetizar en la secuencia objetivo.
-
px es el peso que se asocia a la característica x.
-
distx es la distancia que se asocia a la característica x.
-
ui y oi representan respectivamente la unidad de la base de datos y
la unidad objetivo que van en la posición i-ésima de la secuencia a sintetizar.
Hay que destacar que, alternativamente a esta elección de características, se
podría haber empleado otra serie de ellas, o incluso un conjunto adicional que
complementase a las actuales y contribuyese a un mayor refinamiento del modelo
aunque, si bien es cierto, también contribuiría a aumentar la complejidad del mismo
[Black, 91].
4.3.1. Distancia entre la duración de las unidades.
Esta distancia trata de medir la distorsión que se produce por el hecho de
emplear una unidad de la base de datos con una duración diferente de la perseguida en
la unidad objetivo. Hay que tener en cuenta que la definición de esta distorsión debe
estar directamente relacionada con el mecanismo que se emplea en TD-PSOLA para
modificar las duraciones, con el fin de medir realmente la distorsión producida por el
procesado de señal y no otra cosa diferente. Además, la distancia debe de ser relativa a
la duración perseguida, con el fin de ser capaces de estimar la distorsión que se produce
57
Capítulo 4
La selección de unidades
en la duración de una forma porcentual y poder comparar directamente las distorsiones
asociadas a las distintas instancias de la base de datos. La expresión general para la
distancia es la que sigue:
distduracion  peso dur(u)  dur(o) / dur(o)
donde:
-dur es la duración del elemento a considerar.
-peso es un factor que dependerá de una serie de condiciones.
-u y o son respectivamente la unidad de la base de datos y la unidad objetivo.
El valor del peso que se aplica a la expresión general se encuentra directamente
relacionado con la forma que tiene el algoritmo TD-PSOLA de modificar las
duraciones. Como ya se citó en el apartado dedicado a TD-PSOLA, la modificación de
la prosodia era posible mediante la repetición con una determinada cadencia de los
periodos básicos constituyentes de la unidad, de tal forma que se consideró que la
variación del peso se debía producir en función del número de periodos que fuera
necesario quitar o repetir de la unidad de la base de datos. Para ello se calculó el número
medio de periodos que contenían tanto la unidad de la base de datos como la unidad a
sintetizar:
número medio de periodos = duración * (tono medio)
Como se puede ver, esta definición de distancia tiene cuenta de forma
simultánea la duración y el tono, aspecto acorde con las modificaciones realizadas por
TD-PSOLA, en el que resulta imposible hacer modificaciones en una característica sin
hacerlas en la otra. Con el objeto de ir penalizando progresivamente aquellas situaciones
que nos resultaban menos ventajosas se decidió cuantificar los pesos en cuatro valores
de menor a mayor grado de penalización.
58
Capítulo 4
La selección de unidades
Así se optó por emplear el siguiente esquema en la asignación de los pesos:
SI
(period u-period o)>
porcentaje*periodos o
dur u>dur o
NO
period u=period o
NO
NO
SI
SI
peso=peso_1
peso=peso_2
peso=peso_4
peso=peso_3
Figura 4.2. Asignación de pesos en la distancia entre duraciones
Lo que se hizo en primer lugar fue comprobar si la duración de la unidad
contenida en la base de datos era mayor que la duración pedida, en cuyo caso el peso
que se imponía a la distancia siempre era menor. De este modo se trató de evitar que el
algoritmo seleccionase unidades con una duración original más pequeña que la pedida.
Esto se hizo así porque cuando la duración de la unidad es inferior a la solicitada, la
forma que tiene el algoritmo TD-PSOLA de alargar la duración es mediante la
repetición de periodos de la misma, lo que va a dar lugar a fenómenos de acoplamiento
o reverberación cuando se repiten varios periodos exactamente iguales, lo que se
traduce en que estas unidades presentan una especie de timbre metálico al ser
escuchadas, reduciendo este efecto considerablemente la calidad de la síntesis.
59
Capítulo 4
La selección de unidades
Asimismo, se estableció también un porcentaje sobre el número de periodos de
modificación de las unidades, de cara a penalizar algo más aquellas unidades en las que
fuera necesario eliminar un mayor número de periodos de señal para recortar su
duración. De este modo se pretendía centrar la selección sobre aquellas unidades cuya
duración, además de ser mayor que la pedida, difiriese de ella en un número pequeño de
periodos, de tal modo que el número de periodos a eliminar para recortar su duración
siempre fuese el mínimo posible, respetándose la estructura original de la unidad en la
mayor medida de lo posible. Esto se hizo así porque el criterio de eliminación de
periodos no era capaz de distinguir aquellos periodos de señal más significativos de
aquellos que resultaban menos importantes, pudiéndose degradar bastante la calidad de
la unidad original. Hay que destacar que este mismo criterio también se aplicó para las
unidades cortas, de cara a que, en las condiciones más adversas en las que no hubiese
unidades largas en la base de datos, la tendencia fuese a seleccionar siempre las más
largas que estuviesen disponibles.
4.3.2. Distancia entre el tono de las unidades.
Como su propio nombre indica esta distancia trata de medir la distorsión que se
produce al modificar la curva de tono de las unidades de la base de datos para ajustarse
a la de la unidad objetivo. De forma similar al caso anterior, la distancia entre las curvas
de tono de las unidades se definió como una distancia euclídea entre los tonos medios
de la unidad de la base de datos y de la unidad objetivo, ponderada por un cierto factor
que trataba de penalizar aquellas situaciones más desfavorables. Además, esta distancia
se normalizó para ver la distorsión porcentual producida en la unidad al realizar la
midificación en frecuencia, y para poder comparar con las distancias de otras unidades
de cara a la posterior selección. La expresión general de la distancia así descrita:
disttono  peso f 0unidad f 0objetivo/ f 0objetivo
En cuanto al valor otorgado a los pesos, al igual que en el caso de las duraciones
se empleó un conjunto cuantificado de cuatro valores que trataba de reflejar la
penalización en función de la situación concreta.
60
Capítulo 4
La selección de unidades
Así :
|pte u-pte o|
>porc_1*pte o
S
N
O
N
O
|f0_u-f0_o|
<porc_2*f0_o
S
I
peso=peso_
1
modificacion>porc
modificacion>porc
S
I
N
O
peso=peso
_4
S
peso=peso
_2
N
O
peso=peso
_3
peso=peso
_4
Figura 4.3. Asignación de pesos en la distancia en tono
La estrategia seguida fue la de dar una mayor preferencia a aquellas unidades de
la base de datos que, además de presentar una curva de tono con una pendiente similar a
la de la unidad objetivo, tenían tonos medios cuya diferencia era inferior a un porcentaje
fijado del tono medio de la unidad a sintetizar. De esta forma se pretendía que las
modificaciones en la estructura de los periodos de las unidades no fuesen muy grandes,
quedando las unidades con una estructura muy similar a la original y estando, por lo
tanto menos distorsionadas.
Hay que destacar que además se penalizó muy fuertemente a aquellas unidades
cuyo tono medio difería en más de un porcentaje dado del tono medio de la unidad a
sintetizar, tanto por exceso como por defecto. De este modo se pretendió reflejar la
limitación que presenta TD-PSOLA de cara a modificar el tono medio de las unidades
en más de dos octavas, tanto hacia arriba como hacia abajo.
61
Capítulo 4
La selección de unidades
No obstante, en nuestro caso el porcentaje que se fijó fue algo inferior a esas dos
octavas, ya que al escuchar algunas de las unidades que habían sido sometidas a
modificaciones de este orden, se pudo apreciar que la distorsión introducida era
demasiado elevada, cifrándose experimentalmente la modificación máxima en
frecuencia en un valor en torno al cuarenta por ciento del tono medio original.
4.3.3. Distancia entre los contextos fonéticos.
La distancia entre contextos fonéticos trata de medir la distorsión que se produce
en la síntesis por el hecho de emplear una unidad de la base de datos procedente de un
contexto fonético diferente de aquel en el que va a ser utilizado en la secuencia objetivo
[King, 97]. En efecto, si observamos distintas instancias de una misma unidad
provenientes de contextos fonéticos diferentes, se puede apreciar que en ocasiones
presentan diferencias espectrales en su zona inicial y, dado que es precisamente en este
punto en el que se produce la concatenación de unidades, este aspecto se traducirá en un
mal pegado de las mismas, reduciéndose la calidad de la síntesis al ser claramente
perceptibles los saltos entre unidades.
Figura 4.4. Unidad AB1 tomada de contextos diferentes (/K/ y /N/)
62
Capítulo 4
La selección de unidades
Las diferencias espectrales encontradas en la zona inicial de las unidades son
debidas a que existe un efecto de coarticulación entre los sonidos adyacentes, siendo
aproximadamente igual el espectro de las unidades cuando la unidad precedente es la
misma. En adición a esto, se pudo apreciar que existían algunos grupos de fonemas para
los cuales la estructura de formantes que se daba en el comienzo de la unidad siguiente
no difería mucho, constituyendo por lo tanto una serie de conjuntos de contextos
fonéticos en principio equivalentes para cada sonido en concreto, no siendo por lo
general las relaciones de equivalencia bilaterales.
Figura 4.5. Unidad ALA proveniente de contextos compatibles (/S/ y /T/)
Dado que esta característica no nos ofrecía la posibilidad de hacer una definición
de distancia similar a las anteriores, en el sentido de tratarse de una distancia euclídea,
en nuestro caso se optó por emplear una distancia que estuviese cuantificada en
principio en tres valores diferentes:
63
Capítulo 4
-
La selección de unidades
el primero de ellos era un valor que no penalizaba en absoluto a la unidad,
haciendo más fácil, por lo tanto, su selección posterior. Este valor se reservó
para aquellos casos en los que el contexto fonético de procedencia era
exactamente el mismo.
-
en segundo lugar se dió un valor intermedio, que pusiese a la unidad en una
leve desventaja con el grupo anterior de unidades, de cara a que en principio
la elección siempre se hiciese dentro del grupo de instancias de la unidad
correspondientes a un mismo contexto fonético de procedencia. Este
segundo valor se aplicó a las unidades que provenían de aquellos contextos
fonéticos que se habían identificado como “equivalentes” para cada sonido
concreto.
-
por último, se dio un valor elevado a aquellas unidades procedentes de
contextos fonéticos que no resultaban compatibles con el de la unidad
objetivo. De esta forma se pretendió conseguir que estas unidades sólo
fuesen escogidas en caso de que no existiesen unidades contenidas en los dos
grupos anteriores.
64
Capítulo 4
La selección de unidades
4.3.4. Distancia de concatenación de unidades.
Esta distancia, al igual que la anterior, trata de reflejar la distorsión producida
por el hecho de concatenar unidades de la base de datos que han sido extraídas de
lugares diferentes, debiendo en principio poseer características espectrales diferentes en
la zona de unión. La principal diferencia con la anterior es que, mientras que la distancia
de contextos asignaba un valor en función de unas reglas “estáticas” definidas a través
de la experiencia, en este caso se trata de medir directamente la distorsión a partir de la
distancia entre los espectros de las unidades a concatenar, resultando una medida de la
distorsión que se presenta en principio como mucho más objetiva.
Para medir la distancia entre los espectros se empleó un conjunto de coeficientes
que fuera capaz de representar el espectro de la unidad trama a trama, de tal modo que
la distancia entre dichos coeficientes fuese directamente proporcional a la distancia
entre los espectros. De este modo, la distorsión producida por la concatenación de dos
unidades sería proporcional de alguna forma a la diferencia entre los coeficientes de la
última y primera trama de las unidades a concatenar.
Los coeficientes empleados fueron los mel frequency cepstrum (mfc), que nos
proporcionan una “medición” del espectro en un conjunto de bandas de frecuencia que
se encuentran predefinidas. Hay que destacar que para el cálculo de los mel cepstrum no
se emplea una escala lineal de frecuencias, sino que se utilizan unas bandas
logarítmicas, lo que es claramente acorde con las características del oído humano.
El cálculo de los mel cepstrum se hizo en el programa que extraía los difonemas,
para lo cual se añadió al mismo una rutina que básicamente consistía en lo siguiente:
En primer lugar se define un conjunto de 20 bandas de frecuencia en una escala
logarítmica, cuyos límites expresados en hertzios son los siguientes:
65
Capítulo 4
La selección de unidades
Límites de las bandas ={0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000,
1231.144, 1515.717, 1866.066, 2297.396, 2828.427, 3482.202,
4287.093, 5278.031, 6498.019, 8000.000}
A continuación, se calcula con qué punto concreto de la FFT se corresponde
cada uno de los límites definidos anteriormente:
limite_ bandamuestras  limite_ bandahz  FFT _ POINTS / frec _ muestreohz
Puesto que en principio todas las bandas no van a tener la misma importancia, de
cara al cálculo de los coeficientes, también se definen unos pesos que van a ponderar los
resultados parciales obtenidos para cada banda, y que dependen tanto de la banda en
concreto considerada como de la posición de la muestra dentro de la misma.
El cálculo de dichos coeficientes se efectúa de la siguiente forma:
pesomuestrabanda_ i  (limite_ banda_ i  muestra) / longitud_ de _ la _ banda[muestras]
Una vez efectuado todo este proceso previo común para el cálculo de los
coeficientes de las distintas tramas, se procede al cálculo propiamente dicho de los
coeficientes para cada trama de los difonemas. Para ello, lo primero que hay que hacer
es determinar las muestras que caen dentro de cada una de las tramas. Al igual que en el
algoritmo TD-PSOLA, cada trama está compuesta por dos periodos de señal del
difonema (análisis Pitch-Synchronous), de tal forma que el número de tramas por que
esta compuesto cada difonema es:
num_tramas = num_marcas_pitch - 2
Por lo tanto, cada trama contendrá las muestras comprendidas entre tres marcas
de pitch consecutivas del difonema, existiendo un solapamiento de un periodo de señal
entre cada dos tramas consecutivas. A continuación, para las muestras de la trama se
hace el siguiente proceso:
66
Capítulo 4
-
La selección de unidades
En primer lugar se elimina la componente continua de la señal y se aplica a
las muestras un enventanado de Hamming. Para el cálculo de la componente
continua lo que se hace es restar a cada una de las muestras el valor medio de
las muestras de toda la trama. En cuanto al tamaño de ventana que se empleó
se trata del mismo que el de las tramas:
m edia 
nmst
 xn
n 0
xn  ( xn  m edia)  (0.54  0.46 * cos(2n / long _ ventana))
siendo x[n] el valor de las muestras.
-
Posteriormente se calcula la FFT de las muestras resultantes del proceso
anterior.
-
A continuación se calcula la energía de la trama, que se va a corresponder
con el último de los coeficientes mel cepstrum.
energía 
FFT _ POINTS / 2
 X k 
2
k 0
donde X[k] son los coeficientes obtenidos del cálculo de la FFT.
-
El siguiente paso es el cálculo ponderado de la energía de la trama en las
bandas empleadas.
ebanda 
fin _ banda
 X k   pesosk banda
k in _ banda
-
Por último, se procede al cálculo de los coeficientes mel cepstrum para lo
que se tomó un número de 10 coeficientes por trama, sin considerar el último
de ellos que, como ya se dijo, es la energía de la trama (en principio la única
restricción con que nos encontrábamos fue que este número fuese menor que
el número de bandas en que se trabajaba).
67
Capítulo 4
La selección de unidades
m fck  
NUM _ BANDS
 el   cos(k (l  0.5) / NUM _ BANDS)
l 0
k  0..9
Una vez realizado el cálculo de los coeficientes mel cepstrum, se procedió a la
definición de una distancia que fuese capaz de cuantificar la distorsión. De cara a esta
distorsión, cada unidad vendría representada por dos vectores de coeficientes: el vector
con los mel cepstrum correspondiente a la primera trama de la unidad y el vector
correspondiente a los coeficientes de la última trama. El resto de vectores no se tuvo en
cuenta, ya que se consideró que las tramas intermedias no resultaban determinantes de
cara a evaluar la distorsión en el pegado de unidades. Se optó por definir la distancia
como la "diferencia" entre los vectores de cepstrum de la última y de la primera trama
de la unidades que deseábamos concatenar, pero dado que el rango de variación de cada
uno de los coeficientes era diferente esta diferencia no podía hacerse directamente como
la distancia euclídea entre ambos vectores, sino que era necesario recurrir a otro tipo de
solución. Puesto que se consideró que en principio la importancia de todos los
coeficientes debía ser la misma, la solución escogida fue la de emplear la distancia de
Mahalanobis entre los dos vectores de coeficientes. La expresión simplificada de esta
distancia queda en nuestro caso:
distancia 
num _ coeficientes
 ((vector _ 1i  vector _ 2i)
2
/ vari )
i 0
donde var[i] representa la varianza del coeficiente i-ésimo.
Como se puede ver, la expresión es similar a la de la distancia euclídea,
quedando dividido cada uno de los miembros por la varianza del coeficiente en
cuestión. De esta forma se consigue que, a pesar de que los coeficientes tengan un rango
de variación diferente unos de otros, a la hora de calcular la distancia todos tengan la
misma importancia relativa. Al dividir por la varianza de cada coeficiente quedan
amortiguadas las diferencias muy grandes en aquellos coeficientes que presentan una
68
Capítulo 4
La selección de unidades
mayor varianza, y se amplifica la diferencia en aquellos con una varianza más pequeña
dado que en ellos esta pequeña diferencia puede ser más significativa.
Al igual que en los casos anteriores, se decidió ponderar estas distancias por un
determinado factor que se encargase de que la distancia entre aquellas unidades que no
concatenaban bien fuese muy grande, perjudicándolas de cara a la posterior selección.
En caso de que la distorsión en el pegado fuese razonable, este peso sería igual a la
unidad, resultando directamente la distorsión la distancia de Mahalanobis entre los
vectores de mel cepstrum de las unidades. Para ello, lo que se hizo fue multiplicar por
un factor bastante elevado el resultado del cálculo de la distancia de Mahalanobis entre
las unidades cuando este valor sobrepasase un cierto valor, a partir del cual se
consideraba que la concatenación entre unidades no era buena.
Con el fin de poder determinar este valor de una forma más o menos fiable se
elaboró un programa que realizaba una serie de cálculos de tipo estadístico de las
distancias entre las unidades originales. Para ello, se tomó todo el conjunto de unidades
que aparecía en el fichero listetiq, y se analizó la distancia de concatenación entre las
distintas unidades, tomando sólo para este análisis aquellas unidades que eran sonoras,
ya que se consideró que esta era la mejor forma de obtener unos resultados fiables. Se
calculó la distancia de concatenación entre cada una de estas unidades y su unidad
precedente en el contexto original del que habían sido extraídas, y se hizo un estudio
sobre el valor medio y la desviación típica de estas distancias para ver cuáles eran los
valores de distancias que se podían considerar como “buenos”. Asimismo, se resaltaron
las distancias más elevadas, empleando estos valores (añadiéndoles un cierto margen
para asegurarnos de que eran válidos) como el umbral por encima del cual se debía
considerar que los espectros de dos unidades no pegaban adecuadamente.
Adicionalmente, en el estudio de aquellos casos en los cuales la distancia era
excesiva pudimos detectar que en algunas de estas unidades se habían producido errores
de segmentación o de marcado, no resultando por lo tanto estas unidades fiables de cara
al cálculo y siendo eliminadas de la base de datos hasta que fuesen correctamente
marcadas o segmentadas.
69
Capítulo 4
La selección de unidades
4.3.5. El algoritmo de búsqueda.
El algoritmo de búsqueda es el encargado de encontrar la secuencia de unidades
de la base de datos que mejor se ajusta a las características prosódicas de la secuencia
objetivo, en el sentido de que esta secuencia es aquella para la que se minimiza la
distorsión global producida por el procesado de señal [Black, 91] [Hunt, 96]:
n
Dglobal   ( pduración  distduracion (ui , oi )  ptono  disttono (ui , oi )  pconcat  distconc (ui , ui1 )  pcontex  distcontex (ui , oi ))
i 1
En nuestro caso se empleó una búsqueda de Viterbi, de cara a obtener aquel
conjunto de unidades para las cuales se minimizaba la distorsión de una forma global.
Hay que destacar que la selección de unidades no se podía hacer de izquierda a derecha
de la secuencia (unidad a unidad), ya que de este modo lo que se hacía era optimizar la
selección de cada una de las unidades por separado, no teniendo este por qué ser el
resultado que minimizase la distorsión global producida. Este hecho se puede explicar
fácilmente si tenemos en cuenta que, al ser el carácter de las unidades de la base de
datos bastante heterogéneo, sería bastante probable que el algoritmo fuese
seleccionando unidades que pegasen muy bien unas con otras, pero que se encontrase en
cierto momento con que el pegado de una determinada unidad por la izquierda fuese
muy bueno y por la derecha realmente malo, al carecer de unidades en este lugar que
concatenasen bien con la anterior. En este sentido, la búsqueda de Viterbi solucionó este
problema, ya que siempre tiende a seleccionar una secuencia de unidades que sin llegar
a ser la óptima en cada uno de los puntos, es la que ofrece una continuidad más
uniforme en los puntos de pegado de una forma global, apreciándose menos saltos
bruscos entre unidades y tendiendo, por lo tanto, a ser mejor la calidad de la síntesis en
cuanto a continuidad de la misma.
Se elaboró un programa para el cálculo de las secuencias óptimas de unidades
según el algoritmo de Viterbi. Este programa recibe como argumento de entrada un
fichero con la secuencia de difonemas a sintetizar acompañados de sus características
prosódicas (*.di). Lo primero que hace el programa es buscar todas aquellas instancias
de las unidades demandadas que hay disponibles en la base de datos, para lo cual hace
70
Capítulo 4
La selección de unidades
una lectura previa del fichero que contiene la lista con todas las etiquetas, listetiq, junto
a toda aquella información sobre las unidades que nos va a resultar necesaria de cara al
cálculo de las distintas componentes de la distorsión citadas en el apartado anterior.
Una vez hecho esto, construye una especie de array con tantas columnas como
unidades tenga la secuencia objetivo a sintetizar. Cada una de las columnas contiene el
conjunto de instancias de la unidad que hay que sintetizar en esa posición concreta,
siendo el número de filas por lo tanto, el de instancias de dicha unidad. Así, a modo de
ejemplo, si suponemos que nuestra secuencia objetivo fuese la siguiente:
KA 115 180
AS 65 161
S 90 161
SA 70 161
A_ 80 142
el array resultante de la búsqueda en la base de datos podría ser:
AS@4
AS@3
SA@3
KA@2
AS@2
SA@2
KA@1
AS@1
SA@1
A_@1
KA
AS
SA
A_
S
Una vez construido este array se pasa directamente al proceso de búsqueda en el
mismo. Para cada una de las celdas del mismo, además de la información sobre la
unidad de la base de datos que representa, se almacenaba la distorsión (distancia)
acumulada que se llevaba hasta ese punto más información sobre el camino seguido a lo
largo del array para llegar a dicho valor.
71
Capítulo 4
La selección de unidades
La forma de calcular las distancias en cada una de las celdas es la siguiente:
distanciai  j   dist _ susti  j   min(dist _ conc(unidadi  j , unidadi  1k )  distanciai  1k )
k  0..num _ filasi  1
Como se puede ver, la distancia en cada punto está compuesta como ya se dijo
anteriormente por dos elementos. En primer lugar, se encuentra la distancia derivada de
la sustitución, que se calcula a partir de las distancias entre el tono y duración de la
unidad en concreto y de la unidad objetivo contenida en el fichero *.di. En segundo
lugar está la suma de la distorsión derivada de la concatenación y de la distorsión
acumulada en el punto desde el cual se concatena. Esta segunda componente de la
distorsión se calcula como el valor mínimo de dicha suma de distancias (acumulada más
concatenación) entre la unidad considerada y todo el conjunto de unidades de la
columna anterior, guardando de forma adicional en la celda el punto [i-1][k] desde el
cual se ha llegado a tal valor. En el caso de la primera columna esta distorsión carece de
sentido, considerándose en este caso que el segundo término de la expresión es nulo y
señalando cada una de las celdas de dicha columna como el posible principio de la
secuencia óptima.
El proceso de cálculo de las distancias continúa hasta que se consiguen rellenar
todas las celdas del array, y es entonces cuando se puede proceder a determinar la
secuencia óptima. Como se puede apreciar, este aspecto constituye una de las
principales diferencias entre esta técnica y la de optimización de izquierda a derecha, ya
que en nuestro caso no se conoce cuál va a ser la secuencia global hasta el final de todo
el proceso, mientras que en el otro la selección se va haciendo en cada una de las
posiciones, pudiéndose conocer cuando estuviésemos en la posición i-ésima todo el
conjunto de unidades seleccionadas hasta esa posición.
La forma de determinar cuál es la secuencia a escoger, consiste en examinar las
celdas de la última columna, y quedarnos con aquella que presenta un valor mínimo de
distancia. Este punto se considera que es el correspondiente a la instancia de unidad a
escoger para la última posición, ya que es el que presenta una distorsión global
acumulada mínima tras recorrerse toda la secuencia. Lo que se hace para calcular la
secuencia óptima es recorrer el camino seguido para llegar hasta dicho punto, cosa
72
Capítulo 4
La selección de unidades
sencilla si tenemos en cuenta que en las celdas, además de la distancia se almacena el
punto de la columna anterior a partir del cual se ha llegado a dicha distancia. De este
modo, podemos conocer cuál es el punto desde el cual se llegó a ese elemento final y
repetir todo este proceso columna a columna hasta llegar al elemento de la primera
columna del array, que será la instancia de la unidad inicial a escoger.
73
Capítulo 5
La reducción de la base de datos
Capítulo 5: La reducción de la base de datos
5.1. Introducción.
Como ya se citó anteriormente, el hecho de introducir en la base de datos varias
instancias para cada tipo de difonema, presenta el efecto beneficioso de mejorar la
calidad de la voz sintética generada ya que, al introducirse una mayor variedad
prosódica y de contextos fonéticos para cada unidad disponible en la base de datos,
existe una mayor probabilidad de encontrar una instancia de dicha unidad que se ajuste
aproximadamente al contexto y características prosódicas buscados. Por lo tanto, es
claro que se producirá una menor distorsión de la unidad original, revirtiendo
claramente este aspecto sobre la calidad global de la síntesis generada.
Sin embargo, también se reseñó que el principal inconveniente que se nos
presentaba con esta técnica, era el hecho de que se aumentaba considerablemente el
tamaño de la base de datos de unidades, con todo lo que esto lleva consigo de cara a la
capacidad de almacenamiento necesaria en los equipos, y a los tiempos empleados por
los distintos programas para el tratamiento de este gran volumen de información (sobre
todo con relación al tiempo de búsqueda de la secuencia óptima de unidades para un
determinado contexto). En efecto, es necesario tener en cuenta que la base de datos no
sólo aumenta de tamaño debido a la introducción de nuevas unidades –con sus muestras
y marcas de tono asociadas- sino que también se hace necesario almacenar una serie de
características adicionales asociadas a cada una de dichas unidades, que serán
precisamente aquellas en las que nos basaremos de cara a determinar aquella instancia
de la unidad demandada que vamos a emplear para cada caso concreto, dentro de todo el
conjunto disponible.
En cuanto al problema que se nos presenta, relacionado con el aumento de la
capacidad de almacenamiento necesario para albergar la base de datos en los equipos,
hay que reseñar que hoy en día no se trata de un problema excesivamente crítico gracias
74
Capítulo 5
La reducción de la base de datos
a la gran capacidad de los sistemas empleados (discos duros de gran tamaño, e incluso
cabría pensar que dado que los ficheros que contienen la base de datos no van a ser
modificados una vez que han sido convenientemente procesados – solamente se leerá
información relativa a la prosodia de las unidades y se copiará aquella relativa a las
muestras y marcas de tono de las mismas -, dichos ficheros pueden ser almacenados en
un disco compacto – CD-ROM -, no ocupando espacio en nuestro PC, constituyendo
una información fácilmente transportable de unos equipos a otros).
Un problema que resulta más serio y que es una clara consecuencia del aumento
del tamaño de la base de datos, es el del tiempo que es necesario para poder procesar los
datos contenidos en dichos ficheros. Por un lado, conviene considerar el aspecto de que
el tiempo de búsqueda en este tipo de bases de datos va a ser bastante mayor que el
empleado en aquellas bases de datos que contienen tan sólo una instancia de unidad por
difonema.
Por otro lado, se encuentra al hecho de que el algoritmo que se emplea para la
determinación de la secuencia óptima de unidades, va calculando una serie de
distancias, teniendo en cuenta para ello todas las combinaciones posibles de unidades
existentes en la base de datos. Para ello, debe realizar un número de operaciones muy
elevado, debiéndose tener en cuenta que dicha cantidad de operaciones no aumenta de
una forma lineal según se incrementa el número de unidades presentes en la base de
datos, sino que lo hace más bien de una manera exponencial.
Este aspecto, que no hace sino contribuir a aumentar aún más el tiempo de
proceso hace que sea necesario llegar a un compromiso entre la mejora que deseemos
obtener (introduciendo para ello una mayor variedad de unidades con contextos y
características prosódicas diferentes) y el tamaño de la base de datos resultante, ya que
un tamaño excesivo puede llegar a hacer que el coste de procesamiento de los ficheros
llegue a ser prohibitivo. Debemos tener en cuenta, que un tiempo de procesamiento
demasiado elevado nos aleja de la posibilidad de realizar el mecanismo de la síntesis en
“tiempo real”, restándose con ello gran valor a los resultados, al carecer las aplicaciones
que sean desarrolladas de una utilidad aparente.
75
Capítulo 5
La reducción de la base de datos
En este sentido, y tras todo lo indicado anteriormente, se puede ver que se hace
necesario emplear algún tipo de técnica que nos permita reducir el tamaño de la base de
datos sin pérdida de calidad de cara a los resultados obtenidos, así como evaluar algún
procedimiento que nos posibilite reducir al máximo el tiempo de proceso.
5.2. La reducción del tamaño de la base de datos.
Con el objeto de reducir el tamaño de la base de datos, en una primera
aproximación, lo que se hizo fue tratar de eliminar de una manera automatizada todas
aquellas unidades que de algún modo resultasen redundantes (normalmente unidades
cuyas características prosódicas –tono y duración fundamentalmente- fuesen muy
similares a las de otras también presentes en la base de datos) [Black, 97].
En primer lugar, y aunque no se trata de una redundancia desde el punto de vista
de las características prosódicas de las unidades, se optó por elaborar una pequeña
subrutina que se encargaba de seleccionar dentro de las unidades constituidas
exclusivamente por una fricativa (F, S, X y Z) aquella de mayor duración, eliminándose
el resto de unidades de este tipo de la base de datos. De este modo, para este caso
concreto de unidades la base de datos tan sólo contenía una instancia por tipo de
difonema.
Esto se fundamenta en el hecho de que en las fricativas, de cara a la selección de
unidades no se emplea la información relativa al tono, ya que como se dijo
anteriormente dicha información no resulta fiable, ni tampoco la información sobre la
concatenación con unidades adyacentes. Por lo tanto, lo único que va a diferenciar las
unidades de este tipo entre sí va a ser su duración. Las unidades compuestas por tan solo
una fricativa presentan la ventaja de que al ser cortadas no sufren una distorsión
aparente, con lo que al quedarnos en la base de datos con la más larga de todas ellas casi
nunca tendremos que recurrir a replicar periodos para generar una unidad de este tipo,
eludiéndose de esta manera los sonidos metálicos que se producen al replicar periodos.
La eliminación de las unidades compuestas por sólo una fricativa ya produjo una
reducción del tamaño de la base de datos bastante considerable.
76
Capítulo 5
La reducción de la base de datos
Una segunda técnica que se empleó para eliminar unidades redundantes fue la de
ir agrupando en conjuntos todas aquellas unidades de un mismo tipo (instancias de un
mismo difonema) y eliminar de dichos conjuntos aquellas unidades que resultasen
redundantes desde el punto de vista de sus características prosódicas. Para ello, se
definió una distancia entre unidades que, por otra parte, coincidía con la definición de
distancia que se empleó en el programa de búsqueda de la secuencia óptima de
unidades, esto es:
Distancia=Pd*Distancia_duración+Pt*Distancia_Tono+Pc*Distancia_Concatenación
Donde Pd ,Pt y Pc son los pesos asignados a la distancia entre duraciones, tono y a la
concatenación de unidades respectivamente.
De este modo, en cada conjunto se iban tomando una a una las unidades
componentes, y para cada una de ellas se iba calculando la distancia al resto de unidades
componentes del mismo conjunto. En caso de que dicha distancia entre unidades
resultase ser inferior a un determinado umbral - que fue fijado de forma experimental –
la unidad era eliminada de la base de datos. Hay que tener en cuenta, que la eliminación
de la unidad sólo se producía en el caso de que ambas unidades procediesen de un
mismo contexto fonético (el difonema anterior en la frase de la que fueron extraídas las
unidades era el mismo), ya que si bien nos interesaba reducir el tamaño de la base de
datos, nuestro objetivo era hacerlo manteniendo la mayor variedad posible de contextos
fonéticos.
Aunque si bien con esta estrategia de reducción se conseguía disminuir
considerablemente el tamaño de la base de datos sin apreciarse una diferencia de calidad
con respecto a los resultados obtenidos con el total de unidades, se trató de llevar la
reducción a sus límites extremos con el fin de llegar a una base de datos de tamaño
mucho más reducido en la cual siguiese habiendo una determinada variedad de
unidades.
77
Capítulo 5
La reducción de la base de datos
5.2.1. La reducción “geométrica” de la base de datos.
En esta estrategia de reducción se hizo la selección de unidades siguiendo un
símil geométrico, para lo cual considerábamos que cada unidad ocuparía una
determinada posición en el espacio siendo sus coordenadas en el plano de la forma
(duración,tono). En nuestro caso concreto nos decidimos por hacer una reducción de
tipo triangular, para lo cual nos quedamos con las tres unidades de cada conjunto cuyas
características de tono y duración se encontrarían en los vértices del supuesto triángulo.
Para ello, se seleccionaron:
· la unidad de menor duración y tono.
· la unidad de mayor duración y tono.
· la unidad de duración y tono más parecidos a la media del conjunto.
El resultado obtenido no fue todo lo satisfactorio que cabría esperar, ya que
además de perderse bastante información sobre los diferentes contextos, la tendencia
general del programa de selección de unidades era la de escoger la unidad “media”.
Este aspecto se puede explicar fácilmente si consideramos las reglas que se
seguían de cara a la selección, ya que por un lado hay que considerar que las duraciones
excesivamente pequeñas eran fuertemente penalizadas para evitar que estas unidades
fuesen seleccionadas, y que el programa que efectúa la síntesis TD-PSOLA tuviese que
realizar la replica de periodos para alargar la unidad, con la consiguiente distorsión
derivada de este hecho.
Por otro lado, en cuanto a los tonos muy pequeños y muy grandes ocurría una
situación similar, ya que la penalización era también muy grande con el fin de evitar
modificaciones superiores al porcentaje máximo de modificación en tono que tolera el
algoritmo TD-PSOLA (en teoría hasta un 50 % de modificación sin generarse
distorsión, aunque en la práctica se pudo ver que dicho margen era bastante generoso,
debiéndose ser muchos más estrictos si deseábamos mantener un cierto nivel de calidad)
78
Capítulo 5
La reducción de la base de datos
5.2.2. La reducción “por tramos”.
En esta estrategia nos basamos en la eliminación de aquellas unidades presentes
en la base de datos cuyas características prosódicas sabíamos con una cierta seguridad
que nunca serían demandadas por el programa que generaba la prosodia automática a
partir de un determinado texto. Para ello, en primer lugar vamos a explicar brevemente
el modelo que sigue el programa que genera la prosodia automática:
El modelo de entonación:
La entonación es la variación de la frecuencia de vibración de las cuerdas
vocales a lo largo de una frase, existiendo una estrecha relación entre el tono y la
intensidad, de tal modo que la sílaba fuerte de una palabra es a su vez la sílaba tónica, es
decir, la que posee una mayor frecuencia fundamental. La curva de entonación vendrá
marcada por una serie de picos y valles, correspondiéndose los primeros con las sílabas
que presentan una mayor frecuencia fundamental, y los otros con aquellas sílabas que
preceden a los picos.
El modelo entonativo divide la curva de tono en 3 tramos bien definidos
[Martínez, 98]:
-zona inicial: comprende la entonación desde el principio del grupo fónico hasta
la primera sílaba tónica. En esta zona se asigna a la primera sílaba del grupo fónico un
tono en función del signo de puntuación que se encuentre al final del mismo, y al resto
de sílabas se les asigna un valor que sería el correspondiente a una interpolación lineal
entre el valor de la primera sílaba y el valor asignado a la primera sílaba tónica
-zona central: desde la primera tónica hasta la penúltima. A partir de los valores
de tono de los picos y valles se calcula toda la curva de tono para esta zona intermedia.
Para el caso de las sílabas tónicas aplicamos una recta con dos puntos fijos, el
valor asignado a la primera tónica (PICO1) y el de la penúltima, variando la pendiente
79
Capítulo 5
La reducción de la base de datos
según el número de tónicas del grupo fónico, para lo que se hace una interpolación
lineal con el objeto de calcular el tono del resto de tónicas. En cuanto a los valles, se
emplea un algoritmo similar con valores de tono más bajos, y tomando como puntos
fijos para la interpolación el valor del primer y penúltimo valle.
El cálculo del tono asignado al resto de sílabas comprendidas en la zona central
se efectúa mediante una interpolación lineal entre los valores del valle y pico en la zona
que se encuentren.
Fig. 5.1. Curva de entonación en la zona central.
-zona final: comprende la entonación desde la penúltima tónica hasta el final del
grupo fónico. Se asigna un valor de tono al último valle, a la última tónica y a la última
sílaba, haciéndose una interpolación lineal para el resto de las sílabas pertenecientes a
esta zona.
Una vez visto el modelo que se sigue para generar la prosodia de las frases que
vamos a sintetizar, por un lado podemos ver que nunca se van a generar unidades con
un tono que se encuentre por encima del más alto de los asignados a los picos, y que lo
mismo va a ocurrir con unidades con tonos por debajo del más pequeño de los valles,
con lo que esas unidades se pueden eliminar directamente de la base de datos. Por otro
80
Capítulo 5
La reducción de la base de datos
lado, también se encuentra el hecho de que en la zona intermedia, al estar haciendo una
interpolación lineal entre picos y valles, estamos definiendo una serie de tramos
(definidos por dos tonos y una pendiente) que serán aquellos que se pedirán al programa
de búsqueda de unidades, no generándose en principio unidades que se encuentren fuera
de dichos tramos ( se ha eliminado del modelo la pequeña componente aditiva
aleatoria).
Para aprovecharnos de todo esto, lo que hicimos de cara a la reducción del
tamaño de la base de datos, fue tomar dichos tramos, ver qué unidades teníamos dentro
de dichos tramos y quedarnos con la de mayor duración de todas ellas para cada tipo de
unidad. Para hacer todo esto de una manera automática, se elaboró una pequeña rutina,
que leía de un fichero de configuración los tramos que fueron empleados:
[NUMERO_TRAMOS]
NumTramos=7
Umbral=10
;Clave para las pendientes de los distintos tramos:
;a 0 indica que la pendiente es aproximadamente plana (distancia entre tonos
;inicial y final por debajo de un umbral dado)
;a 1 indica pendiente de tono ascendente
;a -1 indica pendiente de tono descendente
;a 4 indica que no importa la pendiente
;a 5 indica que o el tono inicial o el final es de 100 Hz, lo que se emplea para
;incluir a las fricativas (por el remarcado automático que se produce).
[TRAMO_0]
fInicial_min=80
fInicial_max=180
f0_min=80
f0_max=180
pendiente=5
tramo_equivalente=0
[TRAMO_1]
fInicial_min=130
fInicial_max=170
f0_min=130
f0_max=170
pendiente=4
81
Capítulo 5
La reducción de la base de datos
tramo_equivalente=1
[TRAMO_2]
fInicial_min=165
fInicial_max=200
f0_min=165
f0_max=200
pendiente=4
tramo_equivalente=2
[TRAMO_3]
fInicial_min=180
fInicial_max=250
f0_min=180
f0_max=250
pendiente=4
tramo_equivalente=3
;A continuacion se definen una serie de tramos secundarios que solo
;se emplean en el caso de que no se hayan encontrado unidades en los tramos
;anteriores y que representan una relajación en los límites de dichos tramos,
;viniendo este aspecto reflejado por la variable tramo equivalente
[TRAMO_4]
fInicial_min=125
fInicial_max=185
f0_min=125
f0_max=185
pendiente=4
tramo_equivalente=1
[TRAMO_5]
fInicial_min=160
fInicial_max=230
f0_min=160
f0_max=230
pendiente=4
tramo_equivalente=2
[TRAMO_6]
fInicial_min=50
fInicial_max=250
f0_min=50
f0_max=250
pendiente=4
tramo_equivalente=2
82
Capítulo 5
La reducción de la base de datos
Como se puede ver en el contenido del fichero de configuración, hubo que
definir una serie de tramos solapados para relajar las condiciones de la selección, lo cual
vino motivado por la falta de unidades que se ajustasen exactamente a los límites fijados
por el generador automático de prosodia. Aún así, tuvimos problemas debidos a la
escasa variedad de unidades de que disponíamos, con lo cual tuvimos que abandonar
esta estrategia, al carecer de unidades en la base de datos para muchos de estos tramos.
5.3. La cuantificación de distancias.
Una vez que fueron eliminadas de la base de datos aquellas unidades que
resultaban redundantes desde el punto de vista de sus características de cara al programa
de selección de unidades (siguiendo la primera estrategia explicada anteriormente de
distancia entre unidades inferior a un determinado umbral), el siguiente paso dirigido a
agilizar el tiempo de proceso de la información contenida en la base de datos, fue el de
emplear un método de cuantificación de distancias entre unidades. Este proceso de
cuantificación de distancias consiste en lo siguiente:
Partiendo de todo el conjunto de unidades que constituye la base de datos, se
establece un número determinado de conjuntos (disjuntos entre sí) entre los cuales
vamos a distribuir dichas unidades. En base a una serie de criterios que se detallarán
más adelante, cada unidad pertenecerá a uno de dichos conjuntos. Todas las unidades
que pertenezcan a un mismo conjunto se representarán por un único elemento, que será
el centroide de dicho conjunto. Así pues, la distancia entre dos elementos de la base de
datos vendrá dada como la distancia entre los centroides de los conjuntos a que
pertenecen dichas unidades, cometiéndose por ello un “error de cuantificación” que será
en media tanto mayor cuanto más grande sea la varianza de dichos conjuntos.
En nuestro caso, tratamos de emplear la técnica de cuantificación de distancias
para evitar tener que almacenar todas las componentes de los vectores de mel cepstrum
de las tramas inicial y final de cada una de las unidades de la base de datos [Black, 97].
De este modo, en lugar de tener que almacenar dos vectores, que en nuestro caso eran
83
Capítulo 5
La reducción de la base de datos
de 11 componentes cada uno, bastaría con determinar a qué conjunto de los que
nosotros determinásemos pertenece cada uno de dichos vectores, quedando reducido
entonces el almacenamiento a dos números por cada unidad que identificasen el
conjunto en que quedarían englobados los vectores (pasaríamos de tener que almacenar
para cada unidad de la base de datos 22 números en formato flotante, a tan solo 2 en
formato byte). De todo lo anterior, tenemos que ahora la distancia que evalúa el
programa de búsqueda de unidades sería la suma ponderada de las distancias en tono,
duración y de la distancia entre los vectores de mel cepstrum de los centroides de los
conjuntos a los que pertenezcan las unidades.
Si se realiza un procesado previo del contenido de la base de datos, se puede ver
en qué dos conjuntos va a quedar englobada cada unidad. Adicionalmente, es posible
calcular las distancias existentes entre todos los pares de centroides representantes de
cada conjunto e irlas escribiendo en un fichero. De este modo, el cálculo de la distancia
entre los vectores de mel cepstrum de dos elementos de la base de datos quedaría
reducida a ver en qué conjuntos se encuentran dichos vectores y a leer del fichero que
contiene las distancias entre centroides aquella que necesitamos. Esta técnica, además
de reducir considerablemente el tamaño final de la base de datos reduce drásticamente
el tiempo de proceso, ya que todo el conjunto de operaciones que eran necesarias para el
cálculo de la distancia de Mahalanobis quedan englobadas en la lectura de un dato de un
fichero.
El método que se empleó para realizar la agrupación en conjuntos (clustering) de
las unidades fue el algoritmo LBG, que se describe a continuación.
5.3.1. El algoritmo LBG.
Este algoritmo nos permite comenzar el proceso con un número dado de
conjuntos y, en sucesivos pasos del mismo, ir expandiendo dicho número llegando al
tamaño deseado. La base del algoritmo es la siguiente [Furui, 89]:
84
Capítulo 5
La reducción de la base de datos
· Paso 1:
Se parte de un conjunto inicial que contiene todos los vectores que pretendemos
cuantificar. Una vez agrupados todos los elementos en este conjunto inicial, lo que
haremos será calcular el centroide de dicho conjunto (que constituirá el elemento
representativo del mismo), para lo cual tomamos todo el conjunto de tramas de mel
cepstrum y calculamos la media componente por componente, esto es, si representamos
el centroide del conjunto de la forma [y(1),y(2),......y(n)] tendremos que:
y (i ) 
1
M
M
 x (i)
j 1
j
Donde xj(i) con i=1..M es la componente i-ésima del vector j (en total tenemos
en la lista M vectores)
· Paso 2:
En este paso lo que haremos será dividir el conjunto inicial en dos subconjuntos,
apareciéndonos por lo tanto dos centroides, que sustituyen al centroide original. La
forma de separar el conjunto inicial en dos subconjuntos, es haciéndolo según una
dirección que sea normal a la de máxima distorsión en el conjunto original. De este
modo, nos aseguramos de que la varianza (distorsión) en cada uno de los nuevos
conjuntos creados será inferior a la del conjunto original.
En nuestro caso, lo que se hizo fue perturbar el centroide del conjunto original
para generar dos puntos diferentes (nuevos centroides temporalmente), para lo cual se
tomó cada una de las componentes del centroide original y, respectivamente, se le sumó
y restó una cantidad muy pequeña:
- y1(i) = y(i) + 
- y2(i) = y(i) - 
con i=1..n y siendo  un valor dependiente de la varianza del conjunto.
85
Capítulo 5
La reducción de la base de datos
· Paso 3:
Repetimos sucesivamente el proceso de separación de los conjuntos, hasta que
alcancemos el número deseado de centroides. Hay que tener en cuenta que a medida que
el número de centroides aumenta el coste computacional rápidamente se vuelve
prohibitivo.
En cada uno de los pasos del algoritmo, como resultado de la división en k
conjuntos, nos aparecerán k centroides que serán “transitorios”, debiéndose realizar una
serie de iteraciones sobre los conjuntos resultantes, que al final nos den los centroides
que realmente emplearemos de cara a la cuantificación. La manera de hacer dichas
iteraciones es mediante la aplicación del algoritmo de Lloyd, cuyo funcionamiento se
detalla a continuación [Furui, 89].
5.3.2. El algoritmo de Lloyd.
· Paso 1: Inicio.
Consideramos un índice, m=0, que nos va a medir el número de iteración en el
que nos encontremos, y tomamos el conjunto de centroides que resultó de la separación
de los conjuntos (splitting), esto es, {yi(0) con (1  i  k) siendo k el número total de
centroides.
· Paso 2: Clasificación.
Clasificamos todo el conjunto de vectores {x(n)} dentro de cada uno de los k
clusters de que vamos a disponer, para lo cual consideraremos que un elemento
pertenece al cluster para el cual la distancia de dicho elemento al centroide del cluster es
la más pequeña, esto es:
- x  C(i) si d (x , yi(m))  d(x, yj(m))  ji
86
Capítulo 5
La reducción de la base de datos
· Paso 3: Actualización de los centroides.
Hacemos m=m+1 (aumentamos un nivel en la iteración) y actualizamos los k
centroides de los conjuntos, para lo cual calcularemos la media de cada uno de los
conjuntos que nos han resultado del paso anterior, siendo esta media resultante el
centroide del conjunto.
A continuación, calculamos la distorsión media, D(m), para todo el conjunto de
vectores (relativa a la distancia de cada elemento a su centroide respectivo).
· Paso 4:
Si la distorsión media en el paso m, D(m), es inferior a la resultante en el paso
m-1, D(m-1), sólo en una determinada cantidad paramos (ya que la mejora que vamos a
conseguir en cuanto a minimización de la distorsión media al realizar nuevas iteraciones
no va a ser sustancial). En el caso contrario (podemos mejorar sustancialmente) se
vuelve al paso 2.
87
Capítulo 6
El programa de alineamiento de marcas
Capítulo 6: El programa de alineamiento de
marcas.
6.1. Introducción.
Los difonemas que se emplean en la base de datos son extraídos de forma
automática por el programa sacadif.exe, que se basa para dicha tarea, además de en una
serie de reglas dependientes de la clase de difonema, en la información contenida en el
fichero de parámetros asociado a cada una de las frases portadoras de que vamos a
disponer de cara a la creación de la base de datos.
Estos ficheros de parámetros son el resultado del marcado semiautomático que
debe ser llevado a cabo por el usuario, y que ya fue descrito con anterioridad. Esto es,
mediante el empleo de la herramienta PCV desarrollada por el GTH, el usuario va
escuchando cada una de las frases portadoras, debiendo delimitar manualmente la
posición de cada uno de los fonemas presentes (etiquetado), así como revisar el
marcado que se realiza de forma automática para añadir aquellas marcas de tono que no
hayan sido colocadas por el programa, eliminar aquellas marcas que el programa haya
colocado erróneamente (por ejemplo en el caso de la duplicación de la frecuencia), o
cambiar de posición aquellas que hayan sido mal colocadas (marcado en zonas de
mínima amplitud de la señal de voz ...).
Teniendo en cuenta que el marcado y segmentación de las unidades se realiza de
forma manual y que, por lo tanto, es susceptible de errores que pueden influir
gravemente en el posterior proceso de la síntesis, se haría necesaria una revisión
minuciosa de dicho marcado para cada una de las frases por parte de una persona
"experta", lo que conllevaría mucho tiempo. Una posible solución sería la de utilizar a
dos individuos que realicen el marcado y segmentación de los mismos ficheros de
muestras por separado y luego realizar una comparación entre los resultados obtenidos
por ambos, que nos permita centrarnos en la revisión de aquellos puntos en los que se
88
Capítulo 6
El programa de alineamiento de marcas
dan mayores diferencias (que pueden ser errores por parte de alguno de ellos o producto
de diferentes criterios a la hora de realizar la segmentación).
El objetivo que se persigue con la elaboración del programa de alineamiento de
marcas de tono, es el de realizar el alineamiento de las marcas de tono contenidas en dos
ficheros de parámetros (con extensión *.par) asociados a un mismo fichero de muestras,
es decir, se trata de encontrar la secuencia "óptima" que se debe seguir para pasar de la
posición de las marcas de pitch de uno de ellos a la posición de las del otro. Como
resultado de dicho proceso de alineamiento, se genera un tercer fichero de parámetros
en el que la posición de las marcas de tono es el resultado de seguir dicha secuencia
"óptima". La determinación de dicha secuencia se hará en base de una serie de criterios
que se detallarán más adelante.
El alineamiento de marcas de tono se realiza para fonemas aislados, por lo que a
partir del fichero global de muestras tendremos que extraer las del fonema concreto que
deseemos alinear. Para ello se empleará la información referente al etiquetado contenida
en los ficheros de parámetros. Es preciso señalar, que se optó por esta estrategia de
alineamiento para fonemas, en lugar de hacer el alineamiento de forma global para todas
las marcas de tono del fichero de voz, porque el marcado de algunos fonemas oclusivas, fricativas ...-no puede ser considerado fiable. De hecho, para estos casos
particulares, dicha información sobre el marcado no se emplea tal cual aparece en el
fichero de parámetros, sino que se produce un remarcado automático a posteriori de
estos fonemas durante el proceso de extracción de los mismos, haciéndolo a una
frecuencia fija.
En este programa se parte de un fichero de muestras (*.raw) y de dos ficheros de
parámetros asociados a dicho fichero de muestras (*.par), resultado cada uno de ellos
del marcado y segmentación del fichero por parte de cada uno de los usuarios. Como ya
se dijo, los ficheros de parámetros se obtienen con el programa PCV para Windows
elaborado por el GTH, y tienen el mismo nombre que el fichero de muestras,
diferenciándose de este por su extension *.par.
89
Capítulo 6
El programa de alineamiento de marcas
El contenido de estos ficheros consta de dos partes claramente diferenciadas. En
la primera de ellas las líneas son de la forma:
PIT: 0.105563, 108.108109
En estas líneas aparece el resultado del proceso de marcado, indicándose la
posición de las marcas de tono que el usuario ha introducido en el programa PCV. El
primero de los números expresa la posición en segundos de la marca de pitch con
respecto al comienzo del fichero, y el segundo de ellos el tono expresado en hertzios
asociado a la misma. El cálculo del tono se hace con respecto a la posición de la marca
de tono anterior (se calcula como la inversa de la distancia en tiempo entre las marcas
de pitch consecutivas).
La segunda parte de los ficheros hace referencia a la segmentación en fonemas
que se reallizó del fichero, estando compuesta por las etiquetas asociadas a los distintos
fonemas que el usuario ha detectado, apareciendo en el fichero de la siguiente forma :
LBR: 0.069250, 0.123000, 0, 0, 0, T
El primero de los números indica la posición -en segundos- del principio de la
etiqueta y el segundo el final de la misma, ambos referidos al comienzo del fichero. El
último de los campos representa el nombre de la etiqueta, que deberá encontrarse entre
la lista de etiquetas permitidas asociadas a fonemas para que el programa de
alineamiento sea capaz de trabajar con ella.
Dada la importancia que va a tener para nuestro análisis la corrección en el
etiquetado, el primer paso que se llevará a cabo va a consistir precisamente en una serie
de comprobaciones en los etiquetados de ambos ficheros de parámetros para así detectar
posibles incoherencias.
En primer lugar, antes de comparar un fichero de parámetros con el otro, lo que
se hace es comprobar para cada uno de los ficheros si las etiquetas que el usuario asignó
a los fonemas de la frase se encuentran dentro del conjunto de valores permitido. A
90
Capítulo 6
El programa de alineamiento de marcas
continuación, se procede a analizar si existen las mismas etiquetas en ambos ficheros, y
si se pasa de este punto, se revisa si los comienzos y finales de las mismas no se desvían
entre sí más allá de un cierto offset (configurable mediante un fichero *.ini), y que en un
principio se situó de forma experimental en la duración de un periodo de señal de 160
Hz (tono típico para una señal de voz femenina), es decir, de unas 100 muestras si
empleamos una frecuencia de muestreo de 16 KHz (permitimos al usuario un margen de
error de aproximadamente 1 periodo típico de señal en el marcado de los comienzos y
finales de los fonemas, lo que es necesario sobre todo en algunos fonemas en los que
resulta especialmente difícil determinar el comienzo y fin –por ejemplo tenemos el caso
de los fonemas vocálicos procedentes de un diptongo).
En caso de haberse detectado alguna diferencia significativa en el etiquetado de
los ficheros de parámetros, la ejecución del programa se aborta, ya que el análisis de
pitch en este caso carece de sentido, retornando el programa el mensaje de error
correspondiente a la causa que generó el error y generándose los ficheros de sonido
(*.mst) y de parámetros (*.par) con el formato del programa PCV de los fonemas
causantes del conflicto, para así darle al usuario la posibilidad de realizar las
correcciones necesarias mediante el propio programa de marcado.
6.2. Modo de funcionamiento del programa.
Para ejecutar el programa hay que teclear lo siguiente en línea de comandos:
c:>alineafon fichero
En este caso, alineafon es el nombre del fichero ejecutable y fichero es el
nombre del fichero de muestras a alinear- no es necesario incluir en el nombre la
extensión-, que se debe encontrar en el mismo directorio que el ejecutable.
Los ficheros de parámetros estarán cada uno en un directorio de trabajo distinto,
siendo diferente de aquel en el que se encuentra el fichero ejecutable. La razón de
emplear esta estructura de directorios, es que los ficheros de parámetros van a tener
exactamente el mismo nombre (el del fichero de muestras con la extensión *.par), no
91
Capítulo 6
El programa de alineamiento de marcas
pudiendo existir en un mismo directorio dos ficheros con exactamente el mismo
nombre.
directorio general
directorio1: fichero de parametros 1
directorio2: fichero de parámetros 2
mst: ficheros de muestras de las diferencias
ejecutable (*.exe)
fichero de configuración (*.ini)
fichero muestras (*.raw)
Fig 6.1. Estructura del árbol de directorios
Como ya hemos dicho anteriormente, el programa consta de dos partes
claramente diferenciadas. En la primera de ellas lo que se hace es una comprobación
previa de los etiquetados de ambos ficheros *.par con el objetivo de detectar diferencias
en los nombres de los fonemas, o diferencias significativas en la apreciación de los
principios/finales de las etiquetas. Esta fase es necesaria, ya que en caso de no ser
superada con éxito el resto del programa no va a poder seguir ejecutándose, o en caso de
que lo haga, los resultados van a carecer por completo de significado.
La comprobación del etiquetado se lleva a cabo mediante una función que
recibe como argumentos :
- las etiquetas de ambos ficheros *.par. Es importante destacar que a esta
función no se le pasan directamente las etiquetas tal y como aparecen en el fichero, sino
que previamente se realiza un procesado sobre ellas. Este procesado consiste en
renombrar aquellas etiquetas que se repiten con el objetivo de que a la hora de generar
los ficheros *.mst asociados a los fonemas no se produzcan ambigüedades, ya que es
precisamente el nombre de la etiqueta el que se usa para nombrar al fichero. El
renombrado se realiza de acuerdo a lo siguiente:
92
Capítulo 6
El programa de alineamiento de marcas
· Si es la primera vez que aparece la etiqueta, ésta no se modifica.
· Por contra, si ya ha aparecido anteriormente se concatena al nombre un string
de la forma @xx, siendo xx el número de veces de aparición del fonema en la frase hasta
ese momento. Así, por ejemplo si en un mismo fichero *.par nos apareciesen tres
etiquetas asociadas al fonema E, estas se renombrarían de la forma E, E@1 y E@2 a
medida que fuesen apareciendo.
- las muestras del fichero *.raw para poder aislar aquellas muestras asociadas al
fonema que cause problemas y así generar el fichero *.mst
- el número total de etiquetas contenidas en el fichero de muestras.
-el umbral por encima del cual consideramos que existen diferencias
significativas de cara al etiquetado de los fonemas.
- el directorio de salida en el que vamos a escribir los ficheros *.mst.
Hay que destacar que tanto el umbral como el directorio de salida son leídos del
fichero de configuración del programa, que tiene el mismo nombre que el ejecutable,
pero con la extensión *.ini ,y que este fichero debe encontrarse en el mismo directorio
que el fichero ejecutable.
Durante el proceso de comparación, a medida que se van detectando las
diferencias, se generan los ficheros *.mst de ambos ficheros de parámetros (cada uno
contenido en un directorio) asociados a los fonemas que son diferentes, concatenando al
nombre del fonema una extensión -A o -B, en función de que la etiqueta provenga del
directorio de trabajo 1 o del 2.
Como ya dijimos, para que el programa pueda seguir trabajando normalmente,
esta fase debe finalizar sin que sea detectado error alguno. Una vez ejecutada la
comparación, habrá que comprobar el resultado de la misma y, en caso de que hubiera
habido diferencias, se aborta el programa para que el usuario corrija aquellas que
resulten más significativas.
93
Capítulo 6
El programa de alineamiento de marcas
En la segunda parte del programa, es en la que se lleva a cabo el proceso
propiamente dicho del alineamiento. El planteamiento de esta segunda parte se ha hecho
desde el punto de vista de la programación orientada a objetos, definiéndose clases de
objetos que van a estar íntimamente relacionadas con nuestro problema. Así, en un
principio se han definido dos clases, cuya estructura se explicará más adelante, que son :
- TMiFonema : La clase TMiFonema guarda toda la información asociada a los
fonemas, las muestras que lo componen, así como un conjunto de operaciones que se
pueden realizar con los mismos.
-TArray2D : La clase TArray2D entre otras cosas contiene los arrays de dos
dimensiones que vamos a necesitar para realizar el algoritmo de alineamiento de los
fonemas.
6.3. Algoritmo empleado para el alineamiento.
En primer lugar, hay que decir que el alineamiento se va a realizar para fonemas
de una forma aislada, en lugar de hacerlo de una forma global para todo el fichero,
descartando para el análisis los fonemas sordos. Esto es así porque las marcas que se
ponen en dichos fonemas no son fiables, y además, cuando el programa lee dichas
marcas, las recalcula de forma que se repartan de forma periódica a lo largo de la
etiqueta (para que el programa que genera los difonemas pueda trabajar correctamente,
es necesario que éstos contengan al menos un número dado de marcas de tono, de esta
forma lo que se hace es intentar distribuir este número mínimo de marcas a lo largo del
fonema). Por lo tanto, las marcas de los fonemas sordos con las que trabaja el programa
son diferentes de las que se encuentran en el fichero *.par, careciendo de sentido su
alineamiento.
Para facilitar la comprensión vamos a explicar todo con un ejemplo. El
funcionamiento del algoritmo de alineamiento propiamente dicho es el siguiente :
94
Capítulo 6
El programa de alineamiento de marcas
Supongamos que tenemos dos ficheros de parámetros en los que tenemos las
siguientes marcas : (posición en unidades temporales con respecto del principio de la
frase)
-fichero 1: 3,6,10,15,21
-fichero 2: 2,4,9,14,17,23
Nuestro objetivo será intentar encontrar el camino óptimo en cuanto a coste para
pasar de las marcas del fichero 1 a las del fichero 2. Para pasar de las marcas de un
fichero a las del otro habrá tres operaciones posibles- sustitución, inserción y borrado-,
cada una con un coste asociado siendo el camino óptimo aquel que tiene un coste global
mínimo.
El primer paso que vamos a seguir es crear un array de dos dimensiones, en el
que se van a poder representar todos los posibles caminos para pasar de un fichero a
otro. En dicho array, uno de los ejes va a representar las marcas del fichero 1 y el otro
las del fichero 2.
Así :
23
17
14
9
4
2
0
3
6
10
15
21
Nosotros vamos a manejarlo como si se tratase de una rejilla,y por tanto lo que
nos van a interesar son los vértices del array, comenzando siempre el camino óptimo en
el vértice inferior izquierdo (el punto (0,0)) y terminando en el vértice superior derecho
95
Capítulo 6
El programa de alineamiento de marcas
(en nuestro caso el punto (21,23)). El cálculo del coste para una celda genérica se hará
del siguiente modo :
(i,j+1)
Cada flecha nos representa una de
(i+1,j+1)
las operaciones posibles, ya que nosotros
sólo podremos pasar del punto (i,j) a uno
(i,j)
(i+1,j)
de los adyacentes, y en concreto al que nos
represente un coste mínimo.
El significado de las operaciones es el siguiente:
inserción: implica que hay un elemento que está
presente en el segundo fichero y que no lo está en el
primero. El coste de esta operación va a ser el producto
de una determinada constante por un porcentaje de la distancia con respecto de
la marca de tono anterior. En principio vamos a emplear dos constantes, una con
un valor bajo y otra con un valor más alto que nos sirva para penalizar la
operación en el caso de que sea imposible (por ejemplo cuando la posición de la
marca del fichero 2 sea posterior a la del fichero 1). De este modo se evita que
sea escogida esta operación al final del proceso.
borrado: indica que hay una marca presente en el
fichero 1 que no está en el fichero 2. El coste de esta
operación, al igual que en el caso anterior será el producto de un porcentaje de la
distancia entre marcas por unas constantes dadas cuyos valores se ajustarán en
función de los resultados que se pretendan alcanzar.
sustitución: indica que la marca que hay en el fichero 1
se corresponde aproximadamente con la del fichero 2,
siendo el coste de esta operación nulo si la diferencia de marcado es inferior a un
determinado offset (para así no penalizar el caso en el que las marcas sean
parecidas pero separadas un determinado offset que sería un porcentaje
determinado del periodo -distancia entre marcas) y en caso contrario un
porcentaje de la distancia euclídea entre la marca del fichero 1 y la del fichero 2.
96
Capítulo 6
El programa de alineamiento de marcas
En primer lugar, lo que se hace es calcular los costes asociados a cada uno de los
puntos de la rejilla. Dicho coste se calcula a partir de los costes de las celdas calculadas
anteriormente, siendo el coste asociado a la celda (0,0) nulo. Así el coste de cada celda
se determina a partir de la expresión :
coste (i,j)= mín {coste (i-1,j)+coste borrado,coste(i,j-1)+coste inserción,coste (i-1,j-1)+coste
sustitución}
Hay que tener también en cuenta que algunas celdas van a ser "especiales" desde
el punto de vista del cálculo del coste, ya que en ellas no van a ser posibles todas las
operaciones. Por ejemplo, en las del eje y solamente será posible llegar desde una
inserción, así como en las del eje x sólo será posible desde un borrado.
Además del coste óptimo cada punto va a guardar información sobre la
operación que ha llevado a dicho coste, con el objeto de luego poder recuperar el
camino óptimo.
La recuperación del camino óptimo se hará hacia atrás, es decir, partiendo del
vértice superior derecho, que representa el punto final del camino y cuyo coste será el
coste óptimo, se analizará la operación que tiene almacenada para ver desde qué punto
se llegó a el. Este proceso se repetirá hasta que se llegue al punto (0,0). Gráficamente lo
anterior queda :
· Cada celda queda representada por un par de la forma (coste, operación), donde
los tipos de operación son
· 0: sustitución
· 1: inserción
· 2: borrado
· Para simplificar vamos a suponer unos costes asociados a las operaciones de la
forma:
97
Capítulo 6
El programa de alineamiento de marcas
COSTE SUSTITUCIÓN= si distancia entre marcas 2, coste=0
si distancia entre marcas >2, coste=distancia
COSTE INSERCIÓN=2
COSTE BORRADO=2
23
17
14
9
(12,1)
(11,1)
(11,1)
(10,1)
(9,1)
(9,0)
(10,1)
(9,1)
(9,1)
(8,1)
(7,1)
(9,0)
(8,1)
(7,1)
(7,1)
(6,1)
(5,0)
(7,2)
(6,1)
(5,1)
(5,1)
(4,0)
(6,2)
(8,2)
(4,1)
(3,0)
(3,0)
(5,2)
(7,2)
(9,2)
(2,1)
(1,0)
(3,2)
(5,2)
(7,2)
(9,2)
(0,0)
(2,2)
(4,2)
(6,2)
(8,2)
(10,2)
4
2
0
3
6
10
15
21
El final del camino, se encontraría en el vértice superior derecho siempre y, a
partir de él, podemos recuperar el camino óptimo yendo hacia atrás, para lo cual nos
fijaremos en qué operación se empleó para calcular el coste de dicha celda. En nuestro
caso se puede ver el camino seguido, que queda representado por las flechas de color
gris. Al final obtenemos que, para pasar de un fichero al otro, se ha seguido la siguiente
secuencia :
SUST-SUST-SUST-SUST-INS-SUST
Es decir, se ha sustituido la marca situada en 3 por la de 2, la de 6 por la de 4, la
de 10 por la de 9, la de 15 por la de 14, se ha insertado una nueva marca en 17 y se ha
sustituido la marca situada en 21 por la de 23.
98
Capítulo 6
El programa de alineamiento de marcas
6.4. Clases definidas en el programa.
Clase TMiFonema
Parte pública:
· TMiFonema :
Constructor de la clase. Se le pasan como parámetros las etiquetas del fichero
*.par, las marcas que ha puesto el usuario, el fichero completo de muestras y el número
de etiqueta (fonema) que queremos crear. En la función se rellenan los campos privados
de la clase, a los que sólo se va a poder acceder a través de las funciones públicas de la
clase que se hayan definido con tal fin.
· ~TMiFonema:
Destructor de la clase. Se encarga de liberar la memoria dinámica reservada para
almacenar las marcas del fonema, las muestras del fonema y por último un array en el
que se guardan las distancias relativas entre marcas que por el momento no se utiliza,
pero que se puede usar para refinar el tratamiento de las distancias (detección de
posibles offsets entre las marcas de ambos ficheros).
· FonemaEscribir:
Recibe como parámetro el nombre del fichero de texto en donde queremos que
se escriban todos los datos de un determinado fonema. El nombre debe ir acompañado
de la extensión.
Esta función sirve como ayuda en los procesos de depuración, ya que nos
permite acceder al valor que toman todos los campos protegidos del fonema.
99
Capítulo 6
El programa de alineamiento de marcas
· MuestrasObtener:
Esta función nos devuelve las muestras del fonema en una estructura del tipo
TIVector para poder así hacer cualquier tipo de procesamiento de las mismas (DFT’s
...). La estructura TIVector se explicará más adelante cuando se hable de la parte
protegida de la clase.
· MSTEscribir:
Esta función nos genera un fichero de muestras (*.mst) que se puede escuchar
con el PCV de nombre el mismo del fonema. Recibe como parámetro una cadena de
caracteres que especifica el directorio en el que queremos que se escriba el fichero de
muestras. La cadena debe especificar el path relativo al directorio en que se encuentra el
ejecutable y siempre debe acabar en el carácter ‘/’ para que la concatenación que se
hace internamente se realice satisfactoriamente. Esto es, por ejemplo:
“../../mst/”
· GetLongitud:
Esta función nos devuelve la longitud en número de marcas del fonema en
cuestión.
Parte privada: No tiene
Parte protegida:
· nombre del fonema.
· marcas del fonema :
Las marcas del fonema están constituidas por una estructura del tipo Tejes32,
que entre otros campos tiene uno con el número de marcas y otro que es un puntero a las
marcas de la etiqueta.
· array que contiene las distancias entre marcas consecutivas.
100
Capítulo 6
El programa de alineamiento de marcas
· muestras del fonema:
Las muestras del fonema son una cadena del tipo TIVector. Cada elemento del
tipo TIVector entre otras cosas va a contener un puntero a las muestras del fonema y
además un campo con el número total de muestras.
Clases amigas:
· TArray2D : se define como una clase amiga de la clase TArray2D porque a la
hora de crear los arrays de dos dimensiones para el alineamiento se va a necesitar
acceder a las marcas de los fonemas, que como ya hemos visto pertenecen a la parte
privada de la clase.
Clase TArray2D
Parte pública :
· TArray2D :
Constructor de la clase, al que se le pasan como parámetros los dos fonemas que
pretendemos alinear. En el constructor se reserva espacio para un array de dos
dimensiones de tamaño (nº marcas fonema 1 + 1) *( nº marcas fonema 2 + 1). Esto es
así porque hay que guardar espacio también para el origen del array, que siempre será el
principio del camino óptimo. Hay que destacar que cada celda del array será un
elemento del tipo TCeldilla2D, que es una estructura que consta de dos campos:
- el coste del punto de la rejilla.
- el tipo de operacion, que se guarda en la forma SUSTITUCION, INSERCION
o BORRADO.
Además se guardan las marcas de ambos fonemas para que luego se puedan
emplear en la función que calcula los costes de cada celdilla. Esto se puede hacer
101
Capítulo 6
El programa de alineamiento de marcas
porque la clase se definió como amiga de la de los fonemas y, por lo tanto, puede
acceder a sus campos protegidos.
· ~TArray2D :
Destructor de la clase. Se encarga de liberar la memoria reservada para el array
de dos dimensiones, así como la reservada para los arrays que contienen las marcas de
los fonemas.
· ArrayVolcar :
Esta función nos vuelca a un fichero de texto toda la información del array de
dos dimensiones. En concreto nos muestra para cada celda el valor del coste, así como
la operación correspondiente. Hay que aclarar que al estar internamente implementadas
las operaciones como un enum la correspondencia de operaciones es :
-SUSTITUCION = 0
-INSERCION = 1
-BORRADO = 2
La función recibe como parámetro el nombre del fichero de texto incluida la
extensión. El fichero nos queda almacenado en el mismo directorio en que se encuentre
el ejecutable.
· CostesCalcular :
Esta función calcula los costes de cada una de las celdas del array de acuerdo
con el algoritmo expuesto anteriormente. Internamente hace uso de la función Minimo
que lo que hace es devolvernos el mínimo de tres argumentos enteros. Esta función se
definió porque la estándar que define Borland sólo acepta dos parámetros.
102
Capítulo 6
El programa de alineamiento de marcas
· Alinear :
Esta función nos devuelve el coste óptimo del alineamiento, que se pasa como
parámetro a la función por referencia, así como el camino óptimo expresado como una
cadena de enteros, siendo el significado de los mismos el expuesto en la función
ArrayVolcar. Hay que destacar, que con el objeto de poder determinar donde se
encuentra el final del camino en el último elemento se almacena un valor 3, que como
ya hemos visto no se corresponde con ninguna de las operaciones permitidas. Puesto
que el camino óptimo sólo se puede recuperar partiendo desde el último punto del
camino, una vez recuperado habrá que darle la vuelta para así poder trabajar
correctamente con él.
El coste óptimo será el de la celda correspondiente al vértice superior derecho
como ya dijimos anteriormente. Hay que destacar que en caso de que ocurriese algún
error durante el alineamiento la cadena devuelta sería un puntero a NULL, lo que por el
momento no se ha implementado ya que hará falta determinar las posibles condiciones
que nos pueden llevar a error.
Parte privada :
· Dimensión del eje i del array en número de marcas (número de marcas del
fonema 1).
· Dimensión del eje j del array en número de marcas (número de marcas del
fonema 2).
· Marcas del fonema 1.
· Marcas del fonema 2.
· Array de 2 dimensiones con todos los datos del alinemiento.
Parte protegida : No tiene.
103
Capítulo 7
La segmentación automática de unidades
Capítulo 7: La segmentación automática de unidades.
7.1. Introducción.
En este capítulo se describen una serie de experimentos, que fueron llevados a
cabo de cara a realizar la segmentación de las frases componentes de la base de datos de
una manera automática. Estos experimentos se realizaron en colaboración con D. Juan
Manuel Montero y con D. Luis García Pérez (profesor y proyectando del Grupo de
Tecnología del Habla, respectivamente).
El objetivo de dichos experimentos, era el de evaluar la posibilidad de realizar la
segmentación de las frases componentes de la base de datos de una manera automática
(como ya se citó en el Capítulo 3, la segmentación consiste en delimitar mediante
etiquetas la posición de los fonemas dentro de las frases), restándose de este modo una
gran cantidad de trabajo para la elaboración de bases de datos compuestas por un gran
número de unidades. En efecto, debemos recordar que dicho proceso de segmentación
es realizado manualmente por el usuario (empleando la herramiente de edición PCV,
elaborada por el GTH), para lo cual éste debe escuchar una a una las frases, y colocar
las etiquetas que aislan cada uno de los fonemas dentro de las mismas.
Claramente, este procesado manual requiere una gran 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 volúmen 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.
Algunos de dichos "errores" podrían ser corregidos mediante el etiquetado
automático, ya que por un lado no sería necesaria la edición manual para generar el
etiquetado (los desarrolladores se podrían centrar 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. Lógicamente, hay que pensar que se producirán
104
Capítulo 7
La segmentación automática de unidades
también errores de marcado, que seguramente serán mayores que en el caso de la
segmentación manual, hecho que puede quedar compensado por la considerable
reducción en el tiempo de procesado.
7.2. Descripción de los experimentos.
Para la realización de estos experimentos se empleó el sistema de
reconocimiento de voz de habla aislada desarrollado en el Grupo de Tecnología del
Habla, pudiéndose encontrar una descripción teórica del mismo en el Apéndice A de
este mismo trabajo. Hay que destacar el hecho de que se trata de un reconocedor de
palabras aisladas, aspecto que se ajusta bastante bien a nuestros objetivos (ya que
pretendemos "reconocer" una palabra dentro de una determinada frase-patrón).
Los parámetros fundamentales que emplea este reconocedor son los siguientes:
-
frecuencia de muestreo: 8 Khz .
-
desplazamiento de trama: 80 muestras (10 ms).
-
tamaño de trama: 200 muestras (25 ms).
-
coeficiente de pre-énfasis: 1.00.
-
parámetros empleados: 11 parámetros estáticos y 11 diferenciales.
-
tipos de parámetros: 10 MFCC + energía (extraídos de 17 bandas de
energía).
El alfabeto empleado por el reconocedor estaba compuesto por 28 alófonos y 1
silencio (no aparecen representados los silencios de las oclusivas):
0 ch
1a
2 'a
3e
4 'e
5i
6 'i
7o
8 'o
9u
10 'u
11 b
12 z
13 d
14 f
15 g
16 x
17 k
18 l
19 m
20 n
21 ny
22 p
23 rr
24 r
25 s
26 t
27 y
28 &
105
Capítulo 7
La segmentación automática de unidades
Se emplearon modelos semi-contínuos independientes del contexto, con
modelos de fonema de 3 estados. Para el modelado de los silencios inicial y final
también se emplearon 3 estados.
Para el entrenamiento del reconocedor se emplearon las frases utilizadas en la
base de datos de Natvox siguientes (voz femenina aplicada a dominio restringido):
-
frases 1, 2, 3, 4, 5, 6, 7, 17 y 19
En total se dispuso de un conjunto de 16.062 alófonos de cara al entrenamiento
del sistema. Hay que tener en cuenta, que por trabajar el reconocedor con una frecuencia
de muestreo de 8 Khz fue necesario convertir la frecuencia de muestreo de nuestras
frases de 32Khz a 8 Khz, para lo que se empleó el programa comercial de edición de
sonido Cool Edit.
Previamente a la realización del entrenamiento, fue necesario generar el
diccionario y la lista que iban a ser empleados, tanto en el entrenamiento del sistema,
como en la fase de segmentación. Para ello se emplearon una serie de programas que se
encargaban de crear dichos ficheros. La creación comenzaba haciendo una llamada al
fichero PROCESA.BAT:
for %frase in (@frases.dir) gosub :PROCESA
for %i in (*.dic) type %i >>lista.unf
edit lista.unf
quit
:PROCESA
for %i in (%DIR_PAR\%frase\originales\*.par) gosub :PROCESA1
return
:PROCESA1
for %j in (@DIR_TXT\%frase\originales\%@NAME[%i].txt gosub :PROCESA2
return
:PROCESA2
echo %j | perl sinespac.per > sinespac.dep
for %k in (@sinespac.dep) gosub :PROCESA3
:PROCESA3
perl gendic.per @%NAME[%i].lbl %k <%i >%@NAME[%i].dic
return
106
Capítulo 7
La segmentación automática de unidades
El programa iba recorriendo la lista contenida en frases.dir, en la cual se
encontraban las frases a ser procesadas (p.e. frase1, frase 2 ...) y para cada una de ellas
se iban tomando todos los ficheros de parámetros asociado a cada fichero concreto de la
frase (p.e. bv01001.par) y los ficheros de texto asociados a los mismos (p.e.
bv01001.txt), eliminándose los espacios de dicho fichero. Estos datos se le pasaban al
programa gendic.per que era el encargado de generar los diccionarios.
En el programa gendic.per en primer lugar se hacía una conversión de los datos
contenidos en el fichero *.PAR (relativos a la etiqueta LBO, dado que la posición de las
marcas que aparecía en dichos ficheros era relativa a las frases muestreadas a 32 Khz:
while ($_=<stdin>)
{
if (/LBO/)
{
s/\,//g;
@campos=split(/ /,$_,9999);
$etiquetas[$cont]=$campos[4];
if ($cont==0)
{
$etiqueta_inicial=$campos[1]/4;
}
$cont ++;
$etiqueta_final=$campos[3]/4;
}
}
Como se puede ver, el proceso que se llevaba a cabo era el de ir buscando las
líneas del fichero *.par que comenzasen por el patrón "LBO" cuyo formato genérico era
el siguiente:
LBO: pos_inic, pos_int, pos_fin, fonema
Se separaban los distintos campos de la línea (mediante la función split) y se
dividía la información contenida en las etiquetas correspondientes a la posición inicial y
final (en número de muestras) por 4 (para pasar de 32 Khz a 8 Khz)..
107
Capítulo 7
La segmentación automática de unidades
A continuación se tomaban las etiquetas y se hacía la conversión de algunos
fonemas (para adaptarse a nuestro alfabeto) y por último se hacía la codificación de los
fonemas componentes (pasar del fonema a su número correspondiente según la tabla
expuesta anteriormente). El resultado de todo este proceso era un diccionario (fichero
con extensión *.DIC), presentando estos ficheros un aspecto de la forma:
BV201.lbl 456 357 AkSesta 7 a k s 'e s t a 1 17 25 4 25 26 1
BV202.lbl 357 419 Acebo 5 a z 'e b o 1 12 4 11 7
BV203.lbl 357 443 Alentisque 9 a l e n t 'i s k e 1 18 3 20 26 6 25 17 3
BV204.lbl 374 464 AltoCampó 9 'a l t 'o k a m p 'o 2 18 26 7 17 1 19 22 8
.......
Por último, se generaba una lista (lista.unf) que contenía el nombre de los
diccionarios que habían sido generados).Una vez que se dispuso del diccionario, ya se
pudo proceder al entrenamiento del sistema. Hay que destacar que se generaron dos
codebooks (1 para los parámetros MFCC y otro para su derivada, DMFCC) utilizándose
un total de 256 centroides.
Durante la fase de test, el sistema de reconocimiento recibía como entrada,
además del fichero de muestras de la frase a segmentar (con la extensión *.PCM), un
fichero con la extensión *.LBL asociado a la misma frase. En este fichero, se daba
información al reconocedor sobre la posición dentro de la frase en la cual se encontraba
el fragmento que debía "reconocer" (hay que recordar que se trataba de frases
portadoras que contenían un determinado campo variable, que era lo que nos interesaba
segmentar). El formato típico de estos ficheros era el siguiente (es el mismo que el de
las líneas del fichero *.PAR):
LBO: 51832, 54796, 57761, ablanedo
108
Capítulo 7
La segmentación automática de unidades
Como se puede apreciar, en el fichero aparecen tres números. El primero de ellos
informa sobre la posición (en número de muestras) del comienzo de la cadena a
segmentar (reconocer), el segundo sobre la posición central (este dato no se emplea) y el
último de ellos proporciona la posición del final de la cadena (también en número de
muestras). Por último, también se pasa como argumento de entrada el valor de la cadena
a reconocer.
La salida que daba el reconocedor era un fichero de parámetros (con extensión
*.PAR) con el formato adecuado para el programa PCV (en realidad sólo generaba la
información sobre la posición de las etiquetas asociadas a los fonemas reconocidos). Un
ejemplo de fichero *.PAR generado automáticamente sería el siguiente:
LBO: 52080, 52080, 52720, a
LBO: 52720, 52720, 53200, b
LBO: 53200, 53200, 54000, l
LBO: 54000, 54000, 54720, a
LBO: 54720, 54720, 55360, n
LBO: 55360, 55360, 56240, 'e
LBO: 56240, 56240, 56800, d
LBO: 56800, 56800, 57760, o
7.3. Resultados del experimento.
Hay que destacar que para la realización del test se emplearon todos los datos de
que disponíamos, esto es, el mismo conjunto de 16062 alófonos que fue utilizado en el
entrenamiento del sistema.
En primer lugar citamos la tasa de reconocimiento obtenida por el sistema, cifra
que solamente tiene sentido con el objeto de evaluar si el funcionamiento del mismo es
correcto (ya que se han empleado los mismos datos en el reconocimiento que en el
entrenamiento). Los resultados obtenidos del reconocimiento fueron los siguientes:
109
Capítulo 7
La segmentación automática de unidades
Número de ficheros a reconocer: 1364.
Aciertos primer candidato: 1321 sobre 1364 (0.9685 %)
Aciertos segundo candidato: 1361 sobre 1364 (0.9978 %)
Aciertos tercer candidato: 1363 sobre 1364 (0.9993 %)
Aciertos cuarto candidato: 1364 sobre 1364 (100 %)
Investigando los fallos que había tenido el reconocedor, se pudo observar que
una gran parte de los mismos era debida a la existencia de distintas pronunciaciones
para un mismo fonema (p.e. d/z) no constituyendo por lo tanto errores en el
reconocimiento. Al final de este análisis se llegó a las siguientes cifras:
Aciertos primer candidato: 1358 sobre 1364 (99.5601 %)
Aciertos segundo candidato: 1361 sobre 1364 (99.7801 %)
Aciertos tercer candidato: 1361 sobre 1364 (99.7801 %)
Aciertos cuarto candidato: 1364 sobre 1364 (100.00 %)
En cuanto a los resultados de la segmentación automática, que era lo que
realmente queríamos evaluar, se consideraron como erróneas aquellas etiquetas en las
cuales la posición de la marca difería 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 de nuestro sistema va a venir marcada por el desplazamiento de trama que
empleemos, no pudiendo nunca ser mayor que dicho desplazamiento, que en nuestro
caso es de 10 milisegundos). Con este umbral de 20 milisegundos se obtuvieron los
siguientes resultados:
Tasa de aciertos: 28.631 sobre 32126 marcas (89.1210 %)
Error medio cometido por marca: 8.9953 %
110
Capítulo 8
Conclusiones y líneas futuras
Capítulo 8: Conclusiones y líneas futuras.
8.1. Conclusiones y líneas futuras de trabajo.
En primer lugar hay que destacar que, para que la mejora que aporta el sistema
de síntesis por selección sea significativa en relación a lo que nos ofrecen en la
actualidad los sistemas tradicionales de síntesis por concatenación, es necesario
disponer de una gran variedad de unidades en la base de datos, en lo que se refiere tanto
a sus características prosódicas, como a los contextos fonéticos de procedencia de las
mismas. Hay que tener en cuenta que, el disponer de una base de datos de gran tamaño
no implica que esta base de datos sea "de buena calidad", ya que en muchos casos
existen muchas unidades que no están aportando ninguna riqueza a la misma
(características prosódicas muy parecidas entre sí o contextos fonéticos de procedencia
similares).
Además, si se observan las listas de unidades procedentes de los procesados
automáticos, que se llevan a cabo para la construcción de la base de datos, se puede ver
que un porcentaje bastante importante del total de unidades son unidades compuestas
por sólo una fricativa (S, F, Z, J) o silencios. Estas unidades presentan unas
características bastante redundantes, ya que tan solo se van a diferenciar unas de otras
por su duración, con lo que estamos teniendo un porcentaje de unidades dentro del total
bastante elevado, que no aporta riqueza al sistema.
En cambio, para otro tipo de unidades menos comunes (como por ejemplo puede
ser el caso de los trifonemas) la variedad es apenas inexistente, contando en muchos
casos con tan solo una instancia por tipo de unidad. Este aspecto va a traducirse en que,
en algunos casos, las modificaciones prosódicas que será necesario llevar a cabo sobre
las unidades serán muy grandes, distorsionándose mucho la señal de voz e influyendo
muy negativamente sobre la calidad de la voz. En efecto, es necesario incidir en el
hecho de que es muy importante que la calidad de la secuencia seleccionada sea
aproximadamente uniforme, aspecto al que contribuye el hacer uso de la búsqueda
111
Capítulo 8
Conclusiones y líneas futuras
según el algoritmo de Viterbi, ya que será normalmente la unidad de peor calidad,
dentro de las seleccionadas, la que marque la impresión que obtendrá el usuario del
sistema.
Este aspecto relacionado con la variabilidad de unidades hace inviable, por el
momento, la aplicación de este sistema a la síntesis de voz con emociones, dada la
escasez de datos de que se dispone (unas 1000 unidades por emoción). Hay que tener en
cuenta que, a la hora de sintetizar las emociones, disponíamos de muy poca variedad de
datos, y en algunos casos había unidades para las que tan solo se disponía de una
instancia. Este hecho no es tan importante en unidades del tipo de la emoción neutra, en
la que las características prosódicas presentan una mayor uniformidad, pero sin
embargo, en emociones como la sorpresa o la alegría (en las que se dan cambios muy
bruscos de ritmo y además muy focalizados en ciertos puntos de la frase) el algoritmo
TD-PSOLA debía hacer modificaciones muy drásticas sobre la señal de voz. Estas
modificaciones aparecían en forma de sonidos metálicos de reverberación que
disminuían considerablemente la calidad de la voz sintética, no obteniéndose mejora
aparente con respecto de un sistema convencional.
Siguiendo con la base de datos, resulta de vital importancia llevar a cabo un
revisado bastante exahustivo de la segmentación y marcado de las unidades, ya que este
tiempo que se invierte en eliminar unidades espúreas contribuye firmemente a un
aumento considerable de calidad (puesto que el algoritmo es incapaz de detectar estas
unidades). Por otro lado, se pudo comprobar la imposibilidad de automatizar por
completo el proceso de generación de la base de datos, debiéndose realizar la selección
manual de algunas unidades en concreto, como fue el caso de las fricativas y las
unidades del tipo B-D-G (ya que las que fueron grabadas originalmente poseían, en
muchos casos, pequeñas explosiones o exceso de energía, aspecto que hacía que al ser
empleadas en un contexto diferenteal original, sonasen francamente mal). La tendencia
seguida fue la de escoger unidades "suaves".
Un dato que quedó bastante patente durante la realización del proyecto, fue el
hecho de que el rango de modificación de las características prosódicas que permite el
algoritmo TD-PSOLA es bastante inferior a las dos octavas teóricas, debiendo ser más
selectivos con las unidades si queremos mantener un cierto grado de calidad. Por otro
112
Capítulo 8
Conclusiones y líneas futuras
lado, se observó que resultaba poco apreciable la diferencia entre las unidades cuyas
características prosódicas habían sido modificadas ligeramente, y aquellas que habían
sufrido mayores modificaciones (siempre hablando dentro del rango de tolerancia para
TD-PSOLA). En general se pudo apreciar que, aunque se produjera una mejora bastante
sutil en la calidad de la síntesis (en el sentido de reducirse ruidos en la concatenación o
tonos metálicos) es resultado distaba bastante de los objetivos perseguidos, ya que se
obtenía una voz con un timbre bastante diferente del original, y en general, bastante
nasalizado.
En este sentido, durante la escritura de este proyecto, se comenzó a experimentar
con el pegado directo de unidades sin el empleo de TD-PSOLA [Montero, 00],
obteniéndose resultados bastante satisfactorios, al ser mucho más parecido el resultado
obtenido al timbre de voz original del locutor/a, con lo que se puede conseguir una voz
mucho más "natural" (aunque la calidad es los resultados resultó bastante inconsistente,
al tener enunciados que se sintetizaban muy bien y otros que sonaban bastante mal). En
general, en estos experimentos se ha podido observar que, cuando la extracción de los
difonemas se ha realizado correctamente se produce una concatenación bastante buena
entre las unidades, no generándose ruidos apreciables. Por el contrario, lo que sí que se
aprecia son los saltos de tono al pasar de una unidad a otra y las diferentes pendientes en
la curva de entonación (la única modificación que se efectúa sobre las unidades es la de
adaptar sus duraciones a los objetivos pedidos).
De todo lo anterior, se extrae que se hace necesaria una revisión de la función
que mide la distorsión derivada de la concatenación de unidades, debiendo tender hacia
distancias del tipo del establecimiento de la diferencia entre tonos medios en la zona del
pegado o similares, en lugar del empleo de la distancia entre los coeficientes mel
cepstrum (que resulta computacionalmente mucho más costosa).
Asimismo, resulta patente la necesidad de perfeccionar un mecanismo de
normalización de energías, para evitar que el salto de unidades se aprecie en forma de
una diferencia de las mismas. En principio, se debe tratar de conseguir que todas las
unidades al ser sintetizadas tengan una energía uniforme, siendo el mecanismo de
normalización dependiente del tipo de unidad. Por último, también sería necesario
113
Capítulo 8
Conclusiones y líneas futuras
emplear algún mecanismo de suavizado en la zona de pegado de las unidades para
mejorar la transición entre unidades y eliminar los pequeños ruidos que aparecen.
En estos experimentos, se puede apreciar la necesidad de introducir en el sistema
características adicionales de cara a la selección de las unidades, como pueden ser la
posición de las mismas dentro de la frase de que fueron extraídas (por ejemplo
procedentes de un principio o final) o el hecho de saber si se trata de unidades
acentuadas, con el fin de que en estos casos particulares la tendencia del sistema sea la
de escoger unidades de estas características en el caso pertinente o la de penalizar
fuertemente su selección cuando no se trate de unidades de este tipo.
114
Apéndice A
El sistema de reconocimiento
Apéndice A. El sistema de reconocimiento.
A.1. El sistema de reconocimiento.
En este apartado se hace una descripción teórica del sistema de reconocimiento
de voz de habla aislada desarrollado en el Grupo de Tecnología del Habla (GTH). En
perimer lugar se hará una explicación sobre el funcionamiento del reconocedor basado
en modelos de Markov discretos para luego describir como funciona el sistema cuando
se utiliza modelado semicontinuo. Más información sobre modelados y técnicas de
reconocimiento se puede encontrar en [García, 00].
A.1.1. Descripción general del sistema de reconocimiento.
El esquema global del sistema, utilizando modelos discretos de Markov, queda
resumido en la siguiente figura:
PARAMETRIZACIÓN
CUANTIFICACIÓN
RECONOCIMIENTO
CÁLCULO DE PESOS
ENTRENAMIENTO
CÁLCULO DE CODEBOOK
Figura A.1: Esquema global del sistema de reconocimiento que utiliza modelado
discreto.
115
Apéndice A
El sistema de reconocimiento
El sistema de reconocimiento podemos considerarlo dividido en dos grandes
etapas:

Entrenamiento: su objetivo es obtener una serie de modelos o
prototipos que se utilizarán en la etapa de reconocimiento.

Reconocimiento: se compara la palabra a reconocer con cada uno
de los modelos obtenidos con anterioridad y se elige el de mayor
probabilidad.
En el caso particular que nos ocupa, el entrenamiento del sistema se realizó con
el 100% de los datos disponibles, reconociendo este mismo porcentaje de los datos
(aunque el modo normal de proceder es entrenando con aproximadamente el 70 % de
los datos, reconociendo con el 30 % restante).
En la etapa de entrenamiento, a su vez, podemos distinguir cinco fases:
1) Parametrización: en esta fase se calculan una serie de
coeficientes a partir de las muestras obtenidas en la fase de muestreo de la
señal de voz. Dichos coeficientes contienen las características más
significativas del habla.
2) Cálculo de los pesos: tiene como función obtener los pesos que
se utilizarán para ponderar la distancia euclídea empleada en el cálculo de la
distancia entre dos vectores de parámetros.
3) Cálculo del codebook: se calcula un número finito de vectores
representativo del conjunto formado por todos los vectores que se han
obtenido en la parametrización. Se denomina codebook a este conjunto finito
y centroide a cada uno de los vectores que lo componen.
4) Cuantificación: el objetivo de esta fase consiste en reducir la
variabilidad de los datos a tratar. Consiste en asignar a cada uno de los
vectores obtenidos en la fase de parametrización el centroide más cercano.
116
Apéndice A
El sistema de reconocimiento
5) Entrenamiento: consiste en generar una serie de modelos o
prototipos a partir de los datos con los que se entrena. Cada uno de estos
modelos se construye a partir de varias pronunciaciones de la palabra o del
alófono correspondiente dependiendo de si utilizamos modelos de palabra o
de alófono, respectivamente. Como ya vimos en el capítulo anterior, la
conveniencia de usar uno u otro tipo de modelos depende, en gran medida,
del tamaño del vocabulario que se quiera reconocer.
Por otra parte, en la etapa de reconocimiento podemos distinguir tres fases
diferentes:
-
Parametrización: el proceso es análogo al que se lleva a cabo en
el entrenamiento, pero en esta ocasión se parametrizan los datos de
reconocimiento.
-
Cuantificación: se asigna a cada uno de los vectores obtenidos en
la parametrización el centroide más cercano, análogamente a como se hacía
en el entrenamiento.
-
Reconocimiento: se compara la palabra a reconocer con cada uno
de los modelos o prototipos de las palabras existentes en el diccionario,
eligiéndose aquél con el que se obtiene una mayor probabilidad. En el caso
de utilizar modelos de alófono se construye el modelo correspondiente a
cada palabra del diccionario concatenando los sucesivos alófonos de los que
consta dicha palabra.
En este apartado únicamente se ha pretendido que el lector tenga una idea
general de cómo funciona el reconocedor de voz que utilizamos. En lo que resta de
capítulo se hará una descripción más exhaustiva de los diferentes bloques que
componen el sistema.
117
Apéndice A
El sistema de reconocimiento
A.1.2. La parametrización.
La parametrización tiene dos objetivos fundamentales:

La representación de la señal de habla, previamente muestreada, a través de
unos parámetros que resalten las características más importantes del mensaje
comprendido en la onda acústica, eliminando parte de la redundancia de la señal.

La adecuación del análisis a la forma de comportarse del oído humano.
El habla es una secuencia de sonidos consecutivos y solapados a causa del
movimiento de los órganos articulatorios. Esto se refleja acústicamente en una señal que
presenta una variación en el tiempo. Dicha variación es muy inferior a la frecuencia que
suele utilizarse en los sistemas de procesamiento del habla. A consecuencia de ello, se
puede considerar que el proceso de articulación es continuo con tendencia a la
estacionariedad en los núcleos de los sonidos. Esta es la razón por la que la señal de
habla se considera cuasi-estacionaria (más información y bibliografía sobre el tema se
puede encontrar en [García, 00]).
La variación lenta que presenta la señal de habla nos permite dividir su análisis
en tramas de duración relativamente corta. El análisis localizado del habla selecciona
tramas de duración finita y con solapamiento entre ellas. Este análisis puede llevarse a
cabo tanto en el dominio del tiempo como en el de la frecuencia.
En el dominio temporal, los parámetros son la energía local, la tasa de cruces por
cero y la función de autocorrelación. El análisis es sencillo, rápido y tiene interpretación
física directa.
En la actualidad, el análisis frecuencial del habla es el más utilizado. Los
parámetros espectrales que suelen emplearse en la mayor parte de los casos son los
parámetros cepstrales o MFCC (“Mel-Frequency Cepstral Coefficients”). En las páginas
118
Apéndice A
El sistema de reconocimiento
siguientes se explicará con detalle la parametrización cepstral que se empleó en análisis
que nos ocupa.
La parametrización cepstral.
El siguiente diagrama de bloques resume el proceso de obtención de los
parámetros MFCC:
VENTANA
HAMMING
PREENFASIS
FFT
ENERGÍA EN
CADA BANDA
LOG
DCT
Figura A.2: Proceso de obtención de los MFCC.
A continuación, se describe la generación de los parámetros MFCC a partir de
las muestras de la señal (esta descripción, aunque algo simplificada, ya fue realizada
anteriormente en el Capítulo 4 para explicar la manera calcular la distancia de
concatenación entre unidades):
1) Debido a que la señal de voz se atenúa 6 dB/octava conforme aumenta la
frecuencia, es necesario introducir un filtrado cuya función es incrementar la
relevancia de las componentes de alta frecuencia. Este proceso se conoce con
el nombre de preénfasis y puede ser diseñado a través de un filtro digital
paso alto (este filtrado de preénfasis no fue empleado en el cálculo de
distancias). Este filtro paso alto puede implementarse con la siguiente
ecuación en diferencias:
yn  xn  axn 1
donde a es una constante que varía entre 0 y 1.
En el dominio de la transformada Z, la función de transferencia del filtro
tiene la expresión siguiente:
119
Apéndice A
El sistema de reconocimiento
H ( z )  1  az 1
2) Se aplica un enventanado Hamming para seleccionar la trama con la que
vamos a trabajar. La ventana de Hamming viene definida por la siguiente
ecuación:
W n  0,54  0,46 cos(2n / N )
0<n<N
3) Se aplica la transformada discreta de Fourier (DFT) sobre la trama de
muestras enventanada, que se implementa a través de la transformada rápida
de Fourier (FFT). Se extrae el módulo de la FFT calculada en cada uno de
sus puntos, despreciándose la fase debido a la poca información que
proporciona en los procesos de reconocimiento de habla.
4) Llegados a este punto se utiliza la escala Mel para dividir el espectro en un
banco de filtros, mucho más estrechos y linealmente espaciados en las bajas
frecuencias, y muy amplios y logarítmicamente espaciados en las altas. De
este modo, se da mayor importancia a la información contenida en las bajas
frecuencias en consonancia con el comportamiento del oído humano.
Se calcula la energía en cada una de las bandas de frecuencias en que la
escala Mel divide el espectro. Para ello se suman los módulos al cuadrado de
la FFT en los puntos que se encuentren contenidos en cada una de dichas
bandas.
5) Se calcula el logaritmo de las energías calculadas anteriormente.
6) Los coeficientes cepstrales se calculan como la transformada coseno discreta
(DCT), que hace las veces de transformada inversa, de las energías
logarítmicas obtenidas con anterioridad. En concreto, los coeficientes
cepstrales se obtienen a partir del muestreo en 10 puntos de dicha
transformada. El cálculo de los MFCC responde a la expresión (citada en
4.3.3.) :
120
Apéndice A
El sistema de reconocimiento
MFCC
i  
j
L
1 

 e( j, k ) cos i(k  )  donde i=1...M
2 L

k 1
Los elementos de la ecuación representan:
-
k es la banda de frecuencias.
-
j es la trama en curso.
-
e(j,k) es el logaritmo de la suma de los módulos al cuadrado de la
FFT en la banda k de la trama j.
-
L es el número de bandas o filtros.
-
M es el número total de coeficientes MFCC (10, en nuestro caso).
A este conjunto hay que añadir un nuevo parámetro que es la energía local en la
trama. Esta energía se calcula del siguiente modo:
L
E (t )  10 log  X (i)
i 1
El significado de los elementos de la ecuación anterior es el siguiente:
-
X(i) es la transformada discreta de Fourier de la señal de habla
calculada mediante la FFT.
-
t es la trama objeto del cálculo.
-
L es el número de puntos de la FFT.
Al finalizar la parametrización, cada trama se convierte en un vector compuesto
por 11 parámetros, en los cuales está contenida la información significativa del tracto
vocal.
Para obtener una representación del habla más robusta, se utilizan los parámetros
DMFCC (derivada) y DDMFCC (aceleración), conjuntamente con los MFCC. La razón
por la que se utilizan estos parámetros, también denominados transicionales o
diferenciales, se basa en el hecho de que en sistemas independientes del locutor, las
frecuencias de resonancia (formantes) fluctúan considerablemente de unos locutores a
121
Apéndice A
El sistema de reconocimiento
otros, mientras que las variaciones de dichas frecuencias (pendientes de los formantes)
son más parecidas. Los parámetros DMFCC se obtienen derivando los MFCC, mientras
que los parámetros DDMFCC se calculan derivando los DMFCC.
A.1.3. El cálculo de los pesos.
La necesidad de introducir el concepto de distancia se debe a que, tanto en la
elaboración de los codebooks como en la cuantificación, es preciso evaluar el parecido
entre dos vectores de parámetros.
Para medir la distancia entre dos vectores, X e Y, se utiliza la distancia de
Mahalanobis, que se calcula a través de la siguiente expresión (una expresión
simplificada de ésta ya fue empleada en el Capítulo 4):
d 2 ( X , Y )  ( X  Y )C( X  Y )
En esta expresión C representa la inversa de la matriz de covarianza de X e Y.
Desde el punto de vista práctico, resulta difícil obtener dicha matriz. Para simplificar el
cálculo, se utiliza una matriz diagonal, partiendo de la suposición de que el resto de sus
valores son insignificantes. La expresión resultante quedaría del siguiente modo:
N
d 2 ( X , Y )   Wi (x  y ) 2
i
i
i 1
En la ecuación anterior, xi e yi representan las coordenadas de los vectores de
parámetros ceptstrales X e Y, respectivamente, N es el número de coordenadas de los
vectores y Wi son los pesos aplicados a cada una de las componentes.
Al igual que se hizo en la definición de distancias de cara a la evaluación de la
distorsión generada en el pegado de unidades (ver 4.3.3), los pesos Wi toman el valor de
122
Apéndice A
El sistema de reconocimiento
los inversos de las desviaciones típicas de las componentes del vector de parámetros.
Esta manera de calcularlos tiene por objeto dar idéntica importancia relativa a todos los
parámetros en el cálculo de las distancias.
A.1.4. El cálculo del codebook.
El codebook está formado por un número finito de vectores, denominados
centroides, representativo del conjunto de vectores cepstrales obtenidos en el
entrenamiento. Se genera de tal manera que la distancia promedio entre cada vector y su
centroide asociado sea la menor posible, con lo cual conseguimos que el error de
cuantificación sea mínimo.
Para llevar a cabo la generación del codebook se utiliza el algoritmo LBG, que
ya fue descrito en el Capítulo 5, pudiéndose encontrar más datos sobre el mismo en
[Furui, 89].
Al elegir el número de centroides del codebook, deben tenerse en cuenta varios
aspectos. Por un lado, si tenemos un número excesivo de centroides, el proceso de
cuantificación es más lento, aumenta la memoria necesaria para guardar los modelos o
prototipos y, además, éstos puede que no estén lo suficientemente entrenados. En
cambio, si el número de centroides es demasiado pequeño, aumenta el error que se
comete en la cuantificación, lo cual puede afectar muy negativamente a la tasa de
reconocimiento. Es preciso llegar a un compromiso entre ambas situaciones.
Como ya se ha mencionado con anterioridad, para obtener una representación
más robusta del habla pueden emplearse los parámetros DMFCC y los DDMFCC,
conjuntamente con los MFCC. En este caso, habrá que elaborar un codebook por cada
uno de los tipos de parámetros que se emplee. De esta forma, se dice que se utiliza un
único codebook cuando sólo se utilizan los parámetros MFCC, dos codebooks cuando
además se emplean los DMFCC y tres codebooks cuando se añaden los parámetros
DDMFCC.
123
Apéndice A
El sistema de reconocimiento
A.1.5. La cuantificación vectorial.
El objetivo de la cuantificación es reducir el volumen de los datos que vamos a
tratar, perdiendo la mínima cantidad de información posible. Una vez que disponemos
de los pesos que definen la distancia que vamos a utilizar y el codebook formado por un
conjunto de centroides representativo del total de vectores que nos han servido para
entrenar, estamos en disposición de realizar la cuantificación. Este proceso consiste en
asignar a cada uno de los vectores cepstrales el centroide más cercano, tal y como se
indica en la figura siguiente:
CODEBOOK
Vector de
CÁLCULO DE
LA DISTANCIA
parámetros
Centroide
del codebook
PESOS
Figura A.3. Esquema del cuantificador vectorial
La calidad de un cuantificador se mide a través del error de cuantificación
medio. De ahí la importancia de la elección del número de centroides, así como del
algoritmo a emplear para generarlos.
A.2. Teoría de Modelos Ocultos de Markov (HMM).
Antes de describir los módulos de entrenamiento y reconocimiento, vamos a
explicar el fundamento teórico en que están basados ambos módulos: la teoría de
124
Apéndice A
El sistema de reconocimiento
Modelos Ocultos de Markov (HMM). En este apartado, no se va a desarrollar de manera
rigurosa todo el formulismo matemático asociado con los modelos de Markov, el cual
puede consultarse en numerosas fuentes (ver referencias en [García, 00]). Trataremos de
proporcionar al lector una serie de conocimientos teóricos sencillos con objeto de que
sea capaz de comprender el sistema de reconocimiento que estamos describiendo.
A.2.1. Descripción general.
Un HMM es un modelo parámetrico capaz de describir hechos acústicos del
habla y que queda completamente definido por medio de una serie de variables
estadísticas. Hay que tener en cuenta una serie de consideraciones previas antes de
definir estas variables:

Un modelo de Markov está constituido por un cierto número de
estados, N, que dependerá del fenómeno que se quiera modelar.

En cada estado, el modelo genera un símbolo perteneciente a un
alfabeto finito.

Las transiciones entre estados pueden producirse cada vez que
transcurre un intervalo de tiempo finito igual a la duración de una trama.
Por ello, podemos considerar que los modelos de Markov están constituidos por
dos procesos estocásticos: uno de ellos oculto, que es el paso de unos estados a otros, y
otro no oculto, que es la generación de símbolos que se produce en cada estado.
Partiremos de una secuencia de estados S={s1, s2, ... , sN} y una secuencia de símbolos
de entrada O={o1, o2, ... , oN}, que es la observación vista del proceso oculto de Markov
y que toma sus valores del conjunto de centroides que forma el codebook V={v1, v2, ... ,
vM}.
Estamos ya en disposición de establecer cuales son los elementos necesarios
para caracterizar un HMM:
125
Apéndice A
El sistema de reconocimiento

El número de estados N que forma cada modelo.

Matriz ={1, 2, ... , N} donde i es la probabilidad de que el
proceso comience en el estado i. En general, se toma 1=1 y 2= … =N= 0, es
decir, siempre se comienza por el primer estado.

Matriz A=[aij, 1iN, 1jN], es la matriz de probabilidades de
transición, por lo que aij = Pr(st+1=j / st=i).

Matriz B=[bj(k), 1jN, 1kM], es la matriz de probabilidades
de emisión del símbolo k en el estado j, por lo que bj(k) = Pr(ot=k / st=j).
Según el tipo de matriz B, los modelos de Markov pueden clasificarse en
continuos, discretos y semicontinuos, que es un híbrido de los dos casos
anteriores.
Para cada unidad acústica que se quiera reconocer debe entrenarse un modelo de
Markov a partir de un número suficiente de pronunciaciones de la misma, con el fin de
calcular los valores óptimos de las matrices A y B. En el reconocimiento, se calcula la
probabilidad de que cada modelo haya generado la secuencia de entrada, determinando
la máxima de todas ellas la unidad acústica que ha sido reconocida. Tanto en el
entrenamiento como en el reconocimiento se utiliza el algoritmo de Viterbi, que se
explicará más adelante
A.2.2. Tipos de modelado.
En función de cómo sea la función de distribución en cada estado, podemos
clasificar los modelos en discretos, continuos y semicontinuos. A continuación, se
realiza una breve descripción de cada uno de ellos.
1.
Modelos de Markov discretos.
126
Apéndice A
El sistema de reconocimiento
Como ya se ha explicado anteriormente, se crea un codebook con los vectores
(que hemos denominado centroides) que mejor representan al conjunto de vectores de
parámetros de la base de datos, para después asignar a cada uno de estos últimos el
centroide más cercano en el proceso de cuantificación. Por tanto, en este caso, la
función densidad de probabilidad es discreta y los símbolos que emiten los modelos son
índices que representan a los centroides.
La principal ventaja de trabajar con modelos discretos es la sencillez de la
implementación, que lleva asociada un tiempo de procesamiento menor que para los
otros tipos de modelado. Su principal inconveniente es que se genera distorsión de
cuantificación, que, en general, será mayor cuanto menor sea el número de centroides
del codebook.
2.
Modelos de Markov semicontinuos.
Son un caso intermedio entre los modelos discretos y los modelos continuos.
Puede verse como un modelado discreto precedido de una cuantificación suave (“soft
quantization”) o como un modelado continuo en que se comparten las gaussianas de los
diferentes modelos (“parameter tying”).
En la cuantificación vectorial, cada vector de parámetros se representa por un
índice. En cambio, la cuantificación suave devuelve, para cada vector de parámetros de
entrada, un vector de probabilidades de pertenencia de ese vector a cada uno de los
clusters definidos por los equivalentes a los vectores de cuantificación de un
cuantificador vectorial. Estos vectores se denominan, en el caso de la cuantificación
suave, vectores de medias.
A.2.3. Topología del sistema de reconocimiento del GTH.
En nuestro sistema, se emplean modelos de Markov con transiciones permitidas
simples y dobles (sólo son posibles las transiciones al estado actual, al estado siguiente
o al posterior a éste), de izquierda a derecha (no se permiten transiciones a un estado
anterior) e independientes del contexto.
127
Apéndice A
El sistema de reconocimiento
Para el caso de la base de datos de NATVOX, se emplean modelos de alófono,
ya que nuestro objetivo es segmentar las frases a reconocer en fonemas. A partir de
dichos alófonos, se generan modelos de palabra concatenando los prototipos de los
alófonos correspondientes a la palabra de que se trate, según un diccionario de
transcripción y añadiendo modelos de silencio inicial y final. Estos modelos de alófono
tienen tres estados cada uno, tal y como se representa en la figura siguiente:
a00
a11
a01
0
a22
a12
1
asalir
2
a02
Todos los alófonos se representan a través de modelos de esta topología, excepto
el de silencio final, en el que no hay transición para salir del modelo puesto que la
palabra termina en él (a22 = 1 y asalir = 0).
A.2.4. El algoritmo de Viterbi.
Una vez definido el modelo con el que vamos a trabajar, hemos de dar solución
a tres aspectos fundamentales para el desarrollo de los sistemas de entrenamiento y
reconocimiento:
1. Dada una secuencia de observaciones O y un modelo M, tenemos que tener
algún método para calcular la probabilidad de que la secuencia de observaciones
haya sido generada por ese modelo, P(O/M).
2. A partir de una secuencia de observaciones O, tenemos que ser capaces de
elegir una secuencia de estados que sea óptima en algún sentido.
128
Apéndice A
El sistema de reconocimiento
3. Reestimar los parámetros del modelo para maximizar P(O/M).
Los dos primeros problemas los resuelve el algoritmo de Viterbi, mientras que el
tercero es el más complicado de solucionar, puesto que se trata de encontrar la manera
de optimizar los valores de las matrices A y B para conseguir que la probabilidad
P(O/M) sea máxima.
El algoritmo de Viterbi, en su forma más general consta de los siguientes pasos:
1.
Inicialización.
C  b (O )
0
0 0
C (i)  0
0
2.
i=0
0<i<N
Recursión.
C ( j )  max
{C
(i)a }b (O )
t
0  i  N t  1
ij j t
0<t<T
0 <= j <N
3.
Terminación.
P(O / M )  max{C
(i)}
T 1
En las ecuaciones anteriores, t representa la trama que se procesa en cada
instante y Ct(i) la probabilidad acumulada correspondiente al estado i para la trama t.
En la práctica, en lugar de utilizar directamente las probabilidades, se emplean
sus logaritmos. De esta forma, a partir de la probabilidad p podemos definir su loglikelihood como:
129
Apéndice A
El sistema de reconocimiento
l   log ( p)  4065 ln( p)
k
b
Las principales ventajas que se derivan del empleo del log-likelihood de las
probabilidades son las siguientes:
-
Disminuye el tiempo de procesamiento, ya que los productos de
probabilidades se convierten en sumas de log-likelihood de dichas
probabilidades. Dado que el tiempo que se invierte en procesar una suma es
inferior al que se invierte en procesar un producto, los cálculos se realizan
con mayor rapidez.
-
Requiere menos memoria, puesto que las probabilidades son valores reales y
se representan mediante cuatro bytes, mientras que sus log-likelihood son
valores enteros y sólo requieren dos bytes.
-
Las probabilidades acumuladas se pueden implementar con cuatro bytes
utilizando aritmética entera sin que se produzca desbordamiento.
El algoritmo de Viterbi, además de calcular la probabilidad de la secuencia de
estados más probable, permite recuperar dicha secuencia de estados, dada una secuencia
de observaciones. Ello se deba a la forma en que se calculan las probabilidades
acumuladas:
-
En cada una de las observaciones, para obtener la probabilidad acumulada,
se decide cuál es el estado que precede al actual.
-
Tras finalizar el cálculo de las probabilidades acumuladas para todas las
observaciones utilizando los modelos de las distintas palabras que se quieren
reconocer, aquella palabra con mayor probabilidad acumulada en su última
trama será la más probable. Una vez que se ha identificado la palabra más
probable, es posible recuperar la secuencia de estados observada a través del
proceso de “backtracking”. Este proceso, partiendo del último estado, va
recuperando el estado precedente sirviéndose de las decisiones que se han
tomado en el cálculo de la probabilidad acumulada.
130
Apéndice A
El sistema de reconocimiento
A.2.5. Modelos de Markov discretos.
El entrenamiento discreto.
El objetivo del entrenamiento consiste en obtener las variables estadísticas que
caracterizan los modelos de Markov que, posteriormente, se emplearán en el módulo de
reconocimiento. Estas variables son, como ya hemos comentado, la matriz A (matriz de
probabilidades de emisión) y la matriz B (matriz de probabilidades de transición).
Para entrenar los modelos se utiliza el algoritmo de Viterbi. El proceso consta de
un cierto número de iteraciones a lo largo de las cuales se van obteniendo modelos cada
vez más robustos. En la primera iteración se parte de unos modelos iniciales, que se
denominan semillas, obtenidos por medio de segmentación equidistante. Esto es, se
asignan idéntico número de tramas a cada uno de los estados del modelo para
determinar los valores de la matriz B y se asignan valores equiprobables a todas las
transiciones en la matriz A.
Para la finalización del entrenamiento debe producirse una de las dos situaciones
siguientes:
 Que se alcance el número máximo de iteraciones.
 Que la probabilidad acumulada obtenida con todos los datos de
entrenamiento no mejore significativamente con respecto a la iteración
anterior.
Los modelos de Markov precisan una gran cantidad de datos de entrenamiento
para estimar de manera fiable sus parámetros. Esto hace que, en muchas ocasiones, los
datos de los que se dispone sean insuficientes por lo que pueden existir elementos de las
matrices A y B que tengan ceros o estén deficientemente estimados. Esto ocurrirá, sobre
todo, con los símbolos que menos aparecen en el conjunto de entrenamiento.
131
Apéndice A
El sistema de reconocimiento
En este sentido, existen técnicas que solucionan, en cierta medida, este problema
entre las cuales se encuentra el suavizado (smoothing) de las matrices. Esta técnica se
basa en el dato experimental sobre los HMM que indica que es importante limitar el
valor de los estimadores calculados para evitar que sean demasiado pequeños. Más
información al respecto puede encontrarse en.
El reconocimiento discreto.
En nuestros experimentos, hemos utilizado un reconocedor sin módulo de
hipótesis, es decir, se aplica directamente el algoritmo de Viterbi a todas las palabras del
diccionario para determinar aquélla con la que obtenemos una mayor probabilidad
acumulada en la última trama con la secuencia de observaciones correspondiente a la
palabra que queremos reconocer.
A.2.6. Modelos de Markov semicontinuos.
En este apartado, únicamente destacaremos las peculiaridades que se derivan del
hecho de utilizar modelos semicontinuos.
Como ya sabemos, en el caso discreto se asociaba a cada uno de los centroides
del codebook una probabilidad para cada estado. Esta información se almacenaba en la
matriz B. Sin embargo, cuando se utilizan modelos semicontinuos, tenemos una función
densidad de probabilidad continua asociada a cada uno de los centroides. Se emplean
funciones gaussianas debido a una propiedad que poseen según la cual la suma de
infinitas variables estocásticas tiende a una función gaussiana. En la voz influyen un
gran número de factores y, por ello, se dice que tiene un comportamiento gaussiano.
Además, este tipo de funciones tiene la ventaja de que quedan totalmente definidas a
través de dos parámetros: la media y la varianza.
Para cada vector de observación, vt=(vt1, … , vtn) existe un vector de
probabilidades de pertenencia, Per(vt)={Per1(vt), Per2(vt), …, PerC(vt)}, , donde n es el
número de parámetros y C el número de clusters. Cada componente de este último
vector representa la probabilidad de pertenencia gaussiana del vector vt a cada uno de
132
Apéndice A
El sistema de reconocimiento
los C clusters. Esta probabilidad se obtiene a partir de la ecuación que aparece en la
página siguiente:
(v

n
1
Per (v )  
j t
k  1 2 
tk
e

jk
)2
2 2
jk
jk
La matriz B continúa existiendo en modelado semicontinuo, pero con un
significado diferente. Sus elementos representan la probabilidad de utilizar las
gaussianas asociadas a cada cluster en los diferentes estados. La matriz B pasa a
denominarse ahora matriz de pesos de las gaussianas y a sus elementos los
representaremos como bs(j), donde s es el estado y j el cluster.
Por tanto, la probabilidad de emisión de un vector de entrada en un
determinado estado será igual a la siguiente expresión:
C
P (v )   b ( j ) Per (v )
s t
t
j 1 s
En la implementación práctica de esta fórmula existen dos detalles que permiten
reducir la carga computacional de manera considerable. Por una parte, la utilización de
log-likelihoods en lugar de probabilidades nos proporciona las mismas ventajas que
señalábamos en modelado discreto. Por otra parte, sólo nos quedamos con los cuatro
mejores valores de las probabilidades de pertenencia a la hora de realizar el sumatorio
anterior en lugar de extender dicho sumatorio a todas las gaussianas del codebook.
El entrenamiento de la matriz de pesos y de las gaussianas mismas es análogo al
de las matrices A y B en modelado discreto. Como entonces, habrá que partir de unos
modelos iniciales o semillas. Las semillas de las que se parte son:
-
La matriz B discreta para los pesos de las gaussianas.
133
Apéndice A
El sistema de reconocimiento
-
Los vectores del codebook para las medias.
-
Las varianzas de los conjuntos de vectores de entrenamiento
asociados a cada uno de los clusters para las varianzas de las
gaussianas.
134
Bibliografía
BIBLIOGRAFÍA.
[Black, 91]
Alan W. Black, Nick Campbell
"Optimising selection of units from speech databases for
concatetative synthesis"
Eurospeech '91 vol 1, pp 581-584. 1991.
[Black, 97]
Alan W. Black, Paul Taylor
"Automatically clustering similar units for unit selection in
speech synthesis"
Proceedings of Eurospeech '97. 1997.
[Furui, 89]
Sadaoki Furui
"Digital speech processing, synthesis and recognition"
Ed. Marcel Dekker. 1989.
[Galanes, 95]
Francisco M. Giménez de los Galanes Cejudo
“Síntesis de voz de alta calidad en castellano”.
Tesis doctoral ETSIT. Madrid. UPM. 1995.
[García, 00]
Luis García Pérez
"Estudio y evaluación de algoritmos de robustez frente al ruido en
un sistema de reconocimiento de voz sobre línea telefónica"
Proyecto Fin de Carrera. Madrid. UPM. 2000.
[Hunt, 96]
Andrew J. Hunt, Alan W. Black
"Unit selection in a concatenative speech synthesis using a large
speech database"
ICASSP '96, vol 1, pp 373-376. Atlanta, Georgia. 1996
[Jiménez, 99]
Azucena Jiménez Pozo
“Adaptación y mejora de un sistema de preprocesamiento y
categorización gramatical”
Proyecto Fin de Carrera. Madrid. UPM. 1999.
[King, 97]
Simon King, Thomas Portele, Florian Höfer.
"Speech synthesis using non-uniform units in then Verbmobil
project"
Proceedings of Eurospeech '97. 1997
135
Bibliografía
[Martínez, 98]
Gerardo Martínez Salas
"Adaptación de un modelo de duraciones y entonación para
sintetizar habla con emociones"
Proyecto Fin de Carrera. Madrid. UPM. 1998.
[Montero, 99]
Juan Manuel Montero Martínez
"Proyecto Sintetizador: base de datos para prosodia"
Informe Interno del GTH. Madrid. UPM. 1999.
[Montero, 00]
Juan Manuel Montero Martínez
“Concatenación por selección de unidades sin modificación de la
f0”
Informe Interno del GTH. Madrid. UPM. 2000.
[Polanco, 00]
Daniel Francisco Polanco Fernández
“Evaluación y mejora de un sistema automático de análisis
sintagmático”
Proyecto Fin de Carrera. Madrid. UPM. 2000.
[Saíz, 00]
David Saíz Santos
"Modelo de entonación de Fujisaki para un sintetizador en
castellano"
Proyecto Fin de Carrera. Madrid. UPM. 2000.
[Sánchez, 99]
Julio Sánchez Rodríguez, Juana María Gutiérrez Arriola, Juan
Manuel Montero Martínez
“Manual del PCV”
Publicación interna del GTH. Madrid. UPM. 1999.
136
Indice
INDICE
Capítulo 1: Introducción. ................................................................................. 1
1.1. Introducción. .......................................................................................................... 1
1.2.Descripción general de los Conversores Texto-Voz. ............................................. 4
Capítulo 2: Sistemas de síntesis de voz........................................................ 7
2.1. Introducción. .......................................................................................................... 7
2.1.1. Comparación De Los Sistemas De Síntesis Más Utilizados......................... 10
2.2. La síntesis TD-PSOLA. ....................................................................................... 11
Capítulo 3: La base de datos. ........................................................................ 17
3.1. Introducción. ........................................................................................................ 17
3.2. Adquisición y marcado de la base de datos. ........................................................ 19
3.3. Extracción de los difonemas. ............................................................................... 31
3.4. Generación de la base de datos. ........................................................................... 39
Capítulo 4: La selección de unidades. ......................................................... 45
4.1. El proceso de la síntesis por selección de unidades. ........................................... 48
4.2. El modelo de selección de unidades. ................................................................... 51
4.3. El programa BUNIDAD2.EXE. .......................................................................... 55
4.3.1. Distancia entre la duración de las unidades. ............................................... 57
4.3.2. Distancia entre el tono de las unidades........................................................ 60
4.3.3. Distancia entre los contextos fonéticos. ....................................................... 62
4.3.4. Distancia de concatenación de unidades. .................................................... 65
4.3.5. El algoritmo de búsqueda. ............................................................................ 70
Capítulo 5: La reducción de la base de datos.............................................. 74
5.1. Introducción. ........................................................................................................ 74
5.2. La reducción del tamaño de la base de datos....................................................... 76
5.2.1. La reducción “geométrica” de la base de datos. ......................................... 78
5.2.2. La reducción “por tramos”. ......................................................................... 79
5.3. La cuantificación de distancias. ........................................................................... 83
5.3.1. El algoritmo LBG. ....................................................................................... 84
Indice
5.3.2. El algoritmo de Lloyd. ................................................................................. 86
Capítulo 6: El programa de alineamiento de marcas. ................................. 88
6.1. Introducción. ........................................................................................................ 88
6.2. Modo de funcionamiento del programa. ............................................................. 91
6.3. Algoritmo empleado para el alineamiento........................................................... 94
6.4. Clases definidas en el programa. ......................................................................... 99
Capítulo 7: La segmentación automática de unidades. ............................ 104
7.1. Introducción. ...................................................................................................... 104
7.2. Descripción de los experimentos. ...................................................................... 105
7.3. Resultados del experimento. .............................................................................. 109
Capítulo 8: Conclusiones y líneas futuras. ................................................ 111
8.1. Conclusiones y líneas futuras de trabajo. .......................................................... 111
Apéndice A. El sistema de reconocimiento. .............................................. 115
A.1. El sistema de reconocimiento. .......................................................................... 115
A.1.1. Descripción general del sistema de reconocimiento. ................................ 115
A.1.2. La parametrización. ................................................................................... 118
A.1.3. El cálculo de los pesos. .............................................................................. 122
A.1.4. El cálculo del codebook. ............................................................................ 123
A.1.5. La cuantificación vectorial. ....................................................................... 124
A.2. Teoría de Modelos Ocultos de Markov (HMM). ............................................. 124
A.2.1. Descripción general. .................................................................................. 125
A.2.2. Tipos de modelado. .................................................................................... 126
A.2.3. Topología del sistema de reconocimiento del GTH. .................................. 127
A.2.4. El algoritmo de Viterbi. ............................................................................. 128
A.2.5. Modelos de Markov discretos. ................................................................... 131
A.2.6. Modelos de Markov semicontinuos. ........................................................... 132
BIBLIOGRAFÍA. ............................................................................................ 135
Pliego de Condiciones
PLIEGO DE CONDICIONES
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 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.
Pliego de Condiciones
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 conveniente.
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.
Pliego de Condiciones
CONDICIONES GENERALES DE PRUEBA
Los programas y subrutinas que se entreguen deberán funcionar sobre un
ordenador PC o compatible con microprocesador Pentium o superior y con, al menos,
128 MBytes de RAM. Se ejecutarán bajo sistema operativo Windows 95 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 condiciones expuestas anteriormente, la empresa
contratante se reservará el derecho de rescindir el contrato.
RECURSOS MATERIALES.
 Ordenador PC compatible, Pentium II 300 MHz, con 128 MBytes de
memoria RAM Y dotado de tarjeta de sonido SoundBlaster.
RECURSOS LÓGICOS
 Sistema operativo Windows 95 o superior.
 Entorno de desarrollo Borland C++ v. 5.02.
 Procesador de textos Microsoft Word 97 para la escritura del proyecto.
Descargar