LHOTSE是一个Python图书馆,旨在使更广泛的社区灵活且可访问语音和音频数据准备。与K2一起,它是下一代Kaldi演讲处理库的一部分。
目前,我们在examples
目录中可用以下教程:
查看以下链接以查看如何使用LHOTSE:
像Kaldi一样,LHOTSE提供了标准的数据准备配方,但是通过特定于任务的数据集类别通过无缝的Pytorch集成扩展了这一点。数据和元数据在人类可读的文本表现中表示,并通过方便的Python类暴露于用户。
LHOTSE介绍了音频削减的概念,旨在通过诸如混合,截断和填充之类的操作来简化训练数据构建,这些操作是在即时执行的,以最大程度地减少所需的存储量。数据增强和特征提取都在预计模式下支持,并在磁盘上存储了高度压缩的特征矩阵,并且可以根据要求计算转换的直通模式。此外,LHOTSE引入了功能空间切割混合,以尽两者充分。
LHOTSE支持Python版本3.7及更高版本。
LHOTSE可在PYPI上找到:
pip install lhotse
要安装最新的未发行版本,请执行:
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
,当每个可用音频后端无法加载给定文件时,我们将发射Full Exception堆栈跟踪(它们可能很大)。LHOTSE_DILL_ENABLED
将其设置为1|True|true|yes
,我们将跨进程启用dill
的CutSet
和Sampler
的序列化(即使安装了dill
,默认情况下也可以禁用它)。LHOTSE_LEGACY_OPUS_LOADING
-( =1
)恢复为遗留操作加载机制,该机制触发了每个opus文件的新FFMPEG子程序。LHOTSE_PREPARING_RELEASE
开发人员在发布新版本的LHOTSE时内部使用。TORCHAUDIO_USE_BACKEND_DISPATCHER
设置为1
,Torchaudio版本低于2.1,我们将启用Torchaudio的实验FFMPEG后端。AIS_ENDPOINT
,以确定AISTORE端点URL。 AISTORE DATALOADING所需。RANK
, WORLD_SIZE
, WORKER
和NUM_WORKERS
内部用于通知lhotse shar dataLoading子流程。READTHEDOCS
内部用于文档构建。其他PIP包。您可以通过安装相关的支持软件包来利用LHOTSE的可选功能:
torchaudio
曾经是LHOTSE的核心依赖性,但现在是可选的。请参阅官方的Pytorch文档以进行安装。pip install lhotse[kaldi]
用于与Kaldi兼容性相关的最大功能集。它包括库,例如kaldi_native_io
( kaldi_io
的更有效变体)和kaldifeat
,并将某些Kaldi功能移植到Python中。pip install lhotse[orjson]
最多可以更快地读取JSONL表现。pip install lhotse[webdataset]
。我们支持将您的数据“编译”到WebDataSet Tarball格式中,以提高IO。您仍然可以与数据互动,就好像是常规的懒惰切割机一样。要了解更多信息,请查看以下教程:pip install h5py
如果要提取语音功能并将其存储为HDF5阵列。pip install dill
。安装dill
时,我们将其用于在诸如.map
或.filter
之类的呼叫中使用lambda功能的泡菜切割集。这对于使用num_jobs>0
Pytorch数据加载器很有帮助。没有dill
,根据您的环境,您会看到一个例外或悬挂脚本。pip install aistore
使用Aistore支持的URL(设置AIS_ENDPOINT
环境变量以激活IT)来读取清单,焦油蝇和其他数据。有关更多详细信息,请参见Aistore文档。pip install smart_open
以读写清单和数据在smart_open
支持的任何位置(例如云,HTTP)。pip install opensmile
用于使用OpenSmile Toolkit的Python包装器进行特征提取。Sph2 -Pipe。要读取旧的LDC Sphere(.sph)音频文件,这些文件被FFMPEG和SOX不支持的编解码器压缩,请运行:
# CLI
lhotse install-sph2pipe
# Python
from lhotse.tools import install_sph2pipe
install_sph2pipe()
它将将其下载到~/.lhotse/tools
,对其进行编译,并在PATH
中自动注册。 LHOTSE应自动检测并使用该程序。
我们有示例配方显示如何准备数据并将其加载到Python中,作为Pytorch Dataset
。它们位于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帧):