音频课程文档
流式音频数据
并获得增强的文档体验
开始使用
流式音频数据
音频数据集面临的最大挑战之一是它们庞大的规模。一分钟未压缩的 CD 音质音频(44.1kHz,16 位)占用略多于 5MB 的存储空间。通常,一个音频数据集包含数小时的录音。
在前几节中,我们使用了 MINDS-14 音频数据集的一个非常小的子集,然而,典型的音频数据集要大得多。例如,来自 SpeechColab 的 GigaSpeech 的 xs
(最小)配置仅包含 10 小时的训练数据,但下载和准备需要超过 13GB 的存储空间。那么,当我们想要在更大的分割上进行训练时会发生什么呢?同一数据集的完整 xl
配置包含 10,000 小时的训练数据,需要超过 1TB 的存储空间。对于我们大多数人来说,这远远超出了典型硬盘驱动器的规格。我们需要掏钱购买额外的存储空间吗?或者有没有一种方法可以在没有磁盘空间限制的情况下训练这些数据集?
🤗 Datasets 通过提供流式模式来解救我们。流式传输允许我们在迭代数据集时逐步加载数据。我们不是一次性下载整个数据集,而是一次加载一个数据集示例。我们迭代数据集,在需要时动态加载和准备示例。这样,我们只加载我们正在使用的示例,而不是我们没有使用的示例!一旦我们完成了一个示例样本,我们继续迭代数据集并加载下一个示例。
与一次性下载整个数据集相比,流式模式具有三个主要优势
- 磁盘空间:示例在我们迭代数据集时逐个加载到内存中。由于数据未在本地下载,因此没有磁盘空间要求,因此您可以使用任意大小的数据集。
- 下载和处理时间:音频数据集很大,需要大量时间下载和处理。通过流式传输,加载和处理是动态完成的,这意味着您可以在第一个示例准备就绪后立即开始使用数据集。
- 轻松实验:您可以在少量示例上进行实验,以检查您的脚本是否有效,而无需下载整个数据集。
流式模式有一个需要注意的地方。当在不进行流式传输的情况下下载完整数据集时,原始数据和处理后的数据都将本地保存到磁盘。如果我们想重新使用此数据集,我们可以直接从磁盘加载处理后的数据,从而跳过下载和处理步骤。因此,我们只需要执行一次下载和处理操作,之后我们可以重新使用准备好的数据。
使用流式模式,数据不会下载到磁盘。因此,下载的数据和预处理的数据都不会被缓存。如果我们想重新使用数据集,则必须重复流式传输步骤,并再次动态加载和处理音频文件。因此,建议下载您可能多次使用的数据集。
如何启用流式模式?很简单!只需在加载数据集时设置 streaming=True
即可。剩下的事情将为您处理
gigaspeech = load_dataset("speechcolab/gigaspeech", "xs", streaming=True)
就像我们对 MINDS-14 的下载子集应用预处理步骤一样,您可以使用完全相同的方式对流式数据集执行相同的预处理。
唯一的区别是您不能再使用 Python 索引(即 gigaspeech["train"][sample_idx]
)访问单个样本。相反,您必须迭代数据集。以下是如何在流式传输数据集时访问示例的方法
next(iter(gigaspeech["train"]))
输出
{
"segment_id": "YOU0000000315_S0000660",
"speaker": "N/A",
"text": "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>",
"audio": {
"path": "xs_chunks_0000/YOU0000000315_S0000660.wav",
"array": array(
[0.0005188, 0.00085449, 0.00012207, ..., 0.00125122, 0.00076294, 0.00036621]
),
"sampling_rate": 16000,
},
"begin_time": 2941.89,
"end_time": 2945.07,
"audio_id": "YOU0000000315",
"title": "Return to Vasselheim | Critical Role: VOX MACHINA | Episode 43",
"url": "https://www.youtube.com/watch?v=zr2n1fLVasU",
"source": 2,
"category": 24,
"original_full_path": "audio/youtube/P0004/YOU0000000315.opus",
}
如果您想预览大型数据集中的几个示例,请使用 take()
获取前 n 个元素。让我们获取 gigaspeech 数据集中的前两个示例
gigaspeech_head = gigaspeech["train"].take(2)
list(gigaspeech_head)
输出
[
{
"segment_id": "YOU0000000315_S0000660",
"speaker": "N/A",
"text": "AS THEY'RE LEAVING <COMMA> CAN KASH PULL ZAHRA ASIDE REALLY QUICKLY <QUESTIONMARK>",
"audio": {
"path": "xs_chunks_0000/YOU0000000315_S0000660.wav",
"array": array(
[
0.0005188,
0.00085449,
0.00012207,
...,
0.00125122,
0.00076294,
0.00036621,
]
),
"sampling_rate": 16000,
},
"begin_time": 2941.89,
"end_time": 2945.07,
"audio_id": "YOU0000000315",
"title": "Return to Vasselheim | Critical Role: VOX MACHINA | Episode 43",
"url": "https://www.youtube.com/watch?v=zr2n1fLVasU",
"source": 2,
"category": 24,
"original_full_path": "audio/youtube/P0004/YOU0000000315.opus",
},
{
"segment_id": "AUD0000001043_S0000775",
"speaker": "N/A",
"text": "SIX TOMATOES <PERIOD>",
"audio": {
"path": "xs_chunks_0000/AUD0000001043_S0000775.wav",
"array": array(
[
1.43432617e-03,
1.37329102e-03,
1.31225586e-03,
...,
-6.10351562e-05,
-1.22070312e-04,
-1.83105469e-04,
]
),
"sampling_rate": 16000,
},
"begin_time": 3673.96,
"end_time": 3675.26,
"audio_id": "AUD0000001043",
"title": "Asteroid of Fear",
"url": "http//www.archive.org/download/asteroid_of_fear_1012_librivox/asteroid_of_fear_1012_librivox_64kb_mp3.zip",
"source": 0,
"category": 28,
"original_full_path": "audio/audiobook/P0011/AUD0000001043.opus",
},
]
流式模式可以将您的研究提升到一个新的水平:您不仅可以访问最大的数据集,而且可以轻松地一次评估多个数据集上的系统,而无需担心磁盘空间。与在单个数据集上进行评估相比,多数据集评估为语音识别系统的泛化能力提供了更好的指标(参见端到端语音基准 (ESB))。
< > 在 GitHub 上更新