Base de datos para síntesis de dominio restringido
Proyecto Natural Vox: Mejora de calidad de síntesis de voz femenina
Índice
Introducción
Diseño de la base de datos
Algoritmos voraces (greedy)
Marcado
Modelado prosódico
Conclusiones
Introducción
Natural Vox: ¤ Empresa de aplicaciones telefónicas de calidad¤ Necesita una voz femenina¤ BORIS: según ellos, la mejor síntesis en castellano del mercado¤ Aplicaciones:
Tráfico (inicialmente) y Bancos (finalmente)
Nos interesaba, aún a bajo precio:¤ desarrollo de una nueva voz (sin FGG, JAV...) y femenina¤ aplicaciones telefónicas¤ conversión de voces¤ síntesis por selección de unidades¤ Son temas de moda
Introducción
Empleamos concatenación y TD-PSOLA (nuestra mejor calidad hoy en día)
Exploraremos varias posibilidades en cuanto a prosodia:¤ Duraciones:
ANN: continuación de un PFC de RCH Modelo multiplicativo: experimento con los mejores parámetros
¤ F0: ANN: continuación de la tesis de JVP Modelo de picos y valles: versión implementada en el sistema Fujisaki: Ha habido bastante trabajo y no ha dado tiempo para
explorar esta posibilidad.
Diseño de la base de datos
Cuestiones abiertas:¤ Qué tipo de textos?¤ Cuántas frases o palabras?¤ Cuáles?¤ Cuánto tiempo se necesita para marcarlo?
Factores limitantes:¤ El bajo presupuesto¤ Nuestra poca experiencia directa¤ Las aplicaciones de Natural Vox¤ Empleo de becarios para marcar
Diseño de la base de datos: ¿Qué tipo de textos?
Frases y vocabulario típicos de una aplicación telefónica como las deseadas.
Inicialmente nos proponen: 22 frases portadoras con 30 campos variables:
Poblaciones, puertos, nombres y apellidos. Movimientos bancarios, expresiones bancarias (tipos de cuentas,
fondos de inversión, divisas, estado de un cheque, etc.), entidades financieras.
Horas. Números de teléfono. Combinaciones de letras y números.
Diseño de la base de datos: Primer filtrado
Por estar ya cubiertas usando concatenación de mensajes pregrabados, eliminamos de su propuesta:
¤ Horas¤ Teléfonos¤ Combinaciones de letras y números
Nos quedamos con 19 frases y 3 tipos de campos:¤ Nombres propios en enunciativas: frases 1-7, 17 y 19¤ Sintaxis sencilla en enunciativas: frases 8-12 y 14.¤ Sintaxis sencilla en interrogativas: frases 13, 15, 16 y 18
Establecemos que las grabaciones de los campos variables se harán entre-pausas y con prosodia no enfática
¤ información clave y facilidad de modelado
Diseño de la base de datos: Selección de los textos
Partimos de los resultados de Onomástica:¤ 30232 pueblos o ciudades¤ 8736 nombres de pila simples¤ 49431 apellidos simples
Usamos datos de la empresa:¤ 255 entidades financieras¤ 246 puertos de montaña¤ datos varios: 23 operaciones, 150 movimientos, etc.
Por consideraciones de tiempo y de dinero, decidimos grabar unas 600 frases de cada tipo (nosotros marcamos 2 tipologías y ellos marcan la tercera)
Diseño de la base de datos: Nombres Propios
Frases 2 y 3: 3 Campos Variables: 100 frases: 150 puertos resumidos.
Frases 6, 7 y 17: 3 CV: 360 apellidos, 360 frases: 150 apellidos simples resumidos, 130 apellidos simples muy frecuentes (desde García hasta Montes) 80 apellidos compuestos (80 apellidos simples muy frecuentes+80
apellidos simples resumidos, algunos incluyen la preposición de)
Frases 1, 4, 5 y 19: 5 CV 50 pueblos por campo, 200 frases: ¤ 250 pueblos resumidos
Diseño de la base de datos: Enunciativas
Frases 8 y 9: 4 CV 74 frases (36+38): 150 movimientos bancarios (36+3x38) :
Frase 10: 1 CV, 23 frases. 23 operaciones bancarias
Frase 11: 1 CV 7 frases: 7 estados de cheques,
Frase 12: 2 CV 172 frases (43+43+43+28+15): 43 tipos de cuentas y tarjetas, 172 nombres de bancos (157 nombres castellanos resumidos +15
no castellanos elegidos manualmente por Emilia),
Frase 14: 1 CV 31 fondos de inversión, 31 frases.
Diseño de la base de datos: Interrogativas
Frase 13: 1 CV 200 frases: 43 tipos de cuentas y tarjetas 34 movimientos seleccionados 123 apellidos resumidos
Frase 15: 1 CV 200 frases: 31 fondos de inversión 46 movimientos seleccionados 123 apellidos resumidos
Frase 16 y 18 : 2 CV 200 frases:¤ 10 divisas¤ 20 tipos de información¤ 48 movimientos seleccionados ¤ 122 apellidos resumidos
Diseño de la base de datos: Objetivo
Empleando pocas grabaciones, conseguir recoger gran parte de la riqueza de los casos posibles (balanced), según criterios: Prosódicos: cubrir la mayoría de los fenómenos prosódicos que se
podían dar, empleando un número reducido de ejemplos: Duraciones: variedad fonética, silábica, de longitudes de palabra, etc. Entonación: variedad de tipos de acentuación y de distancia entre acentos.
Segmentales, tener variedad, ya que podía llegar a ser usada como fuente de unidades:
nuevos difonemas, debido a que los iniciales no fuesen adecuados (así fue: eran demasiado breves),
síntesis por selección de unidades: por problemas de calidad segmental insuficiente, podríamos tener que recurrir a ella (como está siendo el caso: la calidad no les es suficiente en algunos casos)
Diseño de la base de datos: Criterios de selección (I)
Posibilidades con interés: Fonema y su contexto (clase de los fonemas anterior y
siguiente) Debemos cubrir todos los posibles valores intentando reproducir la
distribución de probabilidad de nuestra base de datos ¿Está en sílaba acentuada? ¿Pertenece a un diptongo? ¿Está en sílaba abierta? Posición del fonema dentro de la sílaba
Debemos reproducir la distribución de probabilidad de nuestra base de datos
Diseño de la base de datos: Criterios de selección (II)
Número de fonemas de la sílaba Posición del fonema dentro de la palabra Número de fonemas de la palabra Posición del fonema dentro del grupo fónico Número de fonemas del grupo fónico ¿Está en posición inicial de grupo fónico? ¿Está en posición final de grupo fónico? Tipo de acento de la palabra (aguda, llana, esdrújula o palabra
función) Distancia silábica entre acentos
Debemos cubrir todos los posibles valores intentando reproducir la distribución de probabilidad de nuestra base de datos
Diseño de la base de datos: Criterios de selección (III)
Tipo de grupo fónico Enunciativo entre pausas con entonación ascendente Enunciativo entre pausas con entonación descendente Interrogativo
Es imposible cumplir tantas condiciones con un número reducido de grabaciones
Diseño de la base de datos: Criterios de selección (y IV)
6 Criterios finales: Criterio fonético: intentaremos conseguir un histograma fonético
(probabilidad de aparición de cada fonema) que no se aleje más de un 5% (como máximo) de la distribución original de la base de datos de nombres propios de que disponemos.
Criterio silábico: buscamos 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 (5% de desviación máxima)
Criterio acentual: distribución adecuada de palabras acentuadas / palabras función, agudas / llanas / esdrújulas...
Criterio de palabras: dado que los nombres pueden ser compuestos buscaremos reproducir la base de datos original en número de palabras por campo variable y número de sílabas por palabra.
Algoritmos voraces (I)
El problema de búsqueda presenta una complejidad exponencial: Pueblos: la mejor de las combinaciones de 30232 elementos tomados
de 250 en 250. Apellidos: la mejor de las combinaciones de 49431 tomados de 150 en
150. La solución óptima (full search) es computacionalmente implanteable.
Aproximación: un algoritmo voraz (van Santen 97) En cada paso busca minimizar localmente una distancia (o maximizar
un medida de bondad), confiando en que ello no le llevará muy lejos del máximo global (hipótesis optimista)
Algoritmos voraces (II)
Partimos de que sabemos cuántos ejemplos tenemos y cuántos queremos seleccionar (resumen)
¿qué distancia usar para seleccionarlos?¤ Energía¤ Correlación¤ Correlación normalizada¤ Distancia con penalización¤ Distancia a un objetivo parcial
Inicialmente el problema me pareció no muy complicado (¿en qué estaría yo pensando?) y muy interesante (ahí no me equivoqué): la mochila multidimensional (knapsack)
Algoritmos voraces (III)
La mejor distancia encontrada: energía del error respecto a un objetivo parcial proporcional, con penalización para casos extremos:
¤ En cada iteración:– CalculaDistribSegunPaso(numPaso, criterioGlobal, distribOptima);
¤ En cada recorrido:
– distribLocal= distribActual;– Resta_Distrib_Probab32(distribLocal, distribPalabra);– coordenada=MINIMO_RELATIVO(distribLocal, criterioGlobal);– Resta_Distrib_Probab32(distribLocal, distribOptima);– if (coordenada.valor<0) – result= VALOR_CASTIGO*coordenada.valor;– else – result= -ACUMULA_ABS_DISTRIB_PROBAB32(distribLocal);
Algoritmos voraces (IV): Ejemplo con 100 pueblos
criterio-cumple-criterios PALABRAS: 0 53 18 19 9 1 0 0 0 0 0 NUMSILABAS: 0 53 48 56 25 5 0 0 0 0 0 FONEMAS: 0 57 20 7 39 1 123 100 38 48 12 10 13 2 5 24 35 6 17 36 30 7 10 18 66 22 18 13 3
54 1 7 26 24 34 5 13 0 61 19 3 0 0 ACENTOS: 41 34 110 2 0 0 NUMFONEMAS: 0 1 34 17 14 27 27 25 18 13 7 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 SILAB: 26 24 82 56 1 2 4 5 15 19 39 23 1 2 1 3 11 0 30 0 0 0 1 0 11 16 32 30 0 2 2 5 0 seleccionada-cumple-criterios PALABRAS: 0 54 18 19 9 0 0 0 0 0 0 NUMSILABAS: 0 51 48 55 24 5 0 0 0 0 0 FONEMAS: 0 56 20 7 37 1 121 98 35 47 12 10 12 2 5 24 34 5 17 35 30 7 10 17 66 22 15 13 3 52
1 7 26 24 33 3 13 0 60 18 3 0 0 ACENTOS: 39 34 109 1 0 0 NUMFONEMAS: 0 1 34 16 13 26 27 25 18 13 7 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 SILAB: 24 23 78 53 1 2 3 5 15 19 37 22 0 2 1 3 11 0 31 0 1 0 1 0 11 16 33 31 1 2 2 5 0
Algoritmos voraces (V):Ejemplo con 100 pueblos
Error absoluto medio: 0.028155
PALABRAS: 2.000000 / 100.000000 = 0.020000 NUMSILABAS: 4.000000 / 187.000000 = 0.021390 FONEMAS: 26.000000 / 1027.000000 = 0.025316 ACENTOS: 4.000000 / 187.000000 = 0.021390 NUMFONEMAS: 4.000000 / 187.000000 = 0.021390 SILABAS: 20.000000 / 443.000000 = 0.045147
PAL: difMedia:0.000000 difMax: 1.000000 pearson: 0.999855 NUMSIL: difMedia:0.006121 difMax:0.040000 pearson: 0.999724 FONEM:difMedia: 0.002683 difMax: 0.052632 pearson: 0.999587 ACENT:difMedia: 0.008234 difMax: 0.500000 pearson: 0.999839 NUMFON:difMedia:0.002464 difMax: 0.333333 pearson: 0.999464 SILAB:difMedia: 0.002427 difMax: 1.000000 pearson: 0.998990
Algoritmos voraces (VI):Ejemplo con 150 pueblos
Error absoluto medio: 0.01657
PALABRAS: 4.000000 / 150.000000 = 0.026667 NUMSILABAS: 2.000000 / 281.000000 = 0.007117 FONEMAS: 16.000000 / 1540.000000 = 0.010390 ACENTOS: 4.000000 / 281.000000 = 0.014235 NUMFONEMAS: 8.000000 / 281.000000 = 0.028470 SILABAS: 19.000000 / 665.000000 = 0.028571
PAL: difMedia: 0.000000 difMax: 0.025000 pearson: 0.999582 NUMSIL:difMedia:-0.002006 difMax:0.000000 pearson:0.999953 FON: difMedia: 0.000272 difMax: 0.025000 pearson: 0.999861 ACENT: difMedia:-0.002725 difMax:0.006061 pearson:0.999869 NUMFON: difMedia:-0.000808 difMax:0.500000 pearson:0.999584 SIL: difMedia: -0.000319 difMax: 1.000000 pearson:0.999402
Algoritmos voraces (VII):Ejemplo con 250 pueblos
Error absoluto medio: 0.009005
PALABRAS: 2.000000 / 100.000000 = 0.020000 NUMSILABAS: 4.000000 / 187.000000 = 0.021390 FONEMAS: 26.000000 / 1027.000000 = 0.025316 ACENTOS: 4.000000 / 187.000000 = 0.021390 NUMFONEMAS: 4.000000 / 187.000000 = 0.021390 SILABAS: 20.000000 / 443.000000 = 0.045147
PAL: difMedia: 0.000000 difMax: 0.666667 pearson: 0.999195 NUMSIL: difMedia:0.000000 difMax:0.015873 pearson:0.999962 FON: difMedia: 0.000532 difMax: 0.006623 pearson: 0.999975 ACENT:difMedia: 0.000000 difMax: 0.250000 pearson:0.999952 NUMFON: difMedia:0.000000 difMax:0.000000 pearson:1.000000 SILAB: difMedia:0.000384 difMax: 0.073171 pearson:0.999784
Algoritmos voraces (VIII):Ejemplos con apellidos
Error absoluto medio con 150 ejemplos: 0.005934 PALABRAS 0.000000 / 150.000000 = 0.000000 NUMSILABAS 2.000000 / 151.000000 = 0.013245 FONEMAS 3.000000 / 996.000000 = 0.003012 ACENTOS 0.000000 / 151.000000 = 0.000000 NUMFONEMAS 4.000000 / 151.000000 = 0.026490 SILABAS 3.000000 / 423.000000 = 0.007092
Error absoluto medio con 60 ejemplos: 0.021065 PALABRAS 0.000000 / 60.000000 = 0.000000 NUMSILABAS 0.000000 / 60.000000 = 0.000000 FONEMAS 11.000000 / 398.000000 = 0.027638 ACENTOS 0.000000 / 60.000000 = 0.000000 NUMFONEMAS 2.000000 / 60.000000 = 0.033333 SILABAS 4.000000 / 169.000000 = 0.023669
Algoritmos voraces (IX):Ejemplos con baja ratio
Cuando tenemos poco donde escoger y baja ratio de selección, el error es más alto Bancos: error absoluto medio con 150 ejemplos: 0.013738 PALABRAS 11.000000 / 153.000000 NUMSILABAS 4.000000 / 666.000000 FONEMAS 40.000000 / 3364.000000 ACENTOS 3.000000 / 668.000000 NUMFONEMAS 14.000000 / 668.000000 SILABAS 23000000 / 1399.000000 Puertos: error absoluto medio con 150 ejemplos: 0.018307 PALABRAS 3.000000 / 151.000000 NUMSILABAS 5.000000 / 271.000000 FONEMAS 25.000000 / 1377.000000 ACENTOS 2.000000 / 272.000000 NUMFONEMAS 4.000000 / 274.000000 SILABAS 14.000000 / 550.000000
Algoritmos voraces (X):Errores graves
El error desciende con el número de ejemplos, pero no su gravedad
Apellidos y pueblos: error absoluto medio con 100 ejemplos: 0.013738 Apellidos y pueblos : error absoluto medio con 300 ejemplos: 0.008713 Apellidos y pueblos: error absoluto medio con 600 ejemplos: 0.004558 Apellidos y pueblos: error absoluto medio con 1000 ejemplos: 0.0031610 Apellidos y pueblos: error absoluto medio con 5000 ejemplos: 0.0012886
Apellidos y pueblos: errores con 100 ejemplos: 18 (2 del 100%) Apellidos y pueblos: errores con 300 ejemplos: 7 (2 del 100%) Apellidos y pueblos: errores con 600 ejemplos: 6 (1 del 100%) Apellidos y pueblos: errores con 1000 ejemplos: 5 (1 del 100%) Apellidos y pueblos: errores con 5000 ejemplos: 5 (3 del 100%)
Algoritmos voraces (X):Búsqueda por pasos
Si en vez de buscar el objetivo directamente nos planteamos pasos intermedios, los resultados mejoran considerablemente, sobre todo si la ratio es baja:
Pueblos:¤ error con 100 ej. y 1 paso: 60/2131=0.028155¤ error con 100 ej. y 100 pasos: 27/2131=0.012760
¤ error con 150 ej. y 1 paso: 53/3198=0.016572¤ error con 150 ej. y 100 pasos: 38/31980=0.011882
¤ error con 250 ej. y 1 paso: 48/5330=0.009005¤ error con 250 ej. y 100 pasos: 44/5330=0.008255
Marcado:F0 y segmentación manuales
2 becarios a media jornada, 2 meses Formación inicial durante 2 semanas Marcaron las frases 1, 2, 3, 4, 5, 6, 7, 8, 9 incompleta, 10, 11,
12, 14, 17 y 19: 658+296 ficheros Tras las grabaciones de las frases 2, 3 y 4, se corrigieron
defectos en las condiciones de grabación (sin re-grabar). Durante las primeras semanas, se hacía una revisión del
marcado de los ficheros para corregir defectos (JMM, JGA)
Natural Vox marcó las interrogativas: 600 ficheros (menos de 2 meses)
Marcado:Segmentación automática
Modelos HMM semicontinuos, independientes del contexto¤ Frecuencia de muestreo 8 KHz, ¤ Desplazamiento de trama 10 ms, ¤ Tamaño de trama 25 ms, ¤ Pre-énfasis 1.00¤ Parametrización MFCC (10+1)¤ Parámetros: 11 parámetros estáticos y 11 dinámicos¤ Alfabeto de 28 alófonos y 1 silencio¤ Base de datos: 16062 alófonos para entrenar y evaluar
Tasa de aciertos 89.12 % (error por debajo de 20 ms) Error medio por marca: 8.995290 % Haremos pruebas de síntesis por selección
Modelado: duraciones (I)
Usamos ANN, aunque hemos hecho un experimento con modelo multiplicativo
¤ La toma inicial de contacto con el sistema de desarrollo fue larga y con modificaciones intermedias (el PFC no estaba acabado)
¤ Finalmente, los parámetros para las red se generan con un conjunto de scripts y programas, compartidos con el PFC de síntesis por selección de unidades extracción de duraciones extracción de F0 extracción de difonemas generación de la base de datos de unidades
¤ Entrenamos en LINUX con MUME¤ Evaluamos en MATLAB (con el entorno de desarrollo)
Modelado: duraciones (II)
117 parámetros (como en PFC previo, salvo los tipos de grupos): ¤ ventana de 5 fonemas: 38 alófonos, 14 clases¤ fonema acentuado¤ ventana de 3 sílabas acentuadas¤ sílaba tónica¤ sílaba en diptongo¤ sílaba abierta¤ palabra acentuada¤ posición del: fonema en la sílaba, en la palabra y en el grupo¤ número de: fonemas en la sílaba, sílabas en la palabra, palabras en el
grupo¤ 5 tipos de grupos (; , . - ?)
Modelado: duraciones (y III)
Mejor experimento: 560/32000 (17.5ms) 0.6363¤ Empleando los valores medios de los fonemas: 25.1 ms¤ Modelo multiplicativo: 19.8 ms¤ El error en velocidad de elocución es importante (15.82%): es
necesario normalizar por la velocidad media de cada tipo de frase¤ El error es mayor en las frases 2, 7, 12, 13¤ Las interrogativas son más homogéneas¤ Modelando cada tipo por separado:
propios: 20.07 ms sintagmas: 16.68 ms interrogativas: falta realizar el experimento
Modelado: F0 (I)
Usamos modelo de picos y valles, aunque hemos hecho experimentos con ANN
Se desarrolló un programa para generar la base de datos usando PERL (aunque finalmente se integró en el conjunto de scripts por homogeneidad y seguridad)
¤ Entrenamos en LINUX con MUME¤ Evaluamos en MATLAB (con el entorno de desarrollo)
Usamos la parametrización propuesta por Vallejo en su tesis, pero reducida: 43 parámetros
¤ ventana de 11 sílabas (tónica, inicial, final)¤ Número de sílabas (5 niveles)¤ Grupos fónicos: 5 tipos (; , . ? -)
Modelado: F0 (II)
Valor medio: 180 Hz (47 Hz - 283 Hz) Desviación 32 Hz Número de muestras: 5582 sílabas Variantes:
¤ Menos parámetros: tarea más simple.¤ Normalización lineal (A=.8/179, B=13.5/179): 16.47 Hz (0.6849)¤ Normalización con Z-score: 16,12 Hz (0.6424)¤ Codificación logarítmica+Z-score: 15.47 Hz (0.6982)¤ Limitando el rango a
>130 Hz: 15.91 Hz (0.6763) >150 Hz: 14.55 Hz (0.6748)
Modelado: F0 (III)
Distribución del error en general: ¤ 14.26 Hz en iniciales¤ 14.42 Hz en iniciales y finales¤ 16.21 Hz en finales¤ 19.74 Hz en intermedias (menos datos, más difíciles)
Distribución del error en las tónicas: ¤ 16.37 Hz en iniciales¤ 15.53 Hz en iniciales y finales¤ 16.04 Hz en finales¤ 16.55 Hz en intermedias
Modelado: F0 (y IV)
Error por tipos de frases¤ Propios: 16 Hz¤ Sintagmas: 16.63 Hz¤ Interrogativas: falta por realizar el experimento