Модель распознавания речи, опубликованная как исследовательский чекпоинт, — это обычно папка с весами PyTorch, скрипт обучения и заметка о том, на какой GPU она обучалась. Этого достаточно, чтобы воспроизвести оценку бенчмарка. Этого недостаточно, чтобы поставить на Raspberry Pi, телефон или ноутбук без подключения к интернету. Путь от одного к другому — это работа по конвертации, и именно она по большей части определяет, доберётся ли открытая речевая модель когда-либо до реального устройства.
Мы занимаемся этой работой по конвертации профессионально: берём открытые модели ASR (автоматическое распознавание речи, то есть речь-в-текст) и TTS (синтез речи) и превращаем их в файлы, которые работают офлайн, на обычных CPU или встроенных ускорителях, без необходимости в стеке обучения на Python во время выполнения. Большинство результатов публикуются под организацией OpenVoiceOS на Hugging Face, а не под нашей собственной, и этот выбор осознан — почему, ниже.
Почему чекпоинт — это ещё не развёртывание
Чекпоинт PyTorch или NeMo ожидает конкретное Python-окружение: нужные версии библиотек, обычно GPU, и сам фреймворк обучения только для того, чтобы выполнить вывод. Этот стек велик, постоянно меняется, и это не то, что вы хотите поставлять внутри голосового ассистента, который должен загружаться на маленькой плате.
Экспорт модели решает это, конвертируя обученную сеть в формат, предназначенный исключительно для вывода — без кода обучения, без autograd, без привязки к фреймворку. Мы нацеливаемся на три таких формата, каждый для своей формы развёртывания:
- ONNX (Open Neural Network Exchange) — это
портируемый формат графа, который может исполнять широкий спектр движков, на
CPU или GPU, на Linux, Windows, macOS или встроенных платах. Это наша цель по
умолчанию, потому что она работает везде, где работает
onnxruntime, а это почти везде. - CoreML — это формат вывода Apple на устройстве. Пакет CoreML работает на Neural Engine или GPU Mac или iPhone вместо CPU, что важно для распознавания речи в реальном времени на оборудовании Apple.
- GGUF — это формат, используемый
llama.cppи его экосистемой, созданный для квантизованных моделей в стиле LLM, которым нужно работать с небольшим объёмом памяти. Мы используем его для более новых, основанных на трансформерах речевых моделей, которые архитектурно ближе к языковым моделям, чем к классической акустической модели.
Выбор правильной цели не косметичен. Модель ASR на основе conformer (архитектура,
стоящая за большинством современных распознавателей речи, сочетающая свёртку и
самовнимание) конвертируется чисто в ONNX или CoreML. Речевая модель на основе
Qwen3, под капотом, — это языковая модель, так что она естественно вписывается
вместо этого в конвейер GGUF/llama.cpp.
Чего стоит квантизация и что она даёт
Квантизация означает хранение весов модели с меньшим числом бит на число — 16-бит, или 8-бит, или 4-бит вместо 32-битных чисел с плавающей точкой, на которых модель обучалась. Меньшие числа означают меньший файл и, на подходящем оборудовании, более быстрый вывод, потому что нужно перемещать меньше данных и выполнять более дешёвую арифметику.
Мы можем назвать точную цифру этого компромисса для одной реальной модели.
nvidia/parakeet-tdt-0.6b-v3 — это модель ASR на 0.6 миллиарда параметров. Её
компонент mel-энкодера CoreML занимает 1132.5 МБ при полной точности; палетизация
до 4 бит уменьшает его до 284.2 МБ — сокращение в 3.99 раза, почти точно совпадающее
для всех трёх её субкомпонентов (энкодер, декодер, сеть совместных решений). По
всему пакету неквантизованный экспорт CoreML — это около 1.14 ГБ; 4-битная версия —
около 293 МБ. Это разница между моделью, которая комфортно помещается на телефон, и
той, которая едва помещается.
Цена — точность: меньше бит на вес означает меньше точности, и после определённой
точки это проявляется как больше ошибок распознавания. Стандартный способ измерить
это для ASR — WER (частота ошибок по словам — процент слов, которые модель
распознаёт неверно по сравнению с правильным транскриптом). Именно поэтому мы
публикуем несколько уровней квантизации одной и той же модели бок о бок — 4-бит,
6-бит, 8-бит (int8) и fp16 — вместо того чтобы выбрать один и надеяться, что он
достаточно хорош для каждого устройства. Телефон и десктоп могут позволить себе
разные точки на этой кривой.
Проблема валидации
Конвертация, которая тихо производит худший результат, опаснее, чем отсутствие конвертации вообще, потому что в ней ничто не выглядит сломанным — она загружается, она работает, она просто распознаёт речь чуть хуже или намного хуже на языке, которым вы лично не владеете и не можете проверить на слух. Единственный способ поймать это — сравнить результат экспортированной модели с исходной референсной реализацией на реальном аудио, для каждого языка и каждого уровня квантизации, перед публикацией.
Это обязательное условие для любой конвертации, которую мы поставляем: прогнать одно и то же аудио через исходную модель и конвертированную модель и подтвердить, что они согласуются. Это не эффектный шаг, но пропустить его — вот как «поддерживаемый язык» тихо перестаёт работать.
Почему модели живут под OpenVoiceOS, а не под нами
Экспорт моделей — это возможность компании: дайте нам чекпоинт и целевое устройство, и мы заставим его работать офлайн, проверенно, на уровне квантизации, подходящем для вашего оборудования. Но конвертированные модели, которые мы производим из открытых, не заказанных чекпоинтов, идут в OpenVoiceOS, открытую платформу голосовых ассистентов, для запуска на которой эти модели и построены, — а не в наше собственное пространство имён.
Причина проста: OpenVoiceOS — это то место, где модели используются.
Конвертированная модель, лежащая в аккаунте компании, — приятный артефакт. Та же
модель, опубликованная там, где ovos-stt-plugin-onnx-asr,
ovos-stt-plugin-coreml
или ovos-stt-plugin-rover
могут найти её по имени, — это язык, на котором реальный ассистент теперь может
говорить или который может понимать. Публикация под собственной организацией
платформы — вот что превращает конвертацию в поддерживаемую функциональность
вместо исследовательского курьёза, и именно так мы обеспечиваем, чтобы выполнение
этой работы один раз приносило пользу каждой инсталляции OpenVoiceOS, а не только
заказчику, который об этом попросил.
Чтобы быть ясными об атрибуции: мы не обучаем эти акустические модели с нуля и не претендуем на это. Лежащие в основе исследования — модели Parakeet и Conformer от NVIDIA, модели IndicConformer от AI4Bharat для индийских языков, модели университетов и государственных институтов, такие как галисийский Proxecto Nós или модели Conformer баскского центра HiTZ, и независимые усилия по конвертации моделей для африканских языков и языков меньшинств — принадлежат командам, которые их обучили. Мы добавляем конвертацию, квантизацию, проверку корректности относительно оригинала и подключение плагина, которое позволяет ассистенту загрузить результат по имени.
Масштаб этой работы по конвертации, если считать напрямую по опубликованному: свыше девяноста вариантов ASR Parakeet (по размерам, языкам и уровням квантизации), экспортированных в ONNX и CoreML; более тридцати моделей NVIDIA Conformer; двадцать две модели AI4Bharat IndicConformer, покрывающие малоресурсные индийские языки; двадцать две модели wav2vec2 для языков, включая шведский, исландский, фарерский, финский и обе письменные формы норвежского; девять моделей Conformer для баскского и галисийского; и независимо конвертированные модели Whisper и wav2vec2, покрывающие африканские и креольские языки, такие как шона, зулу, коса, малагасийский, гаитянский креольский и кабильский. Считая только подтверждённые конвертации ASR по отдельным языковым кодам, это как минимум 74 разных языка с доступным сегодня офлайн, квантизованным распознавателем речи — не считая отдельного каталога голосов TTS, экспортированных для таких языков, как баскский, арагонский, астурийский, галисийский, окситанский и арабский.
Если у вашего языка или устройства сегодня нет ничего офлайн
У большинства языков никогда не появляется коммерческий офлайн-вариант речи, потому что рынок одного этого языка не оправдывает создание вендором отдельного продукта. Паттерн выше — взять существующий открытый чекпоинт, конвертировать его в формат, работающий на оборудовании, которое у вас реально есть, квантизировать, чтобы он поместился, проверить относительно оригинала и подключить в плагин — не зависит от размера рынка. Он зависит от наличия открытого чекпоинта, с которого можно начать, а это всё чаще нормальный случай.
Если у вас есть речевая модель, которая работает только на GPU для обучения, или устройство, у которого сейчас нет офлайн-поддержки речи на его языке, свяжитесь с нами или посмотрите, как эта работа выглядит от начала до конца, на странице наших услуг.