Справочник3 сентября 2026 г.·обновлено 3 сентября 2026 г.

Whisper и распознавание речи в рабочем контуре

Как из записи звонка получается текст с таймкодами: окна по 30 секунд, VAD, чанки с перекрытием, словарь терминов — и почему на тишине модель дописывает фразы, которых не было.

Что это решает

Час записи созвона стоит часа чужого внимания, и поэтому архив звонков никто не слушает. Whisper переводит записи встреч, звонков и голосовых сообщений в текст с таймкодами, включая русский, без ручной расшифровки и без отправки каждой минуты на биржу фрилансеров. Текст дальше ищется, режется на цитаты, превращается в резюме и задачи. Отдельная выгода достаётся архиву: записи, которые лежали годами и не читались, за ночь становятся поисковым индексом.

Как устроено

Модель

Аудио приводится к 16 кГц и одному каналу, режется на окна фиксированной длины по тридцать секунд, каждое окно превращается в лог-мел-спектрограмму — картинку из частот и времени. Энкодер сжимает её в последовательность внутренних представлений, декодер авторегрессивно выдаёт токены текста, слово за словом.

Кроме слов декодер предсказывает служебные токены: какой язык звучит, какая задача решается (расшифровка на языке оригинала или перевод), нужны ли метки времени. Из этой конструкции растут два свойства. Язык определяется автоматически по первым секундам, и на музыкальной заставке в начале записи определяется неверно. Перевод модель умеет только в английский, обратное направление она не делает.

Авторегрессивный декодер объясняет и главный дефект: когда во входном окне ничего осмысленного нет, модель всё равно продолжает генерировать текст. Так появляются вежливые фразы и обрывки титров, которых в записи не было.

Размеры и реализации

Линейка идёт от tiny до large: чем крупнее, тем точнее и медленнее, и тем больше нужно памяти. Реализаций несколько, и выбор между ними влияет на стоимость эксплуатации сильнее, чем выбор размера:

  • оригинальная реализация на PyTorch — эталон поведения, самая прожорливая;
  • faster-whisper на движке CTranslate2 — заметно экономнее по памяти и быстрее при тех же весах;
  • whisper.cpp — работает на процессоре и на Apple Silicon, удобна для ноутбука и для сервера без видеокарты;
  • облачный эндпоинт — разворачивать нечего, но файл уезжает наружу, у запроса есть предел на размер, и длинные записи всё равно приходится резать.

Рабочий контур

Шаги, из которых собирается обработка, одинаковы почти в любом продукте:

  1. Приём файла и нормализация: ffmpeg -i call.m4a -ac 1 -ar 16000 -c:a pcm_s16le call.wav. Один канал, 16 кГц, без экзотических кодеков.
  2. Детектор речи (VAD) вырезает тишину и делит запись на реплики. Этот шаг убирает большую часть выдуманного текста ещё до модели.
  3. Очередь заданий. Распознавание длится минуты, синхронный HTTP-запрос столько не живёт.
  4. Распознавание чанками с перекрытием и сборка транскрипта с таймкодами.
  5. Постобработка: замена терминов по словарю, приведение названий и артикулов к принятому написанию.
  6. Сохранение в базу и поисковый индекс, ссылка на позицию в аудио.
  7. Языковая модель поверх текста: резюме, решения, задачи, темы обращения.

Что подкручивают

  • Подсказка в начале (initial_prompt): список терминов, названий продуктов, фамилий, которые встретятся. Самый дешёвый способ поднять качество на доменной лексике.
  • Явное указание языка, когда язык известен заранее. Снимает риск ошибочной автодетекции.
  • Откат по температуре: при плохих признаках сегмента (низкая уверенность, подозрительная сжимаемость текста) декодирование повторяется с другими параметрами.
  • Пословные метки времени и принудительное выравнивание отдельным инструментом — нужны для субтитров и перехода к точной секунде в записи.
  • Диаризация, то есть разметка «кто говорит», делается отдельной моделью. Whisper этого не умеет вообще.

Форматы вывода

Простой текст годится для поиска и для передачи в языковую модель. Форматы субтитров (srt, vtt) нужны видеоредактору и плееру. Подробный json — то, на чём строится вся автоматическая проверка качества: там лежат сегменты с началом, концом, текстом и служебными признаками — средняя уверенность модели по сегменту, оценка вероятности того, что речи в нём нет вовсе, и коэффициент сжимаемости текста. Последние три поля используются как фильтр: сегмент с высокой вероятностью тишины и низкой уверенностью выбрасывается до того, как выдуманная фраза попадёт в отчёт клиенту.

Хранить разумно всё сразу: полный json как источник истины, текст в поисковом индексе, субтитры генерировать по требованию. Повторное распознавание архива стоит машинного времени, и делать его из-за смены формата обидно.

Полезные сценарии

  • Расшифровка звонков с клиентами и автоматическое резюме с решениями и задачами, чтобы менеджер не писал отчёт руками.
  • Поиск по архиву переговоров: текст в индексе, результат — ссылка на таймкод в записи.
  • Субтитры к роликам в форматах srt и vtt, где руками правится только терминология.
  • Голосовые заметки на ходу, которые превращаются в структурированные задачи в трекере.
  • Выборочный контроль поддержки: темы, обещания и жалобы ищутся по тексту вместо сплошного прослушивания.

Ограничения

  • На тишине, шуме и музыке модель дописывает несуществующие фразы. Типичный вид — повторяющиеся вежливые формулы и фрагменты титров. Лечится детектором речи и отбраковкой сегментов по уверенности.
  • Наложение речи, несколько участников и перебивания без диаризации дают сплошной текст без указания говорящих, по которому непонятно, кто что обещал.
  • Редкие фамилии, названия, артикулы и аббревиатуры распознаются с систематическими ошибками. Словарь подсказок и постобработка заменами обязательны.
  • Метки времени у сегментов приблизительны; пословная точность требует отдельного шага выравнивания.
  • Реального времени из коробки нет: модель батчевая, потоковая расшифровка собирается обвязкой из детектора речи и коротких окон, с задержкой и с ошибками на стыках.
  • Крупная модель требует видеопамяти. На процессоре она работает медленнее реального времени, и очередь надо планировать по фактическому замеру, а не по надежде.
  • Запись разговора — персональные данные. Согласие на запись, срок хранения и доступ к транскриптам регулируются так же строго, как доступ к самому аудио.
  • Смешанная речь на двух языках в одной фразе распознаётся хуже, чем каждый язык по отдельности.

Как проверить результат

  • Взять 10–20 минут своих типичных записей, расшифровать эталон вручную и посчитать WER: сумма замен, вставок и пропусков, делённая на число слов эталона. Это единственное число, по которому сравниваются модели и настройки между собой.
  • Отдельно прогнать фрагмент тишины и фрагмент с музыкой. В выводе не должно появиться ни одного предложения.
  • Поискать в транскрипте одну и ту же строку, повторённую подряд несколько раз: признак зацикливания декодера.
  • Сверить последний таймкод с длительностью файла. Расхождение означает потерянный хвост записи.
  • Проверить стыки чанков: слово на границе не должно пропадать или дублироваться.
  • Замерить RTF — время обработки, делённое на длительность аудио, — на целевом железе. Из этого числа считается пропускная способность очереди и нужное количество воркеров.
  • Прогнать список доменных терминов до и после подсказки и посчитать, сколько распозналось правильно в каждом случае.

Правило: качество распознавания измеряется WER на собственных записях и поведением на тишине; размер модели и обещания карточки к делу не относятся.

  • whisper
  • распознавание речи
  • asr
  • аудио