Guia

O que acontece de facto quando o seu Mac transcreve áudio no dispositivo

"IA no dispositivo" é uma expressão de marketing colada a uma peça de engenharia concreta e bastante interessante. Eis todo o percurso, do ficheiro ao texto.

Todas as aplicações dizem agora que fazem as coisas "no dispositivo". Vale a pena saber o que isso envolve de facto, em parte porque explica porque é que a transcrição local ficou boa tão depressa, e em parte porque é a diferença entre uma afirmação que pode verificar e outra que não pode.

Este é o percurso, por ordem.

Passo 1: tudo passa a mono a 16 kHz #

O Whisper, o modelo de reconhecimento de fala que quase todas estas aplicações usam, aceita exatamente um tipo de entrada: 16 000 amostras por segundo, um canal, como números em vírgula flutuante entre -1 e 1.

Por isso, a primeira coisa que qualquer ferramenta de transcrição faz é deitar fora a maior parte do seu áudio. A sua gravação estéreo a 48 kHz é misturada para mono e reamostrada. Aos ficheiros de vídeo é extraída a faixa de áudio e descartada a imagem.

Isto parece destrutivo e na maior parte não é: a fala humana situa-se abaixo dos 8 kHz e, pelo limite de Nyquist, uma taxa de amostragem de 16 kHz capta-a toda. O que se perde é qualidade musical, não inteligibilidade.

A consequência prática: a sua dispendiosa gravação a 96 kHz não lhe traz nada nesta fase, e um ficheiro mal comprimido também não pode ser salvo por ela.

Passo 2: a deteção de atividade vocal decide o que vale a pena transcrever #

Um segundo modelo, muito mais pequeno, corre primeiro e assinala que partes do áudio contêm fala humana.

O modelo de uso corrente é o Silero VAD — com menos de um megabyte, responde a uma única pergunta: fala ou não fala, numa grelha temporal fina.

Existe por duas razões. Torna as coisas mais rápidas, porque descodificar silêncio é trabalho desperdiçado. Mais importante ainda, evita o modo de falha em que o Whisper, perante áudio sem fala, gera texto na mesma e entra em ciclo. O VAD é a razão pela qual a transcrição local moderna deixou de produzir páginas de frases repetidas.

Passo 3: o áudio passa a ser uma imagem #

O Whisper não consome formas de onda. Consome um espectrograma log-Mel: uma imagem 2D em que o eixo horizontal é o tempo, o eixo vertical é a frequência numa escala que corresponde à audição humana, e o brilho é a energia.

É este o verdadeiro salto conceptual do reconhecimento de fala moderno. Assim que o áudio é uma imagem, pode usar-se sobre ele a maquinaria construída para visão por computador — e é exatamente isso que acontece a seguir.

Passo 4: o codificador corre, idealmente no Neural Engine #

O Whisper é um transformador com duas metades. O codificador lê o espectrograma e transforma-o numa representação numérica densa do que foi dito. É esta a metade dispendiosa — multiplicação de matrizes pesada e regular sobre uma entrada de tamanho fixo.

Que é precisamente aquilo para que o Neural Engine da Apple foi construído: um bloco dedicado no chip que faz um tipo restrito de aritmética de forma extremamente rápida e com muito pouca energia. Não é de uso geral — não se pode correr código arbitrário nele — mas um codificador de transformador tem exatamente o seu formato.

Levar o codificador até lá exige compilar o modelo previamente para o formato do Core ML (.mlmodelc). As aplicações que o fazem incluem um codificador Core ML a par dos pesos do modelo, e é essa a maior diferença de velocidade entre uma aplicação de transcrição local rápida e uma lenta no mesmo hardware.

Passo 5: o descodificador corre na GPU #

O descodificador produz o texto propriamente dito, um símbolo de cada vez, cada um condicionado por tudo o que veio antes.

Esta metade é sequencial, por isso não se adequa ao desenho orientado a lotes do Neural Engine. Corre antes na GPU, através do Metal. Em Apple Silicon, essa GPU partilha memória com a CPU, pelo que os pesos do modelo não têm de ser copiados por um barramento — grande parte da razão pela qual o Apple Silicon rende acima do esperado em inferência local.

Passo 6: as marcações de tempo saem do mesmo processo #

O Whisper emite símbolos especiais de marcação de tempo intercalados com as palavras. É assim que obtém um SRT com marcações sensatas em vez de um bloco de texto — a informação temporal sai da mesma passagem de descodificação, e não de um passo de alinhamento separado.

Quando o VAD saltou silêncio, as marcações de tempo têm de ser mapeadas de volta para a gravação original, ou todas as marcações depois da primeira interrupção ficariam erradas.

O modelo, e porque é mais pequeno do que parece #

O modelo Base do Whisper tem 74 milhões de parâmetros. Em precisão total, isso são cerca de 140 MB, na maioria redundantes para este fim.

A quantização guarda cada peso com menos bits. Num modelo q5_1, os pesos ocupam 5 bits mais uma pequena escala e um deslocamento por bloco — cerca de 6 bits por peso em vez de 16. O resultado ronda os 60 MB, com diferenças de exatidão difíceis de detetar em fala comum.

Isso importa num telemóvel, onde uma transferência de 140 MB e a memória correspondente são um custo real. É também por isso que a resposta honesta a "que modelo devo usar" é normalmente um mais pequeno do que as pessoas assumem.

Ficheiros longos, e porque a memória é a parte difícil #

A API do Whisper recebe um único bloco contíguo de amostras. Duas horas a 16 kHz são cerca de 470 MB em vírgula flutuante, mais um espectrograma de tamanho comparável.

Num Mac, sem problema. Num iPhone, isso chega para uma aplicação ser terminada pelo sistema — razão pela qual algumas aplicações de transcrição móveis limitam discretamente a duração dos ficheiros.

A solução é transcrever por janelas: manter o áudio descodificado em disco, mapear um troço de cada vez, transcrevê-lo, libertá-lo. O pico de memória passa a depender da janela e não do ficheiro. A subtileza está em onde cortar — se dividir a meio de uma palavra, fica com uma frase estropiada em cada fronteira, por isso uma implementação sensata corta no ponto mais silencioso dentro de uma região de sobreposição, e desloca as marcações de tempo de cada janela de volta para a linha temporal original.

Porque é que isto lhe interessa #

Do percurso acima decorrem três coisas que não são afirmações de marketing:

Funciona sem rede. Não há nenhum passo acima que precise dela. Isto é verificável em trinta segundos — escrevemos como, incluindo testes que não exigem confiar em nós.

A sua gravação não é dados de treino de ninguém. Não é que uma aplicação local prometa não treinar com o seu áudio. É que o seu áudio nunca esteve em lado nenhum onde isso pudesse acontecer.

A velocidade depende do seu hardware, não da fila de alguém. Uma transcrição local corre várias vezes mais depressa do que o tempo real em Apple Silicon, de forma consistente, às 3 da manhã de um domingo, sem limite de utilização.

A versão curta #

O áudio é reamostrado para mono a 16 kHz, a deteção de voz retira as partes sem fala, o resto passa a espectrograma, um codificador de transformador processa-o no Neural Engine, um descodificador gera texto na GPU com marcações de tempo intercaladas, e a quantização torna o modelo suficientemente pequeno para que tudo isto caiba num telemóvel.

Nada disto precisa de um servidor, que é justamente a questão.

Obter o Offline Transcription

Transcreva áudio e vídeo inteiramente no seu Mac. Nada é enviado, não há conta e não há contador ao minuto.

macOS 13.0 or higher · iOS 16.4 or higher