lhotse
机器学习多模态数据处理工具箱,支持语音/音频数据管理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
机器学习多模态数据处理工具箱,支持语音/音频数据管理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景: 你正在训练一个多语言语音识别模型,数据来自十几个不同的开源语料库——有的是标准 Kaldi 格式,有的是 raw WAV 文件,有的是带时间戳的 JSON,转录语言涵盖了中文、英文、德语、日语……每个数据集的格式、采样率、声道数都不尽相同。你花了整整两天写数据预处理脚本,改了又改,调了又调,好不容易跑通了,结果发现训练时数据加载成了新的瓶颈——GPU 在等待数据,整个集群利用率只有 40%。
这就是过去语音和数据领域研究者的日常。正是在这样的背景下,Lhotse 应运而生。
Lhotse 由波兰亚当·密茨凯维奇大学(Adam Mickiewicz University)的语音研究团队开发维护,是新一代 Kaldi 语音处理库的重要组成部分。它的名字来源于藏传佛教中的"南卓"(Namzar,意为引导灵魂的向导),寓意引导 ML 数据流有序流转。
项目由资深语音识别研究者主导开发,核心作者曾在 Interspeech、ASRU 等顶会发表大量论文,对大规模语音数据处理的痛点有深刻理解。Lhotse 于 2021 年在 arXiv 发布论文(arXiv:2110.12561),目前已被广泛应用于 ESPnet、Katna、NeMo 等主流语音处理框架的数据管线中。

Lhotse 的核心抽象是 Cut(切片)——一种统一的数据表示方式。无论原始数据是音频、视频、图像还是文本,只要经过 Lhotse 处理,都会变成一个标准化的 Cut 对象,包含:
这种设计的好处显而易见:数据不冗余,引用即访问,修改即生效。你可以对 Cut 进行切割(cut down)、混叠(mix)、合并(concatenate),所有操作都是元数据级别的,无需实际复制或转码数据。
1. 音频处理(lhotse.audio) 支持任意音频格式,通过 ffmpeg 解码底层支持。支持实时音频流处理、变采样率、声道转换等操作。提供了 Supervision 模块管理时间对齐的标注数据(转录文本、音素标注、说话人标签等)。
2. 特征提取(lhotse.features) 支持多种特征类型:FBank、MFCC、Mel-spectrogram、Whisper features 等。特征提取结果存储为独立文件(可选 Kaldi 格式或 Lhotse 自有格式),训练时按需加载,避免重复计算。提供在线特征提取模式,在训练循环中实时计算所需特征。
3. 切割与操作(lhotse.cut) 提供 MicsCut、PairsCut、CompoundCut 等丰富切割类型,支持:
4. Lhotse Shar(lhotse.shar) Lhotse 的新一代数据格式,类似于 WebDataset,但针对音频/多模态场景优化。特点:
5. 数据集配方(lhotse.recipes) 提供了 30+ 常用语音/音频数据集的标准下载和处理配方,包括 LibriSpeech、Aishell、VoxCeleb、TIMIT、CommonVoice 等。运行一个命令即可完成数据集下载、去重、格式化,输出标准化 CutSet。
6. Kaldi 兼容 内置 Kaldi 格式导入导出功能,方便 Kaldi 用户平滑迁移。兼容 Kaldi 的特征配置(fbank40_melScale、delta 等),降低切换成本。
优点:
挑战:
| 模块 | 技术选型 | 说明 |
|---|---|---|
| 核心语言 | Python 3.8+ | 现代类型注解支持 |
| 数据加载 | PyTorch DataLoader 兼容 | 与 PyTorch 生态无缝集成 |
| 音频解码 | ffmpeg (外部依赖) | 底层解码能力 |
| 特征计算 | Librosa / Kaldi / Sonnet | 支持多种特征提取后端 |
| 序列化 | YAML / JSON / pickle | 灵活的数据持久化 |
| 分布式 | PyTorch DDP / Horovod | 支持多节点训练 |
| HuggingFace | 内置 hf.py | 与 Transformers 数据集直接互操作 |
局限:
行业意义:
Lhotse 是一款面向 ML 研究者和工程师的专业数据准备工具,专注于解决音频/语音/多模态训练数据的标准化管理问题。它不是那种"一键部署"的演示项目,而是一个需要理解其设计理念后才能发挥威力的工具库。
如果你正在从事语音识别、说话人识别、音频事件检测等研究,或者需要处理大规模多模态数据,Lhotse 值得投入时间学习。典型的上手路径是:先在 Colab 上跑通 LibriSpeech 数据集的处理示例,理解 CutSet 的基本操作,再逐步深入到分布式训练和 Shar 格式的使用。