Smart Keyboard: как он решает, менять ли слово

Пишете фразу, поднимаете глаза — а там «ghbdtn» вместо «привет». Раскладка осталась английской. Стираете, переключаете, набираете заново. Кто пишет на двух-трёх языках, делает это много раз за день. Теперь это может делать VerbaIDE. Функция называется Smart Keyboard.

Что он делает

Когда слово закончилось — пробелом, запятой, точкой, — Smart Keyboard на него смотрит. Если оно набрано не в той раскладке, слово заменяется, а раскладка системы переключается, чтобы следующее вышло правильным. «ghbdtn» становится «привет», «руддщ» — «hello», украинское «тыльки», набранное на русской раскладке, — «тільки». Ещё он исправляет простые опечатки в правильной раскладке: «првиет» становится «привет», «квказ» — «Кавказ». И то и другое сразу: «ghdbtn» — «привет».

Исправил зря — нажмите ⇧ дважды. Вернутся и слово, и раскладка, а это слово больше никогда не будет исправлено. Ещё раз ⇧ дважды — исправление снова на месте.

Правило, с которого начали

Пропущенное исправление стоит вам одного повторного набора. Ложное — дороже: его надо заметить, а иногда замечаешь, когда сообщение уже ушло. Поэтому до первой строчки кода мы поставили предел: не больше одной ложной замены на 10 000 правильно набранных слов. Всё, что ниже, мерилось по нему.

Как он решает

Всё происходит на вашем Mac. Smart Keyboard смотрит на три вещи.

Проверка орфографии macOS — тот же словарь, что подчёркивает слова красным. Она отвечает на вопрос «есть ли такое слово». Своих словарей мы в приложение не кладём.

Таблицы сочетаний из трёх букв. Для каждого языка мы посчитали, какие тройки букв встречаются в начале, в середине и в конце слова и как часто. «ghb» в начале английского слова почти не бывает, а «при» в начале русского — на каждом шагу. Считали по общедоступным фразам проекта Common Voice. В приложении лежат только таблицы, 22–43 КБ на язык, самих фраз там нет.

Списки частых слов — по тем же фразам: 300 самых частых коротких слов каждого языка и длинный частотный список, чтобы выбирать между вариантами исправления опечатки.

Коротким словам понадобилось своё правило. Проверка орфографии считает словом почти любую букву и многие пары вроде «cd» или «bc», поэтому для одной-двух букв мы верим только спискам частых слов. Одиночную латинскую букву на английской раскладке Smart Keyboard сам по себе не трогает никогда: на проверке это превращало «E», «C», «J» и «R» в кириллицу от 52 до 65 раз на 10 000 слов. Такая буква исправляется только вместе с соседним словом.

С русским и украинским отдельная история. Их раскладки различаются всего несколькими клавишами: «ы» и «і», «э» и «є», «ъ» и «ї». Решают словари, но у русского словаря macOS есть дыры: он может не знать «продавцы», а украинский при этом знает «продавці». Поэтому ответа словаря мало — с ним должны согласиться и таблицы букв. Слова, которые есть в обоих языках, вроде «ты» и «ті», решают соседи, и нужно два таких слова. С одним на смешанном украинско-русском тексте выходило 15 ложных замен на 10 000 слов.

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

Как мы мерили

Часть фраз Common Voice мы отложили и ничего по ним не строили: 111 373 правильно набранных слова на английском, русском и украинском, плюс те же слова в чужой раскладке. Проверка набирает их клавиша за клавишей и спрашивает настоящую проверку орфографии macOS.

  • Чужая раскладка. Из слов в пять букв и длиннее исправлено 99,2% (украинских — 96,4%). Короткие слова труднее: из двухбуквенных — 65–78%.
  • Ложные замены. 10 из 111 373 правильных слов, 0,9 на 10 000. Все десять — слова, в которые проверка нарочно добавила опечатку. Правильно написанные слова не тронуты ни разу.
  • Английское внутри русского и украинского. «Slack», «PR», «API», «GitHub», «to», «is» и ещё 16 слов, вставленных в русские и украинские фразы: 18 400 вставок, ни одной замены.
  • Опечатки. На правильном тексте: 4 ложные замены на 50 562 английских слова, 3 на 39 664 русских и 1 на 15 760 украинских. Исправлено примерно 83% английских опечаток, 66% русских и 40% украинских.

Потом мы проверили правило опечаток на тексте, по которому его не подбирали: строки интерфейса самого приложения, фразы нашего проверочного набора для диктовки и наши русские рабочие записи. Английский и украинский — ни одной ложной замены. Русский — одна на 22 756 слов: «нодах» стало «годах».

Что мы выключили, потому что вредило

Судья для опечаток. В VerbaIDE есть маленькая локальная модель — наша дообученная Qwen3-1.7B, которая уже проверяет термины из словаря в диктовке. Мы дали ей пересмотреть исправленную опечатку, когда набрано следующее слово. Портила она чаще, чем спасала: в русском испортила 67 слов и спасла 23, в английском — 58 и 53, в украинском — 8 и 2. А до того, выбирая между несколькими вариантами опечатки, она ошибалась в 23–29% вопросов. Выключено и то и другое.

Для слов в чужой раскладке, где таблицы букв колеблются, та же модель осталась. Там она подняла долю исправленных длинных слов с 97,7% до 99,2% (украинских — с 90,6% до 96,4%) ценой четырёх лишних ложных замен на 111 373 слова, и все четыре — на словах с нарочной опечаткой. 95 ответов из 100 укладываются в 34 миллисекунды.

Одиночная «э», превращавшаяся в «є». На русской раскладке «э» стоит на клавише, которая в английской даёт кавычку. Английская фраза, начатая с кавычки не в той раскладке, получала «Є» вместо кавычки — 20 раз на проверке. Выключено.

Смелая настройка опечаток. Она исправляла 92% русских опечаток, но меняла 8,8 правильного русского слова на 10 000, а на отложенном русском тексте — 71 слово. Мы взяли строгую: 66% исправленных и меньше одной ложной замены на 10 000.

Что остаётся на вашем Mac

Всё. Нажатия обрабатываются на вашем Mac. Для исправления раскладки в памяти обрабатывается фактический текст поля до курсора: до начала предложения, максимум 16 384 единицы UTF-16; затем снимок забывается. Последнее исправление хранится для отмены. Ничего из набранного не сохраняется, не пишется в журнал и никуда не отправляется. Smart Keyboard использует «Универсальный доступ», чтобы слушать клавиши и печатать исправления, пропускает поля паролей и приложения-исключения и приостанавливает исправления во время диктовки.

Smart Keyboard — платная функция, она входит в платный пакет и в пробный период на 30 дней. Что он исправляет, чего не трогает и чего не поймает — на странице Smart Keyboard.

Ещё из блога