SPR. Руководство администратора: различия между версиями
Материал из Флора AI
Нет описания правки |
|||
| (не показано 8 промежуточных версий 2 участников) | |||
| Строка 5: | Строка 5: | ||
====='''Термины и определения'''===== | ====='''Термины и определения'''===== | ||
Short Phrase Recognizer (SPR) | Short Phrase Recognizer (SPR) — сервис распознавания речи. | ||
Модель — модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения. | |||
| Строка 15: | Строка 13: | ||
Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее. | Для нормальной работы сервиса требуются 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 в строке запуска в файле службы) в зависимости от наличия памяти. | При распознавании для голосовых помощников рекомендуется использовать от 2-х воркеров gunicorn (-w 2 в строке запуска в файле службы) в зависимости от наличия памяти. | ||
Распознавание для диаризации (транскрибации) длительных переговоров — одновременное, используются модели common и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16 Гб GPU A16. На такой ВМ время распознавания в 2,5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU: | |||
{| class="wikitable" style="text-align: center" | {| class="wikitable" style="text-align: center" | ||
|+ | |+ | ||
| Строка 60: | Строка 58: | ||
Переключение между режимами распознавания — в зависимости от длительности аудио. Аудио короче 30 с распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи, принадлежащие разным лицам, то есть формат вывода тоже изменяется. | |||
Требования к загружаемому аудио | |||
Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg. | Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg. | ||
====='''Установка/обновление SPR'''===== | ====='''Установка/обновление 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. Установка сервисного пакета окружения|установить сервисный пакет окружения]]. | ||
| Строка 74: | Строка 74: | ||
* Загрузить последнюю версию продукта <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>. | * Загрузить последнюю версию продукта <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> в интерактивном режиме. Или запустить с ключом: | * Обновить SPR <code>/opt/spr/inupdate</code> в интерактивном режиме. Или запустить с ключом: | ||
** <code>/opt/spr/inupdate -b</code> | ** <code>/opt/spr/inupdate -b</code> — обновить до последней beta версии; | ||
** <code>/opt/spr/inupdate -r</code> | ** <code>/opt/spr/inupdate -r</code> — обновить до последней release версии; | ||
** <code>/opt/spr/inupdate -n</code> | ** <code>/opt/spr/inupdate -n</code> — обновить до последней версии (неважно beta или release). | ||
* Установить модели <code>/opt/spr/inmodel</code> в интерактивном режиме. | * Установить модели <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/version</nowiki></code>. | ||
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/changelog</nowiki>" --user '[user]:[pass]'</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> | * Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> — это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.] | ||
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/): | * В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/): | ||
** echo -n <code>"[user]:[pass]"</code> > /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей) | ** 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 необходим для обновления и загрузки моделей, при отсутствующем прямом | ** 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> | ||
| Строка 96: | Строка 96: | ||
Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp. | Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp. | ||
===== '''Лицензия''' ===== | |||
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле: | |||
<code>/opt/spr/license.json</code> | |||
Файл лицензии должен соответствовать следующему формату: | |||
<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'''===== | ===== '''Установка моделей SPR'''===== | ||
Установка моделей возможна прямым копированием файла модели | Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}). | ||
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой systemctl restart spr | Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой systemctl restart spr. | ||
Чтобы убедиться, что модели доступны, выполните запрос | Чтобы убедиться, что модели доступны, выполните запрос | ||
| Строка 110: | Строка 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> | |||
Некоторые модели работают только на GPU. На данный момент такая модель только одна | |||
===== '''Внешние модули распознавания''' ===== | ===== '''Внешние модули распознавания''' ===== | ||
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data,sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по [https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr ссылке]. | Сервис 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 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'''===== | ||
Настройка параметров сервиса spr производится в файле /opt/spr/params.json | Настройка параметров сервиса spr производится в файле /opt/spr/params.json. | ||
Описание параметров приведено в таблице | Описание параметров приведено в таблице. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| Строка 171: | Строка 187: | ||
|logs.path | |logs.path | ||
|logs/ | |logs/ | ||
|Путь к папке логов | |Путь к папке логов. | ||
|- | |- | ||
|logs.backups | |logs.backups | ||
|10 | |10 | ||
|Количество старых сохраняемых логов | |Количество старых сохраняемых логов. | ||
|- | |- | ||
|logs.maxSize | |logs.maxSize | ||
|5242880 | |5242880 | ||
|Максимальный размер текущего лог-файла | |Максимальный размер текущего лог-файла в байтах. | ||
|- | |- | ||
|cache.lifetime | |cache.lifetime | ||
|604800 | |604800 | ||
|Время жизни кэша результатов отложенного распознавания | |Время жизни кэша результатов отложенного распознавания. | ||
|- | |- | ||
| sbs.url | | sbs.url | ||
| Строка 191: | Строка 207: | ||
|sbs.conn_timeout | |sbs.conn_timeout | ||
|2 | |2 | ||
|Таймаут на подключение к API SBS | |Таймаут на подключение к API SBS. | ||
|- | |- | ||
|sbs.read_timeout | |sbs.read_timeout | ||
|30 | |30 | ||
|Таймаут на | |Таймаут на получение ответа от API SBS. | ||
|- | |- | ||
|smc.url | |smc.url | ||
| Строка 203: | Строка 219: | ||
|smc.conn_timeout | |smc.conn_timeout | ||
|2 | |2 | ||
|Таймаут на подключение к API SMC | |Таймаут на подключение к API SMC. | ||
|- | |- | ||
|smc.read_timeout | |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.default | |vad.default | ||
|webrtc | |webrtc | ||
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения | |Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения — пока только webrtc. | ||
|- | |- | ||
|vad.maxSilence | |vad.maxSilence | ||
| Строка 239: | Строка 267: | ||
|speakers.concatEqual | |speakers.concatEqual | ||
|true | |true | ||
| | |Позволяет склеивать последовательные фразы одного и того же говорящего. | ||
|- | |- | ||
|speakers.defaultModel | |speakers.defaultModel | ||
| Строка 270: | Строка 298: | ||
====='''Практические рекомендации'''===== | ====='''Практические рекомендации'''===== | ||
Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр ''' | Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр «'''-w 2'''». Это приведет к загрузке в видеопамять 2-х экземпляров приложения и моделей. Таким образом приложение сможет более эффективно использовать ресурсы GPU, но при этом возрастет потребность в памяти GPU. | ||
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера в котором больше ресурсов, большее количество раз | В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов 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.