🚀 ru_whisper_small - Val123val
このモデルは、Sberdevices_golos_10h_crowdデータセットでopenai/whisper-smallをファインチューニングしたバージョンです。このモデルは、音声認識タスクに特化しており、特にロシア語の音声認識に役立ちます。
🚀 クイックスタート
以下のコードを使って、モデルをロードし、音声データを処理することができます。
from transformers import WhisperProcessor, WhisperForConditionalGeneration
from datasets import load_dataset
processor = WhisperProcessor.from_pretrained("Val123val/ru_whisper_small")
model = WhisperForConditionalGeneration.from_pretrained("Val123val/ru_whisper_small")
model.config.forced_decoder_ids = None
ds = load_dataset("bond005/sberdevices_golos_10h_crowd", split="validation", token=True)
sample = ds[0]["audio"]
input_features = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features
predicted_ids = model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
✨ 主な機能
モデルの説明
WhisperはTransformerベースのエンコーダ・デコーダモデルで、シーケンス-to-シーケンスモデルとも呼ばれます。このモデルは、大規模な弱教師付き学習を用いて注釈付けされた68万時間の音声データで学習されています。その中で、ロシア語のデータはわずか5000時間です。
ru_whisper_smallは、Sberdevices_golos_10h_crowdデータセットでopenai/whisper-smallをファインチューニングしたバージョンです。ru-whisperは、開発者にとって音声認識(ASR)ソリューションとして非常に有用であり、特にロシア語の音声認識に適しています。特定のビジネスタスクでファインチューニングすることで、追加の機能を発揮する可能性があります。
想定される用途と制限
このモデルは、音声認識タスクに特化しています。ただし、音声データの品質や言語の多様性によって、認識精度が影響を受ける場合があります。
長時間の音声文字起こし
Whisperモデルは、基本的には最大30秒の音声サンプルで動作するように設計されています。しかし、チャンキングアルゴリズムを使用することで、任意の長さの音声サンプルを文字起こしすることができます。これは、Transformersのパイプラインメソッドを通じて可能です。パイプラインをインスタンス化する際にchunk_length_s=30を設定することで、チャンキングが有効になります。チャンキングを有効にすると、パイプラインはバッチ推論で実行できます。また、return_timestamps=Trueを渡すことで、シーケンスレベルのタイムスタンプを予測するように拡張することもできます。
import torch
from transformers import pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
pipe = pipeline(
"automatic-speech-recognition",
model="Val123val/ru_whisper_small",
chunk_length_s=30,
device=device,
)
ds = load_dataset("bond005/sberdevices_golos_10h_crowd", split="validation", token=True)
sample = ds[0]["audio"]
prediction = pipe(sample.copy(), batch_size=8)["text"]
prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
推測デコードによる高速化
推測デコードは、GoogleのYaniv Leviathanらによる「Fast Inference from Transformers via Speculative Decoding」で提案された手法です。この手法は、高速なアシスタントモデルが、多くの場合、大規模なメインモデルと同じトークンを生成するという前提に基づいています。
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
from transformers import pipeline
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
dataset = load_dataset("bond005/sberdevices_golos_10h_crowd", split="validation", token=True)
model_id = "Val123val/ru_whisper_small"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True,
use_safetensors=True,
attn_implementation="sdpa",
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
assistant_model_id = "openai/whisper-tiny"
assistant_model = AutoModelForSpeechSeq2Seq.from_pretrained(
assistant_model_id,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True,
use_safetensors=True,
attn_implementation="sdpa",
)
assistant_model.to(device);
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
max_new_tokens=128,
chunk_length_s=15,
batch_size=4,
generate_kwargs={"assistant_model": assistant_model},
torch_dtype=torch_dtype,
device=device,
)
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
🔧 技術詳細
学習ハイパーパラメータ
学習中に使用されたハイパーパラメータは以下の通りです。
パラメータ |
値 |
learning_rate |
0.0001 |
train_batch_size |
32 |
eval_batch_size |
16 |
seed |
42 |
optimizer |
Adam (betas=(0.9,0.999), epsilon=1e-08) |
lr_scheduler_type |
linear |
lr_scheduler_warmup_steps |
500 |
training_steps |
5000 |
フレームワークのバージョン
- Transformers 4.36.2
- Pytorch 2.1.0+cu121
- Datasets 2.16.0
- Tokenizers 0.15.0
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。