LHOTSE est une bibliothèque Python visant à rendre la préparation des données de la parole et audio flexible et accessible à une communauté plus large. Parallèlement à K2, il fait partie de la prochaine génération de la bibliothèque de traitement de la parole Kaldi.
Nous avons actuellement les tutoriels suivants disponibles dans examples
répertoire:
Consultez les liens suivants pour voir comment LhotSe est utilisé:
Comme Kaldi, LHOTSE fournit des recettes de préparation de données standard, mais l'étend avec une intégration pytorch transparente via des classes de données spécifiques à la tâche. Les données et les méta-données sont représentées dans des manifestes de texte lisibles par l'homme et exposés à l'utilisateur via des classes Python pratiques.
LHOTSE présente la notion de coupes audio, conçues pour faciliter la construction de données d'entraînement avec des opérations telles que le mélange, la troncature et le rembourrage qui sont effectués à la volée pour minimiser la quantité de stockage requise. L'augmentation des données et l'extraction des fonctionnalités sont prises en charge à la fois en mode pré-calculé, avec des matrices de fonctionnalités hautement compressées stockées sur le disque et le mode à la volée qui calcule les transformations sur demande. De plus, LHOTSE introduit un mélange de coupe d'espace de fonctionnalité pour tirer le meilleur parti des deux mondes.
LHOTSE prend en charge Python version 3.7 et plus tard.
LHOTSE est disponible sur PYPI:
pip install lhotse
Pour installer la dernière version inédite, faites:
pip install git+https://github.com/lhotse-speech/lhotse
Pour l'installation de développement, vous pouvez débarquer / cloner le repo github et installer avec 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
Il s'agit d'une installation modifiable (option -e
), ce qui signifie que vos modifications au code source sont automatiquement reflétées lors de l'importation de LHOTSE (aucune réinstaller nécessaire). La pièce [dev]
signifie que vous installez des dépendances supplémentaires qui sont utilisées pour exécuter des tests, créer une documentation ou lancer des ordinateurs portables Jupyter.
LHOTSE utilise plusieurs variables d'environnement pour personnaliser son comportement. Ils sont les suivants:
LHOTSE_REQUIRE_TORCHAUDIO
- Lorsqu'il est défini et pas 1|True|true|yes
, nous ne vérifierons pas l'installation de Torchaudio et la supprime des exigences. Il désactivera de nombreuses fonctionnalités de LHOTSE, mais les capacités de base resteront (y compris la lecture de l'audio avec soundfile
).LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE
- Utilisé lorsque nous chargeons l'audio à partir d'un fichier et recevons un nombre différent d'échantillons de celui déclaré dans Recording.num_samples
. Ceci est parfois nécessaire car différents codecs (ou même différentes versions du même codec) peuvent utiliser un rembourrage différent lors du décodage de l'audio compressé. Généralement, les valeurs jusqu'à 0,1, voire 0,3 (deuxième) sont toujours raisonnables, et tout ce qui est au-delà qui indique un problème grave.LHOTSE_AUDIO_BACKEND
- peut être défini sur l'une des valeurs renvoyées de CLI lhotse list-audio-backends
pour remplacer le comportement par défaut des essais et erreurs et utiliser toujours un backend audio spécifique.LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE
- Lorsque nous définirons 1
nous émettons des traces de pile d'exception complètes lorsque chaque backend audio disponible ne charge pas un fichier donné (ils pourraient être très grands).LHOTSE_DILL_ENABLED
- Lorsqu'il est défini sur 1|True|true|yes
, nous activerons la sérialisation basée sur dill
de CutSet
et Sampler
entre les processus (il est désactivé par défaut même lorsque dill
est installé).LHOTSE_LEGACY_OPUS_LOADING
- ( =1
) revient à un mécanisme de chargement d'opus hérité qui a déclenché un nouveau sous-processus FFMPEG pour chaque fichier OPUS.LHOTSE_PREPARING_RELEASE
- utilisé en interne par les développeurs lors de la publication d'une nouvelle version de LHOTSE.TORCHAUDIO_USE_BACKEND_DISPATCHER
- Lorsque vous êtes réglé sur 1
et que la version Torchaudio est inférieure à 2.1, nous allons activer le backend FFMPEG expérimental de Torchaudio.AIS_ENDPOINT
est lu par le client Aistore pour déterminer l'URL de point de terminaison Aistore. Requis pour la mise de données Aistore.RANK
, WORLD_SIZE
, WORKER
et NUM_WORKERS
sont utilisés en interne pour éclairer les sous-processus de mise en œuvre de données LHOTSE.READTHEDOCS
est utilisé en interne pour les burits de documentation.Autres packages PIP. Vous pouvez tirer parti des fonctionnalités facultatives de LHOTSE en installant le package de support pertinent:
torchaudio
était autrefois une dépendance de base dans LHOTSE, mais est désormais facultative. Reportez-vous à la documentation officielle de Pytorch pour l'installation.pip install lhotse[kaldi]
pour un ensemble de fonctionnalités maximal lié à la compatibilité Kaldi. Il comprend des bibliothèques telles que kaldi_native_io
(une variante plus efficace de kaldi_io
) et kaldifeat
qui portent une partie de la fonctionnalité de Kaldi dans Python.pip install lhotse[orjson]
pour une lecture jusqu'à 50% plus rapide des manifestes JSONL.pip install lhotse[webdataset]
. Nous prenons en charge la «compilation» de vos données dans le format de tarball WebDataset pour une IO plus efficace. Vous pouvez toujours interagir avec les données comme s'il s'agissait d'une coupe paresseuse régulière. Pour en savoir plus, consultez le tutoriel suivant:pip install h5py
si vous souhaitez extraire les fonctionnalités de la parole et les stocker sous forme de tableaux HDF5.pip install dill
. Lorsque dill
est installé, nous l'utiliserons pour Pickle Cutset qui utilise une fonction lambda dans des appels tels que .map
ou .filter
. Ceci est utile dans Pytorch DatalOader avec num_jobs>0
. Sans dill
, selon votre environnement, vous verrez une exception ou un script suspendu.pip install aistore
pour lire les manifestes, les trames de goudron et d'autres données d'Aistore à l'aide d'URL soutenues par Aistore (définissez la variable d'environnement AIS_ENDPOINT
pour l'activer). Voir la documentation Aistore pour plus de détails.pip install smart_open
pour lire et écrire des manifestes et des données dans n'importe quel emplacement pris en charge par smart_open
(par exemple Cloud, HTTP).pip install opensmile
pour l'extraction des fonctionnalités à l'aide de l'emballage Python de la boîte à outils OpenSmile.SPH2Pipe. Pour lire les fichiers audio LDC Sphere (.SPH) plus anciens compressés avec des codecs non pris en charge par FFMPEG et SOX, veuillez exécuter:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
Il le téléchargera sur ~/.lhotse/tools
, le compilera et se regarde automatiquement dans PATH
. Le programme doit être automatiquement détecté et utilisé par LHOTSE.
Nous avons des exemples de recettes montrant comment préparer les données et les charger dans Python en tant que Dataset
Pytorch. Ils sont situés dans le répertoire examples
.
Un extrait court pour montrer comment LHOTSE peut rendre la préparation des données audio rapidement et facile:
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 ))
Le VadDataset
produira un lot avec des paires de fonctions de fonctionnalité et de supervision telles que les suivantes - le discours commence à peu près à la première seconde (100 images):