Реализация распознавания речи на нескольких языках (Multilingual STT)
Мультиязычный STT нужен там, где один и тот же сервис обрабатывает речь на разных языках: международные колл-центры, глобальные платформы, системы работающие в нескольких странах.
Стратегии мультиязычного распознавания
1. Один multilingual движок — Whisper поддерживает 99 языков в одной модели:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda")
# Автоопределение языка
segments, info = model.transcribe(audio, language=None)
detected_lang = info.language # ISO 639-1 код
print(f"Detected: {detected_lang} ({info.language_probability:.2f})")
2. Language-specific модели — отдельные модели для каждого языка, лучшее качество на каждом:
models = {
"ru": WhisperModel("large-v3", device="cuda"),
"en": WhisperModel("large-v3", device="cuda"),
"de": WhisperModel("large-v3", device="cuda"),
}
def transcribe_multilingual(audio, lang: str = None):
if lang is None:
lang = detect_language(audio)
return models.get(lang, models["en"]).transcribe(audio, language=lang)
3. Hybrid: определяем язык быстрой моделью (Whisper tiny или langid), потом передаём специализированной.
WER по языкам (Whisper large-v3)
| Язык | WER (чистое аудио) |
|---|---|
| Английский | 2.7% |
| Немецкий | 3.8% |
| Французский | 4.2% |
| Испанский | 3.1% |
| Русский | 7–10% |
| Арабский | 8–12% |
| Китайский | 5–7% |
Code-switching
Если в одной записи смешаны языки (русский с английскими техническими терминами):
# Whisper справляется со code-switching автоматически
# Для явного управления:
segments, _ = model.transcribe(
audio,
language=None, # автоопределение
task="transcribe", # не "translate"
condition_on_previous_text=True
)
Сроки: интеграция с auto-detection — 1–2 дня. Мультиязычная система с маршрутизацией — 1 неделя.







