Guía

Qué ocurre en realidad cuando tu Mac transcribe audio en el dispositivo

La IA en el dispositivo es una frase de marketing pegada a un trabajo de ingeniería concreto y bastante interesante. Aquí tienes la cadena completa, del archivo al texto.

Ahora todas las apps dicen que hacen las cosas «en el dispositivo». Merece la pena saber qué implica eso en realidad, en parte porque explica por qué la transcripción local mejoró tan rápido y en parte porque es la diferencia entre una afirmación que puedes verificar y otra que no.

Esta es la cadena, en orden.

Paso 1: todo se convierte en mono de 16 kHz #

Whisper, el modelo de reconocimiento de voz que usan casi todas estas apps, admite exactamente un tipo de entrada: 16.000 muestras por segundo, un canal, como números en coma flotante entre -1 y 1.

Así que lo primero que hace cualquier herramienta de transcripción es tirar la mayor parte de tu audio. Tu grabación estéreo a 48 kHz se mezcla a mono y se reduce su frecuencia de muestreo. A los archivos de vídeo se les extrae la pista de audio y se descarta la imagen.

Suena destructivo y en su mayor parte no lo es: el habla humana vive por debajo de los 8 kHz y, por el límite de Nyquist, una frecuencia de muestreo de 16 kHz la captura entera. Lo que pierdes es calidad musical, no inteligibilidad.

La consecuencia práctica: tu carísima grabación a 96 kHz no te aporta nada en esta fase, y un archivo mal comprimido tampoco se salva gracias a ella.

Paso 2: la detección de actividad de voz decide qué merece transcribirse #

Un segundo modelo, mucho más pequeño, se ejecuta primero y marca qué partes del audio contienen habla humana.

El modelo de uso común es Silero VAD: menos de un megabyte, y responde a una sola pregunta: habla o no habla, sobre una rejilla temporal fina.

Existe por dos motivos. Hace las cosas más rápidas, porque decodificar silencio es trabajo desperdiciado. Y, más importante, evita el modo de fallo en el que Whisper, ante audio sin habla, genera texto de todos modos y entra en bucle. El VAD es la razón por la que la transcripción local moderna dejó de producir páginas de frases repetidas.

Paso 3: el audio se convierte en una imagen #

Whisper no consume formas de onda. Consume un espectrograma log-Mel: una imagen 2D donde el eje horizontal es el tiempo, el vertical es la frecuencia en una escala que se ajusta al oído humano y el brillo es la energía.

Ese es el salto conceptual de verdad en el reconocimiento de voz moderno. Una vez el audio es una imagen, puedes aplicarle la maquinaria construida para la visión por computador, y es exactamente lo que ocurre a continuación.

Paso 4: el codificador se ejecuta, idealmente en el Neural Engine #

Whisper es un transformer con dos mitades. El codificador lee el espectrograma y lo convierte en una representación numérica densa de lo que se dijo. Esta es la mitad cara: multiplicación de matrices pesada y regular sobre una entrada de tamaño fijo.

Que es precisamente para lo que está hecho el Neural Engine de Apple: un bloque dedicado del chip que hace un tipo estrecho de aritmética con enorme rapidez y muy poco consumo. No es de propósito general — no puedes ejecutar código arbitrario en él —, pero un codificador de transformer tiene exactamente su forma.

Llevar el codificador hasta ahí exige compilar el modelo al formato de Core ML (.mlmodelc) por adelantado. Las apps que lo hacen distribuyen un codificador de Core ML junto a los pesos del modelo, y es la mayor diferencia de velocidad entre una app de transcripción local rápida y una lenta con el mismo hardware.

Paso 5: el decodificador se ejecuta en la GPU #

El decodificador produce el texto en sí, un token cada vez, cada uno condicionado por todo lo anterior.

Esta mitad es secuencial, así que no encaja con el diseño orientado a lotes del Neural Engine. Se ejecuta en la GPU a través de Metal. En Apple Silicon esa GPU comparte memoria con la CPU, así que los pesos del modelo no tienen que copiarse a través de un bus, lo que explica en buena parte por qué Apple Silicon rinde por encima de lo esperado en inferencia local.

Paso 6: las marcas de tiempo salen del mismo proceso #

Whisper emite tokens especiales de marca de tiempo intercalados con las palabras. Así es como obtienes un SRT con tiempos sensatos en vez de un muro de texto: la información temporal cae del mismo pase de decodificación, no de un paso de alineación aparte.

Cuando el VAD ha saltado silencio, los tiempos tienen que reasignarse a la grabación original, o si no toda marca de tiempo posterior al primer hueco estaría mal.

El modelo, y por qué es más pequeño de lo que parece #

El modelo Base de Whisper tiene 74 millones de parámetros. A precisión completa eso son unos 140 MB, la mayoría redundantes para este propósito.

La cuantización almacena cada peso con menos bits. En un modelo q5_1, los pesos son de 5 bits más una pequeña escala y un desplazamiento por bloque: aproximadamente 6 bits por peso en vez de 16. El resultado ronda los 60 MB, con diferencias de precisión difíciles de detectar en el habla corriente.

Eso importa en un teléfono, donde una descarga de 140 MB y la memoria correspondiente son un coste real. También es la razón por la que la respuesta honesta a «qué modelo debería usar» suele ser uno más pequeño de lo que la gente supone.

Los archivos largos, y por qué la memoria es la parte difícil #

La API de Whisper admite un único búfer contiguo de muestras. Dos horas a 16 kHz son unos 470 MB de números en coma flotante, más un espectrograma de tamaño comparable.

En un Mac, sin problema. En un iPhone, eso basta para que el sistema termine la app, y por eso algunas apps móviles de transcripción limitan la duración de los archivos sin decirlo.

La solución es transcribir por ventanas: mantener el audio decodificado en disco, mapear un fragmento cada vez, transcribirlo y liberarlo. El pico de memoria pasa a depender de la ventana y no del archivo. La sutileza está en dónde cortar: si partes a mitad de palabra, obtienes una frase destrozada en cada límite, así que una implementación sensata corta en el punto más silencioso dentro de una zona de solape y desplaza las marcas de tiempo de cada ventana de vuelta a la línea temporal original.

Por qué algo de esto te importa #

De la cadena anterior se derivan tres cosas que no son afirmaciones de marketing:

Funciona sin red. No hay ningún paso arriba que la requiera. Esto se comprueba en treinta segundos: escribimos cómo, incluidas pruebas que no exigen confiar en nosotros.

Tu grabación no son datos de entrenamiento de nadie. No se trata de que una app local prometa no entrenar con tu audio. Se trata de que tu audio nunca estuvo en ningún sitio donde eso fuera posible.

La velocidad depende de tu hardware, no de la cola de otro. Una transcripción local va varias veces más rápido que el tiempo real en Apple Silicon, de forma constante, a las 3 de la madrugada de un domingo y sin límite de peticiones.

La versión corta #

El audio se reduce a mono de 16 kHz, la detección de voz retira las partes sin habla, lo que queda se convierte en un espectrograma, un codificador de transformer lo procesa en el Neural Engine, un decodificador genera texto en la GPU con las marcas de tiempo intercaladas, y la cuantización hace el modelo lo bastante pequeño como para que todo esto quepa en un teléfono.

Nada de ello necesita un servidor, que es justamente la idea.

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