loudness.ai
Investigación y pruebas

Cómo enseñar a leer a Piper TTS: normalización de texto y tiempos por palabra

Resumen

Piper es un motor neuronal de síntesis de voz rápido que funciona en procesadores comunes, pero lee el texto exactamente como está escrito. Los precios, las fechas, los teléfonos, las abreviaturas y las unidades suelen leerse de forma literal: «5,50 €» se convierte en «cinco coma cincuenta euro» y «Sr. García» termina la frase después de «señor». Creamos una capa de preparación de texto para Piper que reescribe estas formas y recuerda, para cada palabra pronunciada, la palabra escrita de la que procede. También fija las pausas entre frases, líneas y párrafos, corrige la pronunciación británica de algunas voces de inglés estadounidense y obtiene tiempos exactos por palabra para subtítulos a partir de las duraciones de fonemas del propio Piper. En 84 frases de prueba en inglés y español escritas por nosotros, la tasa de error de fonemas bajó del 32,6% al 0,9%, y ninguna de las 19 frases de control cambió. En la mitad reservada de los casos de prueba públicos de NVIDIA NeMo, que no escribimos nosotros, la tasa de error de fonemas en inglés fue del 41,0% para el texto sin procesar, del 28,5% para un script típico de números a palabras y del 15,8% con nuestra capa; en español fue del 64,7%, el 56,2% y el 43,2%. El código, las frases de prueba y los resultados están disponibles con la licencia Apache 2.0.

Lo que Piper lee si el texto no se prepara

Piper convierte el texto en fonemas con espeak-ng y después sintetiza cada frase con un pequeño modelo VITS. No normaliza el texto por sí mismo. espeak-ng lee bien las palabras sencillas, los números corrientes, los ordinales, las horas como «3:30» y las direcciones de correo, pero muchas formas escritas cotidianas se leen símbolo a símbolo, y algunas abreviaturas terminan la frase en mitad de un nombre.

Pasamos frases cotidianas por la misma versión de espeak-ng que usa Piper 1.8 y anotamos lo que se oye. La tabla lo compara con lo que nuestra capa entrega a la voz. La última columna la genera el código actual cada vez que se construye esta página.

Frases cotidianas sin y con preparación de texto. «Se oye» es lo que leyó espeak-ng, escrito en palabras; la última columna es el texto que recibe la voz, cuyas cifras se leen como números.
EscritoVozSe oye sin preparaciónLo que recibe la voz con preparación
Dr. Smith lives on Elm St.inglés (EE. UU.)“Doctor.” (la frase termina) “Smith lives on Elm Saint.”Doctor Smith lives on Elm Street.
It costs $5.50.inglés (EE. UU.)“It costs dollar five point five zero.”It costs 5 dollars and 50 cents.
Due on 4/5/2026.inglés (EE. UU.)“Due on four slash five slash two thousand twenty-six.”Due on April 5th, 20 26.
In the 1990s.inglés (EE. UU.)“In the nineteen hundred ninety Z.”In the 19 nineties.
At 60 km/h, open 24/7.inglés (EE. UU.)“At sixty K M slash H, open twenty-four slash seven.”At 60 kilometers per hour, open 24 7.
Read chapter IV about Henry VIII.inglés (EE. UU.)“Read chapter Roman four about Henry Roman eight.”Read chapter 4 about Henry the 8th.
Great job 👍inglés (EE. UU.)“Great job thumbs up”Great job.
Wait... what?inglés (EE. UU.)“Wait what?” sin pausaWait, what?
Call +1 555-123-4567.inglés (EE. UU.)“Call plus one five hundred fifty-five dash one hundred twenty-three dash four thousand five hundred sixty-seven.”Call plus 1, 5 5 5, 1 2 3, 4 5 6 7.
El Sr. García llegó.español (España)«El señor.» (la frase termina) «García llegó.»El señor García llegó.
Llegamos el 15/10/2026.español (España)«Llegamos el quince barra diez barra dos mil veintiséis.»Llegamos el 15 de octubre de 2026.
Vive en la Av. de Mayo.español (España)«Vive en la ab de Mayo.»Vive en la avenida de Mayo.
Cuesta 5,50 €.español (España)«Cuesta cinco coma cincuenta euro.»Cuesta 5 euros con 50 céntimos.
A las 10 a. m.español (España)«A las diez a eme.»A las 10 de la mañana.
Llama al 912 345 678.español (España)«Llama al novecientos doce trescientos cuarenta y cinco seiscientos setenta y ocho.»Llama al 9 1 2, 3 4 5, 6 7 8.

Escucha: antes y después

Estas grabaciones salen del motor de texto a voz de Loudness.ai: la misma voz y el mismo texto, antes de activar la capa de preparación del texto y después, el 15 de octubre de 2026. Cada toma se genera de nuevo, así que es normal que la entonación varíe un poco; fíjate en lo que se lee. Los ejemplos están en inglés.

Daniel · inglés (EE. UU.)

Texto escrito

Dr. Smith's new schedule starts on 4/5/2026 at 9:05 a.m. The ticket costs $5.50, or $12.99 with the fast lane. Wait... is that right?

  • «Dr.» ya no corta la frase
  • La fecha se lee «April 5th, 2026» y la hora «nine oh five»
  • «$5.50» se lee «five dollars and fifty cents»
  • Una pausa real después de «Wait…»
  • «schedule» y «new» con pronunciación estadounidense

Antes: el texto tal cual

Después: con preparación del texto

Olivia · inglés (EE. UU.)

Texto escrito

In the 1990s, the train ran at 60 km/h. Henry VIII appears in chapter IV. Call +1 555-123-4567 or email hello@loudness.ai.

  • «Nineteen nineties», no «nineteen hundred and ninety z»
  • «Kilometers per hour»
  • «Henry the Eighth» y «chapter four», sin «Roman»
  • El teléfono, por grupos de dígitos

Antes: el texto tal cual

Después: con preparación del texto

Jenny · inglés (Irlanda)

Texto escrito

Shopping list

- Tomatoes
- 1/2 cup of yogurt
- Fresh herbs

That's everything for today 👍

  • Cada línea de la lista termina como una frase
  • «One half cup» en lugar de «one slash two»
  • Una pausa más larga antes del último párrafo
  • El emoji ya no se lee como «thumbs up»

Antes: el texto tal cual

Después: con preparación del texto

Hannah · inglés (EE. UU.)

Texto escrito

this transcript was pasted without any punctuation so the voice used to read every word in one long breath which made it hard to follow and tiring to listen to because there was never a moment to pause and the ideas all ran together

  • Pausas breves de coma en un texto largo sin puntuación

Antes: el texto tal cual

Después: con preparación del texto

Kristin · inglés (EE. UU.)

Texto escrito

Mr. and Mrs. Jones met J. K. Rowling at St. Mary's on Elm St. They paid 1,250,000 dollars. Really?!

  • «Mr.», «Mrs.» y «J. K. Rowling» ya no cortan la frase
  • «Elm St.» se lee «Elm Street» y sigue cerrando la frase

Antes: el texto tal cual

Después: con preparación del texto

Jordan · inglés (EE. UU.)

Texto escrito

Either way, the garage privacy policy is necessary for the new library laboratory. Students can check the schedule every Tuesday.

  • Pronunciación estadounidense de «either», «garage», «privacy», «necessary», «library» y «laboratory»
  • Y también de «new», «students», «schedule» y «Tuesday»

Antes: el texto tal cual

Después: con preparación del texto

Reglas que recuerdan el texto original

Cada línea de texto pasa por una lista ordenada de reglas. Una regla es una expresión regular y una función que indica qué leer en su lugar, o la rechaza. Las reglas siempre buscan en el texto original, nunca en el resultado de otras reglas, y la primera regla que reclama un fragmento de caracteres gana. Después, la línea se reconstruye con el texto intacto y los reemplazos, y cada carácter del resultado lleva el fragmento del original del que procede.

Esto tiene dos efectos prácticos. Las reglas no pueden estropearse entre sí: una dirección web reclamada por la regla de direcciones nunca la tocan las reglas de abreviaturas o de barras. Y cada palabra pronunciada conoce su origen: «euros» en «5 euros con 50 céntimos» apunta a «5,50 €», de modo que los subtítulos pueden mostrar lo que escribió la persona mientras los tiempos siguen lo que dijo la voz. Una regla que conserva su primera palabra, como «Felipe VI» leído «Felipe sexto», reclama solo el resto, así que cada palabra escrita conserva sus propias palabras habladas. Los dobles corchetes escritos en el texto se neutralizan para que nadie pueda inyectar fonemas en bruto.

Loudness.ai
Una frase a través de la capa: cada palabra escrita, lo que lee la voz por ella y cuándo se pronuncia, en una toma sintetizada.

Qué cubren las reglas

El inglés y el español tienen conjuntos de reglas completos; los otros 25 idiomas de nuestro despliegue reciben las reglas de formato y de pausas.

Tratamientos y abreviaturas de calles como «Dr.», «Sr.», «Sra.», «Av.» o «c/» se expanden sin crear un final de frase falso, y se mantiene el final real cuando la abreviatura cierra la frase. El dinero se lee con singular y plural y con monedas regionales: «$» se lee como pesos en el español de México. Las fechas se leen en formato numérico, ISO, con puntos o escritas, en el orden de cada región. Las horas incluyen segundos, el formato de 24 horas y «a. m.» y «p. m.».

Décadas, unidades, intervalos y fracciones cubren formas como «60 km/h», «páginas 10–20» y «3/4 de taza». Los teléfonos se leen por grupos de dígitos, incluido el formato de nueve dígitos de España. Los números romanos se leen tras palabras clave y nombres de monarcas, como «Felipe VI» o «Luis XIV». También se tratan las iniciales, los millares agrupados con espacios y las barras entre palabras.

Formato, en todos los idiomas: se eliminan los marcadores de lista, el marcado markdown y los emojis, las direcciones web pierden «https://» y «www», y una línea sin puntuación final recibe un punto para terminar con entonación descendente.

Frases, líneas, párrafos y pausas

El texto preparado se divide en segmentos, y cada segmento va seguido de una pausa de un tipo conocido: frase, línea de lista, párrafo, puntos suspensivos o cláusula. Una frase solo termina en un punto, un signo de interrogación o de exclamación que no vaya seguido de minúscula, y solo después de expandir las abreviaturas. Con p como la pausa elegida por el usuario, el silencio es p tras una frase, una línea o unos puntos suspensivos, 0,4 p tras una cláusula y el mayor de 2 p y p + 0,3 segundos tras un párrafo.

Los tramos largos sin puntuación cuestan de seguir. Un tramo de más de 28 palabras se divide antes de una conjunción cercana a su mitad, si existe (siete idiomas tienen listas de conjunciones), o si no en un espacio entre palabras, y la primera parte termina en coma para que la voz mantenga un tono de continuación.

Cada segmento se sintetiza por separado y se une con silencios exactos. Las voces suelen terminar en una muestra distinta de cero, entre 28 y 57 dB por debajo del pico en nuestras mediciones, lo que puede producir un chasquido frente al silencio digital. Un fundido de entrada de 3 ms y uno de salida de 12 ms en cada unión eliminan el chasquido.

Voces estadounidenses entrenadas con fonemas británicos

Cada voz de Piper se entrena con los fonemas de una voz de espeak-ng, que queda registrada en la configuración del modelo. Varias voces comunitarias de inglés (EE. UU.), entrenadas con locutores estadounidenses de audiolibros, registran la voz «en» de espeak, que es inglés británico. Para la mayoría de las palabras esto no perjudica: el modelo aprendió a convertir los símbolos británicos en los sonidos estadounidenses de sus locutores.

Importa cuando la forma británica es otra pronunciación y no solo otro acento. espeak «en» da «shed-yool» para schedule, «tom-ah-toe» para tomato, privacy con i breve y «zed» para la letra Z, y las voces dicen exactamente eso.

Cambiar estas voces a fonemas estadounidenses no funciona, porque sus datos de entrenamiento nunca contuvieron símbolos como la vocal con color de r o la t batida. En su lugar escribimos formas estadounidenses de 118 palabras frecuentes, entre ellas palabras terminadas en -ary y -ory, palabras como «new» y «student» y la letra Z, usando solo símbolos del conjunto británico. Se pasan a Piper como bloques de fonemas en bruto, y solo a las voces estadounidenses cuyo modelo registra «en». Una prueba unitaria comprueba que ningún bloque usa un símbolo ajeno a ese conjunto.

Aquí importan dos detalles de Piper. La puntuación situada justo después de un bloque de fonemas en bruto se descarta y la palabra siguiente se une al bloque, así que la puntuación debe ir dentro del bloque. Y un bloque en bruto seguido de texto deja un espacio doble, que eliminamos antes de sintetizar.

Tiempos por palabra a partir de las duraciones del modelo

Los subtítulos y el resaltado por palabra necesitan saber cuándo se pronuncia cada palabra. Lo habitual es alinear el audio después de sintetizarlo, con un alineador forzado o un reconocedor de voz. Los modelos VITS de Piper ya predicen cuánto dura cada fonema, y Piper 1.8 puede exponer esas duraciones como salida adicional del modelo. Las usamos directamente.

Para cada segmento obtenemos el inicio y el final de cada símbolo fonético, incluidos los de puntuación, cuyas duraciones contienen las pausas. Cada palabra preparada se fonetiza por separado para estimar cuántos símbolos tiene, y una pequeña programación dinámica elige dónde empiezan los símbolos de cada palabra: cerca de su parte esperada, prefiriendo los espacios entre palabras habladas y dando a cada palabra al menos un símbolo. Así se resuelve que espeak-ng fusione palabras cortas («for the» se convirtió en una sola palabra en nuestras pruebas) o expanda una palabra escrita en varias («2026»).

Después, las palabras habladas se asignan a las escritas mediante los fragmentos descritos arriba. Cuando varias palabras habladas cubren varias escritas, como «5 euros con 50 céntimos» para «5,50 €», se reparten el tiempo en proporción a la longitud de las palabras escritas. Los subtítulos siguen los segmentos: uno por frase o línea, los más largos divididos en espacios entre palabras para caber en dos líneas de unos 42 caracteres, y un subtítulo que se corta a mitad de una idea se une al siguiente cuando ambos caben.

Una nota de memoria para desarrolladores. Exponer las duraciones exige editar el grafo del modelo. El cargador de Piper puede hacerlo en memoria, pero en nuestro despliegue eso usó 811 MB para cuatro voces, frente a 480 MB al cargar las mismas voces desde archivos. Escribir una vez en disco cada modelo editado y cargar ese archivo devolvió el uso de memoria a 486 MB.

Resultados con nuestro conjunto de pruebas

Medimos la tasa de error de fonemas (PER). Cada salida y una lectura de referencia se fonetizan con la misma voz de espeak-ng; tras quitar las marcas de acento, la puntuación y los espacios entre palabras, la PER es la distancia de edición entre las dos cadenas de símbolos dividida por la longitud de la referencia. Un caso es exacto cuando la PER es cero. Como ambos lados los lee espeak-ng, la métrica separa la preparación del texto de la lectura que hace espeak-ng de las palabras corrientes. También contamos los finales de frase falsos.

Nuestro conjunto tiene 103 frases: 84 casos de prueba en 13 categorías con referencias escritas a mano y 19 frases de control de texto sencillo cuya referencia es el propio texto, de modo que cualquier cambio en un control cuenta como perjuicio. Incluimos a propósito dos fallos conocidos: un heterónimo y una unidad ambigua.

La capa eliminó casi todas las diferencias con las referencias en las categorías a las que se dirige, eliminó los 18 finales de frase falsos y no cambió ninguno de los 19 controles. Las cuatro diferencias restantes son los dos fallos deliberados, una fracción cuyo género en español la regla no puede conocer («media taza») y una variante ortográfica en una referencia. Como escribimos tanto las reglas como este conjunto, estas cifras muestran la cobertura de los casos previstos, no la generalización.

Nuestro conjunto: tasa media de error de fonemas (%), casos exactamente correctos y finales de frase falsos, sin y con preparación de texto.
GrupoCasosPER sinPER conExactos sinExactos conFinales falsos sinFinales falsos con
Todos los casos de prueba8432,60,91080180
Inglés5833,60,9655130
Español2630,40,842550
Controles (texto sin cambios)190,00,0191900
nombre de marca120,80,00100
fechas641,80,00610
décadas311,50,01300
iniciales20,00,02230
límites conocidos223,423,40000
formato772,60,02730
dinero950,50,00900
teléfonos385,20,00300
intervalos, fracciones y barras925,52,40800
números romanos526,70,00500
horas627,70,00600
tratamientos2115,30,3520110
unidades1031,80,001000

Una prueba independiente que no escribimos

Para medir la generalización usamos los casos de prueba de texto escrito a hablado en inglés y español publicados con NVIDIA NeMo text processing (commit ddadfb2, 957 casos utilizables). Los dividimos en dos mitades mediante un hash del texto escrito. Estudiamos fallos individuales solo en la mitad de desarrollo y corregimos allí carencias generales; presentamos la mitad reservada, cuyos casos individuales no inspeccionamos.

Comparamos tres sistemas: el texto bruto tal como lo recibe Piper; un script comunitario típico que escribimos para que fuera capaz y justo, con num2words y tratamiento de moneda, porcentajes, ordinales, años, decimales, fechas numéricas, horas, separadores de millares y abreviaturas comunes; y nuestra capa. El normalizador de NeMo no se evaluó con sus propios casos.

En la mitad reservada nuestra capa tuvo el menor error en ambos idiomas. En la mitad de desarrollo las cifras fueron del 41,9%, el 29,4% y el 19,5% en inglés y del 64,8%, el 55,4% y el 36,9% en español. Después de la evaluación, al comprobar los consejos de escritura de más abajo, vimos que los teléfonos españoles en el formato agrupado de España («912 345 678») y cantidades como «1 500 kg» se unían en un solo número. Corregimos ambas cosas; ninguna cifra publicada cambió.

Casos de prueba de NeMo, mitad reservada: tasa media de error de fonemas (%) y casos exactamente correctos. Menos error es mejor.
IdiomaCasosTexto brutoScript num2wordsEsta capaExactos: brutoExactos: scriptExactos: esta capa
Inglés20041,028,515,8658599
Español27764,756,243,2476164
Loudness.ai
Tasa media de error de fonemas en la mitad reservada de los casos de NeMo, para el texto bruto, el script num2words y esta capa.

De dónde vienen las mejoras

Por categoría, las mayores mejoras se dieron en dinero, teléfonos, horas, fechas y fracciones. Nuestra capa fue peor que el texto bruto en las direcciones web, porque quita «https://» y «www» a propósito y las referencias de NeMo los conservan. El script fue mejor en los cardinales y las horas en español: espeak-ng lee números grandes como mil millones como «uno mil millones», algo que el script evita al escribir los números él mismo, y NeMo lee «01:00» como «una» donde nosotros decimos «una en punto».

Las referencias de NeMo siguen un único estilo de lectura, así que una lectura correcta en otro estilo, como «two thousand twelve» frente a «twenty twelve» de NeMo, cuenta como error para todos los sistemas. Por eso importan más las diferencias entre sistemas que las cifras absolutas.

Tasa media de error de fonemas (%) por categoría de NeMo en la mitad reservada.
IdiomaCategoríaCasosTexto brutoScript num2wordsEsta capa
Inglésdirección651,443,246,0
Ingléscardinal1215,429,315,2
Inglésfecha2359,029,020,5
Inglésdecimal64,436,74,4
Ingléselectrónico1910,210,916,8
Inglésfracción657,962,425,5
Inglésmatemáticas20,00,00,0
Inglésmedida1141,641,434,6
Inglésdinero3877,826,513,3
Inglésordinal1016,723,116,7
Inglésintervalo1237,423,819,1
Inglésromano160,060,00,0
Inglésserie139,411,610,1
Inglésteléfono779,983,212,0
Ingléshora9103,080,119,0
Ingléslista de términos24,20,020,0
Ingléspalabra233,65,41,5
Españolcardinal3751,215,546,8
Españolfecha1039,336,939,3
Españoldecimal1025,228,616,6
Españolelectrónico1727,327,347,3
Españolfracción4066,664,347,6
Españolmedida1949,255,939,6
Españoldinero3371,266,553,7
Españolordinal6598,496,842,7
Españolteléfono670,269,728,6
Españolhora15120,867,177,9
Españollista de términos481,881,881,8
Españolpalabra210,00,00,0

Qué reglas importan

Desactivamos un grupo de reglas cada vez en la mitad reservada. El tratamiento del dinero fue lo que más aportó en inglés, y la agrupación de números lo que más aportó en español. Un valor negativo significa que desactivar el grupo reduciría el error en este conjunto: de nuevo las direcciones web, por el motivo anterior. Los grupos dirigidos a formas ausentes de los casos de NeMo, como tratamientos, formato y pausas, no muestran efecto aquí y se miden con nuestro conjunto.

Aumento de la tasa media de error de fonemas (puntos porcentuales) al desactivar un grupo de reglas, mitad reservada.
Grupo de reglas desactivadoInglésEspañol
dinero+12,6+2,9
agrupación de números0,0+14,0
horas+3,8+0,6
fracciones+1,0+3,0
fechas+3,90,0
unidades+0,5+1,9
teléfonos+2,4−0,2
décadas+1,20,0
números romanos+0,30,0
abreviaturas+0,20,0
intervalos+0,10,0
barras−0,30,0
direcciones web−0,5−1,2

Tiempos y ajustes de voz

En 414 tomas sintetizadas de las frases de prueba en inglés (dos voces, tres ajustes de velocidad y pausa), todas las palabras escritas recibieron un tiempo en 408 tomas; en las otras seis, la palabra sin tiempo es un emoji, que se elimina y no se pronuncia. Los tiempos quedaron ordenados y sin solapamiento en las 414 tomas, y su total coincidió con la duración del audio en las 414. De 684 cortes entre palabras, el 97,2% cayó en un espacio entre palabras habladas; el resto está dentro de palabras que espeak-ng fusionó o expandió, donde no hay espacio.

No comparamos los tiempos con alineaciones anotadas por personas. Las duraciones son las mismas con las que se generó el audio y, en nuestras comprobaciones, las marcas de tiempo del reconocimiento de voz se desviaban hasta unos cientos de milisegundos dentro de una frase, lo que las hacía inadecuadas como referencia.

Por separado, escalamos el noise scale y el noise width de cada voz a 0,7 veces los valores del modelo para reducir el temblor audible. Con un predictor automático de naturalidad (UTMOS) y una comprobación de claridad con reconocimiento de voz sobre tres frases por voz, la puntuación media de 13 voces en inglés subió de 93,2 a 94,8, y la naturalidad predicha de 4,16 a 4,26 sobre 5. Esa diferencia es menor que la reproducibilidad de la puntuación por voz (3,5 puntos); un oyente, el autor, prefirió el ajuste más tranquilo. Hay una prueba de escucha en preparación.

Consejos de escritura para una voz mejor

La preparación de texto resuelve la mayoría de las formas cotidianas, pero algunas formas escritas son ambiguas y ninguna regla puede saber qué quiso decir quien escribe. Estos consejos sirven para cualquier lector basado en Piper, incluida la herramienta de texto a voz de Loudness.ai. Cada uno se comprobó con el código actual.

Escribe esto en lugar de aquello, y por qué. Las lecturas se comprobaron con la versión de espeak-ng que usa Piper 1.8.
EscribeEn lugar dePor qué
a las 9:05a las 9.05Un punto entre números se lee como decimal: «nueve punto cero cinco». Con dos puntos se lee «nueve y cinco».
5,50 €5,50 eurosCon el símbolo, el precio se lee «5 euros con 50 céntimos». Con la palabra, «cinco coma cincuenta euros».
15/10/2026 o 15 de octubre de 202610/15/2026Las fechas numéricas se leen con el día primero. En el orden estadounidense la fecha no se reconoce y se leen las barras: «diez barra quince…».
912 345 678912345678Los dígitos agrupados se leen por grupos. Seguidos se leen como una cifra: «novecientos doce millones…».
3 m o 3 metros3mSin espacio, «3m» puede ser metros o millones, así que se lee como letras: «tres eme».
por ejemplop. ej.Algunas abreviaturas se leen a medias: «pe ejemplo». Escribe las palabras.
1500 millones1 500 000 000El fonetizador lee mal las cifras de miles de millones: «uno mil quinientos millones». Escribe la escala con palabras.
¿Seguro?... Sí.¿Seguro? Sí.La puntuación marca las pausas: la coma, una pausa breve; el punto, una pausa de frase; los puntos suspensivos, una más larga; y una línea en blanco, una pausa de párrafo. Las frases muy largas se dividen solas, pero tus comas suenan más naturales.
Cada elemento en su líneaUno - dos - tresCada línea se lee como una frase con una pausa después. Los guiones y viñetas de las listas no se leen.
loudness.ai/eshttps://www.loudness.ai/es/?ref=mailLas direcciones web se leen sin https:// ni www, pero el resto se lee carácter a carácter. Que sean cortas.
¡Buen trabajo, gracias!¡Buen trabajo 👍!Los emojis se eliminan y no se leen. Usa palabras si el significado importa.

Consejos para desarrolladores que usan Piper

1. Normaliza antes de fonetizar y conserva un mapa de cada palabra hablada al texto original; los subtítulos y el resaltado dependen de él.

2. Expande tratamientos y abreviaturas sin su punto, o espeak-ng terminará la frase ahí.

3. Comprueba con qué voz de espeak-ng se entrenó un modelo antes de fiarte de su acento.

4. Pon la puntuación dentro de los bloques de fonemas en bruto.

5. Aplica un fundido en cada unión entre voz y silencio.

6. Toma los tiempos por palabra de las duraciones del propio modelo y carga el modelo editado desde un archivo, no en memoria.

7. Prueba también frases de control sencillas. Una regla que cambia el texto corriente es una regresión.

Todo lo de esta lista está incluido en loudness-tts, nuestro SDK de texto a voz gratuito y de código abierto para Python y JavaScript (GitHub, PyPI). La guía de instalación se sigue en unos cinco minutos.

Limitaciones

Nuestro conjunto lo escribió el autor de las reglas. Los casos de NeMo son independientes, pero siguen un único estilo de lectura, y espeak-ng lee todas las referencias, así que las que lee mal añaden error a todos los sistemas. Cada caso tiene una sola referencia. Solo el inglés y el español tienen reglas completas; los demás idiomas reciben las reglas de formato y de pausas. Persisten los heterónimos como «read» y las formas ambiguas como «3m». Los números españoles grandes están limitados por espeak-ng.

La lista de palabras estadounidenses es una selección, y su beneficio se comprobó a nivel de fonemas, no con oyentes. La síntesis es estocástica, y los resultados de tiempos y de ajustes de voz proceden de tomas únicas. La preparación de texto corrige lo que dice una voz, no cómo suena: el temblor y la ondulación de los modelos VITS pequeños siguen siendo una propiedad del modelo de voz.

Reproducir el estudio

El paquete del estudio contiene la capa de preparación de texto, ttsprep (Python 3.9 o posterior, sin dependencias), con sus 30 pruebas unitarias, un adaptador opcional que obtiene tiempos por palabra con un Piper instalado, los scripts de evaluación, nuestras 103 frases de prueba con referencias, los casos de NeMo con su origen, licencia y sumas de verificación, todos los archivos de resultados y el código LaTeX del artículo en inglés y en español. El código, las frases de prueba y los resultados se publican con la licencia Apache 2.0.

Para reproducir las tablas, instala piper-tts 1.8.0 y num2words 0.5.14, indica en ESPEAK_DATA_PATH los datos de espeak-ng incluidos en Piper si no se encuentran y ejecuta los dos scripts de evaluación con una carpeta de salida. Su resultado coincide exactamente con los archivos publicados.

No se incluyen Piper ni espeak-ng (GPL-3.0), los modelos de voz ni el código de NeMo. Las mediciones de texto usaron piper-tts 1.8.0 con su espeak-ng 1.52.0.1, onnxruntime 1.19.2, NumPy 2.0.2 y Python 3.9.6 en un portátil Apple M4; las comprobaciones de producción usaron onnxruntime 1.31.0, NumPy 2.5.4 y Python 3.12.3 en un servidor virtual AMD EPYC de 12 vCPU.

Conflictos de intereses y financiación

El autor desarrolla Loudness.ai, cuya herramienta de texto a voz usa el método descrito aquí. No se recibió financiación externa.

Referencias

Hansen, M. y la Open Home Foundation. Piper: a fast, local neural text to speech system. Colaboradores de eSpeak NG. eSpeak NG.

Kim, J., Kong, J. y Son, J. (2021). Conditional variational autoencoder with adversarial learning for end-to-end text-to-speech. ICML 2021.

Sproat, R., Black, A. W., Chen, S., Kumar, S., Ostendorf, M. y Richards, C. (2001). Normalization of non-standard words. Computer Speech & Language, 15(3), 287–333. Ebden, P. y Sproat, R. (2015). The Kestrel TTS text normalization system. Natural Language Engineering, 21(3), 333–353.

Sproat, R. y Jaitly, N. (2016). RNN approaches to text normalization: a challenge. Zhang, H. et al. (2019). Neural models of text normalization for speech applications. Computational Linguistics, 45(2), 293–337.

Zhang, Y., Bakhturina, E., Gorman, K. y Ginsburg, B. (2021). NeMo inverse text normalization: from development to production. Interspeech 2021. NVIDIA. NeMo text processing, commit ddadfb2.

McAuliffe, M. et al. (2017). Montreal Forced Aligner: trainable text-speech alignment using Kaldi. Interspeech 2017. Radford, A. et al. (2023). Robust speech recognition via large-scale weak supervision. ICML 2023.

Koizumi, Y. et al. (2023). LibriTTS-R: a restored multi-speaker text-to-speech corpus. Interspeech 2023. Wells, J. C. (1982). Accents of English. Cambridge University Press. Saeki, T. et al. (2022). UTMOS: UTokyo-SaruLab system for VoiceMOS Challenge 2022. Interspeech 2022.

Informe y archivos del estudio

Citar este informe

Shehzad, Asad (2026). Teaching Piper TTS to Read: Text Normalization and Word Timings. Loudness.ai, LA-RB-2026-002, versión 1.0.1. https://loudness.ai/research/piper-tts-text-normalization/ DOI: 10.5281/zenodo.23396091.

BibTeX · RIS · Feed RSS de investigación

Inicia sesión en Loudness.ai