马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本文先容一个同一音频标记(Audio Tagger)和语音辨认(ASR)的模子:Whisper-AT,通过冻结Whisper的主干,并在其之上训练一个轻量级的音频标记模子。Whisper-AT在额外盘算资本不到1%的环境下,可以在单次前向通报中辨认音频变乱以及口语文本。这个模子的提出是创建一个风趣的发现底子上:Whisper对真实天下配景声音非常鲁棒,其音频表现实际上并不是噪声稳定的,而是与非语音声音高度相干,这表明Whisper是在噪声范例的底子上辨认语音的。
1.概述:
Whisper-AT 是创建在 Whisper 主动语音辨认(ASR)模子底子上的一个模子。Whisper 模子利用了一个包罗 68 万小时标注语音的大规模语料库举行训练,这些语料是在各种差异条件下录制的。Whisper 模子以其在实际配景噪音(如音乐)下的鲁棒性著称。只管云云,其音频表现并非噪音稳定,而是与非语音声音高度相干。这意味着 Whisper 在辨认语音时会依据配景噪音范例举行调解。
在上述发现的底子上,有一个令人高兴的应用方式:我们可以或许基于Whisper构建一个同一的模子,用于主动语音辨认(ASR)和音频标记,以同时辨认口语文本和配景声音(比方音乐、喇叭等),这在视频转录、语音助手和助听器体系等应用中非常理想。Whisper是如许一个同一模子的理想底子,由于1)它对配景声音具有鲁棒性,2)它的中心表现编码了丰富的一样平常音频变乱信息,这为音频标记提供了坚固的底子。只管云云,原始的Whisper模子不输作声音标签,以是我们必要在Whisper的中心表现之上训练一个模子,以使其可以或许猜测声音种别。请注意,我们特意不修改原始Whisper模子的权重,而是在其上添加新的音频标记层,以便Whisper的主动语音辨认本事不受影响,而且可以在单个前向通报中天生文本和音频标签。我们称这个同一的ASR和音频标记模子为Whisper-AT。
紧张发现:
- 噪音变革的表现:
- Whisper 的音频表现编码了丰富的非语音配景声音信息,这与通常寻求噪音稳定表现的 ASR 模子目的差异。
- 这一特性使得 Whisper 可以或许在各种噪音条件下通过辨认和顺应噪音来保持其鲁棒性。
- ASR 和音频标签的同一模子:
- 通过冻结 Whisper 模子的骨干网络,并在其上训练一个轻量级的音频标签模子,Whisper-AT 可以在一次前向通报中同时辨认音频变乱和语音文本,额外的盘算资本不敷 1%。
- Whisper-AT 在音频变乱检测方面体现精彩,同时保持了 Whisper 的 ASR 功能。
技能细节:
- Whisper ASR 模子:
- Whisper 利用基于 Transformer 的编码器-解码器架构。
- 其训练集包罗从互联网上网络的 68 万小时音频-文本对,涵盖了广泛的环境、灌音设置、语言人和语言。
- 抗噪机制:
- Whisper 的鲁棒性并非通过噪音稳定性实现,而是通过在其表现中编码噪音范例。
- 这一机制使得 Whisper 可以或许根据配景噪音范例来转录文本,从而在嘈杂条件下体现良好。
- 构建 Whisper-AT:
- Whisper-AT 是通过在 Whisper 模子上添加新的音频标签层而构建的,未修改其原始权重。
- 探索了差异的音频标签层集成方法,包罗:
- Last-MLP:对 Whisper 的末了一层表现举行时间均值池化,然后应用线性层。
- WA-MLP:对全部层的表现举行加权匀称,然后应用线性层。
- WA-Tr:用时间 Transformer 层更换线性层。
- TL-Tr:利用时间和条理 Transformer 处理处罚全部层的表现。
- 服从考量:
- 为保持盘算服从,接纳了各种战略,比方镌汰表现的序列长度,并在应用音频标签 Transformer 之前可选地低落维度。
性能:
- Whisper-AT 在 AudioSet 上到达了 41.5 的 mAP,略低于独立的音频标签模子,但处理处罚速率显着更快,高出 40 倍。
意义:
- 可以或许同时实行 ASR 和音频标签任务,使得 Whisper-AT 非常得当于视频转录、语音助手和助听器体系等应用场景,在这些场景中必要同时举行语音文本和声学场景分析。
2.代码:
欲相识具体的实现和实行结果,请访问 GitHub: github.com/yuangongnd/whisper-at.
下面是对 Whisper-AT 架构的扼要表明,通过徐徐分析其紧张组件和功能,资助明白其工作原理。
安装和预备
起首,确保你已经安装了 Whisper 和相干的依靠项:
- pip install git+https://github.com/openai/whisper.git
- pip install torch torchaudio
- pip install transformers datasets
复制代码
代码结构
扼要 Whisper-AT 的代码结构如下所示:
- Whisper-AT/
- │
- ├── whisper_at.py
- ├── train.py
- ├── dataset.py
- ├── utils.py
- └── README.md
复制代码 whisper_at.py - Whisper-AT 模子
- import torch
- import torch.nn as nn
- import whisper
- class WhisperAT(nn.Module):
- def __init__(self, model_name="base"):
- super(WhisperAT, self).__init__()
- self.whisper = whisper.load_model(model_name)
- self.audio_tagging_head = nn.Linear(self.whisper.dims, 527) # 527 是 AudioSet 的标签数
- def forward(self, audio):
- # 获取 Whisper 的中间表示
- with torch.no_grad():
- features = self.whisper.encode(audio)
- # 通过音频标签头
- audio_tagging_output = self.audio_tagging_head(features.mean(dim=1))
- return audio_tagging_output
复制代码 train.py - 训练脚本
- import torch
- from torch.utils.data import DataLoader
- from dataset import AudioSetDataset
- from whisper_at import WhisperAT
- import torch.optim as optim
- import torch.nn.functional as F
- def train():
- # 加载数据集
- train_dataset = AudioSetDataset("path/to/training/data")
- train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
- # 初始化模型
- model = WhisperAT()
- model.train()
- # 定义优化器
- optimizer = optim.Adam(model.parameters(), lr=1e-4)
- for epoch in range(10): # 假设训练10个epoch
- for audio, labels in train_loader:
- optimizer.zero_grad()
- # 前向传播
- outputs = model(audio)
- # 计算损失
- loss = F.binary_cross_entropy_with_logits(outputs, labels)
- # 反向传播和优化
- loss.backward()
- optimizer.step()
- print(f"Epoch {epoch}, Loss: {loss.item()}")
- if __name__ == "__main__":
- train()
复制代码 dataset.py - 数据集处理处罚
- import torch
- from torch.utils.data import Dataset
- import torchaudio
- class AudioSetDataset(Dataset):
- def __init__(self, data_path):
- self.data_path = data_path
- self.audio_files = [...] # 这里假设你有一个包含所有音频文件路径的列表
- self.labels = [...] # 这里假设你有一个包含所有对应标签的列表
- def __len__(self):
- return len(self.audio_files)
- def __getitem__(self, idx):
- # 加载音频
- audio, sample_rate = torchaudio.load(self.audio_files[idx])
- # 获取对应标签
- labels = torch.tensor(self.labels[idx])
- return audio, labels
复制代码 utils.py - 辅助功能
- import torch
- def save_model(model, path):
- torch.save(model.state_dict(), path)
- def load_model(model, path):
- model.load_state_dict(torch.load(path))
- model.eval()
复制代码 具体表明
- Whisper-AT 模子 (whisper_at.py):
- WhisperAT 类继续自 nn.Module,初始化时加载 Whisper 模子,并在其上添加一个线性层用于音频标签任务。
- forward 方法起首调用 Whisper 模子的 encode 方法获取音频特性,然后将这些特性通报给音频标签头(线性层)以天生标签输出。
- 训练脚本 (train.py):
- train 函数中,数据集被加载并通报给 DataLoader。
- 模子实例化并设置为训练模式。
- 界说了 Adam 优化器和二进制交织熵丧失函数。
- 在训练循环中,音频输入通过模子天生输出,盘算丧失并实行反向传播和优化。
- 数据集处理处罚 (dataset.py):
- AudioSetDataset 类继续自 Dataset,实现了音频数据和标签的加载。
- __getitem__ 方法加载音频文件并返覆信频张量和对应标签。
- 辅助功能 (utils.py):
- 包罗生存和加载模子状态的函数,方便模子的恒久化和规复。
通过以上代码结构息争释,可以资助明白 Whisper-AT 的实现和训练流程。可以根据必要扩展这些代码来顺应具体的应用场景和数据集。
附录:
A. 通用音频变乱标记(Audio Tagger)
通用音频变乱标记 (Audio Tagger) 是一种用于辨认和分类音频信号中差异变乱的技能。它在音频处理处罚范畴具有广泛的应用,包罗环境声音辨认、音乐信息检索、语音辨认、和多媒体内容分析等。
焦点概念
- 音频变乱(Audio Event): 音频变乱指的是音频信号中的特定声音,如鸟鸣、犬吠、警笛声、音乐片断或人声。这些变乱可以是短暂的瞬时声音或连续一段时间的信号。
- 标签(Tagging): 标签是对音频信号中的变乱举行分类或标注的过程。每个标签对应一个音频变乱种别,目的是辨认音频信号中包罗哪些范例的声音。
技能实现
1. 特性提取
特性提取是音频变乱标记的第一步,它将原始音频信号转换为得当分类的特性向量。常用的特性提取方法包罗:
- 梅尔频率倒谱系数(MFCC):捕捉音频信号的短时频谱特性。
- 谱质心(Spectral Centroid):形貌音频信号的亮度。
- 零交织率(Zero-Crossing Rate):音频信号通过零点的次数。
- 色度特性(Chromagram):表现音频信号的音调内容。
2. 特性表现和建模
一旦提取了音频特性,必要将其输入到呆板学习模子中举行训练和猜测。常用的模子包罗:
- 传统呆板学习模子:如高斯肴杂模子 (GMM)、支持向量机 (SVM) 和隐马尔可夫模子 (HMM)。
- 深度学习模子:卷积神经网络 (CNN) 和递归神经网络 (RNN) 在音频变乱标记中体现精彩,尤其是可以或许处理处罚复杂的时间和频率模式。
3. 标签分配和分类
在训练模子之后,对新的音频信号举行标签分配。模子根据输入的特性向量猜测音频信号所属的变乱种别。
应用实例
- 环境声音辨认:辨认并分类自然环境中的声音,如鸟叫、雨声、车流声等。
- 音乐信息检索:分析和分类音乐片断,辨认音乐范例、乐器声或特定的音乐模式。
- 语音辨认:辨认和分类语音中的特定变乱,如关键词检测、语音运动检测等。
前沿研究
- 多任务学习: 多任务学习方法通过在多个相干任务上共享表现来进步模子性能。比方,PSLA(Pretraining, Sampling, Labeling, and Aggregation)方法在音频标签任务中取得了显着盼望 。
- 自监视学习: 自监视学习方法通过利用大量未标记数据举行预训练,显着进步了模子在音频变乱标记任务上的体现。
- 基于Transformer的模子: 比方,Audio Spectrogram Transformer (AST) 利用Transformer架构的上风,在多个音频分类任务上体现优秀,逾越了传统的卷积神经网络(CNN)方法 。
总结
通用音频变乱标记在当代音频处理处罚范畴发挥偏紧张作用。通过团结特性提取、先辈的呆板学习模子和深度学习技能,音频变乱标记可以或许实现高效、精确的音频信号分类和辨认。在将来,随着多任务学习、自监视学习和更先辈的深度学习模子的引入,音频变乱标记技能将继续发展和完满。
B. Whisper模子
Whisper 是由 OpenAI 开发的一个先辈的主动语音辨认(ASR)模子。它接纳了Transformer架构,特殊善于捕捉音频信号中的全局特性和时间动态。这使得 Whisper 可以或许在多语言和多任务的语音辨认任务中体现优秀。
Whisper 模子简介
1. 模子架构
Whisper模子的焦点是Transformer架构,包罗编码器(Encoder)息争码器(Decoder)。该架构利用多头自注意力机制(Multi-Head Self-Attention)和位置编码(Positional Encoding)来处理处罚音频信号,捕捉当时间动态和全局特性。
- 编码器(Encoder):负责吸收和处理处罚输入音频信号,将其转换为高维度的中心表现。编码器由多层自注意力和前馈神经网络构成。
- 解码器(Decoder):利用编码器天生的中心表现,团结上下文信息,天生目的输出(如转录文本)。解码器结构雷同于编码器,同样由多层自注意力和前馈神经网络构成。
2. 自注意力机制
自注意力机制允许模子在处理处罚音频信号时,动态地关注差异部分的信息,从而捕捉长程依靠关系。这种机制特殊实用于音频信号处理处罚,由于语音信息通常分布在整个序列中,必要全局视角举行建模。
3. 位置编码
由于音频信号是一连的时间序列数据,位置编码在Whisper模子中起着关键作用。位置编码通过为每个时间步添加唯一的位置信息,使得模子可以或许辨认音频信号中的序次和时间动态。
Whisper 模子的特性和上风
- 多语言支持:Whisper 支持多种语言的语音辨认任务,可以或许处理处罚差异语言的音频信号。
- 高精确性:得益于Transformer架构和自注意力机制,Whisper在多任务语音辨认任务中体现精彩,精确率高。
- 长程依靠建模:通过自注意力机制,Whisper可以或许捕捉音频信号中的长程依靠关系,处理处罚长时间的语音数据更加有效。
- 机动性和扩展性:Whisper可以通过预训练和微调,顺应差异的语音辨认任务和数据集。
Whisper 模子的应用
Whisper 可应用于多种语音辨认和处理处罚任务,包罗:
- 及时语音转录:将及时语音输入转录为文本,用于字幕天生、集会记载等场景。
- 多语言翻译:及时翻译差异语言的语音输入,促进跨语言互换。
- 语音指令辨认:用于智能装备和语音助手的语音指令辨认,进步交互体验。
|