InícioBlog → Como melhorar a precisão da transcrição: oito ajustes práticos

Como melhorar a precisão da transcrição: oito ajustes práticos

Publicado em 2026-08-18 · 7 min de leitura

«O reconhecimento está ruim» não é um diagnóstico. Em quase todos os casos reais o problema de qualidade tem uma entre poucas causas concretas — e a maioria delas se resolve do seu lado, antes de o áudio sair do seu servidor. Aqui estão elas, na ordem em que vale tentar.

Primeiro: meça, não adivinhe

Sem um número, toda mudança vira questão de gosto. Pegue de 20 a 30 gravações parecidas com o seu tráfego real, escreva o que foi de fato dito e calcule a taxa de erro: substituições mais omissões mais inserções, divididas pelo número de palavras faladas.

pip install jiwer
from jiwer import wer

score = wer(texto_referencia, texto_reconhecido)
print(f"WER: {score:.1%}")

Duas coisas importam mais que o valor absoluto. Primeira: meça no seu áudio, não em um benchmark público. Segunda: pondere pelo que interessa ao negócio — se você precisa de números de pedido, 5% de erro com todos os números errados é fracasso, e 15% com números limpos é sucesso.

Ajuste 1. Entregue um áudio limpo

Modelos de reconhecimento trabalham internamente com mono a 16 kHz. O que está acima disso é descartado, e o que está abaixo está perdido para sempre:

ffmpeg -i entrada.wav -ac 1 -ar 16000 -b:a 64k limpo.mp3

Redução agressiva de ruído é a exceção que costuma sair pela culatra: filtros pesados comem as consoantes e o reconhecimento piora em vez de melhorar. Se der, resolva o ruído no microfone.

Ajuste 2. Diga qual é o idioma

A detecção automática acerta quase sempre em gravações longas e erra bem mais em trechos de três segundos. Se o fluxo é de um idioma só, diga isso:

r = client.audio.transcriptions.create(
    model="whisper-1", file=f, language="pt",
)

Isso elimina uma classe inteira de falhas em que uma frase curta é reconhecida como outro idioma e volta como algo sem sentido. Também acelera um pouco o processamento, já que a etapa de detecção é pulada.

Ajuste 3. Passe o vocabulário pelo prompt

O parâmetro de maior retorno e o mais ignorado. O prompt não aparece na resposta — ele inclina o reconhecimento na direção das palavras que você lista:

r = client.audio.transcriptions.create(
    model="whisper-1", file=f,
    prompt="Produtos: Kestrel, Kestrel Pro, Hawknest. Atendentes: Duarte, Nogueira, Ng.",
)

Mantenha curto e específico. Uma lista de 20 a 40 termos que realmente ocorrem funciona; um parágrafo de descrição genérica não faz nada. Troque a lista conforme o contexto: uma fila de suporte sobre cobrança precisa de termos diferentes de uma sobre hardware.

O prompt também carrega estilo. Se as suas transcrições devem manter pontuação e maiúsculas, escreva a dica como uma frase bem pontuada — o modelo tende a continuar no estilo que recebeu.

Ajuste 4. Corte o silêncio

Trechos longos de silêncio são a origem das alucinações: sem nada para reconhecer, o modelo pode produzir texto de enchimento. E também custam dinheiro, porque a cobrança é por minuto de áudio.

ffmpeg -i entrada.mp3 -af silenceremove=start_periods=1:stop_periods=-1:stop_duration=2:stop_threshold=-45dB saida.mp3

Cuidado com o limiar: cortar demais leva embora a fala baixa junto com o silêncio. Confira o resultado em alguns arquivos antes de colocar isso num pipeline.

Ajuste 5. Corte nas pausas, não no relógio

Gravações longas precisam ser divididas de qualquer forma para caber no limite de 25 MB. Onde você corta importa: uma fronteira no meio da frase perde palavras dos dois lados.

# localiza as pausas em vez de cortar num minuto fixo
ffmpeg -i longo.mp3 -af silencedetect=noise=-40dB:d=0.7 -f null - 2> pausas.txt

Use as pausas detectadas como candidatas a ponto de corte e mantenha os blocos entre 5 e 20 minutos. Blocos mais curtos perdem contexto entre si; bem mais longos não trazem benefício extra.

Ajuste 6. Peça o formato que carrega confiança

O verbose_json devolve não só o texto, mas também os segmentos e o idioma detectado com sua probabilidade. É a matéria-prima do controle de qualidade automático:

r = client.audio.transcriptions.create(
    model="whisper-1", file=f, response_format="verbose_json",
)

if r.language_probability < 0.6:
    enviar_para_revisao(r)       # gravação suspeita, olhar à mão

Mandar os poucos por cento duvidosos para uma fila de revisão humana melhora a qualidade do pipeline inteiro de forma muito mais barata do que tentar espremer o último ponto percentual do reconhecimento.

Ajuste 7. Corrija o texto em vez de reconhecer de novo

Alguns erros são sistemáticos: o mesmo nome de produto volta errado sempre do mesmo jeito. Um dicionário de substituições resolve em uma linha e não custa nada:

CORRECOES = {"casterel": "Kestrel", "hawk nest": "Hawknest"}

for errado, certo in CORRECOES.items():
    texto = texto.replace(errado, certo)

Monte o dicionário a partir de erros reais que você viu, não de imaginação. Dez entradas coletadas em uma semana de tráfego costumam remover mais erros visíveis do que qualquer ajuste de parâmetro.

Ajuste 8. Trate saída vazia e inventada

Dois modos de falha merecem tratamento explícito no código: um resultado vazio e um resultado suspeitosamente genérico. Os filtros de alucinação cortam os casos clássicos, como créditos finais e «obrigado por assistir», então uma string vazia significa mesmo que não houve fala.

texto = r.text.strip()
if not texto:
    return None            # silêncio, não erro — não repita

Repetir uma gravação vazia só gasta minutos. Registre, pule e siga em frente.

O que não vai ajudar

Teste com as suas próprias gravações. O cadastro leva um minuto e os minutos gratuitos bastam para avaliar a qualidade.

Obter uma chave de API grátis

Perguntas frequentes

Que taxa de erro devo esperar?

Em fala limpa e num idioma bem suportado, percentuais de um dígito são normais. Áudio de telefone, ruído, sobreposição de vozes e sotaque forte elevam esse número. Meça nas suas próprias gravações — um benchmark público não diz nada sobre o seu tráfego.

O parâmetro prompt muda mesmo alguma coisa?

Muda, e é a melhoria mais barata disponível. Uma lista curta de nomes, produtos e códigos que aparecem no seu áudio reduz bastante os erros justamente nas palavras que mais importam.

Devo informar o idioma ou deixar detectar?

Informe quando o fluxo é de um idioma só, sobretudo em trechos curtos. Deixe a detecção ligada quando as mensagens realmente chegam em idiomas diferentes.

Vale reduzir ruído antes de enviar?

Normalização leve ajuda; redução agressiva normalmente atrapalha, porque danifica as consoantes. Se o ruído é severo, corrigir a captação vence qualquer filtro.

Qual deve ser o tamanho dos blocos de uma gravação longa?

De cinco a vinte minutos, cortados em pausas e não em intervalos fixos. Isso mantém as frases inteiras e respeita o limite de 25 MB por requisição.

Leitura relacionada