🚀 Wav2vec 2.0 とブラジル・ポルトガル語のオープンデータセット v2
このプロジェクトでは、ブラジル・ポルトガル語に対して微調整された Wav2vec モデルを展示しています。以下のデータセットを使用して訓練されています。
- CETUC:約145時間のブラジル・ポルトガル語の音声が含まれており、50人の男性と50人の女性の話者に分散しています。それぞれの話者は、CETEN - Folha コーパスから選ばれた約1000の音声バランスの取れた文章を読み上げています。
- 多言語 Librispeech (MLS):複数の言語を含む大規模なデータセットです。MLSは、LibriVox などの公共ドメインのオーディオブックの録音に基づいています。このデータセットには、合計で6000時間の複数言語の転写データが含まれています。このプロジェクトで使用されているポルトガル語のデータセット(主にブラジルのバリエーション)はこちらで、約284時間の音声が含まれており、62人の朗読者による55冊のオーディオブックから収集されています。
- VoxForge:音響モデルのオープンデータセットを構築することを目的としたプロジェクトです。このコーパスには、約100人の話者による4130のブラジル・ポルトガル語の音声が含まれており、サンプリングレートは16kHzから44.1kHzまで様々です。
- Common Voice 6.1:Mozilla財団によって始まったプロジェクトで、自動音声認識(ASR)モデルを訓練するための多言語の広範なオープンデータセットを作成することを目指しています。このプロジェクトでは、ボランティアが公式サイトを通じて音声データを寄付し、検証しています。このプロジェクトで使用されているポルトガル語のデータセット(主にブラジルのバリエーション)は6.1バージョン(pt_63h_2020 - 12 - 11)で、約50時間の検証済みの音声と1120人の独自の話者が含まれています。
- [Lapsbm](https://github.com/falabrasil/gitlab - resources):“Falabrasil - UFPA”は、Fala Brasilチームがブラジル・ポルトガル語のASRシステムを評価するために使用するデータセットです。35人の話者(うち10人は女性)がそれぞれ20の独自の文章を読み上げており、合計で700のブラジル・ポルトガル語の音声が含まれています。オーディオは22.05kHzでサンプリングされており、環境制御は行われていません。
これらのデータセットは、より大きなブラジル・ポルトガル語のデータセットを構築するために統合されています。Common Voiceの開発セットとテストセットはそれぞれ検証とテストに使用される以外は、すべてのデータが訓練に使用されています。
元のモデルは fairseq を使用して微調整されています。このプロジェクトでは、元のモデルの変換バージョンが使用されています。
⚠️ 重要な注意事項
Common Voiceのテストレポートでは、単語誤り率(WER)が10%と報告されています。しかし、このモデルはCommon Voiceのテストセットのインスタンスを除くすべての検証インスタンスを使用して訓練されています。これは、訓練セットの一部の話者がテストセットに含まれている可能性があることを意味します。
🚀 クイックスタート
依存関係のインストール
%%capture
!pip install datasets
!pip install jiwer
!pip install torchaudio
!pip install transformers
!pip install soundfile
必要なライブラリのインポート
import torchaudio
from datasets import load_dataset, load_metric
from transformers import (
Wav2Vec2ForCTC,
Wav2Vec2Processor,
)
import torch
import re
import sys
準備作業
chars_to_ignore_regex = '[\,\?\.\!\;\:\"]'
wer = load_metric("wer")
device = "cuda"
モデルとプロセッサの読み込み
model_name = 'lgris/wav2vec2-large-xlsr-open-brazilian-portuguese-v2'
model = Wav2Vec2ForCTC.from_pretrained(model_name).to(device)
processor = Wav2Vec2Processor.from_pretrained(model_name)
予測関数の定義
def map_to_pred(batch):
features = processor(batch["speech"], sampling_rate=batch["sampling_rate"][0], padding=True, return_tensors="pt")
input_values = features.input_values.to(device)
attention_mask = features.attention_mask.to(device)
with torch.no_grad():
logits = model(input_values, attention_mask=attention_mask).logits
pred_ids = torch.argmax(logits, dim=-1)
batch["predicted"] = processor.batch_decode(pred_ids)
batch["predicted"] = [pred.lower() for pred in batch["predicted"]]
batch["target"] = batch["sentence"]
return batch
💻 使用例
Common Voiceに対するテスト(ドメイン内)
dataset = load_dataset("common_voice", "pt", split="test", data_dir="./cv-corpus-6.1-2020-12-11")
resampler = torchaudio.transforms.Resample(orig_freq=48_000, new_freq=16_000)
def map_to_array(batch):
speech, _ = torchaudio.load(batch["path"])
batch["speech"] = resampler.forward(speech.squeeze(0)).numpy()
batch["sampling_rate"] = resampler.new_freq
batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower().replace("’", "'")
return batch
ds = dataset.map(map_to_array)
result = ds.map(map_to_pred, batched=True, batch_size=1, remove_columns=list(ds.features.keys()))
print(wer.compute(predictions=result["predicted"], references=result["target"]))
for pred, target in zip(result["predicted"][:10], result["target"][:10]):
print(pred, "|", target)
結果:10.69%
TEDxに対するテスト(ドメイン外)
!gdown --id 1HJEnvthaGYwcV_whHEywgH2daIN4bQna
!tar -xf tedx.tar.gz
dataset = load_dataset('csv', data_files={'test': 'test.csv'})['test']
def map_to_array(batch):
speech, _ = torchaudio.load(batch["path"])
batch["speech"] = speech.squeeze(0).numpy()
batch["sampling_rate"] = resampler.new_freq
batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower().replace("’", "'")
return batch
ds = dataset.map(map_to_array)
result = ds.map(map_to_pred, batched=True, batch_size=1, remove_columns=list(ds.features.keys()))
print(wer.compute(predictions=result["predicted"], references=result["target"]))
for pred, target in zip(result["predicted"][:10], result["target"][:10]):
print(pred, "|", target)
結果:34.53%
📚 ドキュメント
モデル情報
プロパティ |
詳細 |
モデルタイプ |
wav2vec2 - large - xlsr - open - brazilian - portuguese - v2 |
訓練データ |
Common Voice、Multilingual Librispeech (MLS)、CETUC、Lapsbm、VoxForge |
評価指標 |
単語誤り率(WER) |
ラベル情報
- オーディオ
- 音声
- wav2vec2
- ポルトガル語
- ポルトガル語音声コーパス
- 自動音声認識
- PyTorch
- hf - asr - leaderboard
モデルインデックス
モデル名は wav2vec2 - large - xlsr - open - brazilian - portuguese - v2 で、Common Voiceデータセットでのテストの単語誤り率(WER)は10.69%です。
📄 ライセンス
このプロジェクトはApache 2.0ライセンスを採用しています。