- PVSM.RU - https://www.pvsm.ru -
[1]
Привет! В этом посте я продолжаю цикл статей о том, как выжать максимум из обычного от RUVDS [3]. В прошлый раз [4] мы экспериментировали с языковыми моделями, а сегодня попробуем запустить систему распознавания речи — FasterWhisper, оптимизированную версию модели Whisper от OpenAI. Как и в прошлый раз, сделаем это в рамках бюджета в 5000 рублей в месяц.
Прежде чем мы начнём эксперименты, давайте разберёмся, с чем имеем дело. Whisper — это система автоматического распознавания речи (ASR), разработанная OpenAI и выпущенная в открытый доступ в сентябре 2022 года. В отличие от многих других моделей, Whisper обучался на внушительном наборе данных — 680 000 часов многоязычного аудио, собранного из интернета. И здесь кроется его главное преимущество: благодаря такому разнообразному датасету модель отлично справляется с различными акцентами, фоновым шумом и даже специализированной лексикой. И самое главное, в отличие от своих более популярных собратьев, произведённых OpenAI (ChatGPT различных версий), Whisper является Open Source моделью с открытым доступом. Да, иногда Open в OpenAI всё-таки означает Open Source, но, увы, лишь иногда.

Архитектура Whisper достаточно проста: это encoder-decoder трансформер, который принимает на вход 30-секундные отрезки аудио, преобразованные в лог-мел спектрограмму. А дальше начинается самое интересное: декодер не просто расшифровывает речь, но и умеет определять язык, ставить временные метки для фраз и даже переводить речь на английский. Причём всё это — в рамках одной модели без необходимости дополнительных настроек.
FasterWhisper, с которым мы будем работать — это оптимизированная версия оригинальной модели, использующая CTranslate2 для ускорения инференса. По сути, это тот же Whisper, но значительно быстрее и эффективнее в использовании ресурсов. Что особенно важно для нашего эксперимента на
Система у нас остаётся прежней — CentOS из прошлой статьи. И тут стоит сделать небольшое отступление, почему мы выбрали именно Docker-версию FasterWhisper. За кадром осталась увлекательная история о том, как Whisper на CPU умудрился изрядно попить крови у автора — что при установке через pip, что через conda. И это притом, что на домашней машине с CUDA и GPU от NVIDIA всё вставало без малейших проблем! Складывается впечатление, что CPU-версия живёт какой-то своей, особенно капризной жизнью. Либо, возможно, как это часто бывает с нейросетевыми проектами, мне не повезло, когда какая-то из библиотек для Python успела обновиться недавно и поломала совместимость с зависимостями, что за ней ещё пока не успели обновиться следом.

А в Docker-контейнере окружение уже настроено и содержит все необходимые зависимости. Тем более, что по аппетитам Whisper достаточно скромная модель, а Docker процессорных ресурсов почти не потребляет — теми несколькими сотнями мегабайт памяти, которые он съест, вполне можно пожертвовать ради душевного спокойствия и рабочего решения из коробки.
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

Теперь самое интересное — запустим FasterWhisper Server в контейнере. Что здесь происходит? Мы запускаем готовый Docker-образ с FasterWhisper, который уже настроен для работы на CPU. Важный момент — мы монтируем кэш Hugging Face в контейнер, чтобы не скачивать модели каждый раз при перезапуске. Веб-интерфейс на основе Gradio будет доступен по появившемуся в консоли адресу — 0.0.0.0 [5]:8000, откроем его и продолжим уже в нём.
Для тестирования я выбрал не совсем обычный материал, а именно отрывок из так и не завершённого романа «Азатот» Говарда Филипса Лавкрафта, причём сразу в двух версиях: оригинал на английском и русский перевод. Почему именно это произведение? Во-первых, оно относительно короткое, что идеально для первичного тестирования. Во-вторых, содержит специфическую лексику и сложные конструкции, что поможет проверить возможности модели в более сложных условиях, чем простая повседневная речь. В-третьих, я просто очень люблю творчество Лавкрафта, и это одно из моих любимых его произведений.
Об имени и месте жительства этого человека известно мало; впрочем, имена и места имеют какое-то значение только в обыденном, бодрствующем мире и потому не представляют для нас интереса. Нам вполне достаточно знать, что он жил в большом городе среди высоких стен, где царили вечные сумерки, и что он проводил свои дни в безрадостных и суетливых трудах, а по вечерам возвращался домой — в комнату с единственным окном, из которого открывался вид не на поля или рощи, а на унылый двор с точно такими же окнами, глядевшими друг на друга в тупом безысходном отчаянии. В этом каменном мешке больше не на что было глядеть, и лишь перегнувшись через подоконник и посмотрев прямо вверх, можно было увидеть кусочек неба с двумя-тремя проплывающими звездочками. А так как зрелище однообразных стен и окон способно свести с ума человека, который все свободное время посвящает мечтам и книгам, обитатель этой комнаты взял за правило еженощно высовываться из окна, чтобы увидеть вверху частичку того, что лежит за пределами будничного мира, заключенного в сумрачных стенах многоэтажных городов. С годами он научился различать медленно проплывающие звезды, называл их по именам, а в своем воображении продолжал следить за их полетом и после того, как они исчезали из виду. Так проходила его жизнь, пока однажды его сознание не раскрылось для таких потрясающих картин, какие не дано узреть обычному человеческому глазу. В ту ночь была разом преодолена гигантская пропасть, и загадочные небеса спустились к окну одинокого мечтателя, чтобы смешаться с воздухом его тесной комнатушки и сделать его свидетелем невероятных чудес.
В полночь комнату озарили потоки лилового сияния с золотистыми блестками, а за ними внутрь ворвались вихри огня и пыли, насыщенные ароматами запредельных миров. И он узрел пьянящий океанский простор, озаренный неведомыми людям солнцами, а также диковинных дельфинов и морских нимф, резвящихся в неизмеримых глубинах. Некая беззвучная и беспредельная стихия приняла мечтателя в свои объятия и увлекла его в таинственные дали, при этом не коснувшись его тела, которое так и застыло на подоконнике. Много дней, несовпадающих с земными календарями, ласковые волны запредельных сфер несли человека к его мечтам — тем самым мечтам, которые были забыты и утрачены остальными людьми, — а потом он провел долгие счастливые века спящим на залитом солнцем зеленом берегу под благоухание цветущих лотосов и алых гиацинтов.

Для начала посмотрим, как Whisper справится с почти тремя минутами текста на русском. Получилось не идеально, однако результат впечатляет. Несмотря на то, что это самая маленькая модель, качество оказалось сопоставимым с результатами платных сервисов, предоставляющих перевод речи в текст, или с возможностями Telegram с Premium-подпиской.
С учётом того, что модель специально не дообучалась под русский язык, результат впечатляет ещё больше. Что касается скорости — почти три минуты текста были расшифрованы за чуть меньше минуты. При этом так как была нажата опция «Stream», можно было в реальном времени наблюдать, как аудиофайл преобразуется по частям в текст.

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

Но где же всё это может быть полезным? Первый и самый очевидный сценарий — внутрикорпоративное использование. Представьте ситуацию: ваша компания, как многие другие, серьёзно относится к безопасности данных и категорически запрещает использование сторонних сервисов для расшифровки речи. При этом потребность в транскрибации постоянно возникает — будь то записи совещаний, обучающие материалы или интервью с клиентами. Развёртывание собственного сервиса на
Второй сценарий более предпринимательский — запуск собственного сервиса расшифровки речи как бизнеса. Да, на рынке есть множество готовых решений, использующих мощные графические процессоры, но у них есть существенный недостаток — цена. Начать с решения на базе центрального процессора может быть разумной стратегией для тестирования рынка и формирования базы клиентов. Тем более, как показало наше тестирование, даже базовая модель на CPU способна обеспечить вполне приемлемое качество распознавания достаточно сложной и комплексной речи. В дальнейшем, если прототип себя покажет хорошо, то можно будет уже задуматься о расширении кластеров, настройке балансировщиков, очередей и т. п., но для того, чтобы опробовать всё это перед полноценными инвестициями в облачную инфраструктуру, хватит и одного

Прототип сервиса по расшифровке текста на React.
В отличие от наших экспериментов с мультимодальными LLM в прошлой статье, где анализ одного изображения мог занимать до 10 минут (успеешь и чай попить, и в окно посмотреть, и о жизни подумать), FasterWhisper показал себя как вполне жизнеспособное решение для повседневного использования. Трёхкратное отношение времени обработки к длительности аудио на CPU — это уже не просто эксперимент, а нечто, что можно реально применять в работе. И если LLM на CPU оставляли впечатление «без слёз не взглянешь», то здесь виден реальный потенциал для коммерческого использования.
В следующей статье мы немного отойдём от темы нейросетей, хотя без машинного обучения всё равно не обойдётся. Поговорим о том, есть ли жизнь за пределами Google Docs и как можно организовать работу с документами на собственном
А пока что — всем спасибо за внимание, и до встречи в следующих статьях серии «VPS на пределе возможностей»!
© 2024 ООО «МТ ФИНАНС»
Автор: OrkBiotechnologist
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/oblaka/405377
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/865882/
[2] VPS: https://www.reg.ru/?rlink=reflink-717
[3] RUVDS: https://ruvds.com/ru-rub
[4] прошлый раз: https://habr.com/ru/companies/ruvds/articles/857514/
[5] 0.0.0.0: http://0.0.0.0
[6] Источник: https://habr.com/ru/companies/ruvds/articles/865882/?utm_campaign=865882&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.