🚀 Sharif-wav2vec2
このモデルは、ファルシ語用に微調整されたSharif Wav2vec2のバージョンです。ベースモデルは、サンプリングレートが16kHzのCommonvoiceのファルシ語サンプル108時間を使用して微調整されました。その後、kenlmツールキットを使用して5gramを学習させ、プロセッサーに組み込むことで、オンラインASRの精度を向上させました。
🚀 クイックスタート
このモデルを使用する際には、音声入力が16Khzでサンプリングされていることを確認してください。使用する前に、以下の依存関係をインストールする必要があります。
pip install pyctcdecode
pip install pypi-kenlm
テストには、Hugging Faceのホストされた推論APIを使用できます(Common Voiceからのサンプルが用意されています)。与えられた音声を文字起こしするのに時間がかかる場合があります。または、以下のコードを使用してローカルで実行することもできます。
💻 使用例
基本的な使用法
import tensorflow
import torchaudio
import torch
import numpy as np
from transformers import AutoProcessor, AutoModelForCTC
processor = AutoProcessor.from_pretrained("SLPL/Sharif-wav2vec2")
model = AutoModelForCTC.from_pretrained("SLPL/Sharif-wav2vec2")
speech_array, sampling_rate = torchaudio.load("path/to/your.wav")
speech_array = speech_array.squeeze().numpy()
features = processor(
speech_array,
sampling_rate=processor.feature_extractor.sampling_rate,
return_tensors="pt",
padding=True)
with torch.no_grad():
logits = model(
features.input_values,
attention_mask=features.attention_mask).logits
prediction = processor.batch_decode(logits.numpy()).text
print(prediction[0])
🔧 技術詳細
評価には、以下のコードを使用できます。コンフリクトを避けるために、データセットが以下の形式であることを確認してください。
path |
reference |
path/to/audio_file.wav |
"TRANSCRIPTION" |
また、実行する前にpip install jiwer
をインストールしておく必要があります。
import tensorflow
import torchaudio
import torch
import librosa
from datasets import load_dataset,load_metric
import numpy as np
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
from transformers import Wav2Vec2ProcessorWithLM
model = Wav2Vec2ForCTC.from_pretrained("SLPL/Sharif-wav2vec2")
processor = Wav2Vec2ProcessorWithLM.from_pretrained("SLPL/Sharif-wav2vec2")
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
)
with torch.no_grad():
logits = model(
features.input_values,
attention_mask=features.attention_mask).logits
batch["prediction"] = processor.batch_decode(logits.numpy()).text
return batch
dataset = load_dataset(
"csv",
data_files={"test":"dataset.eval.csv"},
delimiter=",")["test"]
dataset = dataset.map(speech_file_to_array_fn)
result = dataset.map(predict, batched=True, batch_size=4)
wer = load_metric("wer")
print("WER: {:.2f}".format(wer.compute(
predictions=result["prediction"],
references=result["reference"])))
Common Voice 6.1での結果(WER):
📄 ライセンス
このモデルはMITライセンスの下で提供されています。
📚 引用
このモデルを引用する場合は、以下を使用できます。
?
貢献
このモデルを追加してくれた@sarasadeghiiと@sadrasabouriに感謝します。