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'}
]
相关推荐
problc2 小时前
肉包 Roubao:首款无需电脑的开源 AI 手机自动化助手
人工智能·智能手机·开源
泡泡茶壶_ovo2 小时前
Zero-Shot Image Captioning with Multi-type Entity Representations(AAAI 2025)
人工智能·深度学习·计算机视觉·imagecaptioning·multimodal
tap.AI2 小时前
RAG系列(五)生产部署、成本优化与系统评估
人工智能
沃彼特2 小时前
不用任何软件,检测闪存(SD卡U盘)的真实容量检测非常简单的测试方式,没有之一,不会用电脑都会用这个。
人工智能·目标检测·数据挖掘
Baihai_IDP2 小时前
LLM 扩展方式的三年演进之路:复杂之后,回归简单
人工智能·面试·llm
QYR_112 小时前
CAGR2.9%,全球石英波片市场稳步扩张,中国市场增速领跑
大数据·网络·人工智能
2501_940007862 小时前
论文检测网站全解析:类型、功能与选择指南
人工智能
CoderIsArt2 小时前
Lepton AI 平台完整解析:架构、原理、场景与演示
人工智能·lepton ai
大模型真好玩2 小时前
LangGraph1.0速通指南(三)—— LangGraph1.0 自动邮件处理智能体实战
人工智能·langchain·agent