Bp400 Xlsr
B
Bp400 Xlsr
lgrisによって開発
ブラジルポルトガル語データセットを用いて微調整されたWav2vec 2.0音声認識モデルで、ブラジルポルトガル語の自動音声認識タスクをサポートします。
ダウンロード数 55
リリース時間 : 3/2/2022
モデル概要
このモデルは、ブラジルポルトガル語向けに最適化された自動音声認識(ASR)システムで、Wav2vec 2.0アーキテクチャに基づき、複数のブラジルポルトガル語データセットで微調整されています。
モデル特徴
複数データセットによる訓練
モデルは7つのブラジルポルトガル語データセット(CETUC、Common Voiceなど)を統合し、合計400時間以上の訓練データを使用しています。
言語モデルのサポート
4-gram言語モデルを組み合わせることで、認識精度をさらに向上させることができ、平均WERが12.4%から10.5%に低下します。
高い精度
複数のテストセットで優れた性能を発揮し、CETUCテストセットではWERが3.0%まで低下し、Common VoiceテストセットではWERが9.6%です。
モデル能力
ブラジルポルトガル語音声認識
音声文字起こし
音声をテキストに変換
使用事例
音声文字起こし
ブラジルポルトガル語音声文字起こし
ブラジルポルトガル語の音声内容をテキストに変換します。
CETUCデータセットで3.0%のWERという高い精度を達成しました。
音声アシスタント
ブラジルポルトガル語音声指令認識
ブラジルポルトガル語の音声アシスタントシステムにおける指令認識に使用されます。
🚀 bp400-xlsr: ブラジルポルトガル語 (BP) データセットを使用したWav2vec 2.0
このモデルは、以下のデータセットを使用してブラジルポルトガル語用に微調整されたWav2vecモデルのデモンストレーションです。このモデルは、自動音声認識タスクにおいて高い性能を発揮します。
論文: https://arxiv.org/abs/2107.11414
🚀 クイックスタート
データセット
このモデルのトレーニングに使用されたデータセットは以下の通りです。
- CETUC: 約145時間のブラジルポルトガル語の音声データが含まれており、50人の男性と50人の女性の話者がそれぞれ約1,000文の音声を提供しています。これらの文は CETEN-Folha コーパスから選ばれています。
- Common Voice 7.0: Mozilla Foundationによって提案されたプロジェクトで、多言語のオープンデータセットを作成することを目的としています。ボランティアが 公式サイト を通じて音声データを提供し、検証しています。
- Lapsbm: "Falabrasil - UFPA" データセットは、Fala Brasilグループによってブラジルポルトガル語のASRシステムのベンチマークに使用されています。35人の話者(10人の女性)がそれぞれ20文の音声を提供しており、合計700発話のブラジルポルトガル語の音声データが含まれています。音声は22.05kHzで録音されており、環境制御は行われていません。
- Multilingual Librispeech (MLS): 多言語で利用可能な大規模なデータセットです。MLSは LibriVox のようなパブリックドメインのオーディオブックの録音に基づいています。このデータセットには、多言語で合計6,000時間の文字起こしデータが含まれています。この研究で使用されたポルトガル語のデータセット リンク (主にブラジル語のバリアント)には、62人の話者による55冊のオーディオブックから取得された約284時間の音声データが含まれています。
- Multilingual TEDx: 8つの言語のTEDxトークの音声録音のコレクションです。ポルトガル語のデータセット(主にブラジルポルトガル語のバリアント)には、164時間の文字起こしされた音声データが含まれています。
- Sidney (SID): 72人の話者(20人の女性)による5,777発話の音声データが含まれています。話者の生年月日、年齢、性別、教育、職業などの情報も含まれています。
- VoxForge: 音響モデルのためのオープンデータセットを構築することを目的としたプロジェクトです。このコーパスには、約100人の話者と4,130発話のブラジルポルトガル語の音声データが含まれており、サンプルレートは16kHzから44.1kHzまで様々です。
これらのデータセットは、より大きなブラジルポルトガル語のデータセットを構築するために結合されました。Common Voiceの開発/テストセットを除くすべてのデータがトレーニングに使用され、それぞれ検証/テストに使用されました。また、収集したすべてのデータセットに対してテストセットも作成しました。
データセット | トレーニング | 検証 | テスト |
---|---|---|---|
CETUC | 93.9h | -- | 5.4h |
Common Voice | 37.6h | 8.9h | 9.5h |
LaPS BM | 0.8h | -- | 0.1h |
MLS | 161.0h | -- | 3.7h |
Multilingual TEDx (ポルトガル語) | 144.2h | -- | 1.8h |
SID | 5.0h | -- | 1.0h |
VoxForge | 2.8h | -- | 0.1h |
合計 | 437.2h | 8.9h | 21.6h |
モデルの微調整
元のモデルは fairseq を使用して微調整されました。このノートブックでは、元のモデルの変換バージョンを使用しています。元のfairseqモデルへのリンクは こちら から入手できます。
結果の要約
CETUC | CV | LaPS | MLS | SID | TEDx | VF | AVG | |
---|---|---|---|---|---|---|---|---|
bp_400 (以下のデモンストレーション) | 0.052 | 0.140 | 0.074 | 0.117 | 0.121 | 0.245 | 0.118 | 0.124 |
bp_400 + 3-gram | 0.033 | 0.095 | 0.046 | 0.123 | 0.112 | 0.212 | 0.123 | 0.106 |
bp_400 + 4-gram (以下のデモンストレーション) | 0.030 | 0.096 | 0.043 | 0.106 | 0.118 | 0.229 | 0.117 | 0.105 |
bp_400 + 5-gram | 0.033 | 0.094 | 0.043 | 0.123 | 0.111 | 0.210 | 0.123 | 0.105 |
bp_400 + Transf. | 0.032 | 0.092 | 0.036 | 0.130 | 0.115 | 0.215 | 0.125 | 0.106 |
文字起こしの例
テキスト | 文字起こし |
---|---|
alguém sabe a que horas começa o jantar | alguém sabe a que horas começo jantar |
lila covas ainda não sabe o que vai fazer no fundo | lilacovas ainda não sabe o que vai fazer no fundo |
que tal um pouco desse bom spaghetti | quetá um pouco deste bom ispaguete |
hong kong em cantonês significa porto perfumado | rongkong en cantones significa porto perfumado |
vamos hackear esse problema | vamos rackar esse problema |
apenas a poucos metros há uma estação de ônibus | apenas ha poucos metros á uma estação de ônibus |
relâmpago e trovão sempre andam juntos | relampagotrevão sempre andam juntos |
💻 使用例
基本的な使用法
MODEL_NAME = "lgris/bp400-xlsr"
インポートと依存関係
%%capture
!pip install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio===0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
!pip install datasets
!pip install jiwer
!pip install transformers
!pip install soundfile
!pip install pyctcdecode
!pip install https://github.com/kpu/kenlm/archive/master.zip
import jiwer
import torchaudio
from datasets import load_dataset, load_metric
from transformers import (
Wav2Vec2ForCTC,
Wav2Vec2Processor,
)
from pyctcdecode import build_ctcdecoder
import torch
import re
import sys
ヘルパー関数
chars_to_ignore_regex = '[\,\?\.\!\;\:\"]' # noqa: W605
def map_to_array(batch):
speech, _ = torchaudio.load(batch["path"])
batch["speech"] = speech.squeeze(0).numpy()
batch["sampling_rate"] = 16_000
batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower().replace("’", "'")
batch["target"] = batch["sentence"]
return batch
def calc_metrics(truths, hypos):
wers = []
mers = []
wils = []
for t, h in zip(truths, hypos):
try:
wers.append(jiwer.wer(t, h))
mers.append(jiwer.mer(t, h))
wils.append(jiwer.wil(t, h))
except: # Empty string?
pass
wer = sum(wers)/len(wers)
mer = sum(mers)/len(mers)
wil = sum(wils)/len(wils)
return wer, mer, wil
def load_data(dataset):
data_files = {'test': f'{dataset}/test.csv'}
dataset = load_dataset('csv', data_files=data_files)["test"]
return dataset.map(map_to_array)
モデルの定義
class STT:
def __init__(self,
model_name,
device='cuda' if torch.cuda.is_available() else 'cpu',
lm=None):
self.model_name = model_name
self.model = Wav2Vec2ForCTC.from_pretrained(model_name).to(device)
self.processor = Wav2Vec2Processor.from_pretrained(model_name)
self.vocab_dict = self.processor.tokenizer.get_vocab()
self.sorted_dict = {
k.lower(): v for k, v in sorted(self.vocab_dict.items(),
key=lambda item: item[1])
}
self.device = device
self.lm = lm
if self.lm:
self.lm_decoder = build_ctcdecoder(
list(self.sorted_dict.keys()),
self.lm
)
def batch_predict(self, batch):
features = self.processor(batch["speech"],
sampling_rate=batch["sampling_rate"][0],
padding=True,
return_tensors="pt")
input_values = features.input_values.to(self.device)
attention_mask = features.attention_mask.to(self.device)
with torch.no_grad():
logits = self.model(input_values, attention_mask=attention_mask).logits
if self.lm:
logits = logits.cpu().numpy()
batch["predicted"] = []
for sample_logits in logits:
batch["predicted"].append(self.lm_decoder.decode(sample_logits))
else:
pred_ids = torch.argmax(logits, dim=-1)
batch["predicted"] = self.processor.batch_decode(pred_ids)
return batch
データセットのダウンロード
%%capture
!gdown --id 1HFECzIizf-bmkQRLiQD0QVqcGtOG5upI
!mkdir bp_dataset
!unzip bp_dataset -d bp_dataset/
テスト
stt = STT(MODEL_NAME)
CETUC
ds = load_data('cetuc_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("CETUC WER:", wer)
CETUC WER: 0.05159104708285062
Common Voice
ds = load_data('commonvoice_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("CV WER:", wer)
CV WER: 0.14031426198658084
LaPS
ds = load_data('lapsbm_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("Laps WER:", wer)
Laps WER: 0.07432133838383838
MLS
ds = load_data('mls_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("MLS WER:", wer)
MLS WER: 0.11678793514817509
SID
ds = load_data('sid_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("Sid WER:", wer)
Sid WER: 0.12152357273433984
TEDx
ds = load_data('tedx_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("TEDx WER:", wer)
TEDx WER: 0.24666815906766504
VoxForge
ds = load_data('voxforge_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("VoxForge WER:", wer)
VoxForge WER: 0.11873106060606062
言語モデルを使用したテスト
!rm -rf ~/.cache
!gdown --id 1GJIKseP5ZkTbllQVgOL98R4yYAcIySFP # wikipediaでトレーニング
stt = STT(MODEL_NAME, lm='pt-BR-wiki.word.4-gram.arpa')
# !gdown --id 1dLFldy7eguPtyJj5OAlI4Emnx0BpFywg # bpでトレーニング
# stt = STT(MODEL_NAME, lm='pt-BR.word.4-gram.arpa')
Cetuc
ds = load_data('cetuc_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("CETUC WER:", wer)
CETUC WER: 0.030266462438593742
Common Voice
ds = load_data('commonvoice_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("CV WER:", wer)
CV WER: 0.09577710237417715
LaPS
ds = load_data('lapsbm_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("Laps WER:", wer)
Laps WER: 0.043617424242424235
MLS
ds = load_data('mls_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("MLS WER:", wer)
MLS WER: 0.10642133314350002
SID
ds = load_data('sid_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("Sid WER:", wer)
Sid WER: 0.11839021001747055
TEDx
ds = load_data('tedx_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("TEDx WER:", wer)
TEDx WER: 0.22929952467810416
VoxForge
ds = load_data('voxforge_dataset')
result = ds.map(stt.batch_predict, batched=True, batch_size=8)
wer, mer, wil = calc_metrics(result["sentence"], result["predicted"])
print("VoxForge WER:", wer)
VoxForge WER: 0.11716314935064935
📄 ライセンス
このプロジェクトは apache-2.0
ライセンスの下で公開されています。
Voice Activity Detection
MIT
pyannote.audio 2.1バージョンに基づく音声活動検出モデルで、音声中の音声活動時間帯を識別するために使用されます
音声認識
V
pyannote
7.7M
181
Wav2vec2 Large Xlsr 53 Portuguese
Apache-2.0
これはポルトガル語音声認識タスク向けにファインチューニングされたXLSR-53大規模モデルで、Common Voice 6.1データセットでトレーニングされ、ポルトガル語音声からテキストへの変換をサポートします。
音声認識 その他
W
jonatasgrosman
4.9M
32
Whisper Large V3
Apache-2.0
WhisperはOpenAIが提案した先進的な自動音声認識(ASR)および音声翻訳モデルで、500万時間以上の注釈付きデータで訓練されており、強力なデータセット間およびドメイン間の汎化能力を持っています。
音声認識 複数言語対応
W
openai
4.6M
4,321
Whisper Large V3 Turbo
MIT
WhisperはOpenAIが開発した最先端の自動音声認識(ASR)および音声翻訳モデルで、500万時間以上のラベル付きデータでトレーニングされ、ゼロショット設定において強力な汎化能力を発揮します。
音声認識
Transformers 複数言語対応

W
openai
4.0M
2,317
Wav2vec2 Large Xlsr 53 Russian
Apache-2.0
facebook/wav2vec2-large-xlsr-53モデルをファインチューニングしたロシア語音声認識モデル、16kHzサンプリングレートの音声入力をサポート
音声認識 その他
W
jonatasgrosman
3.9M
54
Wav2vec2 Large Xlsr 53 Chinese Zh Cn
Apache-2.0
facebook/wav2vec2-large-xlsr-53モデルをファインチューニングした中国語音声認識モデルで、16kHzサンプリングレートの音声入力をサポートしています。
音声認識 中国語
W
jonatasgrosman
3.8M
110
Wav2vec2 Large Xlsr 53 Dutch
Apache-2.0
facebook/wav2vec2-large-xlsr-53をファインチューニングしたオランダ語音声認識モデルで、Common VoiceとCSS10データセットでトレーニングされ、16kHz音声入力に対応しています。
音声認識 その他
W
jonatasgrosman
3.0M
12
Wav2vec2 Large Xlsr 53 Japanese
Apache-2.0
facebook/wav2vec2-large-xlsr-53モデルをベースにファインチューニングした日本語音声認識モデルで、16kHzサンプリングレートの音声入力をサポート
音声認識 日本語
W
jonatasgrosman
2.9M
33
Mms 300m 1130 Forced Aligner
Hugging Faceの事前学習モデルを基にしたテキストと音声の強制アライメントツールで、多言語対応かつメモリ効率に優れています
音声認識
Transformers 複数言語対応

M
MahmoudAshraf
2.5M
50
Wav2vec2 Large Xlsr 53 Arabic
Apache-2.0
facebook/wav2vec2-large-xlsr - 53をベースに微調整されたアラビア語音声認識モデルで、Common Voiceとアラビア語音声コーパスで訓練されました。
音声認識 アラビア語
W
jonatasgrosman
2.3M
37
おすすめ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