11 Transformers - 使用Pipeline处理音频

文章目录

Transformers 是一个采用当下技术最新、表现最佳( State-of-the-artSoTA)的模型和技术在预训练 自然语言处理计算机视觉音频多模态 模型方面提供推理和训练的的开源库;旨在快速易用,以便每个人都可以开始使用 transformer 模型进行学习或构建。该库不仅包含 Transformer 模型,还包括用于计算机视觉任务的现代卷积网络等非 Transformer 模型。

音频处理

音频和语音处理任务与其他模态略有不同,主要是因为音频作为输入是连续信号。与文本不同,原始音频波形不能像将句子分成单词那样整齐地分成离散的块。为了解决这个问题,原始音频信号通常以固定的间隔采样。如果在一个间隔内采样次数越多,采样率就越高,音频就越接近原始音频源。

以往处理方式是对音频进行预处理,从中提取有用的特征。现在更常见的是直接将原始音频波形馈送到特征编码器以提取音频表示来启动音频和语音处理任务。这样简化了预处理步骤,并允许模型学习最基本的特征。

音频分类

音频分类(Audio classification)是一项根据给定音频数据输入从预定义的类别集合中找到最符合特征的分类的特定任务。具有许多具体的应用,包括:

  • 声学场景分类:使用场景标签("办公室"、"海滩"、"体育场")对音频进行标记。
  • 声学事件检测:使用声音事件标签("汽车喇叭声"、"鲸鱼叫声"、"玻璃破碎声")对音频进行标记。
  • 标记:对包含多种声音的音频进行标记(鸟鸣、会议中的说话人识别)。
  • 音乐分类:使用流派标签("金属"、"嘻哈"、"乡村")对音乐进行标记。
复制代码
from transformers import pipeline

classifier = pipeline(task="audio-classification", model="superb/hubert-base-superb-er")
preds = classifier("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")
preds = [{"score": round(pred["score"], 4), "label": pred["label"]} for pred in preds]
preds

结果:

复制代码
[{'score': 0.4532, 'label': 'hap'},
 {'score': 0.3622, 'label': 'sad'},
 {'score': 0.0943, 'label': 'neu'},
 {'score': 0.0903, 'label': 'ang'}]

自动语音识别

自动语音识别(Automatic speech recognitionASR)实现将语音转录为文本的特定任务。如今,ASR 系统已经嵌入到各种智能技术产品中,如演讲者、电话和汽车等;通过语音识别控制,我们可以要求虚拟助手播放音乐、设置提醒和告诉天气情况等。

Transformer 架构还帮助解决了一个关键挑战即低资源语言。通过在大量语音数据上进行预训练,仅在一个低资源语言的一小时标记语音数据上进行微调,仍然可以产生与以前在100倍更多标记数据上训练的 ASR 系统相比高质量的结果。

复制代码
from transformers import pipeline

transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-small")
transcriber("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")

结果:

复制代码
{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'}

语音合成

语音合成(Text-to-speechTTS)是一项将文本转换为语音的特定任务,可以为不同的话语者用不同的语言生成语音。目前在 transformer中有几种语音合成模型可用,如 [Bark],[MMS], [VITS] 和 [SpeechT5] 等。

通过实例化"Pipeline并指定任务标识为 text-to-audio(另名 text-to-speech)轻松生成音频。有的模型如 Bark 还可以通过条件反射产生非语言交流如大笑、叹息和哭泣,甚至音乐等。

通过实例化 Pipeline 并指定任务名为 text-to-speech 并传入 suno/bark-small 模型实现语音合成:

复制代码
from transformers import pipeline

pipe = pipeline("text-to-speech", model="suno/bark-small")
text = "[clears throat] This is a test ... and I just took a long pause."
output = pipe(text)

转换完成后,可使用下面的代码案例来听听转换后的语音:

复制代码
from IPython.display import Audio
Audio(output["audio"], rate=output["sampling_rate"])

目前在 Transformers 中提供的语音合成模型是 SpeechT5FastSpeech2Conformer,将来会不断的增加。

零样本音频分类

零样本音频分类(Zero-shot Audio classification)是对给定的音频输入识别音频类别并指派到给定的以前未知的分类中的特定任务。

首先将 Pipeline 实例化并在实例化过程中指定任务为 zero-shot-audio-classification

复制代码
from transformers import pipeline
from datasets import load_dataset

classifier = pipeline(task="zero-shot-audio-classification")

然后,我们准备需要的分析音频,这里我们使用现有的数据集[ ashraq/esc50 ]中训练集中提取一条数据中的音频:

复制代码
dataset = load_dataset("ashraq/esc50")
audio = dataset["train"][1]["audio"]["array"]

其中,数据集的样式如下:

复制代码
{
  'filename': '1-100210-B-36.wav', 
  'fold': 1, 
  'target': 36, 
  'category': 'vacuum_cleaner', 
  'esc10': False, 
  'src_file': 100210, 
  'take': 'B', 
  'audio': {
      'path': None, 
      'array': array([0.53897095, 0.39627075, 0.26739502, ..., 0.09729004, 0.11227417,0.07983398]),
      'sampling_rate': 44100
   }
}

从上面的数据可以看到,提取的音频数据是已经处理好的张量;如果实际加载原始音频数据或文件,需要将音频加载并预处理变成所需的张量。

最后,传入待分析的音频并通过输入参数 candidate_labels设置新的分类集合后对给定的音频预测,并将结果打印出来:

复制代码
# audio是复合类型,可以是numpy.ndarray, 字节数组或者字符串的一种
result = classifier(audio, candidate_labels=["Sound of a dog", "Sound of vaccum cleaner","chirping_birds"])
print(result)

结果:

复制代码
[
   {'score': 0.9998486042022705, 'label': 'chirping_birds'}, 
   {'score': 7.838715828256682e-05, 'label': 'Sound of vaccum cleaner'}, 
   {'score': 7.297335105249658e-05, 'label': 'Sound of a dog'}
]
相关推荐
IT_陈寒几秒前
SpringBoot里的这个坑差点让我加班到天亮
前端·人工智能·后端
财经资讯数据_灵砚智能几秒前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月12日
大数据·人工智能·信息可视化·自然语言处理·ai编程
nix.gnehc几秒前
实战部署|Ollama\+Qwen2\.5:3b\+Open WebUI 本地AI助手搭建全记录(附避坑指南)
人工智能·大模型·llm·ollama
FIT2CLOUD飞致云2 分钟前
新增工作流类型工具,对话时可选择模型与知识库,MaxKB开源企业级智能体平台v2.8.0版本发布
人工智能·ai·开源·智能体·maxkb
code 小楊2 分钟前
从开源折戟到闭源破局:Meta Muse Spark 全解析(含案例+调用指南)
人工智能·开源
deepdata_cn5 分钟前
智能体的5个认知误区
人工智能·智能体
johnny2338 分钟前
AI Agent:Onyx、LangBot、DeepChat、OpenAkita、OpenCow、talkio
人工智能
Highcharts.js8 分钟前
企业级数据可视化|BI 仪表板数据中台工业监控平台的选择分析
人工智能·python·信息可视化·数据挖掘·数据分析·highcharts
Crazy CodeCrafter11 分钟前
现在做服装,实体和电商怎么选?
大数据·数据库·人工智能·微信·开源软件·零售
sp_fyf_202411 分钟前
【大语言模型】从失败中学习:在微调大型语言模型作为智能体时整合负例
人工智能·深度学习·学习·机器学习·语言模型·自然语言处理