Автоопределение постоянно ошибается: закрепите язык

Диктовка всё время попадает не в тот язык? Автоопределение мечется на двуязычной речи по своей природе. Закрепите язык один раз — и он останется закреплённым.

Teodor Deleanu10 июля 2026 г.Чтение: 7 мин.

Если вы диктуете больше чем на одном языке, вы этот сбой видели. Вы произносите фразу по-румынски, а расшифровка возвращается фонетически покорёженным английским — настоящие слова, но ни одно из них не ваше. Или язык переключается посреди фразы: первая половина на нужном языке, вторая — на том, на который, по мнению модели, вы перешли. Или, мой личный фаворит, каша из алфавитов — латиница с вкраплениями кириллицы, будто модель хеджировала ставки буква за буквой.

Это не претензия к одному продукту. Это предсказуемый режим отказа автоматического определения языка, включая настроенный на английский движок Keebye по умолчанию. Он бьёт по тем, кто говорит по-английски с акцентом, и по всем, кто переключается между языками в течение дня. Двуязычный разработчик, у которого Slack на польском, а сообщения коммитов на английском, даёт автоопределению ровно те смешанные сигналы, с которыми оно справляется хуже всего.

Вторая половина жалобы тише, но столь же реальна: когда настройка языка всё же есть, она обычно закопана. Три меню вглубь, за выбором движка, за переключателем, в названии которого язык вообще не упомянут. Если вы меняете язык двадцать раз в день, закопанная настройка — это фактически отсутствие настройки.

Я хочу объяснить, почему возникают эти метания, — на боевом опыте собственного продукта, потому что у Keebye эта проблема была раньше, чем появилось решение, — а затем показать, как выглядит настоящее решение.

Почему автоопределение мечется (и почему это не совсем баг)

Вот честная механика. Современные речевые модели определяют язык молча, как часть декодирования. Модель слушает, формирует внутреннюю догадку о том, какой язык она слышит, и декодирует под эту догадку. Когда звук чистый, без акцента и одноязычный, это работает так хорошо, что вы об этом не задумываетесь.

Теперь скормите ей настоящую речь. Акцент сдвигает гласные к фонемам другого языка. Во фразе три английских заимствования — а они есть в любом техническом разговоре. Сзади ребёнок, или вы говорите в микрофон ноутбука. Каждое из этих обстоятельств делает внутреннюю догадку модели менее уверенной, а неуверенная догадка может переключаться от кадра к кадру. Когда она переключается, вместе с ней переключается декодирование, и вы получаете расшифровку, меняющую язык посреди мысли.

Ключевой момент: в большинстве инструментов эту догадку ничто не якорит. Модель решает молча, для каждой фразы, а у вас нет способа её переопределить. Это не баг какого-то одного приложения — это и есть молчаливое автоопределение. Модель выносит суждение, которое вы не можете поправить.

Я знаю это близко, потому что у движка Keebye по умолчанию ровно такое свойство. Parakeet, наш настроенный на английский вариант по умолчанию, игнорирует любую подсказку о языке на уровне декодирования — вы не можете сказать ему, на чём сейчас заговорите. На чистом английском он превосходен, поэтому он и стоит по умолчанию. На нечётком звуке он может метаться между языками, как и всё остальное в категории. Я рассказываю это в первую очередь о собственном продукте, потому что решение имеет смысл только после того, как вы примете: проблема живёт в архитектуре, а не в чьей-то небрежности.

Что на самом деле делает закрепление языка

Решение в том, чтобы перестать просить модель угадывать. Keebye поставляется со вторым движком на устройстве — Canary 1B v2 от NVIDIA, квантованный в int8, — который покрывает ровно 25 языков: болгарский, хорватский, чешский, датский, нидерландский, английский, эстонский, финский, французский, немецкий, греческий, венгерский, итальянский, латышский, литовский, мальтийский, польский, португальский, румынский, словацкий, словенский, испанский, шведский, русский и украинский. В отличие от движка по умолчанию, Canary принимает указание языка и следует ему.

Keebye выставляет это как закрепление: явная настройка языка, передаваемая движку Canary для каждой фразы. Закрепите румынский — и декодер использует румынский вместо автоматического выбора языка. Распознавание всё ещё может ошибаться, особенно вокруг заимствований и на шумном звуке, но выбор языка больше не является непроверяемой догадкой.

Настройка читается на лету, для каждой диктовки. Измените её — и следующее удержание клавиши сработает уже с новым языком, без перезапуска приложения. Это важнее, чем звучит: управление языком гораздо полезнее, когда его переключение не прерывает работу.

А поскольку Canary работает на устройстве, как и всё остальное в Keebye, закрепление не стоит вам приватности. Модель весит около 1,3 ГБ, загружается один раз; после этого ваш румынский, ваш польский, ваш украинский никогда не покидают машину. (Почему мы вообще считаем локальную многоязычную диктовку важной — тема отдельной статьи: диктовка для разработчиков не должна быть только английской. Эта статья — её практическое продолжение: та отстаивает сами языки, эта — про то, как сделать их действительно пригодными к использованию.)

Два клика, а не три меню вглубь

Закрепление, до которого не дотянуться, — это закрепление, которым вы не будете пользоваться, поэтому переключатель живёт в строке меню. У значка Keebye есть меню «Dictation Language» с отобранным коротким списком из 11 языков: английский, румынский, французский, немецкий, испанский, итальянский, португальский, нидерландский, польский, русский, украинский. Два клика из любого приложения: клик по значку, клик по языку. Вы не открываете настройки и не покидаете окно, в котором работали.

Полный список из 25 языков живёт в настройках — для тех языков, что вне короткого списка. Но короткий список покрывает ежедневную реальность большинства двуязычной работы: вы пишете команде на одном языке, а клиенту или ИИ-агенту на другом, и переключение должно ничего не стоить.

Есть ещё одна опция, о которой стоит знать, потому что она полностью меняет то, как некоторые используют закрепление: переключатель перевода на английский. Говорите на своём языке — у курсора оказывается английский; тот же движок, то же исполнение на устройстве. Если ваш внутренний монолог идёт на румынском, а на выходе нужен английский (сообщения коммитов, промпты кодовому агенту, ответы международной команде), это схлопывает тот шаг перевода, который вы делали в голове. Я пользуюсь им чаще, чем ожидал.

Чего стоит закрепление

25 языков — это 25 языков. Облачные инструменты диктовки перечисляют куда больше, потому что отправка звука в большую серверную модель — дешёвый способ добавить языки. В этом настоящий компромисс работы на устройстве: модель, помещающаяся на ваш Mac, покрывает меньшую часть мира, чем модель, занимающая дата-центр. Если вашего языка нет в списке из 25, многоязычный движок Keebye сегодня вас не покрывает, и я предпочту это сказать, а не округлить вверх.

Закрепление значит закрепление. Это оборотная сторона детерминированности, и я хочу сказать прямо: если вы закрепите румынский, а потом заговорите по-английски, Keebye добросовестно раскодирует ваш английский как румынский, пока вы не переключитесь. Движок делает ровно то, что вы ему велели. Вся привлекательность автоопределения была в том, что об этом никогда не придётся думать, — закрепление меняет это удобство на предсказуемость. По моему опыту, обмен того стоит, потому что неверная догадка, которую вы не контролируете, хуже неверной настройки, которую вы поправите в два клика. Но это именно обмен, а не бесплатный обед.

В коротком списке 11 языков, а не 25. Если в вашу ежедневную пару входит, скажем, финский или греческий, за одной её половиной придётся идти в настройки. Отбор означает, что чей-то язык в быстрое меню не попал.

К чему это приводит жалобу

Жалоба уровня категории — «моя диктовка постоянно выходит не на том языке» — на самом деле жалоба на молчаливые решения. Модель угадала, догадка была неверной, и сказать ей иначе было невозможно. Любое исправление, которое сохраняет угадывание (лучшее определение, более длинные окна звука, пороги уверенности), лишь делает сбой более редким и более странным. Исправление, которое действительно закрывает жалобу, — это вернуть решение пользователю.

Если вы сейчас переживаете это с другим инструментом, наши страницы сравнения честны насчёт того, кому что подходит: и Keebye vs Superwhisper, и Keebye vs Wispr Flow разбирают в том числе языковой вопрос. Чтобы попробовать само закрепление, начните бесплатный пробный период ниже, переиграйте румынскую или польскую фразу из начала этой статьи и посмотрите, какая часть метаний шла от непроверяемой догадки, а не от вашего акцента.

Закрепите тот язык, которым пользуетесь на самом деле

Начните бесплатный пробный период и переиграйте один ответ на родном языке, который автоопределение раньше искорёжило.

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.

Читать дальше