2000 часов аудиозаписей колл-центра — задача, с которой real-time ASR не справится: задержки растут, качество падает. Real-time системы рассчитаны на поток речи с низкой задержкой, но при пакетной загрузке сотен файлов они либо встают в очередь, либо теряют точность из-за неоптимального управления памятью. Batch STT решает проблему иначе: файлы попадают в очередь (Celery/SQS), параллельно обрабатываются на GPU с int8 квантизацией, на выходе транскрипт с точностью >95%. Мы реализуем под ключ такое решение — от простого скрипта до прод-пайплайна с мониторингом в Prometheus и дашбордом в Grafana. За 3–5 дней вы получаете систему, переваривающую сотни часов без участия инженера. Экономия по сравнению с ручной расшифровкой достигает 5 раз, а с облачными ASR-сервисами — до 70%. Вложение окупается в среднем за 2–3 месяца за счёт сокращения ручного труда. Стоимость рассчитывается индивидуально под ваш объём и требования.
Как batch STT решает проблему масштабирования?
Batch STT использует очередь (Celery или SQS) для асинхронной обработки. Это позволяет горизонтально масштабироваться: добавлять воркеры под нагрузкой, не меняя код. В отличие от real-time ASR, где каждый новый поток требует отдельного инстанса модели, batch-режим эффективно использует GPU за счёт группировки задач. Мы наблюдали ускорение в 10 раз при переходе от последовательной обработки к очереди с 8 воркерами на кластере. Оптимизация загрузки GPU достигается int8 квантизацией и нарезкой длинных файлов.
Что делать с шумными и низкокачественными записями?
Whisper large-v3 устойчив к шуму, но на сильно зашумленных записях (улица, заводской цех) точность падает. Мы применяем предобработку: нормализацию громкости, фильтр низких частот, VAD для удаления тишины. Для сложных случаев подключаем дополнительный audio enhancement — спектральное вычитание или модели Denoiser (RNNoise). На практике это повышает WER на 5–15%.
Почему int8 квантизация стала стандартом для продакшена?
На Faster-Whisper с compute_type="int8_float16" мы получаем 4-кратное ускорение на GPU при потере точности менее 1% (по данным LibriSpeech benchmark). Потребление памяти снижается вдвое, что позволяет на одной RTX 4090 обрабатывать до 4 потоков параллельно (batch size=4). Для критичных проектов включаем VAD-фильтр и beam search с 5 лучами.
Архитектура batch-пайплайна
Upload → S3/Local Storage → Queue (Celery/SQS) → Worker → STT → Post-Processing → Storage Ключевые решения:
- Нарезка длинных файлов на сегменты по 5–10 минут (улучшает точность)
- Параллельная обработка нескольких файлов
- Retry-логика для сбойных задач
- Хранение промежуточных результатов
Как настроить pipeline для оптимальной производительности?
Каждый воркер запускает модель с int8 квантизацией. При переполнении очереди автоматически поднимаются дополнительные воркеры через Kubernetes HPA. Мониторинг — Prometheus + метрики длины очереди, времени выполнения p99, загрузки GPU.
| Оборудование | Модель | Скорость |
|---|---|---|
| RTX 3080 | medium (int8) | 6–8x RT |
| RTX 4090 | large-v3 (int8) | 3–4x RT |
| A10G | large-v3 (int8) | 4–5x RT |
| CPU (16 cores) | medium | 0.3–0.5x RT |
1 час аудио на RTX 4090 с large-v3: ~15–20 минут обработки — в 3–4 раза быстрее реального времени.
Полный pipeline обработки
import os from pathlib import Path from faster_whisper import WhisperModel from celery import Celery import ffmpeg app = Celery('batch_stt', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1') model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16") def convert_to_wav(input_path: str) -> str: output_path = input_path.rsplit('.', 1)[0] + '_converted.wav' ffmpeg.input(input_path).output( output_path, ar=16000, ac=1, acodec='pcm_s16le' ).overwrite_output().run(quiet=True) return output_path @app.task(bind=True, max_retries=3, time_limit=3600) def process_audio_file(self, file_path: str, options: dict = None): options = options or {} try: wav_path = convert_to_wav(file_path) segments, info = model.transcribe( wav_path, language=options.get('language'), vad_filter=True, word_timestamps=options.get('word_timestamps', False), beam_size=5 ) result = { "file": file_path, "language": info.language, "language_probability": info.language_probability, "duration": info.duration, "segments": [] } for seg in segments: segment_data = { "start": round(seg.start, 3), "end": round(seg.end, 3), "text": seg.text.strip() } if options.get('word_timestamps'): segment_data["words"] = [ {"word": w.word, "start": w.start, "end": w.end, "probability": w.probability} for w in (seg.words or []) ] result["segments"].append(segment_data) os.unlink(wav_path) return result except Exception as exc: raise self.retry(exc=exc, countdown=60 * (self.request.retries + 1)) Обработка сбоев в пайплайне
Система автоматически повторяет упавшие задачи (max_retries=3) с экспоненциальной задержкой. Для критичных файлов настраиваем dead-letter очередь и алерты в Telegram/Slack. Все этапы логируются — от загрузки до выдачи результата.
Поддерживаемые форматы
| Формат | Конвертация |
|---|---|
| MP3, WAV, FLAC | Прозрачная — нормализуем до WAV 16kHz,16 бит, моно |
| M4A, AAC, OGG, OPUS | Через FFmpeg с пересэмплингом |
| MP4, MKV | Извлечение аудиодорожки, затем конвертация |
Как запустить batch STT на своих данных
- Установите зависимости:
pip install faster-whisper celery redis ffmpeg-python. - Запустите Redis и Celery worker.
- Загрузите файлы в указанную директорию или S3.
- Запустите скрипт отправки задач в очередь.
- Получите результаты в JSON или субтитрах (SRT).
Что входит в работу
- Скрипт для одиночных файлов — протестированный локально, готовый к запуску.
- Пайплайн с очередью — на Celery или SQS, с retry и логированием.
- API для загрузки и получения результатов — REST/gRPC, документация Swagger.
- Дашборд статусов — Grafana + дашборд с метриками очереди и точности.
- Интеграция с вашим хранилищем — S3, MinIO, локальная ФС.
- Обучение команды — 2 часа воркшопа по эксплуатации.
Сроки реализации
- Скрипт для одиночных файлов: 1 день
- Пайплайн с очередью и API: 3–5 дней
- Полная система с дашбордом статусов: 1 неделя
Оценим ваш проект: свяжитесь с нами, чтобы обсудить объём, требуемую точность и инфраструктуру. Закажите внедрение batch STT — получите консультацию инженера. Опыт — более 5 лет в ASR, свыше 30 успешных внедрений.







