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 marcai 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 , ui1 ) 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_ bandamuestras limite_ bandahz FFT _ POINTS / frec _ muestreohz 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: pesomuestrabanda_ 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 xn n 0 xn ( xn m edia) (0.54 0.46 * cos(2n / 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. ebanda fin _ banda X k pesosk 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 fck NUM _ BANDS el 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 _ 1i vector _ 2i) 2 / vari ) 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 , ui1 ) 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: distanciai j dist _ susti j min(dist _ conc(unidadi j , unidadi 1k ) distanciai 1k ) k 0..num _ filasi 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)) ji 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: yn xn axn 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(2n / 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, 1iN, 1jN], es la matriz de probabilidades de transición, por lo que aij = Pr(st+1=j / st=i). Matriz B=[bj(k), 1jN, 1kM], 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.