音频课程文档

流式传输音频数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

流式传输音频数据

音频数据集面临的最大挑战之一是它们的庞大体积。一分钟未压缩的CD质量音频(44.1kHz,16位)需要占用超过5MB的存储空间。通常,一个音频数据集会包含数小时的录音。

在前面的部分中,我们使用了MINDS-14音频数据集的一个非常小的子集,然而,典型的音频数据集要大得多。例如,SpeechColab的GigaSpeechxs(最小)配置只包含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 上更新