Lhotse es una biblioteca de Python con el objetivo de hacer que la preparación de datos de voz y audio sea flexible y accesible para una comunidad más amplia. Junto a K2, es parte de la biblioteca de procesamiento de discursos Kaldi de próxima generación.
Actualmente tenemos los siguientes tutoriales disponibles en el directorio examples
:
Consulte los siguientes enlaces para ver cómo se está utilizando Lhotse:
Al igual que Kaldi, Lhotse proporciona recetas estándar de preparación de datos, pero extiende eso con una integración de Pytorch sin problemas a través de clases de conjunto de datos específicos de tareas. Los datos y los meta-data están representados en manifiestas de texto legibles por humanos y se exponen al usuario a través de convenientes clases de Python.
Lhotse presenta la noción de cortes de audio, diseñados para aliviar la construcción de datos de entrenamiento con operaciones como mezcla, truncamiento y relleno que se realizan sobre la marcha para minimizar la cantidad de almacenamiento requerida. El aumento de datos y la extracción de características son compatibles tanto en modo precomputado, con matrices de características altamente comprimidas almacenadas en el disco como en modo sobre la marcha que calcula las transformaciones a pedido. Además, Lhotse presenta una mezcla de corte de espacio-espacio para aprovechar al máximo ambos mundos.
Lhotse admite Python versión 3.7 y más tarde.
Lhotse está disponible en PYPI:
pip install lhotse
Para instalar la última versión inédita, do:
pip install git+https://github.com/lhotse-speech/lhotse
Para la instalación de desarrollo, puede bifurcar/clonar el repositorio de GitHub e instalar con 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
Esta es una instalación editable ( -e
opción), lo que significa que sus cambios en el código fuente se reflejan automáticamente al importar LHOTSE (no se necesita reinstalar). La parte [dev]
significa que está instalando dependencias adicionales que se utilizan para ejecutar pruebas, construir documentación o iniciar cuadernos Jupyter.
Lhotse utiliza varias variables de entorno para personalizar su comportamiento. Son los siguientes:
LHOTSE_REQUIRE_TORCHAUDIO
: cuando está configurado y no ninguno de 1|True|true|yes
, no verificaremos si Torchaudio se instala y lo eliminaremos de los requisitos. Deshabilitará muchas funcionalidades de LHOTSE, pero las capacidades básicas permanecerán (incluida la lectura de audio con soundfile
).LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE
: se usa cuando cargamos audio desde un archivo y recibimos un número diferente de muestras que las declaradas en Recording.num_samples
. Esto a veces es necesario porque diferentes códecs (o incluso diferentes versiones del mismo códec) pueden usar diferentes rellenos al decodificar el audio comprimido. Por lo general, los valores de hasta 0.1, o incluso 0.3 (segundo) siguen siendo razonables, y cualquier cosa más allá de eso indica un problema grave.LHOTSE_AUDIO_BACKEND
-se puede establecer en cualquiera de los valores devueltos de CLI lhotse list-audio-backends
para anular el comportamiento predeterminado de prueba y error y siempre use un backend de audio específico.LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE
: cuando se establezca en 1
emitiremos trazas completas de la pila de excepciones cuando cada backend de audio disponible no cargue un archivo determinado (podrían ser muy grandes).LHOTSE_DILL_ENABLED
: cuando está configurado en 1|True|true|yes
, habilitaremos la serialización basada en dill
de CutSet
y Sampler
en los procesos (está deshabilitado de forma predeterminada incluso cuando dill
está instalado).LHOTSE_LEGACY_OPUS_LOADING
- ( =1
) Revertida a un mecanismo de carga OPUS heredado que desencadenó un nuevo subproceso FFMPEG para cada archivo Opus.LHOTSE_PREPARING_RELEASE
- Utilizado internamente por los desarrolladores al lanzar una nueva versión de LHOTSE.TORCHAUDIO_USE_BACKEND_DISPATCHER
: cuando se establece en 1
y la versión de Torchaudio está por debajo de 2.1, habilitaremos el backend experimental FFMPEG de Torchaudio.AIS_ENDPOINT
es leída por el cliente Aistore para determinar la URL de punto final AISTORE. Requerido para Aistore DataLoading.RANK
, WORLD_SIZE
, WORKER
y NUM_WORKERS
se utilizan internamente para informar a los subprocesos de DataTeo de Lhotse.READTHEDOCS
se usa internamente para compilaciones de documentación.Otros paquetes PIP. Puede aprovechar las características opcionales de LHOTSE instalando el paquete de soporte relevante:
torchaudio
solía ser una dependencia central en Lhotse, pero ahora es opcional. Consulte la documentación oficial de Pytorch para la instalación.pip install lhotse[kaldi]
para un conjunto de características máximo relacionado con la compatibilidad de Kaldi. Incluye bibliotecas como kaldi_native_io
(una variante más eficiente de kaldi_io
) y kaldifeat
que portan parte de la funcionalidad de Kaldi en Python.pip install lhotse[orjson]
para una lectura hasta un 50% más rápida de los manifiestos JSONL.pip install lhotse[webdataset]
. Apoyamos "compilar" sus datos en el formato de tarball WebDataSet para un IO más efectivo. Aún puede interactuar con los datos como si fuera un recorte perezoso regular. Para obtener más información, consulte el siguiente tutorial:pip install h5py
si desea extraer funciones del habla y guárdelas como matrices HDF5.pip install dill
. Cuando esté instalado en dill
, lo usaremos en Pickle Cutset que usa una función Lambda en llamadas como .map
o .filter
. Esto es útil en Pytorch DataLoader con num_jobs>0
. Sin dill
, dependiendo de su entorno, verá una excepción o un script colgante.pip install aistore
para leer manifiestas, tallas de alquitrán y otros datos de AISTORE utilizando URL respaldadas por Aistore (Establezca la variable de entorno AIS_ENDPOINT
para activarlo). Consulte la documentación de Aistore para obtener más detalles.pip install smart_open
para leer y escribir manifestaciones y datos en cualquier ubicación compatible con smart_open
(por ejemplo, Cloud, HTTP).pip install opensmile
para la extracción de características utilizando el envoltorio Python de OpenSmile Toolkit.sph2pipe. Para leer archivos de audio LDC Sphere (.sph) más antiguos que están comprimidos con códecs sin apoyo por FFMPEG y SOX, ejecute:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
Lo descargará a ~/.lhotse/tools
, lo compilará y se registrará automáticamente en PATH
. El programa debe ser detectado y utilizado automáticamente por LHOTSE.
Tenemos recetas de ejemplo que muestran cómo preparar datos y cargarlos en Python como un Dataset
de Pytorch. Se encuentran en el directorio examples
.
Un fragmento corto para mostrar cómo Lhotse puede hacer que la preparación de datos de audio sea rápida y fácil:
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 ))
El VadDataset
producirá un lote con pares de tensores de características y supervisión, como los siguientes: el discurso comienza aproximadamente en el primer segundo (100 cuadros):