360 likes | 548 Views
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:
E N D
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 CV74 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 12 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