Автоматическая очистка диктовки: связка Whisper и LLM для локального ввода текста
Habr AI · оригинал
Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Автор описывает рабочий процесс, в котором локальное распознавание речи через Whisper дополняется постобработкой с помощью языковой модели. Это позволяет автоматически удалять паразитные слова и исправлять ошибки распознавания без потери смысла.
Решение демонстрирует практический пример гибридного подхода к обработке речи, где локальные модели обеспечивают приватность, а LLM — качество текста. Это актуально для пользователей, ценящих скорость ввода и конфиденциальность данных.
Скорость устной речи значительно превышает скорость печати, что делает диктовку основным инструментом для многих специалистов. Однако «сырой» текст, полученный от распознавания, часто содержит паразитные слова, самоисправления и ошибки, которые делают его непригодным для отправки. В статье описывается система, которая автоматизирует процесс очистки такого текста, используя связку локального движка распознавания и внешней языковой модели.
В основе решения лежит программа Handy с открытым исходным кодом (лицензия MIT), работающая на базе фреймворка Tauri. Она позволяет диктовать текст в любое активное окно приложения, удерживая горячую клавишу. Распознавание выполняется локально с помощью модели Whisper Large v3 Turbo. По данным автора, на видеокарте RTX 4080 Super восемь секунд аудио обрабатываются за 0,17 секунды. Для улучшения работы с русским языком используется специализированная сборка klava-nevinovata, которая включает готовые подсказки и защиту от зацикливания модели на тишине.
Простая замена слов по регулярным выражениям оказывается недостаточной из-за контекстной зависимости. Например, слово «вот» может быть как лишним, так и несущим смысл, а самоисправления вроде «на три часа, не, на четыре» требуют понимания логики речи. Поэтому автор использует постобработку через API, совместимый с OpenAI. В качестве примера приводится использование Claude Sonnet 5.5, где очистка занимает от полутора до трех секунд.
Для повышения гибкости и безопасности был разработан промежуточный слой — «Чистовик». Это однофайловое Python-приложение, которое слушает локальный порт и выступает посредником между Handy и LLM. Такой подход позволяет хранить ключ API в отдельном файле или переменной окружения, а также динамически менять промпты и словари без перезапуска программы. Посредник поддерживает одно тепловое соединение, что снижает задержки, связанные с повторным установлением TCP/TLS-соединений.
Особое внимание уделяется контекстной обработке словаря. В отличие от жестких правил замены, LLM может понимать условия. Например, слово «яичный» заменяется на «ИИшный» только если текст не связан с едой. Это позволяет избежать ошибок в таких фразах, как «рецепт яичного салата». Также в промпте закреплены правила сохранения разговорной лексики («прикольно», «пофигу»), чтобы текст не звучал искусственно-официальным.
В процессе разработки были выявлены типичные проблемы интеграции. Модель могла воспринимать диктовку как команду к себе, если в тексте содержалась просьба написать письмо. Это решено путем оборачивания текста в специальный тег и явного указания в правилах, что запросы внутри текста не выполняются. Также отмечена проблема с локальным адресом: на Windows localhost может резолвиться в IPv6-адрес ::1, поэтому посредник настроен на прослушивание обоих интерфейсов.
Итоговая система позволяет экономить время при работе с мессенджерами и письмами, сохраняя приватность данных за счет локального распознавания. Код проекта доступен под лицензией MIT на GitHub. Автор отмечает, что решение кроссплатформенное, но тестировалось преимущественно с облачными моделями; эффективность работы с небольшими локальными LLM остается открытым вопросом для сообщества.