A detecção automática erra sempre: fixe o seu idioma

O ditado sai no idioma errado? A detecção automática oscila em fala bilíngue por natureza. Fixe o seu idioma uma vez e ele fica fixado.

Teodor Deleanu10 de julho de 20268 min de leitura

Se você dita em mais de um idioma, já viu a falha. Você fala uma frase em romeno e a transcrição volta como inglês foneticamente estropiado — palavras reais, nenhuma delas sua. Ou ela vira no meio da frase: a primeira metade no idioma certo, a segunda metade em algo para o qual o modelo decidiu que você mudou. Ou, a minha favorita, uma sopa de alfabetos misturados — caracteres latinos com alguns cirílicos salpicados, como se o modelo estivesse dividindo as apostas letra por letra.

Isto não é uma queixa sobre um produto. É um modo de falha previsível da detecção automática de idioma, incluindo o padrão do Keebye ajustado para inglês. Atinge quem tem sotaque no inglês e qualquer pessoa que alterna de idioma ao longo do dia. Um desenvolvedor bilíngue cujo Slack é em polonês e cujas mensagens de commit são em inglês dá à detecção automática exatamente os sinais misturados que ela lida pior.

A segunda metade da queixa é mais silenciosa mas igualmente real: quando um ajuste de idioma existe, ele costuma estar enterrado. Três menus abaixo, atrás de um seletor de mecanismo, depois de um toggle cujo nome nem menciona idioma. Se você troca de idioma vinte vezes por dia, um ajuste enterrado é funcionalmente ajuste nenhum.

Quero explicar por que a oscilação acontece — usando a história de guerra do meu próprio produto, porque o Keebye teve esse problema antes de ter a solução — e depois mostrar como uma solução de verdade se parece.

Por que a detecção automática oscila (e por que não é exatamente um bug)

Aqui está a mecânica honesta. Modelos modernos de fala fazem identificação de idioma silenciosamente, como parte da decodificação. O modelo escuta, forma um palpite interno sobre qual idioma está ouvindo e decodifica contra esse palpite. Quando o áudio é limpo, sem sotaque e monolíngue, isso funciona tão bem que você nunca pensa a respeito.

Agora alimente-o com fala real. Um sotaque desloca as vogais em direção aos fonemas de outro idioma. Uma frase contém três empréstimos do inglês — toda conversa técnica contém. Tem uma criança ao fundo, ou você está no microfone do laptop. Cada um desses fatores deixa o palpite interno de idioma do modelo menos confiante, e um palpite de baixa confiança pode virar entre frames. Quando ele vira, a decodificação vira junto, e você recebe uma transcrição que muda de idioma no meio do pensamento.

A parte crucial: na maioria das ferramentas não há nada ancorando esse palpite. O modelo decide, silenciosamente, por enunciado, e você não tem como sobrescrever. Isso não é um bug de um app qualquer — é o que a detecção automática silenciosa é. Um modelo tomando uma decisão que você não pode corrigir.

Eu conheço isso intimamente porque o mecanismo padrão do Keebye tem exatamente essa propriedade. O Parakeet, o nosso padrão ajustado para inglês, ignora qualquer dica de idioma na camada de decodificação — você não pode dizer a ele o que está prestes a falar. Em inglês claro ele é excelente, e é por isso que é o padrão. Em áudio pouco claro ele pode oscilar entre idiomas como tudo mais na categoria. Estou contando isso sobre o meu próprio produto primeiro, porque a solução só faz sentido depois que você aceita que o problema mora na arquitetura, e não no desleixo de algum concorrente.

O que fixar um idioma faz de fato?

A solução é parar de pedir ao modelo que adivinhe. O Keebye traz um segundo mecanismo on-device — o Canary 1B v2 da NVIDIA, quantizado para int8 — que cobre exatamente 25 idiomas: alemão, búlgaro, croata, dinamarquês, eslovaco, esloveno, espanhol, estoniano, finlandês, francês, grego, holandês, húngaro, inglês, italiano, letão, lituano, maltês, polonês, português, romeno, russo, sueco, tcheco e ucraniano. Diferentemente do mecanismo padrão, o Canary aceita uma instrução de idioma e a respeita.

O Keebye expõe isso como um pin: um ajuste explícito de idioma passado ao mecanismo Canary a cada enunciado. Fixe romeno e o decodificador usa romeno em vez de fazer uma escolha automática de idioma. O reconhecimento ainda pode errar, especialmente em torno de empréstimos e áudio ruidoso, mas a escolha de idioma deixa de ser um palpite sem supervisão.

O ajuste é lido ao vivo, a cada ditado. Mude-o e o próximo segurar-para-ditar usa o novo idioma sem reiniciar o app. Isso importa mais do que parece: um controle de idioma é muito mais útil quando trocá-lo não interrompe o trabalho.

E porque o Canary roda on-device como tudo mais no Keebye, o pin não custa a você a história de privacidade. O modelo tem cerca de 1,3 GB, baixado uma vez; depois disso o seu romeno, o seu polonês, o seu ucraniano nunca saem da máquina. (Por que achamos que ditado multilíngue local importa é um post à parte — o ditado para desenvolvedores não deveria ser só em inglês. Este aqui é a sequência prática dele: aquele post defende os idiomas, este é sobre torná-los realmente usáveis.)

Dois cliques, não três menus abaixo

Um pin que você não alcança é um pin que você não vai usar, então a troca fica na bandeja. O ícone do Keebye na barra de menus tem um menu "Dictation Language" com uma lista curta e curada de 11 idiomas — inglês, romeno, francês, alemão, espanhol, italiano, português, holandês, polonês, russo e ucraniano. Dois cliques a partir de qualquer app: clique na bandeja, clique no idioma. Você não abre os Ajustes, você não sai da janela em que estava trabalhando.

A lista completa de 25 idiomas fica nos Ajustes, para os idiomas fora da lista curta. Mas a lista curta cobre a realidade diária da maior parte do trabalho bilíngue: você escreve para o seu time em um idioma e para um cliente ou um agente de IA em outro, e precisa que a troca não custe nada.

Existe mais uma opção que vale conhecer, porque muda por completo como algumas pessoas usam o pin: um toggle de traduzir para inglês. Fale o seu idioma, o inglês cai no cursor — mesmo mecanismo, mesma execução on-device. Se o seu monólogo interno roda em romeno mas a sua saída precisa ser em inglês (mensagens de commit, prompts para um agente de código, respostas a um time internacional), isso colapsa a etapa de tradução que você estava fazendo de cabeça. Eu uso mais do que esperava.

O que o pin custa a você

25 idiomas são 25 idiomas. Ferramentas de ditado na nuvem listam muito mais, porque enviar áudio para um modelo grande do lado do servidor é o jeito barato de adicionar idiomas. Essa é a troca real do on-device: um modelo que cabe no seu Mac cobre menos do mundo que um modelo que preenche um datacenter. Se o seu idioma não está na lista dos 25, o mecanismo multilíngue do Keebye não cobre você hoje, e prefiro dizer isso a arredondar para cima.

Um pin significa um pin. Este é o outro lado do determinismo, e quero ser claro: se você fixa romeno e depois fala inglês, o Keebye vai decodificar fielmente o seu inglês como romeno até você trocar. O mecanismo está fazendo exatamente o que você mandou. O apelo inteiro da detecção automática era que você nunca teria que pensar nisso — o pin troca essa conveniência por previsibilidade. Na minha experiência a troca vale a pena, porque um palpite errado que você não controla é pior que um ajuste errado que você conserta em dois cliques. Mas é uma troca, não almoço grátis.

A lista curta da bandeja tem 11 idiomas, não 25. Se o seu par diário inclui, digamos, finlandês ou grego, você vai passar pelos Ajustes para um dos lados. Curadoria significa que o idioma de alguém ficou de fora do menu rápido.

Onde isso deixa a queixa

A queixa no nível da categoria — "o meu ditado sai sempre no idioma errado" — é na verdade uma queixa sobre decisões silenciosas. O modelo adivinhou, o palpite estava errado, e não havia como dizer o contrário a ele. Toda solução que mantém a adivinhação (melhor detecção, janelas de áudio mais longas, limiares de confiança) apenas torna a falha mais rara e mais estranha. A solução que de fato encerra a queixa é devolver a decisão ao usuário.

Se você está vivendo isso agora com outra ferramenta, as nossas páginas de comparação são honestas sobre onde cada uma serve — Keebye vs Superwhisper e Keebye vs Wispr Flow cobrem a questão do idioma entre outras. Para experimentar o pin em si, comece o teste grátis abaixo, refaça a frase em romeno ou polonês do começo deste artigo e veja quanto da oscilação vinha de um palpite sem supervisão em vez do seu sotaque.

Fixe o idioma que você realmente usa

Comece o teste grátis e refaça uma resposta no seu idioma nativo que a detecção automática estropiou antes.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Continue lendo