Распознавание речи со спикерами (WhisperX)#
Для выполнения инструкции нужны доступ к каталогу установки, настройкам сервера и Docker. Необходимо сохранить прежние значения параметров Whisper для отката. В Чате назначенная Аккаунту Модель транскрибации имеет приоритет. Если используется ее активный Экземпляр, он должен обращаться к локальному Whisper и запрашивать large-v2. Изменение .env не перенаправляет внешний Экземпляр на локальный сервис автоматически.
Эта инструкция описывает включение в Sherpa AI Server локальной транскрибации аудио и видео с разделением по спикерам (диаризация). Метод работает полностью на вашем сервере, без обращения к внешним сервисам и без доступа в интернет во время работы.
В результате фрагменты распознанной речи, для которых определен спикер, получают метку спикера (speaker_1, speaker_2 и так далее) и временные метки. Метки нумеруются с 1 в порядке первого появления спикера в записи. Метки попадают в результат API и в контекст LLM в виде строк [0:00:05] speaker_1: Привет. Отдельного экрана со спикерами в интерфейсе Чата нет.
Требования#
Перед включением необходимо убедиться, что:
- Sherpa AI Server установлен, сервис
aiserver-whisperзапускается с профилемwhisperилиfull; - сервис Whisper работает на NVIDIA GPU (см. Перевод Whisper с CPU на GPU). На CPU метод работает очень медленно;
- у вас есть архив весов
model-whisperx-large-v2.tar.gz(около 3 ГБ) и на диске достаточно места; - образ
aiserver-whisperверсии, в которой доступен методwhisperx.
Файл large-v2.pt, который использует обычный метод base, для WhisperX не подходит: WhisperX работает с другим форматом весов. Старые файлы Модели удалять не нужно.
Шаг 1. Распаковка весов#
Из каталога установки необходимо выполнить следующие команды:
tar -xzvf model-whisperx-large-v2.tar.gz -C ./whisper/models
ls ./whisper/models/whisperx
Каталог ./whisper/models/whisperx должен появиться рядом с прежними файлами Моделей.
Шаг 2. Настройка метода#
Можно открыть .env и в блоке # !whisper необходимо задать:
WHISPER_METHOD=whisperx
WHISPER_MODEL=large-v2
WHISPER_DEFAULT_MODEL=large-v2
WHISPERX_DIARIZE=true
Дополнительные параметры:
| Параметр | Назначение |
|---|---|
WHISPERX_DIARIZE |
true — разделять по спикерам (по умолчанию), false — только транскрибация с таймкодами |
WHISPERX_NUM_SPEAKERS |
Точное число спикеров, если оно известно. Пусто — определять автоматически |
WHISPERX_BATCH_SIZE |
Необходимо уменьшить значение, если возникает ошибка CUDA out of memory |
Шаг 3. Применение настроек сервера и Whisper#
Необходимо пересоздать контейнеры сервера и Whisper, чтобы применить новые параметры .env, включая WHISPER_DEFAULT_MODEL на стороне сервера. Команда использует уже загруженные образы без сборки и загрузки из реестра. Перезапуск сервера следует запланировать на подходящее время:
docker compose --profile whisper up -d --no-build --pull never --force-recreate aiserver aiserver-whisper
Шаг 4. Проверка результата#
curl -sS http://127.0.0.1:3005/health
В ответе должны быть "method":"whisperx" и "diarization_enabled":true.
Этот ответ подтверждает конфигурацию сервиса. Он не подтверждает загрузку весов и успешное распознавание: веса загружаются при первом обращении. Для проверки результата необходимо обработать аудио через выбранный локальный маршрут.
Затем в Чате можно прикрепить аудио или видео с разговором двух людей и можно отправить сообщение. В тексте транскрипции, который получает LLM, реплики с определенным спикером будут помечены speaker_1 и speaker_2 с временными метками.
Для технической проверки результата можно отправить короткую запись непосредственно в локальный API Whisper. В терминале переменная WHISPER_API_KEY должна содержать действующий ключ этого сервиса, если проверка ключа включена. Если сервис работает без ключа, заголовок Authorization в примере не требуется.
curl -fsS http://127.0.0.1:3005/v1/audio/transcriptions \
-H "Authorization: Bearer $WHISPER_API_KEY" \
-F "file=@./meeting.wav" \
-F "model=large-v2" \
-F "response_format=verbose_json"
В ответе необходимо проверить массив segments: распознанный text, временные метки start и end и поле speaker у сегментов, для которых спикер определен. Отсутствие speaker у отдельных сегментов не означает, что система определила их автора. Ошибка этого запроса требует проверки весов, доступности GPU и сообщения сервиса. Успешный /health сам по себе такой результат не подтверждает.
Ограничения#
При использовании метода действуют следующие ограничения:
- Обработка занимает больше времени, чем обычная транскрибация. Для длинных записей необходимо проверить таймауты запросов.
- При сильном наложении голосов возможны ошибки в определении спикера.
- Реальные имена спикеров метод не определяет: он присваивает только метки
speaker_N. - Параметры
promptиtemperatureэтим методом не используются.
Откат#
Для отката необходимо восстановить сохраненные прежние значения параметров Whisper в .env и повторить шаг 3 для обоих контейнеров. Должны быть доступны веса прежней Модели.