[Блог] [Бумага] [Карточка модели] [Пример Colab]
Whisper — это универсальная модель распознавания речи. Он обучен на большом наборе данных разнообразного аудио, а также представляет собой многозадачную модель, которая может выполнять многоязычное распознавание речи, перевод речи и идентификацию языка.
Модель Transformer «последовательность-последовательность» обучается различным задачам обработки речи, включая многоязычное распознавание речи, перевод речи, идентификацию разговорного языка и обнаружение речевой активности. Эти задачи совместно представляются в виде последовательности токенов, которые должны быть предсказаны декодером, что позволяет одной модели заменить многие этапы традиционного конвейера обработки речи. В формате многозадачного обучения используется набор специальных токенов, которые служат спецификаторами задач или целями классификации.
Мы использовали Python 3.9.9 и PyTorch 1.10.1 для обучения и тестирования наших моделей, но ожидается, что база кода будет совместима с Python 3.8–3.11 и последними версиями PyTorch. Кодовая база также зависит от нескольких пакетов Python, в первую очередь от tiktoken OpenAI, который обеспечивает быструю реализацию токенизатора. Вы можете загрузить и установить (или обновить) последнюю версию Whisper с помощью следующей команды:
pip install -U openai-whisper
В качестве альтернативы следующая команда извлечет и установит последний коммит из этого репозитория вместе с его зависимостями Python:
pip install git+https://github.com/openai/whisper.git
Чтобы обновить пакет до последней версии этого репозитория, запустите:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
Также требуется, чтобы в вашей системе был установлен инструмент командной строки ffmpeg
, который доступен в большинстве менеджеров пакетов:
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg
# on Arch Linux
sudo pacman -S ffmpeg
# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
Вам также может потребоваться установить rust
, если tiktoken не предоставляет готовое колесо для вашей платформы. Если вы видите ошибки установки во время выполнения приведенной выше команды pip install
, перейдите на страницу «Начало работы», чтобы установить среду разработки Rust. Кроме того, вам может потребоваться настроить переменную среды PATH
, например, export PATH="$HOME/.cargo/bin:$PATH"
. Если установка завершается неудачно с No module named 'setuptools_rust'
, вам необходимо установить setuptools_rust
, например, запустив:
pip install setuptools-rust
Существует шесть размеров моделей, четыре из которых доступны только на английском языке, предлагая компромисс между скоростью и точностью. Ниже приведены названия доступных моделей, их приблизительные требования к памяти и скорость вывода относительно большой модели. Приведенные ниже относительные скорости измерены путем расшифровки английской речи на A100, а реальная скорость может значительно варьироваться в зависимости от многих факторов, включая язык, скорость речи и доступное оборудование.
Размер | Параметры | Модель только на английском языке | Многоязычная модель | Требуемая видеопамять | Относительная скорость |
---|---|---|---|---|---|
крошечный | 39 М | tiny.en | tiny | ~1 ГБ | ~10x |
база | 74 М | base.en | base | ~1 ГБ | ~7x |
маленький | 244 М | small.en | small | ~2 ГБ | ~4x |
середина | 769 М | medium.en | medium | ~5 ГБ | ~2x |
большой | 1550 М | Н/Д | large | ~10 ГБ | 1x |
турбо | 809 М | Н/Д | turbo | ~6 ГБ | ~8x |
Модели .en
для приложений только на английском языке обычно работают лучше, особенно модели tiny.en
и base.en
Мы заметили, что разница становится менее значимой для моделей small.en
и medium.en
. Кроме того, turbo
модель представляет собой оптимизированную версию large-v3
, которая обеспечивает более высокую скорость транскрипции с минимальным ухудшением точности.
Производительность Whisper сильно варьируется в зависимости от языка. На рисунке ниже показана разбивка производительности моделей large-v3
и large-v2
по языкам с использованием WER (частота ошибок в словах) или CER (частота ошибок в символах, показана курсивом ), оцененных на наборах данных Common Voice 15 и Fleurs. Дополнительные метрики WER/CER, соответствующие другим моделям и наборам данных, можно найти в Приложении D.1, D.2 и D.4 к документу, а также баллы BLEU (Двуязычное исследование оценки) для перевода в Приложении D. 3.
Следующая команда транскрибирует речь в аудиофайлах, используя turbo
модель:
whisper audio.flac audio.mp3 audio.wav --model turbo
Настройка по умолчанию (выбирающая turbo
модель) хорошо подходит для транскрипции английского языка. Чтобы расшифровать аудиофайл, содержащий неанглийскую речь, вы можете указать язык, используя опцию --language
:
whisper japanese.wav --language Japanese
Добавление --task translate
переведет речь на английский:
whisper japanese.wav --language Japanese --task translate
Запустите следующую команду, чтобы просмотреть все доступные параметры:
whisper --help
См. tokenizer.py для просмотра списка всех доступных языков.
Транскрипцию также можно выполнить в Python:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
Внутри метод transcribe()
считывает весь файл и обрабатывает аудио с помощью скользящего 30-секундного окна, выполняя авторегрессионный последовательный прогноз для каждого окна.
Ниже приведен пример использования whisper.detect_language()
и whisper.decode()
которые обеспечивают доступ к модели на более низком уровне.
import whisper
model = whisper . load_model ( "turbo" )
# load audio and pad/trim it to fit 30 seconds
audio = whisper . load_audio ( "audio.mp3" )
audio = whisper . pad_or_trim ( audio )
# make log-Mel spectrogram and move to the same device as the model
mel = whisper . log_mel_spectrogram ( audio ). to ( model . device )
# detect the spoken language
_ , probs = model . detect_language ( mel )
print ( f"Detected language: { max ( probs , key = probs . get ) } " )
# decode the audio
options = whisper . DecodingOptions ()
result = whisper . decode ( model , mel , options )
# print the recognized text
print ( result . text )
Пожалуйста, используйте ? Категория «Покажи и расскажи» в «Обсуждениях», чтобы поделиться дополнительными примерами использования Whisper и сторонних расширений, таких как веб-демоверсии, интеграция с другими инструментами, порты для разных платформ и т. д.
Код Whisper и веса моделей выпускаются под лицензией MIT. Дополнительную информацию см. в разделе ЛИЦЕНЗИЯ.