Если вы строите свой сервис распознавания речи на русском, у вас три основных open-source кандидата. Все три — Apache/MIT/commercial-friendly лицензии, можно развернуть на своих серверах. Мы тестировали их при выборе движка для DeepScribe — делимся цифрами.
Word Error Rate — стандартная метрика. Меньше — лучше. WER 5% значит ~95% слов распознаны правильно.
| Модель | Новости (студия) | Интервью (микрофон) | Бизнес-встреча | Телефон (8 kHz) |
|---|---|---|---|---|
| WhisperX large-v3 | 5.2% | 7.8% | 9.4% | 14.1% |
| Faster-Whisper large-v3 | 5.3% | 7.9% | 9.5% | 14.2% |
| Whisper large-v3 (vanilla OpenAI) | 5.4% | 8.1% | 9.7% | 14.4% |
| Vosk (ru-0.42) | 12.4% | 15.8% | 18.6% | 11.2% |
Real-time factor (RTF) — сколько секунд обработки на 1 секунду аудио. RTF=0.5 значит часовое аудио обработается за 30 минут. Меньше — лучше.
| Модель | RTX 4090 (24 GB) | RTX 3060 (12 GB) | CPU AMD EPYC | Latency real-time stream |
|---|---|---|---|---|
| WhisperX large-v3 | 0.04 | 0.12 | 3.8 (не юзабельно) | — |
| Faster-Whisper large-v3 (int8) | 0.03 | 0.08 | 1.6 | ~3-5 сек chunk |
| Vosk (ru-0.42, 1.7 GB) | CPU only | CPU only | 0.4 | ~200ms |
Вывод по скорости: Faster-Whisper c квантизацией int8 — лучший баланс. WhisperX ~25× реалтайма на 4090 (RTF 0.04), значит час аудио обработается за 144 секунды чистого ASR-времени. Vosk — единственный кто умеет real-time stream на CPU без жертв в latency.
| Модель | VRAM (для GPU) | RAM (для CPU) | Размер на диске |
|---|---|---|---|
| WhisperX large-v3 | ~10 GB | ~16 GB | 2.9 GB |
| Faster-Whisper large-v3 (int8) | ~5 GB | ~8 GB | 1.5 GB |
| Whisper large-v3 (vanilla) | ~10 GB | ~16 GB | 2.9 GB |
| Vosk (ru-0.42) | — | ~2 GB | 1.7 GB |
Faster-Whisper в int8 экономит 50% VRAM по сравнению с vanilla Whisper при минимальной потере качества (WER +0.1-0.2%). На RTX 3060 12 GB это разница между «работает» и «OOM».
Разные модели по-разному ломаются на специфике русского:
import whisperx
import torch
device = "cuda"
audio = whisperx.load_audio("interview.mp3")
model = whisperx.load_model("large-v3", device, compute_type="float16")
# Распознавание
result = model.transcribe(audio, batch_size=16, language="ru")
# Word-level alignment
align_model, metadata = whisperx.load_align_model(language_code="ru", device=device)
result = whisperx.align(result["segments"], align_model, metadata, audio, device)
# Диаризация (PyAnnote)
diarize_model = whisperx.DiarizationPipeline(use_auth_token="HF_TOKEN", device=device)
diarize_segments = diarize_model(audio)
result = whisperx.assign_word_speakers(diarize_segments, result)
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
segments, info = model.transcribe(
"interview.mp3",
language="ru",
vad_filter=True,
word_timestamps=True,
)
for seg in segments:
print(f"[{seg.start:.2f} -> {seg.end:.2f}] {seg.text}")
from vosk import Model, KaldiRecognizer
import wave, json
model = Model("vosk-model-ru-0.42")
wf = wave.open("phone.wav", "rb")
rec = KaldiRecognizer(model, wf.getframerate())
while True:
data = wf.readframes(4000)
if not data:
break
if rec.AcceptWaveform(data):
print(json.loads(rec.Result())["text"])
После года тестов мы остановились на WhisperX large-v3: точность критична для нашей аудитории (юристы, журналисты, психологи), GPU у нас есть (RTX 5080 Mobile в текущем сетапе), real-time не нужен (мы делаем post-processing).
Поверх WhisperX мы добавили:
Финальная точность нашего пайплайна на русском — ~95-96% на чистой речи, ~88-92% на полевых интервью. Хороший компромисс между «open-source из коробки» и «полностью кастомное решение».
API DeepScribe — WhisperX + диаризация + полировка + саммари в одном HTTP-запросе. Демо — первые 2 минуты любого файла бесплатно без регистрации.