Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
Librispeech-clean-100データセットで微調整された性別認識モデルで、テストセットでF1スコア0.9993を達成
ダウンロード数 182.33k
リリース時間 : 4/24/2023
モデル概要
このモデルはwav2vec2-xls-r-300mアーキテクチャに基づく音声性別認識モデルで、音声から話者の性別を識別するために特別に設計されています
モデル特徴
高精度性別認識
Librispeechテストセットで99.93%のF1スコアを達成
事前学習モデルに基づく微調整
facebook/wav2vec2-xls-r-300m事前学習モデルを利用した転移学習
効率的なトレーニング構成
混合精度トレーニングや勾配蓄積などの技術でトレーニング効率を最適化
モデル能力
音声性別分類
英語音声処理
使用事例
音声分析
話者性別識別
音声クリップから話者の性別を識別
テストセットF1スコア0.9993
🚀 wav2vec2-large-xlsr-53-gender-recognition-librispeech
このモデルは、Librispeech-clean-100データセットを用いて性別認識のために微調整されたfacebook/wav2vec2-xls-r-300mのバージョンです。評価セットでは以下の結果を達成しています。
- 損失: 0.0061
- F1値: 0.9993
🚀 クイックスタート
💻 使用例
基本的な使用法
import os
import random
from glob import glob
from typing import List, Optional, Union, Dict
import tqdm
import torch
import torchaudio
import numpy as np
import pandas as pd
from torch import nn
from torch.utils.data import DataLoader
from torch.nn import functional as F
from transformers import (
AutoFeatureExtractor,
AutoModelForAudioClassification,
Wav2Vec2Processor
)
class CustomDataset(torch.utils.data.Dataset):
def __init__(
self,
dataset: List,
basedir: Optional[str] = None,
sampling_rate: int = 16000,
max_audio_len: int = 5,
):
self.dataset = dataset
self.basedir = basedir
self.sampling_rate = sampling_rate
self.max_audio_len = max_audio_len
def __len__(self):
"""
Return the length of the dataset
"""
return len(self.dataset)
def __getitem__(self, index):
if self.basedir is None:
filepath = self.dataset[index]
else:
filepath = os.path.join(self.basedir, self.dataset[index])
speech_array, sr = torchaudio.load(filepath)
if speech_array.shape[0] > 1:
speech_array = torch.mean(speech_array, dim=0, keepdim=True)
if sr != self.sampling_rate:
transform = torchaudio.transforms.Resample(sr, self.sampling_rate)
speech_array = transform(speech_array)
sr = self.sampling_rate
len_audio = speech_array.shape[1]
# Pad or truncate the audio to match the desired length
if len_audio < self.max_audio_len * self.sampling_rate:
# Pad the audio if it's shorter than the desired length
padding = torch.zeros(1, self.max_audio_len * self.sampling_rate - len_audio)
speech_array = torch.cat([speech_array, padding], dim=1)
else:
# Truncate the audio if it's longer than the desired length
speech_array = speech_array[:, :self.max_audio_len * self.sampling_rate]
speech_array = speech_array.squeeze().numpy()
return {"input_values": speech_array, "attention_mask": None}
class CollateFunc:
def __init__(
self,
processor: Wav2Vec2Processor,
padding: Union[bool, str] = True,
pad_to_multiple_of: Optional[int] = None,
return_attention_mask: bool = True,
sampling_rate: int = 16000,
max_length: Optional[int] = None,
):
self.sampling_rate = sampling_rate
self.processor = processor
self.padding = padding
self.pad_to_multiple_of = pad_to_multiple_of
self.return_attention_mask = return_attention_mask
self.max_length = max_length
def __call__(self, batch: List[Dict[str, np.ndarray]]):
# Extract input_values from the batch
input_values = [item["input_values"] for item in batch]
batch = self.processor(
input_values,
sampling_rate=self.sampling_rate,
return_tensors="pt",
padding=self.padding,
max_length=self.max_length,
pad_to_multiple_of=self.pad_to_multiple_of,
return_attention_mask=self.return_attention_mask
)
return {
"input_values": batch.input_values,
"attention_mask": batch.attention_mask if self.return_attention_mask else None
}
def predict(test_dataloader, model, device: torch.device):
"""
Predict the class of the audio
"""
model.to(device)
model.eval()
preds = []
with torch.no_grad():
for batch in tqdm.tqdm(test_dataloader):
input_values, attention_mask = batch['input_values'].to(device), batch['attention_mask'].to(device)
logits = model(input_values, attention_mask=attention_mask).logits
scores = F.softmax(logits, dim=-1)
pred = torch.argmax(scores, dim=1).cpu().detach().numpy()
preds.extend(pred)
return preds
def get_gender(model_name_or_path: str, audio_paths: List[str], label2id: Dict, id2label: Dict, device: torch.device):
num_labels = 2
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name_or_path)
model = AutoModelForAudioClassification.from_pretrained(
pretrained_model_name_or_path=model_name_or_path,
num_labels=num_labels,
label2id=label2id,
id2label=id2label,
)
test_dataset = CustomDataset(audio_paths, max_audio_len=5) # for 5-second audio
data_collator = CollateFunc(
processor=feature_extractor,
padding=True,
sampling_rate=16000,
)
test_dataloader = DataLoader(
dataset=test_dataset,
batch_size=16,
collate_fn=data_collator,
shuffle=False,
num_workers=2
)
preds = predict(test_dataloader=test_dataloader, model=model, device=device)
return preds
model_name_or_path = "alefiury/wav2vec2-large-xlsr-53-gender-recognition-librispeech"
audio_paths = [] # Must be a list with absolute paths of the audios that will be used in inference
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
label2id = {
"female": 0,
"male": 1
}
id2label = {
0: "female",
1: "male"
}
num_labels = 2
preds = get_gender(model_name_or_path, audio_paths, label2id, id2label, device)
📚 ドキュメント
トレーニングと評価データ
モデルのトレーニングにはLibrispeech-clean-100データセットが使用され、データの70%がトレーニング、10%が検証、20%がテストに使用されました。
トレーニングハイパーパラメータ
トレーニング中に以下のハイパーパラメータが使用されました。
- 学習率: 3e-05
- トレーニングバッチサイズ: 4
- 評価バッチサイズ: 4
- 乱数シード: 42
- 勾配蓄積ステップ: 4
- 総トレーニングバッチサイズ: 16
- オプティマイザ: Adam (betas=(0.9,0.999), epsilon=1e-08)
- 学習率スケジューラタイプ: 線形
- 学習率スケジューラウォームアップ率: 0.1
- エポック数: 1
- 混合精度トレーニング: Native AMP
トレーニング結果
トレーニング損失 | エポック | ステップ | 検証損失 | F1値 |
---|---|---|---|---|
0.002 | 1.0 | 1248 | 0.0061 | 0.9993 |
フレームワークバージョン
- Transformers 4.28.0
- Pytorch 2.0.0+cu118
- Tokenizers 0.13.3
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。
Mms Lid 126
Facebookの大規模多言語音声プロジェクトを基にファインチューニングした言語識別モデルで、126言語の音声分類をサポート
音声分類
Transformers 複数言語対応

M
facebook
2.1M
26
Wav2vec2 Base Finetuned Speech Commands V0.02
Apache-2.0
このモデルはfacebook/wav2vec2-baseをspeech_commandsデータセットでファインチューニングした音声コマンド認識モデルで、精度は97.59%です。
音声分類
Transformers

W
0xb1
1.2M
0
Whisper Medium Fleurs Lang Id
Apache-2.0
OpenAI Whisper-mediumをファインチューニングした音声言語識別モデルで、FLEURSデータセットで88.05%の精度を達成
音声分類
Transformers

W
sanchit-gandhi
590.30k
14
Wav2vec2 Large Robust 12 Ft Emotion Msp Dim
このモデルはWav2Vec2-Large-Robustをファインチューニングして訓練され、音声感情認識に使用され、覚醒度、支配度、価値の3つの次元の予測値を出力します。
音声分類
Transformers 英語

W
audeering
394.51k
109
Lang Id Voxlingua107 Ecapa
Apache-2.0
SpeechBrainフレームワークとECAPA-TDNNアーキテクチャに基づく音声言語識別モデルで、107言語の識別と音声埋め込みベクトル抽出をサポートします。
音声分類
PyTorch 複数言語対応
L
speechbrain
330.01k
112
Ast Finetuned Audioset 10 10 0.4593
Bsd-3-clause
オーディオスペクトログラムトランスフォーマー(AST)はAudioSetでファインチューニングされたモデルで、オーディオをスペクトログラムに変換後、ビジョントランスフォーマーを適用してオーディオ分類を行います。
音声分類
Transformers

A
MIT
308.88k
311
Whisper Small Ft Common Language Id
Apache-2.0
openai/whisper-smallをファインチューニングした汎用言語識別モデルで、評価データセットでの精度は88.6%
音声分類
Transformers

W
sanchit-gandhi
256.20k
2
Emotion Recognition Wav2vec2 IEMOCAP
Apache-2.0
ファインチューニングされたwav2vec2モデルを使用した音声感情認識で、IEMOCAPデータセットでトレーニング
音声分類
PyTorch 英語
E
speechbrain
237.65k
131
Ast Finetuned Audioset 14 14 0.443
Bsd-3-clause
AudioSetデータセットでファインチューニングされたオーディオスペクトログラムトランスフォーマーで、音声をスペクトログラムに変換後、ビジョントランスフォーマーアーキテクチャで処理し、音声分類タスクで優れた性能を発揮します。
音声分類
Transformers

A
MIT
194.20k
5
Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
Apache-2.0
Librispeech-clean-100データセットで微調整された性別認識モデルで、テストセットでF1スコア0.9993を達成
音声分類
Transformers

W
alefiury
182.33k
42
おすすめAIモデル
Llama 3 Typhoon V1.5x 8b Instruct
タイ語専用に設計された80億パラメータの命令モデルで、GPT-3.5-turboに匹敵する性能を持ち、アプリケーションシナリオ、検索拡張生成、制限付き生成、推論タスクを最適化
大規模言語モデル
Transformers 複数言語対応

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-TinyはSODAデータセットでトレーニングされた超小型対話モデルで、エッジデバイス推論向けに設計されており、体積はCosmo-3Bモデルの約2%です。
対話システム
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
RoBERTaアーキテクチャに基づく中国語抽出型QAモデルで、与えられたテキストから回答を抽出するタスクに適しています。
質問応答システム 中国語
R
uer
2,694
98