1.2 加载并探索音频数据集

在本课程中,我们将使用 🤗 Datasets 库来处理音频数据集。🤗 Datasets 是一个开源库,用于下载和准备包括音频在内的所有模态的数据集。该库可轻松访问 Hugging Face Hub 上公开提供的无与伦比的机器学习数据集。此外,🤗 Datasets 包含针对音频数据集定制的多项功能,可简化研究人员和从业人员对此类数据集的处理。

要开始使用音频数据集,请确保已安装 🤗 Datasets 库:

pip install datasets[audio]

🤗 Datasets 的一个关键定义特征是能够使用 load_dataset() 函数仅用一行 Python 代码下载并准备数据集。

让我们加载并探索名为 MINDS-14 的音频数据集,其中包含人们用多种语言和方言询问电子银行系统问题的记录。

要加载 MINDS-14 数据集,我们需要复制 Hub 上的数据集标识符(PolyAI/minds14)并将传递给 load_dataset 函数。我们还将指定我们只对数据的澳大利亚子集(en-AU)感兴趣,并将其限制在训练分组中:

from datasets import load_dataset

minds = load_dataset("PolyAI/minds14", name="en-AU", split="train")
minids

Output:

Dataset(
    {
        features: [
            "path",
            "audio",
            "transcription",
            "english_class",
            "intent_class",
            "lang_id",
        ],
        num_rows: 654,
    }
)

该数据集包含 654 个音频文件,每个文件都附有抄本、英文翻译和一个标签,表明用户查询的意图。audio 列包含原始音频数据。让我们仔细看看其中一个例子:

example = minds[0]
example

Output:

{
    "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
    "audio": {
        "path": "/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-AU~PAY_BILL/response_4.wav",
        "array": array(
            [0.0, 0.00024414, -0.00024414, ..., -0.00024414, 0.00024414, 0.0012207],
            dtype=float32,
        ),
        "sampling_rate": 8000,
    },
    "transcription": "I would like to pay my electricity bill using my card can you please assist",
    "english_transcription": "I would like to pay my electricity bill using my card can you please assist",
    "intent_class": 13,
    "lang_id": 2,
}

你可能需要注意到音频列包含几个功能。它们分别是:

  • path:音频文件的路径(在本例中为 *.wav )。
  • array:解码后的音频数据,表示为一维 NumPy 数据。
  • sampling_rate:音频文件的采样率(本例中为 8000 Hz)。

intent_class 是录音的分类类别。要将此数字转换为有意义的字符串,我们可以使用 int2str() 方法:

id2label = minds.features["intent_class"].int2str
id2label(example["intent_class"])

Output:

"pay_bill"

如果你查看转录功能,你就会发现音频文件确实记录了一个人询问有关支付账单的问题。

如果你计划在该数据自己上训练音频分类器,则可能需需要所有功能。例如,lang_id 对于所有示例都具有相同的值,并且毫无用处。english_transcription 可能会重复此子集中的转录,因此我们可以安全地删除它们。

你可以使用数据集的 remove_columns 方法轻松删除不相关的特征:

columns_to_remove = ["lang_id", "english_transcription"]
minds = minds.remove_columns(columns_to_remove)
minds

Output:

Dataset({features: ["path", "audio", "transcription", "intent_class"], num_rows: 654})

现在我们已经加载并检查了数据集的原始内容,让我们听几个例子!我们将使用 GradioBlocksAudio 功能来接吗数据集中的几个随机样本:

import gradio as gr

def generate_audio():
    example = minds.shuffle()[0]
    audio = example["audio"]
    return (
        audio["sampling_rate"],
        audio["array"],
    ), id2label(example["intent_class"])

with gr.Blocks() as demo:
    with gr.Column():
        for _ in range(4):
            audio, label = generate_audio()
            output = gr.Audio(audio, label=label)

demo.launch(debug=True)

如果你愿意,你还可以将一些示例可视化。让我们绘制第一个示例的波形。

import librosa
import matplotlib.pyplot as plt
import librosa.display

array = example["audio"]["array"]
sampling_rate = example["audio"]["sampling_rate"]

plt.figure().set_flgwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
waveform_unit1.png

试试吧!下载 MINDS-14 数据集中的另一种方言或语言,聆听并可视化一些示例,以了解整个数据集的变化。你可以在此处找到可用语言的完整列表。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容