O problema com números ditados
A maioria dos sistemas de ditado falha em números não porque não reconhecem as palavras, mas porque não entendem o contexto. Eu passei dois anos ajustando pipelines de transcrição para uma operadora de telecom e aprendi isso na marra. O ditado de numerais parece simples até você ouvir um CPF sendo falado depressa por uma pessoa com sotaque nordestino.
Ditado de numerais: como fazer funcionar de verdade
O ditado de numerais funciona quando você separa três coisas que normalmente ficam misturadas: a reconhecida fonética, a estrutura do número e a validação posterior. A maior parte dos tutoriais na internet explica só a primeira parte e depois torce pelo melhor. Eu vou explicar as três. Fonética separada por token. Quando você dita "nove", "dois", " vírgula", "cinco", o sistema precisa saber que cada item é um token independente. Em português brasileiro, números como "dezoito" e "oitenta" têm sons que se sobrepõem em contextos ruidosos. A solução mais comum é forçar o reconhecedor a tratar cada dígito isoladamente usando gramáticas personalizadas. A diferença é gritante: com gramática, a taxa de erro cai de cerca de 18% para 3% em média.
Eu tive um caso específico que durou seis semanas. Uma cliente ditava valores em reais seguidos de centavos, tipo "trinta e dois reais e sessenta e sete". O sistema convertia isso para "3267" em vez de "32,67". O problema não era o reconhecimento — ele estava reconhecendo as palavras certo. O problema era o parser que vinha depois. Ele tratava tudo como uma sequência contínua de dígitos sem ponto de quebra. A solução foi adicionar um marcador especial para "reais" e "centavos" na gramática e usar esses marcadores como delimitadores no parser. Depois de implementar, o bug sumiu. Não voltou desde então, o que diz algo sobre como esses problemas são teimosos. Regras de estrutura numérica. Números em português têm regras próprias. "Vinte e um" vira "vint e uma" no feminino. "Mil" não usa artigo. "Um milhão e cento e vinte" é diferente de "um milhão, cento e vinte". Um ditado de numerais bem feito precisa de um grammar file que cubra pelo menos os padrões numéricos mais comuns no seu domínio. Se você está trabalhando com dados financeiros, foque em valores monetários, CPFs, CNPJs, telefones e CEPs. São os cinco tipos que aparecem em 90% dos ditados.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Validação pós-ditado. Aqui é onde a maioria para. Reconhecer bem é metade do trabalho. A outra metade é validar se o resultado faz sentido. Um CPF reconhecido como "123.456.789-00" pode ser foneticamente perfeito e matematicamente impossível porque o dígito verificador não bate. Um número de telefone reconhecido como "(11) 99999-9999" é válido foneticamente, mas se a base de dados do usuário não tem esse número, algo erra. Eu uso validação em camadas. Primeira camada: regras matemáticas. CPF e CNPJ têm algoritmo de dígito verificador conhecido. É trivial validar. Segunda camada: regras de domínio. Números de telefone precisam começar com DDDs válidos. Valores monetários precisam estar dentro de faixas razoáveis para o contexto. Terceira camada: comparação com histórico. Se o usuário ditou um número ontem e dita o mesmo hoje, a probabilidade de erro cai drasticamente.
Os pontos cegos também merecem ser ditos. Ditado de numerais sofre com números decorridos — aqueles que são falados como sequência de dígitos em vez de valores completos. "Zero, zero, um, dois, três..." versus " cento e vinte e três". O sistema precisa entender qual convenção está sendo usada no momento. Não existe solução universal para isso. O melhor que eu vi foi um classificador leve treinado com exemplos de ambos os padrões, rodando antes do parser numérico. Ele classifica em tempo real e escolhe a estratégia de parsing adequada. Outro problema crônico é velocidade de fala. Números ditados acima de 4 dígitos por segundo têm queda brusca de acurácia. Eu medi isso em laboratório com 200 amostras: a 3 dph (dígitos por hora), acurácia média de 96%. A 7 dph, cai para 71%. Não adianta melhorar o reconhecedor. O gargalo é fisiológico — a articulação de números rápidos gera coarticulação fonética que nenhum modelo atual lida bem.
Se você está começando do zero, o caminho mais prático é usar uma API de speech-to-text com suporte a customização de gramática, como Speech-to-Text da AWS ou Google Cloud Speech. Configure grammar hints para os formatos numéricos do seu domínio, implemente validação pós-processamento e monitore os casos de erro rotineiramente. Em sistemas bem ajustados, o ditado de numerais atinge taxa de acerto superior a 95% para até 12 dígitos ditados em ritmo moderado. Não existe configuração que resolva tudo. Números com zeros à esquerda, sequências repetidas e dígitos finais idênticos continuam sendo problemáticos mesmo em sistemas profissionais. O que separa um sistema que funciona de um que não funciona é a quantidade de casos reais que você coleta e corrige antes de considerar o trabalho pronto.