🚀 Wav2vec 2.0 With Open Brazilian Portuguese Datasets
このプロジェクトは、次のデータセットを使用してブラジルポルトガル語用にファインチューニングされたWav2vecモデルのデモンストレーションです。
🚀 クイックスタート
モデルの概要
このモデルは、ブラジルポルトガル語の音声認識に特化しており、複数の公開データセットを組み合わせて訓練されています。
データセット
- CETUC:約145時間のブラジルポルトガル語の音声データが含まれ、50人の男性と50人の女性の話者がそれぞれ約1,000文の音声を提供しています。
- Multilingual Librispeech (MLS):多言語の大規模データセットで、ブラジルポルトガル語のデータは約284時間あります。
- VoxForge:音響モデル用のオープンデータセットを構築するためのプロジェクトで、約100人の話者と4,130の発話が含まれています。
- Common Voice 6.1(訓練データのみ):Mozilla Foundationが提案したプロジェクトで、ASRモデルを訓練するための多言語のオープンデータセットを作成することを目的としています。
- Lapsbm:Fala Brasilグループがブラジルポルトガル語のASRシステムのベンチマークに使用するデータセットで、35人の話者の700の発話が含まれています。
モデルの訓練
元のモデルはfairseqを使用してファインチューニングされました。このノートブックでは、元のモデルの変換バージョンを使用しています。元のfairseqモデルへのリンクはこちらから取得できます。
データセットの分布
次の画像は、データセットの全体的な分布を示しています。

転写例
原文 |
転写結果 |
É comum os usuários confundirem software livre com software livre |
É comum os usuares confunder em softwerlivr com softwerlivre |
Ele fez tanto ghostwriting que ele começa a se sentir como um fantasma também |
Ele fez tanto golstraitn que ele começou a se sentir como um fantasma também |
Arnold apresentou um gráfico mostrando quantas cegonhas ele havia contado nos últimos dez anos |
Arnold apresentou um gráfico mostrando quantas segonhas ele havia contado nos últimos dez anos |
Mais cedo ou mais tarde eles descobrirão como ler esses hieróglifos |
Mais sedo ou mais tarde eles descobriram como de esses ierogrôficos |
Viver juntos compartilhar objetivos e ter um bom relacionamento |
E ver juntos signafica viver juntos ou fartlhar objetivos ter um bom relacionamentoo |
Da mesma forma uma patente pode impedir que concorrentes desenvolvam produtos similares |
Da mesma forma uma patente pode impedir que concorrentes desenvolva produtos similares |
Duas mulheres e uma menina levantam com troféus |
Duas mulheres e uma menina levantam com trofés |
Esse acrobata de circo deve ter um sistema vestibular bem treinado pensou o espectador |
Esse acrobata de cirko deve ter um sistema vestibular bemtreinado pensou o espectador |
Durante a exposição o tribunal pode fazer quaisquer perguntas ou esclarecimentos que considere apropriados |
Durante a exposição o tribunal pode fazer quaisquer perguntas ou esclarecimentos que considere apropriado |
💻 使用例
基本的な使用法
%%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'
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)
結果: 12.90%
TEDxに対するテスト(ドメイン外)
!gdown --id 1HJEnvthaGYwcV_whHEywgH2daIN4bQna
!tar -xf tedx.tar.gz
dataset = load_dataset('csv', data_files={'test': 'tedx/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)
結果: 35.21%
📄 ライセンス
このプロジェクトは、Apache-2.0ライセンスの下で公開されています。
モデル情報
- モデル名: Lucas Gris XLSR Wav2Vec2 Large 53 Brazilian Portuguese
- タスク: 音声認識 (Automatic Speech Recognition)
- 評価指標: Test WER (12.905054857823264%)
属性 |
详情 |
モデルタイプ |
Wav2vec 2.0 |
訓練データ |
Common Voice、MLS、CETUC、Lapsbm、Voxforge |