加载和探索音频数据集
在本课程中,我们将使用 🤗 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")
minds
输出
Dataset(
{
features: [
"path",
"audio",
"transcription",
"english_transcription",
"intent_class",
"lang_id",
],
num_rows: 654,
}
)
该数据集包含 654 个音频文件,每个文件都附带转录文本、英语翻译和一个指示用户查询意图的标签。audio 列包含原始音频数据。让我们更仔细地看一下其中一个示例
example = minds[0]
example
输出
{
"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,
}
您可能会注意到 audio 列包含多个功能。以下是它们
path
: 音频文件的路径 (在本例中为*.wav
)。array
: 解码的音频数据,表示为一维 NumPy 数组。sampling_rate
. 音频文件的采样率(在本例中为 8,000 Hz)。
intent_class
是音频录音的分类类别。要将此数字转换为有意义的字符串,我们可以使用 int2str()
方法
id2label = minds.features["intent_class"].int2str
id2label(example["intent_class"])
输出
"pay_bill"
如果您查看转录功能,您会发现音频文件确实记录了一个人询问有关支付账单的问题。
如果您计划在此数据子集上训练音频分类器,则可能不需要所有功能。例如,lang_id
将对所有示例具有相同的值,并且不会有用。english_transcription
可能在此子集中重复 transcription
,因此我们可以安全地将其删除。
您可以轻松地使用 🤗 Datasets 的 remove_columns
方法删除不相关的功能
columns_to_remove = ["lang_id", "english_transcription"]
minds = minds.remove_columns(columns_to_remove)
minds
输出
Dataset({features: ["path", "audio", "transcription", "intent_class"], num_rows: 654})
现在我们已经加载并检查了数据集的原始内容,让我们听一些示例!我们将使用 Gradio
中的 Blocks
和 Audio
功能来解码数据集中的一些随机样本
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_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
试试吧!下载 MINDS-14 数据集的另一个方言或语言,收听并可视化一些示例,以了解整个数据集的变化情况。您可以在 此处 找到所有可用语言的完整列表。