10个最常用的音频嵌入模型

音频嵌入模型通过将音频信号转换为固定维度的向量表示,帮助机器理解复杂的音频数据。它们能够提取音频中的时间、频率和空间特征,为分类、检索和生成任务提供基础支持。

在音乐推荐、情感分析、环境声音识别等领域,音频嵌入技术已经成为不可或缺的工具。本文将介绍10个广泛使用的音频嵌入模型。

1、VGGish

VGGish 是谷歌开发的音频特征提取工具,基于经典的 VGG 网络。它通过在大规模音频数据集 AudioSet 上进行预训练,能快速提取音频的高维表示。

模型特点:

  • 以 log-mel 频谱图作为输入,保留了音频的时间和频率特性。
  • 128维固定大小的嵌入向量适用于分类、回归和检索任务。
  • 由于在 AudioSet 上预训练,对不同类型的音频信号有良好的泛化能力。

利用VGGish提取音频嵌入向量的示例代码如下所示:

import numpy as np
import tensorflow as tf
from vggish import vggish_input, vggish_postprocess, vggish_slim

# Step 1: Convert audio to log-mel spectrogram
log_mel = vggish_input.wavfile_to_examples('example_audio.wav')

# Step 2: Load VGGish model
model_path = 'vggish_model.ckpt'
with tf.Graph().as_default(), tf.compat.v1.Session() as sess:
    vggish_slim.define_vggish_slim()
    saver = tf.compat.v1.train.Saver()
    saver.restore(sess, model_path)

    # Step 3: Run the model and get embeddings
    features_tensor = sess.graph.get_tensor_by_name('vggish/input_features:0')
    embedding_tensor = sess.graph.get_tensor_by_name('vggish/embedding:0')
    embeddings = sess.run(embedding_tensor, feed_dict={features_tensor: log_mel})

print(embeddings.shape)  # Output: (n, 128)

VGGish 广泛用于环境声音分类、音频情绪识别、内容检索等任务。其高效的特征提取能力使其适合实时音频处理。

2、OpenL3

OpenL3 是基于深度学习的音频嵌入模型,使用多模态学习技术,从音频和视频数据中提取联合特征。

模型特点:

  • 灵活性强:支持不同的嵌入维度(512或6144),适应多样化需求。
  • 多模态训练:在音频和视频的联合数据上训练,增强了跨模态任务的表现。
  • 可选择使用 线性或非线性 激活函数,提供更高的特征多样性。

利用OpenL3提取音频嵌入向量的示例代码如下所示:

import openl3
import soundfile as sf

# Step 1: Load audio
audio, sr = sf.read('example_audio.wav')

# Step 2: Compute embeddings
embeddings, timestamps = openl3.get_audio_embedding(audio, sr, content_type='music', embedding_size=512)

print(embeddings.shape)  # Embedding vector dimensions: (n, 512)

OpenL3 常用于音频分类、事件检测以及音乐相似性分析,也适合多模态任务(如音频和视频联合分类)。

3、YAMNet

YAMNet 是谷歌开发的轻量级音频嵌入模型,基于 MobileNetV1 架构,专为计算资源有限的场景设计。

模型特点:

  • 在 AudioSet 上预训练,能够识别约 521 种声音类别。
  • 输入为 log-mel 频谱图,输出为固定大小的嵌入向量或分类结果。
  • 模型小巧,可直接部署在嵌入式设备中。

利用YAMNet提取音频嵌入向量的示例代码如下所示:

import tensorflow as tf
import yamnet
import soundfile as sf

# Step 1: Load YAMNet model
model = yamnet.yamnet_model()
model.load_weights('yamnet.h5')

# Step 2: Load and preprocess audio
audio, sr = sf.read('example_audio.wav')
waveform = yamnet.preprocess(audio, sr)

# Step 3: Predict embeddings
scores, embeddings, spectrogram = model(waveform)

print(embeddings.shape)  # Embeddings shape: (n, 1024)

YAMNet 适合实时音频处理,常用于音频事件检测、环境声音分类和边缘设备应用。

4、MooER

MooER 是摩尔线程推出的音频理解模型,支持多语言音频嵌入、翻译以及语音到文本的转换。

模型特点:

  • 提供对中文音频数据的优化支持,尤其适合国内语音处理场景。
  • 集成了语音识别、音频翻译、语音情感分析等多种能力。
  • 开源模型工具链完整,便于开发者快速上手。

利用MooER模型提取音频嵌入向量的示例代码如下所示:

import mooer
import soundfile as sf

# Step 1: Load audio
audio, sr = sf.read('example_audio.wav')

# Step 2: Generate embeddings
embedding = mooer.get_embedding(audio, sr)

print(embedding.shape)  # Output: (n, 256)

MooER模型 广泛应用于语音助手、实时翻译、会议记录和多语言音频检索。

5、IBM MAX Audio Embedding Generator

IBM 开发的 MAX Audio Embedding Generator 是一款简单实用的音频嵌入工具,适合快速构建音频分析任务的原型系统。

模型特点:

  • 接收常见音频格式(如 WAV、MP3),生成固定大小的嵌入向量。
  • 提供基于 Flask 的 API 接口,支持轻松集成到现有项目中。
  • 适配 IBM MAX 系列的其他模型,可构建复杂的音频处理管道。

利用该模型提取音频嵌入向量的示例代码如下所示:

import requests

# Step 1: Prepare the audio file
file_path = 'example_audio.wav'
url = 'http://localhost:5000/model/predict'

# Step 2: Send request to IBM MAX API
with open(file_path, 'rb') as f:
    response = requests.post(url, files={'audio': f})

# Step 3: Get embeddings
embeddings = response.json()['predictions']
print(len(embeddings))  # List of embeddings for the audio

该模型用于音频情绪检测、音频分类以及个性化音乐推荐系统。

6、SoundNet

SoundNet 是早期从原始音频中学习特征表示的深度学习模型,由麻省理工学院 CSAIL 团队开发。

模型特点:

  • 输入为 原始波形数据,无需复杂的音频预处理步骤。
  • 使用 无监督学习 提取音频特征,适应多种下游任务。
  • 特别擅长捕捉环境声音的特征,适用于开放场景。

利用SoundNet提取音频嵌入向量的示例代码如下所示:

import torch
from soundnet import SoundNet

# Step 1: Load SoundNet model
model = SoundNet()
model.load_state_dict(torch.load('soundnet.pth'))
model.eval()

# Step 2: Load and preprocess audio
audio = torch.randn(1, 22050)  # Example 1-second audio waveform

# Step 3: Generate embeddings
embeddings = model(audio)
print(embeddings.shape)  # Output: (batch_size, embedding_dim)

SoundNet 被广泛用于环境声音分类、音频事件检测和视频辅助音频理解。

7、CLMR

CLMR (Contrastive Learning of Musical Representations)是一款专注于音乐表示学习的音频嵌入模型,基于对比学习的思想。它通过自监督方式,无需人工标注即可从音乐数据中学习丰富的特征。

模型特点:

  • 自监督学习:利用对比学习框架,从原始音乐中学习时间和频率特征。
  • 端到端训练:无需手动设计特征提取步骤,模型直接接受音频输入并生成嵌入表示。
  • 音乐特化:针对音乐数据优化,适用于音乐风格分类、推荐系统等领域。

利用CLMR提取音频嵌入向量的示例代码如下所示:

import torch
from clmr.models import SampleCNN

# Step 1: Load CLMR model
model = SampleCNN(num_classes=10)
model.eval()

# Step 2: Generate embeddings
audio = torch.randn(1, 1, 16000)  # 1-second audio waveform
embeddings = model.forward(audio)

print(embeddings.shape)  # Output: (batch_size, embedding_dim)

CLMR可用于音乐推荐系统、音乐风格分类、音乐生成辅助等应用场景。

8、PANNs

PANNs (Pretrained Audio Neural Networks) 是一组基于深度学习的预训练音频嵌入模型,专为环境声音和音频分类设计,能够处理各种长度和类型的音频数据。

模型特点:

  • 多任务能力:在大量音频分类任务上表现出色,覆盖音乐、环境声音、语音等领域。
  • 灵活性高:提供多种模型架构(如 ResNet 和 MobileNet),用户可根据计算需求选择适配模型。
  • 预训练与微调:预训练模型在 AudioSet 数据集上,用户可进一步微调以适应特定任务。

利用PANNs提取音频嵌入向量的示例代码如下所示:

import torch
from audioset_tagging_cnn import Cnn14

# Step 1: Load PANNs model
model = Cnn14(pretrained=True)
model.eval()

# Step 2: Load audio and preprocess
audio = torch.randn(1, 32000)  # 2-second mono audio waveform
embeddings = model(audio)

print(embeddings.shape)  # Output: (batch_size, embedding_dim)

PANNs的应用场景包括环境声音分类、工业声学监测、音频分类与检索等。

9、Wav2Vec

Wav2Vec 是 Meta AI(原 Facebook AI)开发的一款革命性模型,利用自监督学习从原始音频中提取嵌入特征,广泛用于语音处理任务。

模型特点:

  • 原始波形输入:直接以音频波形为输入,消除了对频谱图等手工特征的依赖。
  • 自监督预训练:通过预测隐藏特征的方式学习时序结构,无需标注数据即可生成强大的特征表示。
  • 扩展性强:支持下游任务微调,例如语音识别、语音情绪分析等。

利用Wav2Vec模型提取音频嵌入向量的示例代码如下所示:

import torch
from transformers import Wav2Vec2Model, Wav2Vec2Processor

# Step 1: Load Wav2Vec2 model and processor
processor = Wav2Vec2Processor.from_pretrained('facebook/wav2vec2-base')
model = Wav2Vec2Model.from_pretrained('facebook/wav2vec2-base')

# Step 2: Process audio
audio = torch.randn(1, 16000)  # 1-second audio waveform
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)

# Step 3: Extract embeddings
outputs = model(**inputs)
embeddings = outputs.last_hidden_state

print(embeddings.shape)  # Output: (batch_size, sequence_length, hidden_size)

Wav2Vec的应用场景包括语音识别、多语言音频处理、音频检索等。

10、Audio2Vec

Audio2Vec 是一种基于 Word2Vec 方法的音频嵌入模型,旨在为音频片段生成上下文相关的向量表示,适用于音频检索和分类任务。

模型特点:

  • 灵感来源:借鉴 NLP 领域的 Word2Vec 模型,将音频数据片段映射到高维向量空间。
  • 上下文感知:捕捉音频片段的时间序列特性,生成与上下文相关的嵌入表示。
  • 轻量级:模型训练和推理效率高,适合资源受限的场景。

利用Audio2Vec模型提取音频嵌入向量的示例代码如下所示:

from audio2vec import Audio2Vec

# Step 1: Initialize Audio2Vec
model = Audio2Vec()

# Step 2: Process audio file
audio_path = 'example_audio.wav'
embeddings = model.generate_embeddings(audio_path)

print(embeddings.shape)  # Embeddings shape: (n, embedding_dim)

Audio2Vec的应用场景包括音频内容检索、音频分类和个性化推荐等。

11、结束语

音频嵌入模型已经成为音频数据分析的重要工具,从经典的 VGGish 到最新的 Wav2Vec,每个模型都为特定场景提供了解决方案。选择合适的模型取决于任务需求,例如实时性、精确性和语言支持。希望本文能为你提供指引,加速音频处理相关项目的开发。


汇智网原创,转载请标明出处