В этой статье мы рассмотрим решение задачи automatic speech recognition или преобразования записанного на аудио голоса в текст, используя напрямую модели с huggingface. Разумеется, на сегодня есть масса оптимизированных вариантов запуска моделей на базе whisper, которые работают быстрее оригинала и требуют значительно меньше памяти (faster-whisper, ctranslate2 и тп), но у нас это учебный пример, который, в том числе, показывает как установить и настроить библиотеки pytorch
и transformers
на VDS с GPU.
Хотя модели whisper работают и на CPU, для приемлемой скорости распознавания, на наш взгляд, имеет смысл все же использовать графические процессоры (GPU). Наша компания предлагает линейку VDS Ultra с видеокартами от Nvidia.
Чтобы запустить такой VDS, достаточно в вашем личном кабинете перейти в раздел VDS, нажать на кнопку создания виртуальной машины (ВМ) и выбрать требуемую вам конфигурацию сервера, а также модель и количество видеокарт, которые вам необходимы. В качестве образа для развертывания мы рекомендуем использовать предлагаемый нами образ на базе Ubuntu c предустановленными драйверами для видеоркарт Nvidia.
В случае whisper достаточно выбрать одну самую простую видеокарту среди предлагаемых. И даже в такой конфигурации вы без труда сможете запустить несколько инстансов whisper и получить в свое распоряжение высокопроизводительную машину для распознавания голоса.
Предположим что VDS вы уже создали и получили доступ к ней по ssh. Здесь и далее мы предполагаем что вы зашли на сервер от имени пользователя ubuntu, создаваемого по умолчанию.
Для работы с аудио нам потребуется утилита sox
. Все дело в том, что whisper ожидает на вход аудио в формате wav с частотой дискретизации 16 kHz, поэтому скорее всего любое аудио, которое вы захотите прогнать через whisper, потребует предобработки. Установим sox
:
$ sudo apt-get install sox
В мире python хорошим тоном является создание виртуальных окружений и разворачивание требуемых пакетов в виртуальных окружениях, а не установка их напрямую в систему. Сделать это очень просто:
$ python3 -m venv ~/.venv
$ source ~/.venv/bin/activate
Теперь установим требуемые библиотеки. Если вы пользуетесь подготовленным нами образом для работы с gpu на базе ubuntu, в нем установлены библиотеки CUDA версии 12.4, поэтому нам потребуется pytorch, собранный под эту версию CUDA:
$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
$ pip3 install ipython transformers PySoundFile
В качестве примера для распознавания с помощью whisper мы возьмем аудио файл с объявлениями из Екатеринбургского метро, размещенный на сайте wikimedia:
$ curl --output metro.ogg https://upload.wikimedia.org/wikipedia/commons/2/26/Ekb_Metro_voice_messages_sample_05-2019.ogg
Преобразуем этот файл к нужному формату wav, 16 kHz:
$ sox metro.ogg -r 16000 metro.wav
Безусловно такое же преобразование можно сделать и с помощью torchaudio.sox_effects, но по сути в этом случае будет вызвана та же утилита sox, так что особой разницы нет.
Запустим ipython и выполним следующие действия:
In [1]: import torchaudio
In [2]: with open('metro.wav', 'rb') as f:
...: y, sr = torchaudio.load(f)
...:
In [3]: from transformers import pipeline
In [4]: asr = pipeline('automatic-speech-recognition', model='antony66/whisper-large-v3-russian', device='cuda', generate_kwargs={"language": "russian", "max_new_tokens": 128}, return_timestamps=False)
In [5]: asr(y[0].numpy())
Out[5]: {'text': 'Осторожно, двери закрываются. Следующая станция — проспект Космонавтов.На следующей станции Космонавтный агрегат.При выходе из вагонов не забывайте свои вещи.'}
Обратите внимание, что вместо оригинальной модели openai/whisper-large-v3 мы используем тюнингнованную модель antony66/whisper-large-v3-russian. Просто замените в коде из примера выше эту модель на оригинальный whisper и вы без труда увидите разницу в качестве не в пользу оригинала.