音频课程文档
使用 pipeline 进行音频分类
并获得增强的文档体验
开始
使用 pipeline 进行音频分类
音频分类涉及根据音频记录的内容为其分配一个或多个标签。这些标签可以对应于不同的声音类别,例如音乐、语音或噪声,或更具体的类别,如鸟鸣声或汽车发动机声音。
在深入了解最流行的音频 Transformer 的工作原理以及微调自定义模型之前,让我们看看如何使用现成的预训练模型,通过几行代码和 🤗 Transformers 进行音频分类。
让我们继续使用您在上一个单元中探索的 MINDS-14 数据集。如果您还记得,MINDS-14 包含人们用多种语言和方言向电子银行系统提问的录音,并且每个录音都有 intent_class
。我们可以按通话意图对录音进行分类。
和以前一样,让我们首先加载数据的 en-AU
子集来试用 pipeline,并将其上采样到 16kHz 采样率,这是大多数语音模型所要求的。
from datasets import load_dataset
from datasets import Audio
minds = load_dataset("PolyAI/minds14", name="en-AU", split="train")
minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
为了将音频记录分类到一组类别中,我们可以使用 🤗 Transformers 中的 audio-classification
pipeline。在我们的例子中,我们需要一个针对意图分类进行微调的模型,特别是针对 MINDS-14 数据集。幸运的是,Hub 上有一个可以做到这一点的模型!让我们使用 pipeline()
函数加载它
from transformers import pipeline
classifier = pipeline(
"audio-classification",
model="anton-l/xtreme_s_xlsr_300m_minds14",
)
此 pipeline 期望音频数据为 NumPy 数组。原始音频数据的所有预处理都将由 pipeline 为我们方便地处理。让我们选择一个示例来试用一下
example = minds[0]
如果您还记得数据集的结构,原始音频数据存储在 ["audio"]["array"]
下的 NumPy 数组中,让我们直接将其传递给 classifier
classifier(example["audio"]["array"])
输出
[
{"score": 0.9631525278091431, "label": "pay_bill"},
{"score": 0.02819698303937912, "label": "freeze"},
{"score": 0.0032787492964416742, "label": "card_issues"},
{"score": 0.0019414445850998163, "label": "abroad"},
{"score": 0.0008378693601116538, "label": "high_value_payment"},
]
该模型非常有把握地认为,呼叫者的意图是了解如何支付账单。让我们看看此示例的实际标签是什么
id2label = minds.features["intent_class"].int2str
id2label(example["intent_class"])
输出
"pay_bill"
太棒了!预测的标签是正确的!在这里,我们很幸运地找到了一个可以分类我们需要的确切标签的模型。很多时候,在处理分类任务时,预训练模型的类别集与您需要模型区分的类别并不完全相同。在这种情况下,您可以微调预训练模型以将其“校准”到您精确的类别标签集。我们将在接下来的单元中学习如何做到这一点。现在,让我们看一下语音处理中的另一个非常常见的任务,自动语音识别。
< > 在 GitHub 上更新