O Lhotse é uma biblioteca Python que visa tornar a preparação de dados de fala e áudio flexível e acessível a uma comunidade mais ampla. Juntamente com o K2, faz parte da próxima geração da Biblioteca de Processamento de Discurso Kaldi.
Atualmente, temos os seguintes tutoriais disponíveis no Diretório examples
:
Confira os links a seguir para ver como o Lhotse está sendo usado para usar:
Como Kaldi, o Lhotse fornece receitas de preparação de dados padrão, mas estende-o com uma integração de pytorch sem costura por meio de classes de dados específicas de tarefas. Os dados e os metadados são representados em texto legível por humanos e expostos ao usuário por meio de classes python convenientes.
O Lhotse apresenta a noção de cortes de áudio, projetados para facilitar a construção de dados de treinamento com operações como mistura, truncamento e preenchimento que são executados na voação para minimizar a quantidade de armazenamento necessária. O aumento de dados e a extração de recursos são suportados no modo pré-computado, com matrizes de recursos altamente compactadas armazenadas no disco e no modo de voo que calcula as transformações mediante solicitação. Além disso, o Lhotse apresenta a mistura de corte no espaço de recursos para tirar o melhor proveito dos dois mundos.
O Lhotse suporta o Python versão 3.7 e posterior.
Lhotse está disponível no Pypi:
pip install lhotse
Para instalar a versão mais recente e não lançada, faça:
pip install git+https://github.com/lhotse-speech/lhotse
Para instalação de desenvolvimento, você pode bifurcar/clonar o repositório do github e instalar com o 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 é uma instalação editável (opção -e
), o que significa que suas alterações no código -fonte são refletidas automaticamente ao importar Lhotse (não é necessário reinstalar). A parte [dev]
significa que você está instalando dependências extras que são usadas para executar testes, criar documentação ou iniciar notebooks Jupyter.
O Lhotse usa várias variáveis de ambiente para personalizar seu comportamento. Eles são os seguintes:
LHOTSE_REQUIRE_TORCHAUDIO
- Quando está definido e não qualquer um dos 1|True|true|yes
, não verificaremos a instalação do Torchaudio e a remover dos requisitos. Ele desativará muitas funcionalidades do LHOTSE, mas os recursos básicos permanecerão (incluindo a leitura de áudio com soundfile
).LHOTSE_AUDIO_DURATION_MISMATCH_TOLERANCE
- usado quando carregamos áudio de um arquivo e recebemos um número diferente de amostras que declaradas em Recording.num_samples
. Às vezes, isso é necessário porque diferentes codecs (ou mesmo versões diferentes do mesmo codec) podem usar preenchimento diferente ao decodificar áudio compactado. Normalmente, os valores de até 0,1, ou mesmo 0,3 (segundo) ainda são razoáveis, e qualquer coisa além disso indica um problema sério.LHOTSE_AUDIO_BACKEND
-pode ser definido como qualquer um dos valores retornados do cli lhotse list-audio-backends
para substituir o comportamento padrão de tentativa e erro e sempre usar um back-end de áudio específico.LHOTSE_AUDIO_LOADING_EXCEPTION_VERBOSE
- Quando definido como 1
Emitiremos traços de pilha de exceção completa quando cada back -end de áudio disponível não carregar um determinado arquivo (eles podem ser muito grandes).LHOTSE_DILL_ENABLED
- Quando estiver definido como 1|True|true|yes
, ativaremos a serialização baseada em dill
CutSet
e Sampler
entre os processos (é desativado por padrão mesmo quando dill
está instalado).LHOTSE_LEGACY_OPUS_LOADING
- ( =1
) reverte para um mecanismo de carregamento de opus herdado que desencadeou um novo subprocesso FFMPEG para cada arquivo de opus.LHOTSE_PREPARING_RELEASE
- usado internamente pelos desenvolvedores ao lançar uma nova versão do Lhotse.TORCHAUDIO_USE_BACKEND_DISPATCHER
- Quando definido como 1
e a versão TorChaudio está abaixo de 2.1, ativaremos o back -end experimental do FFMPEG do TorChaudio.AIS_ENDPOINT
é lido pelo cliente Aistore para determinar o URL do ponto de extremidade Aistore. Necessário para o Aistore Dataloading.RANK
, WORLD_SIZE
, WORKER
e NUM_WORKERS
são usados internamente para informar os subprocessos Lhotse Shar Datalo -ading.READTHEDOCS
é usado internamente para construções de documentação.Outros pacotes de pip. Você pode aproveitar os recursos opcionais do Lhotse, instalando o pacote de suporte relevante:
torchaudio
costumava ser uma dependência central no Lhotse, mas agora é opcional. Consulte a documentação oficial do Pytorch para instalação.pip install lhotse[kaldi]
para um conjunto de recursos máximos relacionado à compatibilidade de Kaldi. Inclui bibliotecas como kaldi_native_io
(uma variante mais eficiente de kaldi_io
) e kaldifeat
que transportam parte da funcionalidade kaldi para o python.pip install lhotse[orjson]
para uma leitura mais rápida de JSONL manifesta.pip install lhotse[webdataset]
. Apoiamos "compilar" seus dados no formato WebDataset Tarball para um IO mais eficaz. Você ainda pode interagir com os dados como se fosse um corte preguiçoso regular. Para saber mais, confira o seguinte tutorial:pip install h5py
se você deseja extrair recursos de fala e armazená -los como matrizes HDF5.pip install dill
. Quando dill
estiver instalado, usaremos o CETSET PICLELE que usa uma função lambda em chamadas como .map
ou .filter
. Isso é útil no Pytorch Dataloader com num_jobs>0
. Sem dill
, dependendo do seu ambiente, você verá uma exceção ou um script suspenso.pip install aistore
para ler manifestos, alcatrão e outros dados do Aistore usando URLs apoiados por Aistore (Defina a variável de ambiente AIS_ENDPOINT
para ativá-lo). Consulte a documentação do Aistore para obter mais detalhes.pip install smart_open
para ler e gravar manifestos e dados em qualquer local suportado por smart_open
(por exemplo, nuvem, http).pip install opensmile
para extração de recursos usando o wrapper Python do OpenSmile Toolkit.SPH2Pipe. Para ler arquivos de áudio mais antigos da Sphere LDC (.SPH) que são compactados com codecs sem suporte pelo FFMPEG e SOX, execute:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
Ele o baixará para ~/.lhotse/tools
, compilará e registrará automaticamente o PATH
. O programa deve ser detectado e usado automaticamente pelo Lhotse.
Temos receitas de exemplo mostrando como preparar dados e carregá -los no Python como um Dataset
Pytorch. Eles estão localizados no diretório examples
.
Um trecho curto para mostrar como o Lhotse pode tornar a preparação dos dados de áudio rápida e 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 ))
O VadDataset
produzirá um lote com pares de tensores de recursos e supervisão, como o seguinte - o discurso começa aproximadamente no primeiro segundo (100 quadros):