音频课程文档

流式音频数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验的访问权限

开始使用

流式音频数据

音频数据集面临的最大挑战之一是其庞大的规模。一分钟未压缩的 CD 质量音频(44.1kHz,16 位)占用的存储空间略高于 5 MB。通常,音频数据集包含数小时的录音。

在前面的部分中,我们使用了 MINDS-14 音频数据集的一个非常小的子集,但是,典型的音频数据集要大得多。例如,SpeechColab 的 GigaSpeechxs(最小)配置仅包含 10 个小时的训练数据,但下载和准备需要超过 13GB 的存储空间。那么当我们想要在更大的拆分上进行训练时会发生什么?相同数据集的完整 xl 配置包含 10,000 个小时的训练数据,需要超过 1TB 的存储空间。对于我们大多数人来说,这远远超过了典型硬盘的规格。我们需要拿出额外的存储空间吗?或者有没有办法在没有磁盘空间限制的情况下训练这些数据集?

🤗 数据集通过提供流式模式来解救。流式传输允许我们在迭代数据集时逐步加载数据。我们不是一次性下载整个数据集,而是一次加载一个示例。我们迭代数据集,在需要时动态加载和准备示例。这样,我们只加载正在使用的示例,而不是没有使用的示例!完成示例样本后,我们将继续迭代数据集并加载下一个样本。

流式模式与一次下载整个数据集相比有三个主要优势

  • 磁盘空间:在迭代数据集时,示例将逐个加载到内存中。由于数据不是本地下载的,因此没有磁盘空间要求,因此您可以使用任意大小的数据集。
  • 下载和处理时间:音频数据集很大,需要大量时间才能下载和处理。使用流式传输,加载和处理是在运行时完成的,这意味着您可以在第一个示例准备就绪后立即开始使用数据集。
  • 轻松实验:您可以在少量示例上进行实验,以检查您的脚本是否有效,而无需下载整个数据集。

流式模式有一个注意事项。在没有流式传输的情况下下载完整数据集时,原始数据和处理后的数据都将保存在本地磁盘上。如果我们想再次使用此数据集,我们可以直接从磁盘加载处理后的数据,跳过下载和处理步骤。因此,我们只需要执行一次下载和处理操作,之后就可以重复使用准备好的数据。

使用流式模式,数据不会下载到磁盘。因此,下载的数据和预处理的数据都不会被缓存。如果我们想再次使用数据集,则必须重复流式步骤,并在运行时再次加载和处理音频文件。因此,建议下载您可能多次使用的数据集。

如何启用流式模式?很简单!在加载数据集时,只需将 streaming=True 设置为 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))。