Nemotron 3.5 ASR: afina un ASR multilingüe y en tiempo real | Keryc
Nemotron 3.5 ASR llega como una respuesta práctica a problemas reales que enfrentan los productos que transcriben voz: soporte de muchos idiomas sin desplegar 40 modelos, subtitulado en vivo con baja latencia sin perder precisión, texto final ya puntado y capitalizado, y detección de idioma en caliente. ¿Quieres un único modelo que haga todo eso? Aquí te explico cómo funciona y cómo afinarlo para tu idioma, dominio o acento.
Qué resuelve Nemotron 3.5 ASR
Si alguna vez construiste un servicio de transcripción, reconoces estas paredes:
Soportar muchos idiomas deja tu infra como un museo de integraciones puntuales.
Streaming realista suele re-procesar ventanas solapadas y dispara la latencia y el costo.
Salida cruda sin puntuación obliga a añadir otro modelo para restaurarla.
Muchos sistemas exigen conocer el idioma por adelantado; ¿y si la persona cambia de idioma en la misma frase?
Nemotron 3.5 ASR unifica las soluciones: un solo checkpoint de 600M parámetros que cubre 40 locales, streaming real sin recomputo, output puntado y condicionamiento de idioma (puedes forzarlo con o dejar ).
target_lang=es-ES
target_lang=auto
Arquitectura y por qué es eficiente
Dos piezas principales:
Un encoder Cache-Aware FastConformer de 24 capas. FastConformer es una evolución eficiente del Conformer con atención linealmente escalable. La parte "cache-aware" guarda estados internos (activaciones de self-attention y convolución) de frames previos para que cada frame de audio se procese exactamente una vez. ¿Resultado? No hay trabajo duplicado, menor cálculo y menor latencia sin sacrificar precisión.
Un decoder RNNT (Recurrent Neural Network Transducer). RNNT emite texto conforme llega audio, ideal para transcripción en vivo.
Además, el modelo usa condicionamiento por prompt de identificación de idioma: cada clip puede llevar una señal target_lang que especializa la salida. En auto el modelo detecta el idioma y lo adjunta como una etiqueta al final de cada frase.
Latencia vs. precisión: el control está en tus manos
El balance entre rapidez de emisión y cuánto audio "espiar" hacia el futuro se controla con att_context_size. Algunos puntos prácticos:
Attention Context
Chunk Size (Latency)
Uso sugerido
[56,0]
80ms (Ultra-Low)
Agentes de voz ultra rápidos
[56,1]
160ms (Low)
Agentes interactivos
[56,3]
320ms (Balanced)
Conversación y subtitulado en vivo
[56,6]
560ms (Medium)
Precisión alta con latencia razonable
[56,13]
1.12s (High)
Precisión máxima cuando la latencia no es crítica
La misma checkpoint cubre todo el espectro: eliges el punto de operación en inferencia, sin necesidad de reentrenar.
Primeros pasos: clonar NeMo y probar el modelo
Clona NeMo y apunta el script de streaming a tu audio:
Notas prácticas: el audio debe ser mono .wav y el manifest un JSON-lines con audio_filepath, duration y text. El modelo añade una language_tag al final de cada oración completada (por ejemplo "This is a test. "). strip_lang_tags=true elimina esa etiqueta para legibilidad.
Cómo y cuándo afinar (fine-tune) — la receta técnica
El flujo de trabajo que proponen es sencillo y reproducible:
Prepara datos tarred con NeMo/Lhotse para streaming eficiente, sin desempaquetar archivos.
Fine-tunea desde el checkpoint base usando el mismo recipe Cache-Aware FastConformer-RNNT y condicionando por target_lang en cada clip.
Evalúa con un conjunto held-out en el mismo ajuste de latencia que usarás en producción (por ejemplo att_context_size=[56,0]).
Añade más datos para los idiomas/escenarios débiles y repite.
Exporta y despliega el checkpoint afinado.
Puntos que marcan la diferencia:
Cada clip debe llevar el target_lang correcto. El condicionamiento por prompt es potente pero intolerante a etiquetas incorrectas.
Mantén el estilo de texto del base model: puntuado y con mayúsculas.
Para no perjudicar el resto de idiomas, mezcla ("replay") una fracción de datos de las otras lenguas al fine-tunear.
Evalúa siempre a la latencia de despliegue; medir en modo offline o con look-ahead te dará una fantasía de rendimiento.
Un ejemplo concreto: afinar con ~2,000 horas balanceadas (Greek + Bulgarian) desde mezclas públicas (Granary, Common Voice, FLEURS) y usar splits held-out de FLEURS para prueba honesta.
Resultados representativos (WER en modo streaming de baja latencia 80ms):
Language
Base model WER (%)
Fine-tuned WER (%)
Mejora relativa
Greek
35
24
32%
Bulgarian
22
15
31%
Datos adicionales (incluir 2,000 h parlamentarias) siguieron mejorando las locales más débiles, aunque las ganancias fueron no uniformes: la cantidad ayuda, pero el match de dominio importa.
Consejos prácticos para ingeniería y despliegue
En datasets pequeños, una pasada rápida en una sola GPU puede bastar para ver mejoras; escala a multi-GPU para runs completos.
Usa un "fixed step budget" que funcione con datos streaming/iterables en lugar de contar epochs.
Protege los idiomas que no estás afinando con replay y comprueba que no degradan.
Exporta el checkpoint afinado a la misma ruta de serving: la arquitectura no cambia, solo los pesos.
Para producción, NVIDIA planea un release NIM con gRPC streaming y soporte en Ampere, Hopper, Blackwell, Lovelace, Turing, Volta y Jetson. Esto facilita integrarlo en pipelines de baja latencia y on-device.
Casos de uso destacados
Agentes de voz sub-segundo: ASR -> LLM -> TTS sin que el ASR sea el cuello de botella.
Subtítulos en vivo y multilingües con un único stream.
Analítica de centros de contacto a escala global con un backend ASR en lugar de muchos vendors.
Transcripción on-device en Jetson para privacidad o escenarios desconectados.
Recomendaciones finales y riesgos a vigilar
Afinar Nemotron 3.5 ASR puede ser transformador para lenguas con pocos recursos o dominios especializados. Pero recuerda: mide en la latencia que vas a desplegar, etiqueta bien los target_lang, y mezcla datos del resto de idiomas para evitar degradaciones inesperadas. Más datos ayudan, pero el match de dominio importa tanto como la cantidad.