Multilingual ASR на локальном железе: роутинг между моноязычными моделями | AiManual
AiManual Logo Ai / Manual.
01 Июн 2026 Инструмент

Маршрутизация между маломодельными ASR: real-time мультиязычность на локальном железе без облаков

Как объединение маленьких моделей для разных языков с умным роутером дает real-time ASR на edge-устройствах. Сравнение с Whisper, Qwen3-ASR, Parakeet.

Вы когда-нибудь пробовали запустить Whisper large-v3 на Raspberry Pi? Поздравляю, вы только что превратили малину в тостер — греется знатно, а транскрибация одной минуты аудио занимает полчаса. Альтернативы вроде Qwen3-ASR (52 языка в одной модели — звучит круто, но весит под 8 ГБ) тоже не подарок для периферии. А что если я скажу, что можно получить real-time мультиязычное распознавание на CPU с потреблением меньше 500 МБ RAM? И никаких облаков.

Речь о подходе, который я называю «роутер между маломодельными ASR». Вместо того чтобы кормить гигантскую модель всеми языками сразу, мы ставим маленькие моноязычные модели (по 50–200 МБ каждая) и быстрый классификатор языка, который решает, какую модель активировать. Звучит как гениальный хак? Так и есть. Но со своими подводными камнями.

Анатомия роутера: как это работает на практике

Схема простая, как грабли. Берем:

  • VAD (Voice Activity Detector) — например, Silero VAD v5.1 (он же быстрее, чем мысль). Режет аудио на чанки по 0.5–1 секунде.
  • Детектор языка — быстрый классификатор на основе эмбеддингов (типа fastText или специально обученный на Mel-спектрограммах). Если семпла меньше 0.3 — играем safe mode: запускаем крупную модель (Whisper tiny) или самую вероятную.
  • Роутер — он же диспетчер. По ID языка загружает соответствующую моноязычную модель (Vosk, Wav2Vec2 для английского, Silero для русского, кастомную для армянского и т.д.).
  • Сборщик — объединяет результаты, расставляет временные метки.
💡
Можно использовать Lemonade OmniRouter для универсальной маршрутизации между разными модальностями — он умеет переключать не только ASR, но и текст, и аудио.

Вот пример реализации роутера с Silero + fastText + Vosk (для английского и русского). Код не претендует на продакшен, но идею передает:

import torch
import fasttext
import vosk
import wsola

def detect_language(audio_chunk):
    model = fasttext.load_model('lid.176.ftz')
    predictions = model.predict(audio_to_text_representation(audio_chunk))
    return predictions[0][0].split('_')[-1]  # 'en' or 'ru'

def route_and_transcribe(chunk, lang):
    models = {
        'en': vosk.Model('model-en', lang='en'),
        'ru': vosk.Model('model-ru', lang='ru')
    }
    model = models[lang]
    rec = vosk.KaldiRecognizer(model, 16000)
    if rec.AcceptWaveform(chunk.tobytes()):
        return json.loads(rec.Result())['text']

Важный нюанс: fastText не предназначен для речи напрямую. В реальных проектах используют обученный на Mel-спектрограммах классификатор — например, SALM-энкодер отлично подходит как фичер-экстрактор.

Сравнение с монолитными монстрами

Давайте разберем, почему роутер из маленьких моделей выигрывает у тяжелых мультиязычных решений — и где он проигрывает.

Решение Размер Языки Задержка на CPU (RTF) Точность (WER, среднее по 6 языкам)
Whisper large-v3 3.1 ГБ 100+ 7.2 (i7-12700) 8.1%
Qwen3-ASR 7.8 ГБ 52 4.5 (нужен GPU) 9.3%
Parakeet (NVIDIA) 2.5 ГБ 5 (EN, ES, DE, FR, ZH) 1.2 (GPU) 7.8%
Роутер (набор 6 моделей) 750 МБ всего 6 (расширяемо) 0.8 (i7-12700, CPU) 10.2%

Да, точность роутера на 2-3% хуже, но задержка в 8 раз меньше при вдвое меньшем потреблении памяти. Для сквозного real-time (например, субтитры в Zoom) это критично. А если у вас конфиденциальность не шутка — облака под запретом, и роутер становится единственным вменяемым вариантом.

Проблема Code-Switching: когда роутер сходит с ума

Самая большая боль — смешанные языки в одной фразе («Сегодня я купил new car for my wife»). Детектор языка усредняет чанк и ошибается. Решения есть:

  • Байесовская затычка: запустить параллельно все модели и выбрать лучшее по score.
  • Sliding window: анализировать пересекающиеся куски и сшивать.
  • Трансформерный детектор: натренировать легкий классификатор на токенах из аудио (пример — LaBSE преобразованные в эмбеддинги для речи).

На практике code-switching редко встречается в диктовках, но голосовые помощники (Siri, Alexa) от него сильно страдают. Если ваша аудитория говорит на Spanglish — роутер не ваш выбор.

Кому это реально нужно?

  • Edge-устройства: Raspberry Pi 5 с 2 ГБ RAM — легко тянет 4 языка.
  • Локальные сервера в офлайне: переговорки с полной конфиденциальностью (юристы, врачи).
  • Real-time субтитры: для онлайн-митапов с поддержкой 5–10 языков.
  • Малобюджетные стартапы: нет денег на GPU в облаке — спасает локальный CPU.
💡
Для быстрого старта можно использовать готовые модели Vosk (поддерживают 35+ языков, каждая по 40–80 МБ) или тонко натренированные на основе Cohere Transcribe.

Прогноз: роутинг — будущее edge ASR

К 2028 году я прогнозирую, что 60% локальных ASR-систем будут использовать роутинг между маленькими моделями вместо монолитов. Причина — появление сверхбыстрых детекторов языка (на базе семантического роутинга с vLLM) и стандартизация интерфейсов (ONNX). Уже сейчас Qwen3-ASR пытается сделать гигантскую модель эффективной за счет дистилляции, но до компактности набора маленьких моделей ему далеко.

Не советую так делать, если не хотите:

  • Тратить время на калибровку детектора под конкретный акцент.
  • Бороться с джиттером при переключениях (модели грузятся в память не мгновенно).
  • Столкнуться с галлюцинациями на редких языках (если модель плохо обучена).

Но если ваш бюджет ограничен, а точность 90% устраивает — роутер даст вам real-time мультиязычность на любом «железе» старше Intel Core i5. Прямо сейчас.

Подписаться на канал