モデル概要
モデル特徴
モデル能力
使用事例
🚀 wav2vec 2.0 多言語版 ( ファインチューニング済み )
このモデルは、16kHzでサンプリングされた音声オーディオを使用して事前学習されたベースモデルです。モデルを使用する際には、入力音声も16kHzでサンプリングされていることを確認してください。このモデルは、自動音声認識などの下流タスクでファインチューニングする必要があります。詳細については、このブログをご覧ください。
著者: Alexis Conneau, Alexei Baevski, Ronan Collobert, Abdelrahman Mohamed, Michael Auli
概要 この論文では、複数の言語の音声の生波形から単一のモデルを事前学習することで、言語間の音声表現を学習するXLSRを提案しています。我々は、マスクされた潜在音声表現に対する対照的なタスクを解くことで学習されるwav2vec 2.0をベースに、言語間で共有される潜在量子化を同時に学習します。得られたモデルはラベル付きデータでファインチューニングされ、実験の結果、言語間の事前学習は単一言語の事前学習を大幅に上回ることが示されました。CommonVoiceベンチマークでは、XLSRは既知の最良の結果と比較して、音素誤り率を72%削減しました。BABELでは、我々のアプローチは同等のシステムと比較して、単語誤り率を16%改善しました。我々のアプローチは、強力な個別モデルと競合する単一の多言語音声認識モデルを可能にします。分析の結果、潜在的な離散音声表現は言語間で共有され、関連する言語では共有が増加することが示されました。我々は、53の言語で事前学習された大規模モデルであるXLSR - 53を公開することで、低リソースの音声理解の研究を促進することを期待しています。
元のモデルは、https://github.com/pytorch/fairseq/tree/master/examples/wav2vec#wav2vec-20 で見つけることができます。
Common Voice と独自に作成したデータセット(全体の1/3)を使用して、ペルシャ語(ファルシ語)で facebook/wav2vec2-large-xlsr-53 をファインチューニングしました。このモデルを使用する際には、入力音声が16kHzでサンプリングされていることを確認してください。
🚀 クイックスタート
ファインチューニング済みモデルの使用
このモデルは m3hrdadfi/wav2vec2-large-xlsr-persian-v3 でファインチューニングされているため、トレーニングまたは評価のプロセスは同じです。
# 必要なパッケージ
!pip install git+https://github.com/huggingface/datasets.git
!pip install git+https://github.com/huggingface/transformers.git
!pip install torchaudio
!pip install librosa
!pip install jiwer
!pip install parsivar
!pip install num2fawords
ノーマライザー
# ノーマライザー
!wget -O normalizer.py https://huggingface.co/m3hrdadfi/"wav2vec2-large-xlsr-persian-v3/raw/main/dictionary.py
!wget -O normalizer.py https://huggingface.co/m3hrdadfi/"wav2vec2-large-xlsr-persian-v3/raw/main/normalizer.py
転写データがクリーンであるかどうか不確かな場合(奇妙な文字や他のアルファベット文字が含まれている場合)は、m3hrdadfi/wav2vec2-large-xlsr-persian-v3 が提供するこのコードを使用してください。
クリーニング(データ部分を独自のデータディレクトリに置き換えてください)
from normalizer import normalizer
def cleaning(text):
if not isinstance(text, str):
return None
return normalizer({"sentence": text}, return_dict=False)
# これらの部分を独自のデータディレクトリに編集
data_dir = "data"
test = pd.read_csv(f"{data_dir}/yourtest.tsv", sep=" ")
test["path"] = data_dir + "/clips/" + test["path"]
print(f"Step 0: {len(test)}")
test["status"] = test["path"].apply(lambda path: True if os.path.exists(path) else None)
test = test.dropna(subset=["path"])
test = test.drop("status", 1)
print(f"Step 1: {len(test)}")
test["sentence"] = test["sentence"].apply(lambda t: cleaning(t))
test = test.dropna(subset=["sentence"])
print(f"Step 2: {len(test)}")
test = test.reset_index(drop=True)
print(test.head())
test = test[["path", "sentence"]]
test.to_csv("/content/test.csv", sep=" ", encoding="utf-8", index=False)
予測
import numpy as np
import pandas as pd
import librosa
import torch
import torchaudio
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
from datasets import load_dataset, load_metric
import IPython.display as ipd
model_name_or_path = "masoudmzb/wav2vec2-xlsr-multilingual-53-fa"
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(model_name_or_path, device)
processor = Wav2Vec2Processor.from_pretrained(model_name_or_path)
model = Wav2Vec2ForCTC.from_pretrained(model_name_or_path).to(device)
def speech_file_to_array_fn(batch):
speech_array, sampling_rate = torchaudio.load(batch["path"])
speech_array = speech_array.squeeze().numpy()
speech_array = librosa.resample(np.asarray(speech_array), sampling_rate, processor.feature_extractor.sampling_rate)
batch["speech"] = speech_array
return batch
def predict(batch):
features = processor(
batch["speech"],
sampling_rate=processor.feature_extractor.sampling_rate,
return_tensors="pt",
padding=True
)
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)
return batch
# これらの部分を独自のデータディレクトリに編集
dataset = load_dataset("csv", data_files={"test": "/path_to/your_test.csv"}, delimiter=" ")["test"]
dataset = dataset.map(speech_file_to_array_fn)
result = dataset.map(predict, batched=True, batch_size=4)
WERスコア
wer = load_metric("wer")
print("WER: {:.2f}".format(100 * wer.compute(predictions=result["predicted"], references=result["sentence"])))
出力
max_items = np.random.randint(0, len(result), 20).tolist()
for i in max_items:
reference, predicted = result["sentence"][i], result["predicted"][i]
print("reference:", reference)
print("predicted:", predicted)
print('---')
✨ 主な機能
- 16kHzでサンプリングされた音声オーディオを使用して事前学習されたベースモデル。
- ペルシャ語(ファルシ語)でファインチューニングされている。
- 多言語音声認識に対応。
📦 インストール
必要なパッケージをインストールするには、以下のコマンドを実行します。
!pip install git+https://github.com/huggingface/datasets.git
!pip install git+https://github.com/huggingface/transformers.git
!pip install torchaudio
!pip install librosa
!pip install jiwer
!pip install parsivar
!pip install num2fawords
💻 使用例
基本的な使用法
上記の「ファインチューニング済みモデルの使用」セクションに記載されているコードを使用して、音声認識を行うことができます。
高度な使用法
高度な使用法については、コード内のハイパーパラメータを適切に設定することで、より良い結果を得ることができます。
📚 ドキュメント
評価: 🌡️
モデルは、異なるタイプのオーディオを含むプライベートデータセットで評価されました(残念ながら、テストおよび検証用のデータセットは公開されていませんが、データセットのサンプルを見るにはこのリンクを確認してください)。
名前 | テストデータセット (WER) |
---|---|
m3hrdadfi/wav2vec2-large-xlsr-persian-v3 | 0.56754 |
この新しいモデル | 0.40815 |
基本の多言語モデル | 0.69746 |
- この表は、より多くのデータを追加すると、より良い結果が得られることを示しています。
トレーニング詳細: 🔭
以前にペルシャ語のMozillaデータセットで1つのモデルがトレーニングされていたため、我々はそのモデルから続けることにしました。モデルは mehrdadfa
の チェックポイント からウォームスタートされました。
- 詳細については、🤗 Model Hubのモデルカードの
config.json
を参照してください。 - モデルは84000ステップ、つまり12.42エポックでトレーニングされました。
- ファインチューニングするベースモデルは https://huggingface.co/m3hrdadfi/wav2vec2-large-xlsr-persian-v3/tree/main です。
ファインチューニングの推奨事項: 🐤
ファインチューニングについては、以下のリンクを確認できます。ただし、いくつかのヒントに注意してください。より大きなバッチサイズが必要な場合、勾配累積が必要になることがあります。多くのハイパーパラメータがあるため、適切に設定することを確認してください。
- learning_rate
- attention_dropout
- hidden_dropout
- feat_proj_dropout
- mask_time_prob
- layer_drop
ファインチューニングの例 👷♂️👷♀️
データセット | ファインチューニングの例 |
---|---|
Mozillaトルコ語データセットでのファインチューニング | |
他のデータセットと他の言語のサンプルコード | github_link |
📄 ライセンス
論文に関する引用情報は以下の通りです。
@misc{wav2vec2-xlsr-multilingual-53-fa,
author = {Paparnchi, Seyyed Mohammad Masoud},
title = {wav2vec2-xlsr-multilingual-53-fa},
year = 2021,
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Hamtech-ai/wav2vec2-fa}},
}
🤝 お問い合わせ
モデル、事前学習、コード、または論文に関する技術的な質問がある場合は、リポジトリにイシューを作成してください。これが私たちに連絡する最速の方法です。



