Lhotse - это библиотека Python, направленная на то, чтобы сделать подготовку речи и аудиодатчиков гибкой и доступной для более широкого сообщества. Наряду с K2, он является частью библиотеки обработки речи Kaldi следующего поколения.
В настоящее время у нас есть следующие учебники, доступные в каталоге examples
:
Проверьте следующие ссылки, чтобы увидеть, как Lhotse используется:
Как и Kaldi, Lhotse предоставляет стандартные рецепты подготовки данных, но расширяет их с помощью беспроблемной интеграции Pytorch с помощью специфических для задач классов наборов данных. Данные и мета-дата представлены в прочитаемых человеком текстовых манифестах и подвергаются воздействию пользователя с помощью удобных классов Python.
Lhotse представляет представление о сокращениях аудио, предназначенное для облегчения конструкции обучающих данных с такими операциями, как смешивание, усечение и прокладка, которые выполняются на лете, чтобы минимизировать количество необходимого хранилища. Увеличение данных и извлечение функций поддерживаются как в предварительно вычисленном режиме, так как высоко сжатые матрицы функций хранятся на диске, так и на лете, который вычисляет преобразования по запросу. Кроме того, Lhotse представляет микширование с участием в пространстве, чтобы сделать лучшее из обоих миров.
Lhotse поддерживает Python версию 3.7 и позже.
Lhotse доступен на PYPI:
pip install lhotse
Чтобы установить последнюю, не выпущенную версию, Do:
pip install git+https://github.com/lhotse-speech/lhotse
Для установки разработки вы можете разветвлять/клонировать репо GitHub и установить с помощью PIP:
git clone https://github.com/lhotse-speech/lhotse
cd lhotse
pip install -e '.[dev]'
pre-commit install # installs pre-commit hooks with style checks
# Running unit tests
pytest test
# Running linter checks
pre-commit run
Это редактируемая установка (опция -e
), что означает, что ваши изменения в исходном коде автоматически отражаются при импорте Lhotse (не требуется переустановка). Часть [dev]
означает, что вы устанавливаете дополнительные зависимости, которые используются для запуска тестов, строительства документации или запуска ноутбуков Jupyter.
Lhotse использует несколько переменных среды для настройки его поведения. Они следующие:
LHOTSE_REQUIRE_TORCHAUDIO
- Когда он установлен, а не что -либо из 1|True|true|yes
, мы не проверем, чтобы установить Torchaudio и удалить его из требований. Он отключит многие функции Lhotse, но основные возможности останутся (включая чтение звука с помощью soundfile
).LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE
- Используется при загрузке аудио из файла и получаем другое количество образцов, чем объявлено в Recording.num_samples
. Иногда это необходимо, потому что разные кодеки (или даже разные версии одного и того же кодека) могут использовать различную прокладку при декодировании сжатого звука. Обычно значения до 0,1 или даже 0,3 (второй) все еще разумны, и все, что за пределами, указывает на серьезную проблему.LHOTSE_AUDIO_BACKEND
-может быть установлен на любом из значений, возвращаемых из Cli lhotse list-audio-backends
чтобы переопределить поведение по умолчанию в проб и ошибках и всегда использовать конкретный бэкэнд звука.LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE
- Когда установлено на 1
мы издаем полные трассировки стека исключений, когда каждая доступная аудио -бэкэнд не может загружать заданный файл (они могут быть очень большими).LHOTSE_DILL_ENABLED
- Когда он устанавливается на 1|True|true|yes
, мы включим сериализацию CutSet
и Sampler
, основанную на dill
между процессами (он отключен по умолчанию, даже при установке dill
).LHOTSE_LEGACY_OPUS_LOADING
- ( =1
) возвращается к устаревшему механизму загрузки опуса, который запустил новый подпроцесс FFMPEG для каждого файла Opus.LHOTSE_PREPARING_RELEASE
- Используется внутренне разработчиками при выпуске новой версии Lhotse.TORCHAUDIO_USE_BACKEND_DISPATCHER
- Когда установлено 1
, а версия Torchaudio ниже 2.1, мы включим экспериментальный FFMPEG Backend of Torchaudio.AIS_ENDPOINT
читается Aistore Client, чтобы определить URL Endpoint Aistore. Требуется для Aistore DataLoading.RANK
, WORLD_SIZE
, WORKER
и NUM_WORKERS
внутренне используются для информирования подпроцессов Lhotse Share DataLoading.READTHEDOCS
внутренне используется для сборки документации.Другие пакеты PIP. Вы можете использовать дополнительные функции Lhotse, установив соответствующий вспомогательный пакет:
torchaudio
был основной зависимостью в Lhotse, но теперь является необязательным. Обратитесь к официальной документации Pytorch для установки.pip install lhotse[kaldi]
для максимального набора функций, связанных с совместимостью Kaldi. Он включает в себя такие библиотеки, как kaldi_native_io
(более эффективный вариант kaldi_io
) и kaldifeat
, которые переносят некоторые функции Kaldi в Python.pip install lhotse[orjson]
для более 50% более быстрого чтения манифестов JSONL.pip install lhotse[webdataset]
. Мы поддерживаем «компилирование» ваших данных в формат WebDataset Tarball для более эффективного ввода -вывода. Вы все еще можете взаимодействовать с данными, как будто это был обычный ленивый разрез. Чтобы узнать больше, ознакомьтесь с следующим учебником:pip install h5py
если вы хотите извлечь речевые функции и хранить их в качестве массивов HDF5.pip install dill
. Когда dill
будет установлен, мы будем использовать его для раскола Cutset, которая использует функцию Lambda в таких вызовах, как .map
или .filter
. Это полезно в DataLoader Pytorch с num_jobs>0
. Без dill
, в зависимости от вашей среды, вы увидите исключение или подвесной сценарий.pip install aistore
для чтения манифестов, смолы и других данных из Aistore с использованием URL-адресов, поддерживаемых Эйстором (установите переменную среды AIS_ENDPOINT
для ее активации). Смотрите документацию Aistore для получения более подробной информации.pip install smart_open
для чтения и записи манифестов и данных в любом месте, поддерживаемом smart_open
(например, Cloud, HTTP).pip install opensmile
для извлечения функций, используя обертку Python OpenSmile Toolkit.SPH2PIPE. Для чтения более старых аудиофайлов сферы LDC (.SPH), которые сжимаются с кодеками, не поддерживаемыми FFMPEG и SOX, пожалуйста, запустите:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
Он загрузит его на ~/.lhotse/tools
, скомпилируйте его и автоматически регистрируется в PATH
. Программа должна быть автоматически обнаружена и использована Lhotse.
У нас есть примеры рецептов, показывающих, как подготовить данные и загрузить их в Python в качестве Dataset
Pytorch. Они расположены в каталоге examples
.
Короткий фрагмент, чтобы показать, как Lhotse может сделать подготовку аудиодатчиков быстрой и простым:
from torch . utils . data import DataLoader
from lhotse import CutSet , Fbank
from lhotse . dataset import VadDataset , SimpleCutSampler
from lhotse . recipes import prepare_switchboard
# Prepare data manifests from a raw corpus distribution.
# The RecordingSet describes the metadata about audio recordings;
# the sampling rate, number of channels, duration, etc.
# The SupervisionSet describes metadata about supervision segments:
# the transcript, speaker, language, and so on.
swbd = prepare_switchboard ( '/export/corpora3/LDC/LDC97S62' )
# CutSet is the workhorse of Lhotse, allowing for flexible data manipulation.
# We create 5-second cuts by traversing SWBD recordings in windows.
# No audio data is actually loaded into memory or stored to disk at this point.
cuts = CutSet . from_manifests (
recordings = swbd [ 'recordings' ],
supervisions = swbd [ 'supervisions' ]
). cut_into_windows ( duration = 5 )
# We compute the log-Mel filter energies and store them on disk;
# Then, we pad the cuts to 5 seconds to ensure all cuts are of equal length,
# as the last window in each recording might have a shorter duration.
# The padding will be performed once the features are loaded into memory.
cuts = cuts . compute_and_store_features (
extractor = Fbank (),
storage_path = 'feats' ,
num_jobs = 8
). pad ( duration = 5.0 )
# Construct a Pytorch Dataset class for Voice Activity Detection task:
dataset = VadDataset ()
sampler = SimpleCutSampler ( cuts , max_duration = 300 )
dataloader = DataLoader ( dataset , sampler = sampler , batch_size = None )
batch = next ( iter ( dataloader ))
VadDataset
даст партию с парами тензоров функций и надзора, таких как следующее - речь начинается примерно в первую секунду (100 кадров):