La detección automática sigue fallando: fija tu idioma

¿El dictado sigue saliendo en el idioma equivocado? La detección automática oscila con el habla bilingüe por diseño. Fija el idioma una vez y queda fijado.

Teodor Deleanu10 de julio de 20268 min de lectura

Si dictas en más de un idioma, has visto el fallo. Dices una frase en rumano y la transcripción vuelve como inglés fonéticamente destrozado: palabras reales, ninguna de ellas tuya. O cambia a media frase: la primera mitad en el idioma correcto, la segunda en algo a lo que el modelo decidió que te habías cambiado. O, mi favorita personal, sopa de alfabetos mezclados — caracteres latinos con unos cuantos cirílicos salpicados, como si el modelo cubriera sus apuestas letra a letra.

Esto no es una queja sobre un producto. Es un modo de fallo predecible de la detección automática de idioma, incluido el motor por defecto de Keebye afinado para inglés. Afecta a quienes hablan inglés con acento y a cualquiera que cambie de idioma a lo largo del día. Un desarrollador bilingüe cuyo Slack está en polaco y cuyos mensajes de commit están en inglés le da a la detección automática exactamente las señales mezcladas que peor maneja.

La segunda mitad de la queja es más silenciosa pero igual de real: cuando existe un ajuste de idioma, a menudo está enterrado. Tres menús adentro, detrás de un selector de motor, pasado un interruptor cuyo nombre ni siquiera menciona el idioma. Si cambias de idioma veinte veces al día, un ajuste enterrado es funcionalmente ningún ajuste.

Quiero explicar por qué ocurre la oscilación — usando la batallita de mi propio producto, porque Keebye tuvo este problema antes de tener la solución — y luego mostrar qué aspecto tiene una solución de verdad.

Por qué oscila la detección automática (y por qué no es exactamente un bug)

Aquí va la mecánica honesta. Los modelos de voz modernos identifican el idioma en silencio, como parte de la decodificación. El modelo escucha, forma una hipótesis interna sobre qué idioma está oyendo y decodifica contra esa hipótesis. Cuando el audio es limpio, sin acento y monolingüe, esto funciona tan bien que nunca piensas en ello.

Ahora dale habla real. Un acento desplaza las vocales hacia los fonemas de otro idioma. Una frase contiene tres anglicismos — toda conversación técnica los tiene. Hay un niño de fondo, o estás con el micro del portátil. Cada una de estas cosas hace que la hipótesis interna de idioma del modelo sea menos segura, y una hipótesis poco segura puede cambiar entre frames. Cuando cambia, la decodificación cambia con ella, y obtienes una transcripción que cambia de idioma a mitad de pensamiento.

La parte crucial: en la mayoría de herramientas no hay nada anclando esa hipótesis. El modelo decide, en silencio, por locución, y tú no tienes forma de anularlo. Eso no es un bug de una app concreta — es lo que es la detección automática silenciosa. Un modelo tomando una decisión que no puedes corregir.

Lo conozco íntimamente porque el motor por defecto de Keebye tiene exactamente esta propiedad. Parakeet, nuestro predeterminado afinado para inglés, ignora cualquier pista de idioma en la capa de decodificación — no puedes decirle qué vas a hablar. Con inglés claro es excelente, por eso es el predeterminado. Con audio poco claro puede oscilar entre idiomas como todo lo demás en la categoría. Te cuento esto de mi propio producto primero, porque la solución solo tiene sentido una vez aceptas que el problema vive en la arquitectura, no en la chapuza de algún competidor.

¿Qué hace realmente fijar un idioma?

La solución es dejar de pedirle al modelo que adivine. Keebye incluye un segundo motor on-device — el Canary 1B v2 de NVIDIA, cuantizado a int8 — que cubre exactamente 25 idiomas: alemán, búlgaro, checo, croata, danés, eslovaco, esloveno, español, estonio, finés, francés, griego, húngaro, inglés, italiano, letón, lituano, maltés, neerlandés, polaco, portugués, rumano, ruso, sueco y ucraniano. A diferencia del motor por defecto, Canary acepta una instrucción de idioma y la respeta.

Keebye expone eso como una fijación: un ajuste explícito de idioma que se pasa al motor Canary en cada locución. Fija rumano y el decodificador usa rumano en lugar de tomar una decisión automática de idioma. El reconocimiento aún puede equivocarse, sobre todo con préstamos lingüísticos y audio con ruido, pero la elección de idioma ya no es una conjetura sin control.

El ajuste se lee en vivo, en cada dictado. Cámbialo y el siguiente mantener-pulsado-para-dictar usa el nuevo idioma sin reiniciar la app. Eso importa más de lo que suena: un control de idioma es mucho más útil cuando cambiarlo no interrumpe el trabajo.

Y como Canary se ejecuta on-device igual que todo lo demás en Keebye, la fijación no te cuesta la historia de privacidad. El modelo ocupa unos 1,3 GB, se descarga una vez; después de eso tu rumano, tu polaco, tu ucraniano nunca salen de la máquina. (Por qué creemos que el dictado multilingüe local importa siquiera es un post aparte — el dictado para desarrolladores no debería ser solo en inglés. Este es su secuela práctica: aquel post defiende los idiomas, este va de hacerlos realmente usables.)

Dos clics, no tres menús de profundidad

Una fijación a la que no puedes llegar es una fijación que no vas a usar, así que el cambio vive en la bandeja. El icono de la barra de menús de Keebye tiene un menú «Idioma de dictado» con una lista corta y curada de 11 idiomas: inglés, rumano, francés, alemán, español, italiano, portugués, neerlandés, polaco, ruso y ucraniano. Dos clics desde cualquier app: clic en la bandeja, clic en el idioma. No abres Ajustes, no sales de la ventana en la que estabas trabajando.

La lista completa de 25 idiomas vive en Ajustes para los idiomas fuera de la lista corta. Pero la lista corta cubre la realidad diaria de la mayoría del trabajo bilingüe: escribes a tu equipo en un idioma y a un cliente o a un agente de IA en otro, y necesitas que el cambio no cueste nada.

Hay otra opción que merece la pena conocer, porque cambia por completo cómo algunas personas usan la fijación: un interruptor de traducir a inglés. Hablas en tu idioma, el inglés aterriza en el cursor — mismo motor, misma ejecución on-device. Si tu monólogo interior corre en rumano pero tu salida tiene que ser inglés (mensajes de commit, prompts a un agente de programación, respuestas a un equipo internacional), esto colapsa el paso de traducción que hacías en tu cabeza. Yo lo uso más de lo que esperaba.

Qué te cuesta la fijación

25 idiomas son 25 idiomas. Las herramientas de dictado en la nube listan muchos más, porque enviar audio a un modelo grande en servidor es la forma barata de añadir idiomas. Ese es el trade-off real de lo on-device: un modelo que cabe en tu Mac cubre menos mundo que un modelo que llena un centro de datos. Si tu idioma no está en la lista de 25, el motor multilingüe de Keebye no te cubre hoy, y prefiero decirlo a redondear al alza.

Una fijación significa una fijación. Esta es la otra cara del determinismo, y quiero ser claro: si fijas rumano y luego hablas inglés, Keebye decodificará fielmente mal tu inglés como rumano hasta que cambies. El motor está haciendo exactamente lo que le dijiste. Todo el atractivo de la detección automática era que nunca tendrías que pensar en esto — la fijación cambia esa comodidad por previsibilidad. En mi experiencia el cambio merece la pena, porque una hipótesis errónea que no puedes controlar es peor que un ajuste erróneo que puedes arreglar en dos clics. Pero es un intercambio, no un almuerzo gratis.

La lista corta de la bandeja son 11 idiomas, no 25. Si tu pareja de idiomas diaria incluye, digamos, finés o griego, vas a pasar por Ajustes para uno de los dos lados. Curar significa que el idioma de alguien no entró en el menú rápido.

Dónde deja esto la queja

La queja a nivel de categoría — «mi dictado sigue saliendo en el idioma equivocado» — es en realidad una queja sobre decisiones silenciosas. El modelo adivinó, la conjetura fue errónea y no había forma de decirle otra cosa. Toda solución que mantiene la conjetura (mejor detección, ventanas de audio más largas, umbrales de confianza) solo hace el fallo más raro y más extraño. La solución que de verdad acaba con la queja es devolverle la decisión al usuario.

Si ahora mismo estás viviendo esto con otra herramienta, nuestras páginas de comparación son honestas sobre dónde encaja cada una — Keebye vs Superwhisper y Keebye vs Wispr Flow cubren ambas la cuestión del idioma, entre otras. Para probar la fijación en sí, empieza tu prueba gratuita abajo, repite la frase en rumano o en polaco del principio de este artículo y comprueba cuánta de la oscilación venía de una conjetura sin control y no de tu acento.

Fija el idioma que usas de verdad

Empieza tu prueba gratuita y repite una respuesta en tu idioma nativo que la detección automática destrozó 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.

Sigue leyendo