Skip to content

transcript ​

Сервис расшифровки аудио и видео: два режима работы, какие модели используются, как устроена фоновая задача и почему разметка говорящих может не сработать.

Назначение ​

Принимает запись разговора, интервью, лекции, голосовое сообщение или видео и превращает её в текст. Работа идёт в фоне: сервис сразу возвращает номер задачи и сообщает о ходе работы понятными шагами. Готовый результат появляется в чате файлом Markdown.

В платформе источник называется Transcript. Репозиторий называется scriber.

Инструменты ​

Три инструмента, модель видит два.

ИнструментКто вызываетНазначение
init_eva_sessionТолько RuntimeПривязка сессии
transcribe_audioМодельЗапуск расшифровки, возвращает номер задачи
get_transcription_statusМодельОпрос состояния задачи

transcribe_audio ​

ПараметрТипПо умолчанию
source_keyстрокаобязателен
diarizationда или нетнет
engineперечислениеgigaam, других значений нет

Модели предписано опрашивать состояние раз в 20 до 30 секунд и не запускать повторную расшифровку того же файла.

Ход работы ​

Состояния, которые видит пользователь: в очереди, скачивание, скачано, ожидание обработчика, преобразование звука, загрузка модели распознавания, модель готова, распознавание речи, обработка частей записи с процентами, выгрузка, готово. Отдельное состояние сообщает, что разметка говорящих была пропущена.

Модели ​

НазначениеЧто используется
Распознавание речиGigaAM, модель v3_e2e_rnnt
Разметка говорящихpyannote, модель speaker-diarization-community-1
Определение речи внутри длинной записиpyannote, модель segmentation-3.0

Контрольная точка модели распознавания весит около 428 МБ и скачивается с сети доставки Sber при первом запуске, затем хранится в локальном кэше и проверяется по контрольной сумме.

Версия библиотеки не закреплена

Библиотека GigaAM подключена ссылкой на репозиторий без указания версии или ревизии. Название модели закреплено, а сама библиотека берётся в том состоянии, в котором она была на момент сборки. Какая ревизия стоит на стенде, нужно уточнять у команды.

Два режима работы ​

Это самая важная особенность сервиса.

РежимКак работает
Облегчённый (по умолчанию)Запись режется на части фиксированной длины и обрабатывается пачками. Модель разметки говорящих не загружается вообще
ПолныйИспользуется обработка длинной записи с определением речи и, при запросе, разметка говорящих с временами по словам

В облегчённом режиме запрос разметки говорящих молча игнорируется

Пользователь может попросить разметить, кто что сказал, получить обычный текст без разметки и не понять, почему. Единственный признак это отдельное состояние в ходе работы. Нужно уточнить, какой режим включён на стенде, и если облегчённый, то в пользовательской документации прямо написать, что разметка говорящих недоступна.

В полном режиме нужен доступ к закрытым моделям pyannote, причём модель определения речи требуется всегда, даже когда разметка говорящих не запрошена.

Что за ним стоит ​

СоставляющаяОбязателен
Доступ к файлам чатаДа
ffmpegФактически да. Облегчённый режим всегда режет запись через него
ВидеокартаНет, но на процессоре медленно
Доступ к закрытым моделям pyannoteТолько для полного режима
Базы данных, брокеры, очередиНе нужны
PythonСтрого 3.11

Ограничения ​

ОграничениеПодробности
Возврат текста в перепискуНикогда. Только ссылка на файл. В указаниях сервиса это запрещено прямо
Перезапуск сервисаВсе выполняющиеся задачи теряются
Размер файлаНе больше 500 МиБ, проверка после полного скачивания в память
Одновременная работаСтрогая очередь. Второй пользователь ждёт первого
Таймаут расшифровкиОтсутствует. Зависшая обработка блокирует очередь
Времена по словам и разметка говорящих в облегчённом режимеОтсутствуют
Склейка частей записи в облегчённом режимеЧерез пробел, без восстановления знаков на стыках. Слово, разрезанное на границе, может пострадать
ВидеоПреобразование в звук делается только в полном режиме и только для webm и mp4. Другие контейнеры идут в модель как есть
Имя файла результатаВсегда имя исходного файла с добавлением _transcribe.md, поэтому файлы затирают друг друга

Повторный запрос той же расшифровки не создаёт вторую задачу: сервис отдаёт уже идущую и помечает ответ признаком повторного использования. Неудавшаяся задача повторно не используется.

Развёртывание ​

ПараметрЗначение
ТранспортStreamable HTTP, поддерживается и stdio
Порт8016
Образpython:3.11 с ffmpeg
Файл для docker composeОтсутствует

Машинное обучение не входит в образ по умолчанию

Образ собирает зависимости, но описание сервиса отдельно отмечает, что стек машинного обучения в образ по умолчанию не включается.

Документация платформы EVA