AI-инжиниринг

Speech-to-Text: Whisper, Deepgram, Browser API - распознавание речи в production

Цели урока

  • Понять разницу между batch STT (Whisper) и streaming STT (Deepgram) и выбрать подходящий для задачи
  • Научиться транскрибировать аудио через OpenAI Whisper API с timestamps и субтитрами
  • Реализовать real-time транскрипцию через Deepgram WebSocket API с interim/final results
  • Построить NestJS endpoint для загрузки аудио с валидацией формата и размера
  • Оптимизировать точность STT через language hints, prompts, audio preprocessing и LLM post-processing

Whisper от OpenAI (сентябрь 2022) обогнал Google Speech по WER на большинстве языков - и вышел open-source. Это не просто API. Это конец эпохи когда STT стоил `0.024 USD/мин` и требовал enterprise-контракт. За несколько месяцев цена упала в 4 раза, качество выросло, а барьер входа исчез. Deepgram Nova-2 ответил: `0.0059 USD/мин`, 300ms latency, streaming из коробки. Рынок STT перекроился за год.

  • Telegram транскрибирует голосовые сообщения для Premium-пользователей - миллионы запросов в день через собственную STT-инфраструктуру
  • Zoom генерирует live captions и meeting summaries - streaming STT с speaker diarization в реальном времени
  • Otter.ai и Notion AI транскрибируют встречи с автоматическим summarization через LLM pipeline - batch Whisper + GPT-4o-mini пост-обработка
  • AssemblyAI строит на Whisper продукт с PII redaction, sentiment analysis, speaker labels - всё отдельные задачи поверх базовой транскрипции

От Dragon к Whisper: 30 лет распознавания речи

**1990-е**: Dragon NaturallySpeaking - первый массовый STT, `150 USD` за лицензию, требовал часы обучения на голос пользователя, работал только на настольных ПК. **2012**: Google Speech API - первый облачный STT, REST API, но платный и с ограничениями. **2016**: Google запускает публичный Speech-to-Text API - `0.024 USD/мин`, enterprise-tier. **2019-2021**: AWS Transcribe, Azure Speech - аналогичная цена, разные языки. **Сентябрь 2022**: OpenAI выпускает Whisper на GitHub (чекпоинт large-v3 выходит позже, в ноябре 2023). Apache 2.0. Лучший WER в классе. Бесплатно для self-hosted. Hosted API - `0.006/мин`. Рынок STT перестал быть enterprise-монополией за один день.

Предварительные знания

  • LLM API Integration: OpenAI, Anthropic, Open-Source Models

STT-ландшафт: от Whisper до облачных сервисов

2022 год. Google Speech-to-Text - лидер рынка, `0.024 USD` за минуту, enterprise-контракт для нормального WER. AWS Transcribe - `0.024 USD.` Microsoft Azure - аналогично. Барьер входа реальный: хочешь распознавание речи в продукте - плати или строй своё.

Сентябрь 2022. OpenAI публикует Whisper - и кладёт его на GitHub. Open-source, Apache 2.0. WER (word error rate) на большинстве языков лучше, чем у Google. И 0 долларов за лицензию. За несколько месяцев Whisper стал стандартом - не потому что маркетинг, а потому что в бенчмарках он побеждал.

ПровайдерМодельLatencyЦена за минутуStreaming
OpenAIWhisper large-v3Batch (2-10 сек)0.006/минНет
DeepgramNova-2Real-time (~300ms)0.0059/минДа (WebSocket)
Google CloudChirp 2Real-time (~500ms)0.012/минДа (gRPC)
AWS TranscribeCustomReal-time (~800ms)0.024/минДа (WebSocket)
AssemblyAIUniversal-2Batch или RT0.0065/минДа (WebSocket)
Whisper (self-hosted)large-v3Зависит от GPUТолько GPU costС доработками

Главный разрыв в таблице - не цена, а архитектура. Два принципиально разных подхода:

**Whisper - не API, а модель.** OpenAI Whisper - open-source модель, которую можно запустить локально на GPU. OpenAI Whisper API - hosted-версия на серверах OpenAI. Deepgram Nova-2, Google Chirp - собственные модели этих компаний, не связанные с Whisper.

Для голосового ассистента, который должен реагировать на речь в реальном времени (latency < 500ms), какой подход STT подходит?

OpenAI Whisper API: транскрипция и перевод

OpenAI Whisper API - самый простой способ добавить STT в приложение. Два endpoint-а: `/audio/transcriptions` (распознавание речи) и `/audio/translations` (перевод любого языка на английский). Поддерживаемые форматы: mp3, mp4, mpeg, mpga, m4a, wav, webm. Максимальный размер файла - 25 MB.

**SRT/VTT субтитры за один вызов.** Whisper API может вернуть готовые субтитры: `response_format: 'srt'` или `response_format: 'vtt'`. Не нужно парсить timestamps вручную - формат готов для использования в video-плеерах.

Аудиозапись часовой встречи (180 MB, mp3). Как транскрибировать через Whisper API?

Real-time STT: Deepgram streaming через WebSocket

Deepgram Nova-2 - специализированный STT-провайдер с WebSocket API для real-time транскрипции. Аудио отправляется непрерывным потоком, а текст возвращается с задержкой ~300ms. Ключевая особенность - interim results: предварительный текст, который обновляется по мере поступления аудио.

VAD (voice activity detection) - встроенный детектор речевой активности. Deepgram сам определяет, когда началась фраза и когда закончилась. Не нужно реализовывать паузодетекцию вручную - `utterance_end_ms` задаёт порог тишины для границы фразы.

**Interim vs Final results.** Interim results - предварительная транскрипция, которая обновляется с каждым чанком аудио. Использовать interim для отображения в UI (как live captions), но для обработки (поиск, сохранение, отправка LLM) - только final results. Иначе текст будет содержать дубли и ошибки.

В streaming STT (Deepgram), какие результаты следует использовать для отправки текста в LLM?

NestJS: endpoint для загрузки и транскрипции аудио

Production-ready audio endpoint должен: 1. принимать файлы через multipart/form-data 2. валидировать формат и размер 3. транскрибировать через STT API 4. возвращать результат. Для больших файлов - обработка через очередь с WebSocket-уведомлением о завершении.

**`toFile()` из openai SDK.** Whisper API принимает файл, а не Buffer. Функция `toFile()` из пакета `openai` конвертирует Buffer в объект, совместимый с API. Без неё придётся сохранять Buffer на диск и передавать `fs.createReadStream()`.

При загрузке аудио через multipart/form-data в NestJS, почему нельзя вручную указывать Content-Type на клиенте?

Повышение точности: language hints, prompts, пост-обработка

Whisper large-v3 даёт WER ~5% на чистой английской речи. Звучит отлично - до первой записи с реального митинга. Офисный шум, акцент, "NestJS" транскрибированный как "нест джей эс", mixed-language код-ревью где половина слов английские. WER легко прыгает до 15-25% без оптимизации.

Три рычага - и каждый бесплатный или почти бесплатный относительно стоимости самой транскрипции:

ОптимизацияЭффект на WERСтоимость
Language hint−10-15% ошибокБесплатно
Prompt с терминами−5-20% ошибок на domain-терминахБесплатно
Audio preprocessing−5-10% ошибок на шумных записяхCPU time
LLM post-processing−15-30% ошибок, пунктуация0.001-0.005 за запрос
Speaker diarizationРазделение спикеров (не точность)+0.01/мин

**WER (Word Error Rate)** - стандартная метрика качества STT. WER = (замены + вставки + удаления) / всего слов. Whisper large-v3 даёт WER ~5% на чистой английской речи, ~8-12% на русской. На реальных данных с шумом WER может быть 15-25% без оптимизации.

Что даёт наибольший прирост точности STT при распознавании технических митингов с доменной терминологией?

STT просто конвертирует речь в текст

Базовая транскрипция - это один слой. Punctuation restoration, speaker diarization, language detection, PII redaction, sentiment analysis - каждая из этих задач решается отдельно поверх raw transcript

Whisper возвращает текст без знаков препинания или с минимальными. Deepgram smart_format добавляет пунктуацию отдельным постпроцессингом. Speaker diarization (кто говорил) - отдельная ML-задача: AssemblyAI берёт за неё +`0.01/мин`. Language detection - ещё одна. VAD (voice activity detection) - ещё одна. Production voice pipeline - это стек из 5-7 отдельных компонентов, не один вызов API.

Итоги

  • Batch STT (Whisper API) - загрузка файла, ожидание 2-10 сек, высокая точность. Streaming STT (Deepgram Nova-2) - непрерывный поток аудио, текст за ~300ms
  • Whisper API: модель whisper-1, лимит 25 MB, форматы ответа json/srt/vtt, опции language и prompt для точности
  • Deepgram streaming: WebSocket-соединение, interim results для UI, final results для обработки, VAD для определения пауз
  • NestJS audio endpoint: FileInterceptor + Multer, валидация mimetype и размера, openai.toFile() для Buffer → File
  • Оптимизация точности: language hint (−10-15% WER), prompt с терминами, audio preprocessing (16kHz mono), LLM post-processing через gpt-4o-mini
  • WER (Word Error Rate) - метрика качества. Whisper: ~5% EN, ~10% RU на чистом аудио, 15-25% на шумных реальных данных
  • STT - не один компонент: punctuation restoration, speaker diarization, language detection, VAD - отдельные задачи

Вопросы для размышления

  • Почему streaming STT (Deepgram) стоит 0.0059 USD/мин, тогда как batch Whisper API - 0.006 USD/мин, хотя streaming технически сложнее? Что в этом парадоксально?
  • Speaker diarization (определение кто говорил) стоит +0.01/мин у AssemblyAI - это дороже самой транскрипции. Почему это отдельная сложная задача, а не часть базового STT?
  • Если Whisper large-v3 - open-source и лучший по WER, зачем платить Deepgram 0.0059/мин вместо self-hosted Whisper? Какие trade-offs?

Что дальше

Speech-to-Text - входная точка voice interface. Следующий шаг - обратное преобразование: Text-to-Speech для генерации голосовых ответов. Вместе STT и TTS образуют voice pipeline для AI-ассистентов.

  • Text-to-Speech: синтез речи — STT → обработка текста → TTS - полный voice pipeline для голосовых ассистентов
  • Multimodal AI — STT - один из multimodal inputs наряду с vision и документами
  • Real-time AI — Streaming STT + streaming LLM + streaming TTS = real-time voice conversation

Связанные уроки

  • aie-05-api-integration — STT-провайдеры используются через их API
  • aie-08-streaming — Потоковая транскрипция использует чанковый стриминг
  • aie-25-multimodal — Речь это один из входов мультимодальной системы
  • aie-43-realtime-ai — Потоковый STT питает реалтайм-голосовые пайплайны
  • dsp-20-audio-ai — Фронтенд STT опирается на цифровую обработку аудиосигналов
  • ml-30-rnn-lstm — Транскрипция последовательностей похожа на seq2seq моделирование
  • ml-29-cnn
Speech-to-Text: Whisper, Deepgram, Browser API - распознавание речи в production

0

1

Войти