SPR. Руководство администратора: различия между версиями
Материал из Флора AI
Нет описания правки |
|||
| (не показаны 72 промежуточные версии 5 участников) | |||
| Строка 1: | Строка 1: | ||
===== ''' | ===== '''Общее описание сервиса распознавания речи (SPR)''' ===== | ||
Сервис предназначен для преобразования естественной речи в текст. Входными данными для сервиса являются аудиофайлы в формате *.wav, результатом работы выступают данные в текстовом формате. | Сервис предназначен для преобразования естественной речи в текст. Входными данными для сервиса являются аудиофайлы в формате *.wav, результатом работы выступают данные в текстовом формате. | ||
====='''Термины и определения'''===== | ====='''Термины и определения'''===== | ||
Short Phrase Recognizer (SPR) | Short Phrase Recognizer (SPR) — сервис распознавания речи. | ||
Модель — модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения. | |||
====='''Расчет нагрузки SPR'''===== | |||
Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее. | |||
Сервис требует разных ресурсов в зависимости от сценария использования. | |||
Распознавание для голосовых помощников — рекомендуется модель common и работа на GPU NVIDIA. Возможна работа на CPU. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками, 6 Гб оперативной памяти с резервом по частоте 9600 МГц (соответствует 4 ядрам по 2,4 ГГц). В этом случае 8-секундная речь будет распознана ориентировочно за 0,8 с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60–80 с с количеством одновременных диалогов до 60. | |||
В случае использования GPU A16 (одной из 4 голов на ВМ 8 потоков, 6 Гб) 8-секундная речь будет распознана примерно за 0,2 с. На такой ВМ можно распознавать до 100 одновременных диалогов. При расчетах и моделировании предполагалось, что за весь диалог длительностью 60–80 с будет распознано до 6 фраз длительностью до 8 с. GPU A16 содержит 1300 ядер CUDA в одной голове. На более мощных GPU возможности возрастают кратно количеству CUDA ядер. | |||
При распознавании для голосовых помощников рекомендуется использовать от 2-х воркеров gunicorn (-w 2 в строке запуска в файле службы) в зависимости от наличия памяти. | |||
Распознавание для диаризации (транскрибации) длительных переговоров — одновременное, используются модели common и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16 Гб GPU A16. На такой ВМ время распознавания в 2,5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU: | |||
{| class="wikitable" style="text-align: center" | |||
|+ | |||
!Карта | |||
!Видеопамять | |||
!Количество ядер CUDA | |||
!Время распознавания | |||
(минут) | |||
!Примечание | |||
|- | |||
|'''<big>A100</big>''' | |||
|80 | |||
|6912 | |||
|12 | |||
| | |||
|- | |||
|'''<big>V100</big>''' | |||
|16 | |||
|5120 | |||
|16 | |||
| | |||
|- | |||
|'''<big>RTX 3060</big>''' | |||
|12 | |||
|3584 | |||
|24 | |||
| | |||
|- | |||
|'''<big>A16</big>''' | |||
|'''16''' | |||
|1280 | |||
|33 | |||
|1/4 карты | |||
|} | |||
Переключение между режимами распознавания — в зависимости от длительности аудио. Аудио короче 30 с распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи, принадлежащие разным лицам, то есть формат вывода тоже изменяется. | |||
Требования к загружаемому аудио | |||
Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg. | |||
====='''Установка/обновление | ====='''Установка/обновление SPR'''===== | ||
[https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr&fileid=519 Дистрибутив] распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для | [https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr&fileid=519 Дистрибутив] распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом. | ||
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]]. | Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]]. | ||
Установка/обновление | * Установка/обновление SPR осуществляется скриптом <code>chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./spr-<версия>-<релиз>.sh</code> без ключей. | ||
* Загрузить последнюю версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/spr</nowiki> --user '[user]:[pass]' 2>&1)"</code>. | |||
* Обновить SPR <code>/opt/spr/inupdate</code> в интерактивном режиме. Или запустить с ключом: | |||
** <code>/opt/spr/inupdate -b</code> — обновить до последней beta версии; | |||
** <code>/opt/spr/inupdate -r</code> — обновить до последней release версии; | |||
** <code>/opt/spr/inupdate -n</code> — обновить до последней версии (неважно beta или release). | |||
* Установить модели <code>/opt/spr/inmodel</code> в интерактивном режиме. | |||
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/version</nowiki></code>. | |||
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/changelog</nowiki>" --user '[user]:[pass]'</code>. | |||
* Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> — это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.] | |||
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/): | |||
** echo -n <code>"[user]:[pass]"</code> > /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей), | |||
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/spr/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету), | |||
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления. | |||
Не забудьте запустить сервис | Не забудьте запустить сервис и включить в автозапуск в системе: | ||
<code>sudo systemctl enable spr.service && sudo systemctl start spr.service</code> | <code>sudo systemctl enable spr.service && sudo systemctl start spr.service</code> | ||
| Строка 52: | Строка 99: | ||
===== ''' | ===== '''Лицензия''' ===== | ||
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле: | |||
<code>/opt/spr/license.json</code> | |||
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него | Файл лицензии должен соответствовать следующему формату: | ||
<code>{"service": "spr", "expire": "2045-01-01", "licenses": , "key": ""}</code> | |||
Для получения лицензии необходимо: | |||
1. Запустить сервис <code>systemctl start spr</code> и извлечь UUID, указанный в файле <code>/opt/spr/logs/log.txt</code> | |||
2. Передать полученный UUID руководителю проекта для оформления лицензии. | |||
===== '''Установка моделей SPR'''===== | |||
Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}). | |||
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой systemctl restart spr. | |||
Чтобы убедиться, что модели доступны, выполните запрос | Чтобы убедиться, что модели доступны, выполните запрос | ||
| Строка 63: | Строка 127: | ||
В ответе должно содержаться название новой модели или перечень названий моделей в формате json. | В ответе должно содержаться название новой модели или перечень названий моделей в формате json. | ||
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание: | |||
<code>curl -X POST "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/stt/common</nowiki>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"</code> | <code>curl -X POST "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/stt/common</nowiki>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"</code> | ||
Некоторые модели работают только на GPU. На данный момент такая модель только одна — «big».<br> | |||
Описание параметров приведено в таблице | ===== '''Внешние модули распознавания''' ===== | ||
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data, sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по [https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr ссылке]. | |||
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание: | |||
<code>curl -X POST "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/stt/Имя_Модуля</nowiki>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"</code><br>Со списком методов можно ознакомиться в [[SPR. Руководство пользователя|руководстве пользователя]]. Метод на загрузку модели <code>curl -X GET "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/data/Имя_Модуля</nowiki>" -H "accept: application/json"</code> не работает с модулями в целях безопасности. Также модули не отображаются в списке моделей по запросу <code>curl -X GET "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/</nowiki>" -H "accept: application/json"</code>. В некоторых модулях конфигурация может быть вынесена в отдельный файл. Например, для модуля yandex это - /opt/spr/external/config.json. | |||
===== '''Конфигурирование параметров сервиса SPR'''===== | |||
Настройка параметров сервиса spr производится в файле /opt/spr/params.json. | |||
Описание параметров приведено в таблице. | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| Строка 88: | Строка 163: | ||
|punctuation | |punctuation | ||
|false | |false | ||
|Расстановка знаков препинания через сервис [[SMC. Руководство пользователя|сервис | |Расстановка знаков препинания через [[SMC. Руководство пользователя|сервис SMC]]. | ||
|- | |||
|normalization | |||
|false | |||
|Обратная нормализация текста через [[SMC. Руководство пользователя|сервис SMC]]. | |||
|- | |||
|toxicity | |||
|false | |||
|Анализ текста на токсичность через [[SMC. Руководство пользователя|сервис SMC]]. | |||
|- | |||
|emotions | |||
|false | |||
|Анализ текста на эмоции через [[SMC. Руководство пользователя|сервис SMC]]. | |||
|- | |||
|voice_analyzer | |||
|false | |||
|Анализ голоса спикера на эмоции, возраст, пол через [[SBS. Руководство пользователя.|сервис SBS]]. | |||
|- | |||
|save_audio_requests | |||
|false | |||
|Записывать аудио получаемые для распознавания в синхронном режиме. Будут сохраняться в /tmp/spr/. Только для диагностики. Не применять в нагруженных серверах. | |||
|- | |- | ||
|logs.path | |logs.path | ||
|logs/ | |logs/ | ||
|Путь к папке логов | |Путь к папке логов. | ||
|- | |- | ||
|logs.backups | |logs.backups | ||
|10 | |10 | ||
|Количество старых сохраняемых логов | |Количество старых сохраняемых логов. | ||
|- | |- | ||
|logs.maxSize | |logs.maxSize | ||
|5242880 | |5242880 | ||
|Максимальный размер текущего лог-файла | |Максимальный размер текущего лог-файла в байтах. | ||
|- | |||
|cache.lifetime | |||
|604800 | |||
|Время жизни кэша результатов отложенного распознавания. | |||
|- | |- | ||
| sbs.url | | sbs.url | ||
|<nowiki>http://127.0.0.1:6185</nowiki> | |<nowiki>http://127.0.0.1:6185</nowiki> | ||
|Путь к [[SBS. Руководство пользователя|сервису биометрии]] для получения метаданных голосового фрагмента. | |Путь к [[SBS. Руководство пользователя|сервису биометрии]] для получения метаданных голосового фрагмента. | ||
|- | |- | ||
|sbs.conn_timeout | |sbs.conn_timeout | ||
|2 | |2 | ||
|Таймаут на подключение к API SBS | |Таймаут на подключение к API SBS. | ||
|- | |- | ||
|sbs. | |sbs.read_timeout | ||
|30 | |30 | ||
|Таймаут на | |Таймаут на получение ответа от API SBS. | ||
|- | |- | ||
|smc.url | |smc.url | ||
| Строка 124: | Строка 219: | ||
|smc.conn_timeout | |smc.conn_timeout | ||
|2 | |2 | ||
|Таймаут на подключение к API SMC | |Таймаут на подключение к API SMC. | ||
|- | |- | ||
|smc. | |smc.read_timeout | ||
|30 | |30 | ||
|Таймаут на | |Таймаут на получение ответа от API SMC. | ||
|- | |- | ||
| | |see.url | ||
| | |<nowiki>http://127.0.0.1:6184</nowiki> | ||
| | |Путь к [[SEE. Руководство пользователя|сервису поиска сущностей]] для дополнительной работы с распознанным текстом. | ||
|- | |- | ||
| | |see.conn_timeout | ||
| | |2 | ||
| | |Таймаут на подключение к API SEE. | ||
|- | |- | ||
| | |see.read_timeout | ||
| | |30 | ||
| | |Таймаут на получение ответа от API SEE. | ||
|- | |- | ||
|vad. | |vad.default | ||
| | |webrtc | ||
| | |Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения — пока только webrtc. | ||
|- | |- | ||
|vad. | |vad.maxSilence | ||
| | |1200 | ||
| | |Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты. | ||
|- | |- | ||
|speakers.similarityThreshold | |speakers.similarityThreshold | ||
|0. | |0.7 | ||
|Порог различия для разделения говорящих. | |Порог различия для разделения говорящих. | ||
|- | |- | ||
|speakers.maxSpeechLength | |speakers.maxSpeechLength | ||
| | |10000 | ||
|Максимальная длительность фрагмента для сравнения говорящих в миллисекундах. | |Максимальная длительность фрагмента для сравнения говорящих в миллисекундах. | ||
|- | |||
|speakers.wordMinLimit | |||
|5 | |||
|Минимальный размер фразы при определении говорящих. | |||
|- | |||
|speakers.timeMinLimit | |||
|3000 | |||
|Минимальная длительность аудио, чтобы оно могло быть использовано для добавления нового говорящего. | |||
|- | |- | ||
|speakers.batch | |speakers.batch | ||
| | |4 | ||
|Количество одновременного анализируемых аудиофрагментов при разделении говорящих. | |Количество одновременного анализируемых аудиофрагментов при разделении говорящих. | ||
|- | |- | ||
|speakers. | |speakers.concatEqual | ||
| | |true | ||
| | |Позволяет склеивать последовательные фразы одного и того же говорящего. | ||
|- | |- | ||
| | |speakers.defaultModel | ||
| | |call | ||
| | |Модель определения говорящего. | ||
|- | |- | ||
| | |blacklist | ||
|[] | |[] | ||
|Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR. | |Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR. | ||
|- | |||
|corrections | |||
|{ "big": "common" } | |||
|Добавление модели коррекции для стенографирования. | |||
|- | |||
|garbage | |||
|[ "—", "[*]" ] | |||
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста. | |||
|} | |} | ||
====='''Сбор данных об ошибках'''===== | ====='''Сбор данных об ошибках'''===== | ||
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt<br> | |||
<code> | ====='''Удаление'''===== | ||
Для удаления выполните команду: <code>/opt/spr/uninstall</code>. Команда удалит сервис и рабочий каталог, включая все установленные модели. | |||
====='''Практические рекомендации'''===== | |||
Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр «'''-w 2'''». Это приведет к загрузке в видеопамять 2-х экземпляров приложения и моделей. Таким образом приложение сможет более эффективно использовать ресурсы GPU, но при этом возрастет потребность в памяти GPU. | |||
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера, в котором больше ресурсов, большее количество раз в разделе «spr.cluster» конфигурационного файла ups. | |||
Текущая версия от 08:11, 3 июля 2025
Общее описание сервиса распознавания речи (SPR)
Сервис предназначен для преобразования естественной речи в текст. Входными данными для сервиса являются аудиофайлы в формате *.wav, результатом работы выступают данные в текстовом формате.
Термины и определения
Short Phrase Recognizer (SPR) — сервис распознавания речи.
Модель — модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения.
Расчет нагрузки SPR
Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее.
Сервис требует разных ресурсов в зависимости от сценария использования.
Распознавание для голосовых помощников — рекомендуется модель common и работа на GPU NVIDIA. Возможна работа на CPU. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками, 6 Гб оперативной памяти с резервом по частоте 9600 МГц (соответствует 4 ядрам по 2,4 ГГц). В этом случае 8-секундная речь будет распознана ориентировочно за 0,8 с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60–80 с с количеством одновременных диалогов до 60.
В случае использования GPU A16 (одной из 4 голов на ВМ 8 потоков, 6 Гб) 8-секундная речь будет распознана примерно за 0,2 с. На такой ВМ можно распознавать до 100 одновременных диалогов. При расчетах и моделировании предполагалось, что за весь диалог длительностью 60–80 с будет распознано до 6 фраз длительностью до 8 с. GPU A16 содержит 1300 ядер CUDA в одной голове. На более мощных GPU возможности возрастают кратно количеству CUDA ядер.
При распознавании для голосовых помощников рекомендуется использовать от 2-х воркеров gunicorn (-w 2 в строке запуска в файле службы) в зависимости от наличия памяти.
Распознавание для диаризации (транскрибации) длительных переговоров — одновременное, используются модели common и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16 Гб GPU A16. На такой ВМ время распознавания в 2,5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU:
| Карта | Видеопамять | Количество ядер CUDA | Время распознавания
(минут) |
Примечание |
|---|---|---|---|---|
| A100 | 80 | 6912 | 12 | |
| V100 | 16 | 5120 | 16 | |
| RTX 3060 | 12 | 3584 | 24 | |
| A16 | 16 | 1280 | 33 | 1/4 карты |
Переключение между режимами распознавания — в зависимости от длительности аудио. Аудио короче 30 с распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи, принадлежащие разным лицам, то есть формат вывода тоже изменяется.
Требования к загружаемому аудио
Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg.
Установка/обновление SPR
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.
Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.
- Установка/обновление SPR осуществляется скриптом
chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -iс правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор./spr-<версия>-<релиз>.shбез ключей. - Загрузить последнюю версию продукта
curl -s "https://repo.connect2ai.net/api/spr/new" --user '[user]:[pass]' 2>&1 | bashили в интерактивном режимеbash -c "$(curl -s https://repo.connect2ai.net/api/spr --user '[user]:[pass]' 2>&1)". - Обновить SPR
/opt/spr/inupdateв интерактивном режиме. Или запустить с ключом:/opt/spr/inupdate -b— обновить до последней beta версии;/opt/spr/inupdate -r— обновить до последней release версии;/opt/spr/inupdate -n— обновить до последней версии (неважно beta или release).
- Установить модели
/opt/spr/inmodelв интерактивном режиме. - Проверить актуальную версию продукта
curl -s "https://repo.connect2ai.net/api/spr/version. - Посмотреть лог изменений
curl -s "https://repo.connect2ai.net/api/spr/changelog" --user '[user]:[pass]'. - Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api.
[user]:[pass]— это тот же логин и пароль, что и от Nextcloud. - В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
- echo -n
"[user]:[pass]"> /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей), - echo -n
"http://example.com:3128 [user] [password]"> /opt/spr/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету),
- echo -n
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
Не забудьте запустить сервис и включить в автозапуск в системе:
sudo systemctl enable spr.service && sudo systemctl start spr.service
Удостоверьтесь, что сервис стартовал:
systemctl status spr.service
Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp.
Лицензия
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:
/opt/spr/license.json
Файл лицензии должен соответствовать следующему формату:
{"service": "spr", "expire": "2045-01-01", "licenses": , "key": ""}
Для получения лицензии необходимо:
1. Запустить сервис systemctl start spr и извлечь UUID, указанный в файле /opt/spr/logs/log.txt
2. Передать полученный UUID руководителю проекта для оформления лицензии.
Установка моделей SPR
Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}).
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой systemctl restart spr.
Чтобы убедиться, что модели доступны, выполните запрос
curl -H "accept: application/json" -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/"
В ответе должно содержаться название новой модели или перечень названий моделей в формате json.
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:
curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/common" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"
Некоторые модели работают только на GPU. На данный момент такая модель только одна — «big».
Внешние модули распознавания
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data, sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по ссылке.
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:
curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/Имя_Модуля" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"
Со списком методов можно ознакомиться в руководстве пользователя. Метод на загрузку модели curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/data/Имя_Модуля" -H "accept: application/json" не работает с модулями в целях безопасности. Также модули не отображаются в списке моделей по запросу curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/" -H "accept: application/json". В некоторых модулях конфигурация может быть вынесена в отдельный файл. Например, для модуля yandex это - /opt/spr/external/config.json.
Конфигурирование параметров сервиса SPR
Настройка параметров сервиса spr производится в файле /opt/spr/params.json.
Описание параметров приведено в таблице.
| Параметр | По умолчанию | Назначение |
|---|---|---|
| namespace | spr | Префикс пути вызова методов методам API. http://СЕРВЕР:6183/ПРЕФИКС/ПУТЬ_К _МЕТОДУ. |
| max_gpu_memory | 0.6 | Лимит использования ОЗУ видеокарты. |
| punctuation | false | Расстановка знаков препинания через сервис SMC. |
| normalization | false | Обратная нормализация текста через сервис SMC. |
| toxicity | false | Анализ текста на токсичность через сервис SMC. |
| emotions | false | Анализ текста на эмоции через сервис SMC. |
| voice_analyzer | false | Анализ голоса спикера на эмоции, возраст, пол через сервис SBS. |
| save_audio_requests | false | Записывать аудио получаемые для распознавания в синхронном режиме. Будут сохраняться в /tmp/spr/. Только для диагностики. Не применять в нагруженных серверах. |
| logs.path | logs/ | Путь к папке логов. |
| logs.backups | 10 | Количество старых сохраняемых логов. |
| logs.maxSize | 5242880 | Максимальный размер текущего лог-файла в байтах. |
| cache.lifetime | 604800 | Время жизни кэша результатов отложенного распознавания. |
| sbs.url | http://127.0.0.1:6185 | Путь к сервису биометрии для получения метаданных голосового фрагмента. |
| sbs.conn_timeout | 2 | Таймаут на подключение к API SBS. |
| sbs.read_timeout | 30 | Таймаут на получение ответа от API SBS. |
| smc.url | http://127.0.0.1:6181 | Путь к сервису классификации для дополнительной работы с распознанным текстом. |
| smc.conn_timeout | 2 | Таймаут на подключение к API SMC. |
| smc.read_timeout | 30 | Таймаут на получение ответа от API SMC. |
| see.url | http://127.0.0.1:6184 | Путь к сервису поиска сущностей для дополнительной работы с распознанным текстом. |
| see.conn_timeout | 2 | Таймаут на подключение к API SEE. |
| see.read_timeout | 30 | Таймаут на получение ответа от API SEE. |
| vad.default | webrtc | Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения — пока только webrtc. |
| vad.maxSilence | 1200 | Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты. |
| speakers.similarityThreshold | 0.7 | Порог различия для разделения говорящих. |
| speakers.maxSpeechLength | 10000 | Максимальная длительность фрагмента для сравнения говорящих в миллисекундах. |
| speakers.wordMinLimit | 5 | Минимальный размер фразы при определении говорящих. |
| speakers.timeMinLimit | 3000 | Минимальная длительность аудио, чтобы оно могло быть использовано для добавления нового говорящего. |
| speakers.batch | 4 | Количество одновременного анализируемых аудиофрагментов при разделении говорящих. |
| speakers.concatEqual | true | Позволяет склеивать последовательные фразы одного и того же говорящего. |
| speakers.defaultModel | call | Модель определения говорящего. |
| blacklist | [] | Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR. |
| corrections | { "big": "common" } | Добавление модели коррекции для стенографирования. |
| garbage | [ "—", "[*]" ] | Массив фраз, которые считаются мусорными и откидываются из распознанного текста. |
Сбор данных об ошибках
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt
Удаление
Для удаления выполните команду: /opt/spr/uninstall. Команда удалит сервис и рабочий каталог, включая все установленные модели.
Практические рекомендации
Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр «-w 2». Это приведет к загрузке в видеопамять 2-х экземпляров приложения и моделей. Таким образом приложение сможет более эффективно использовать ресурсы GPU, но при этом возрастет потребность в памяти GPU.
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера, в котором больше ресурсов, большее количество раз в разделе «spr.cluster» конфигурационного файла ups.