Guía

Por qué tu transcripción repite la misma frase una y otra vez

No es tu grabación, ni una descarga corrupta. Es lo que hace Whisper cuando nadie habla, y hay formas concretas de evitarlo.

Transcribes una grabación larga, abres la transcripción y en algún punto del medio se convierte en esto:

[ Silence ]
[ Silence ]
[ Silence ]
[ Silence ]

O peor: coge una frase real de antes en el archivo y la repite cuarenta veces, con marcas de tiempo verosímiles, como si alguien hubiera dicho de verdad «gracias por ver el vídeo» una vez por segundo durante un minuto.

Esta es la queja más habitual sobre la transcripción automática, y casi toda herramienta construida sobre Whisper, de OpenAI, tiene alguna versión de ella. Merece la pena entender qué la causa, porque la solución no es «compra un modelo más grande».

Qué está pasando en realidad #

Whisper es un modelo de lenguaje. No «oye palabras y las escribe»: predice el siguiente fragmento de texto más probable dado el audio y todo lo que ha escrito hasta ese momento.

Ese planteamiento explica el fallo. Cuando el audio contiene habla, el texto siguiente más probable son las palabras que se están diciendo. Cuando el audio no contiene habla — una pausa, el ruido de fondo de la sala, música de espera, aplausos, un profesor caminando hacia la pizarra —, el modelo sigue teniendo que producir algo. No existe un token para «aquí no pasó nada».

Así que recurre a lo que hacen los modelos de lenguaje a falta de señal: se repite. Acaba de escribir una frase, la continuación estadísticamente más probable de esa frase es una frase parecida y, sin nada en el audio que contradiga esa suposición, entra en bucle. Whisper procesa el audio en ventanas de 30 segundos, así que en cuanto una ventana entra en bucle obtienes la misma línea durante toda la ventana, y luego la siguiente ventana empieza de cero y a menudo vuelve a hacerlo.

Por eso el problema aparece con un patrón muy concreto:

  • Grabaciones largas, porque contienen más silencio.
  • La parte central y el final de los archivos, cuando lo interesante ya ha terminado pero la grabadora sigue en marcha.
  • Música y aplausos, que son audio denso sin palabras dentro.
  • Grabaciones con alguien que habla bajo y una sala ruidosa, donde el modelo no puede separar ambas cosas.

Una entrevista de cinco minutos hecha cerca del micrófono casi nunca hace esto. Una reunión de dos horas en la que la grabadora siguió veinte minutos después de que todos se fueran casi siempre lo hace.

Por qué «[ Silence ]» y «[BLANK_AUDIO]» son un síntoma distinto de lo mismo #

Los datos de entrenamiento de Whisper incluían transcripciones con anotaciones entre corchetes: [ Silence ], [BLANK_AUDIO], (music), ♪♪♪. Así que, cuando se encuentra con algo que no es habla, una de sus salidas probables es uno de esos marcadores, una y otra vez.

Esta es la versión más benigna: al menos la transcripción es honesta sobre que ahí no había nada. Aun así te llena el documento con cientos de líneas basura, y aun así significa que la herramienta está gastando tiempo real decodificando silencio.

Cuatro formas de solucionarlo #

Aproximadamente por orden de lo bien que funcionan.

1. Detección de actividad de voz (la solución de verdad) #

La detección de actividad de voz — VAD, por sus siglas en inglés — es un modelo pequeño e independiente que se ejecuta antes de la transcripción y marca qué partes del audio contienen habla humana. Al transcriptor solo se le dan esas partes.

Esto resuelve el problema en su origen, porque el bucle solo ocurre cuando a Whisper se le entrega audio sin habla. Si el silencio nunca llega al modelo, no hay nada sobre lo que alucinar. Además hace más rápidos los archivos largos, porque ya no pagas por decodificar veinte minutos de sala vacía.

El más usado es Silero VAD, y las versiones recientes de whisper.cpp lo admiten directamente. Si tu app ofrece una opción de VAD o de «omitir silencio», actívala. Si no la ofrece, es algo razonable que pedirle a quien la desarrolla.

2. Recorta el silencio tú mismo #

Si tu herramienta no tiene opción de VAD, puedes hacer una versión rudimentaria a mano: recorta el principio y el final de la grabación antes de transcribirla, para que los veinte minutos de ruido de recogida no se procesen nunca.

Cualquier editor de audio sirve. Es tedioso y no hace nada por el silencio que hay en mitad de un archivo, pero para el caso tan habitual de «la grabadora siguió corriendo al final» lleva treinta segundos y elimina lo peor.

3. Filtra los marcadores después #

Si tu transcripción está llena de [ Silence ] y ♪♪♪, esos se quitan fácilmente con buscar y reemplazar, porque son líneas enteras con una forma reconocible.

Cuidado con una cosa: borra solo las líneas que sean enteramente un marcador. Una línea como «y entonces — (risas) — lo lanzamos» es habla real y quieres conservarla. Esta es exactamente la regla que una buena app debería aplicar por ti.

4. Divide el archivo #

Como el bucle está limitado por la ventana de Whisper, trocear una grabación larga en piezas más cortas limita el daño: una ventana mala arruina un minuto en vez de fundirse en un muro de repetición. Algunas apps lo hacen internamente.

Esto es un apaño, no una solución. Reduce el radio de la explosión; no impide que el modelo alucine sobre el silencio.

Lo que no lo soluciona #

Un modelo más grande. Pasar de Base a Large te cuesta mucho tiempo y mucho disco y no elimina el bucle, porque la causa no es falta de capacidad, sino que se le pide transcribir algo que no contiene habla. Los modelos grandes también entran en bucle. (Más sobre el equilibrio de tamaños.)

Un servicio en la nube. Las buenas herramientas en la nube ejecutan VAD y posprocesado en su cadena, y por eso se topan con esto menos a menudo. El mecanismo de fondo es el mismo, y muchas de ellas siguen produciendo «gracias» cincuenta veces en un archivo silencioso. Pagar por minuto no te compra un decodificador distinto.

Volver a ejecutarlo. El muestreo de Whisper no es del todo determinista, así que un segundo intento puede entrar en bucle en otro sitio. Eso no es una solución, es echarlo a suertes.

Qué hacemos nosotros al respecto #

Vamos a ser concretos, porque una respuesta vaga aquí no serviría de nada.

Offline Transcription ejecuta Silero VAD antes de transcribir, así que los tramos de silencio y de no habla nunca llegan al decodificador. Además, los marcadores que ocupan un segmento entero, como [ Silence ] y los símbolos musicales sueltos, se filtran del resultado, mientras que las líneas que solo contienen un inciso entre paréntesis se conservan, porque esas son habla real.

Para archivos largos, además transcribe por ventanas y corta cada ventana en el punto más silencioso del audio, de modo que un límite caiga entre frases y no en medio de una.

La salvedad honesta: esto hace que el problema de la frase repetida sea muy raro, no imposible. Cualquier herramienta basada en Whisper, la nuestra incluida, es un modelo de lenguaje haciendo predicciones, y un modelo que predice puede equivocarse. Si transcribes algo donde la precisión importa, contrasta la transcripción con el audio en las partes en las que piensas apoyarte: nuestra guía de entrevistas explica una forma rápida de hacerlo.

La versión corta #

El bucle es Whisper prediciendo texto para un audio que no contiene habla. La detección de actividad de voz elimina la causa al no mostrarle nunca ese audio. Recortar el silencio y filtrar los marcadores ayudan si tu herramienta no tiene VAD. Un modelo más grande no ayuda en absoluto.

Consigue Offline Transcription

Transcribe audio y video por completo en tu propio Mac. No se sube nada, no hace falta cuenta y no hay cobro por minuto.

macOS 13.0 or higher · iOS 16.4 or higher