使用管道进行音频分类
音频分类是指根据音频记录的内容,将其分配一个或多个标签。标签可以对应不同的声音类别,例如音乐、语音或噪声,或者更具体的类别,例如鸟叫声或汽车引擎声。
在深入探讨最流行的音频 Transformer 的工作原理以及微调自定义模型之前,让我们看看如何使用 🤗 Transformers 只需几行代码即可使用现成的预训练模型进行音频分类。
让我们继续使用您在上一个单元中探索过的相同的 MINDS-14 数据集。如果您还记得,MINDS-14 包含人们用多种语言和方言向电子银行系统询问问题时的录音,并且每个录音都有一个 intent_class
。我们可以按通话意图对录音进行分类。
和以前一样,让我们先加载数据的 en-AU
子集来试用管道,并将其上采样到 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
管道。在我们的例子中,我们需要一个针对意图分类微调的模型,特别是在 MINDS-14 数据集上。幸运的是,Hub 上有一个模型可以满足我们的需求!让我们使用 pipeline()
函数加载它
from transformers import pipeline
classifier = pipeline(
"audio-classification",
model="anton-l/xtreme_s_xlsr_300m_minds14",
)
此管道将音频数据作为 NumPy 数组。管道将方便地为我们处理原始音频数据的全部预处理。让我们选择一个示例来试用它
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"
太棒了!预测的标签是正确的!在这里,我们很幸运地找到了一个可以对我们需要的精确标签进行分类的模型。在处理分类任务时,很多时候,预训练模型的类别集并不完全与您需要模型区分的类别相同。在这种情况下,您可以微调预训练模型,使其“校准”到您确切的类别集。我们将在接下来的单元中学习如何做到这一点。现在,让我们看看另一个在语音处理中非常常见的任务,自动语音识别。