モデル概要
モデル特徴
モデル能力
使用事例
language:
- en
- zh
- de
- es
- ru
- ko
- fr
- ja
- pt
- tr
- pl
- ca
- nl
- ar
- sv
- it
- id
- hi
- fi
- vi
- he
- uk
- el
- ms
- cs
- ro
- da
- hu
- ta
- 'no'
- th
- ur
- hr
- bg
- lt
- la
- mi
- ml
- cy
- sk
- te
- fa
- lv
- bn
- sr
- az
- sl
- kn
- et
- mk
- br
- eu
- is
- hy
- ne
- mn
- bs
- kk
- sq
- sw
- gl
- mr
- pa
- si
- km
- sn
- yo
- so
- af
- oc
- ka
- be
- tg
- sd
- gu
- am
- yi
- lo
- uz
- fo
- ht
- ps
- tk
- nn
- mt
- sa
- lb
- my
- bo
- tl
- mg
- as
- tt
- haw
- ln
- ha
- ba
- jw
- su tags:
- audio
- automatic-speech-recognition
- hf-asr-leaderboard
- unsloth widget:
- example_title: Librispeechサンプル1 src: https://cdn-media.huggingface.co/speech_samples/sample1.flac
- example_title: Librispeechサンプル2 src: https://cdn-media.huggingface.co/speech_samples/sample2.flac pipeline_tag: automatic-speech-recognition license: apache-2.0 base_model:
- openai/whisper-large-v3
当社のコレクションで全てのTTSモデルアップロードをご覧ください。
TTSモデルのファインチューニングを学ぶ - ガイドを読む。
Unsloth Dynamic 2.0は優れた精度を達成し、他の主要な量子化手法を凌駕します。
‚ú® UnslothでTTSモデルを実行&ファインチューニング!
- 当社のGoogle Colabノートブックで無料でTTSモデルをファインチューニング!
- TTSサポートに関するブログを読む: unsloth.ai/blog/tts
Unslothサポート | 無料ノートブック | パフォーマンス | メモリ使用量 |
---|---|---|---|
Orpheus-TTS | ‚ñ∂Ô∏è Colabで開始 | 1.5倍高速 | 58%削減 |
Whisper Large V3 | ‚ñ∂Ô∏è Colabで開始 | 1.5倍高速 | 50%削減 |
Qwen3 (14B) | ‚ñ∂Ô∏è Colabで開始 | 2倍高速 | 70%削減 |
Llama 3.2 Vision (11B) | ‚ñ∂Ô∏è Colabで開始 | 1.8倍高速 | 50%削減 |
Whisper
Whisperは、自動音声認識(ASR)と音声翻訳の最先端モデルで、OpenAIのAlec Radfordらによる論文Robust Speech Recognition via Large-Scale Weak Supervisionで提案されました。500万時間以上のラベル付きデータで訓練されたWhisperは、ゼロショット設定で多くのデータセットとドメインに強く汎化する能力を示します。
Whisper large-v3は、以前のlargeおよびlarge-v2モデルと同じアーキテクチャを持ちますが、以下の小さな違いがあります:
- スペクトログラム入力に80の代わりに128のメル周波数ビンを使用
- 広東語用の新しい言語トークン
Whisper large-v3モデルは、100万時間の弱ラベル付き音声と、Whisper large-v2を使用して収集された400万時間の擬似ラベル付き音声で訓練されました。この混合データセットに対して2.0エポック訓練されました。
large-v3モデルは、幅広い言語で性能が向上し、Whisper large-v2と比べてエラーが10%から20%減少しています。利用可能な異なるチェックポイントの詳細については、モデル詳細セクションを参照してください。
免責事項: このモデルカードの内容は、一部Hugging Faceチームによって書かれ、一部は元のモデルカードからコピー&ペーストされています。
使用方法
Whisper large-v3はHugging Face Transformersでサポートされています。モデルを実行するには、まずTransformersライブラリをインストールしてください。この例では、Hugging Face Hubからおもちゃの音声データセットをロードするためにDatasets、モデルロード時間を短縮するためにAccelerateもインストールします:
pip install --upgrade pip
pip install --upgrade transformers datasets[audio] accelerate
モデルはpipeline
クラスで使用でき、任意の長さの音声を文字起こしできます:
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
ローカル音声ファイルを文字起こしするには、パイプライン呼び出し時に音声ファイルのパスを渡すだけです:
result = pipe("audio.mp3")
複数の音声ファイルを並列で文字起こしするには、それらをリストとして指定し、batch_size
パラメータを設定します:
result = pipe(["audio_1.mp3", "audio_2.mp3"], batch_size=2)
Transformersは、温度フォールバックや前のトークンに条件付けするなど、全てのWhisperデコード戦略と互換性があります。以下の例は、これらのヒューリスティックを有効にする方法を示しています:
generate_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # トークン空間でのzlib圧縮率閾値
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
result = pipe(sample, generate_kwargs=generate_kwargs)
Whisperはソース音声の言語を自動的に予測します。ソース音声の言語が事前にわかっている場合は、パイプラインの引数として渡せます:
result = pipe(sample, generate_kwargs={"language": "english"})
デフォルトでは、Whisperは音声文字起こしタスクを実行し、ソース音声言語とターゲットテキスト言語は同じです。ターゲットテキストが英語の音声翻訳を実行するには、タスクを"translate"
に設定します:
result = pipe(sample, generate_kwargs={"task": "translate"})
最後に、モデルにタイムスタンプを予測させることができます。文レベルのタイムスタンプには、return_timestamps
引数を渡します:
result = pipe(sample, return_timestamps=True)
print(result["chunks"])
単語レベルのタイムスタンプには:
result = pipe(sample, return_timestamps="word")
print(result["chunks"])
上記の引数は単独または組み合わせて使用できます。例えば、ソース音声がフランス語で文レベルのタイムスタンプを返す音声文字起こしタスクを実行するには、以下を使用します:
result = pipe(sample, return_timestamps=True, generate_kwargs={"language": "french", "task": "translate"})
print(result["chunks"])
生成パラメータをより細かく制御するには、モデル+プロセッサAPIを直接使用:
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
from datasets import Audio, load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
dataset = dataset.cast_column("audio", Audio(processor.feature_extractor.sampling_rate))
sample = dataset[0]["audio"]
inputs = processor(
sample["array"],
sampling_rate=sample["sampling_rate"],
return_tensors="pt",
truncation=False,
padding="longest",
return_attention_mask=True,
)
inputs = inputs.to(device, dtype=torch_dtype)
gen_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # トークン空間でのzlib圧縮率閾値
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
pred_ids = model.generate(**inputs, **gen_kwargs)
pred_text = processor.batch_decode(pred_ids, skip_special_tokens=True, decode_with_timestamps=False)
print(pred_text)
追加の速度&メモリ改善
Whisperに追加の速度とメモリ改善を適用し、推論速度とVRAM要件をさらに削減できます。
チャンク化長形式
Whisperの受容野は30秒です。これより長い音声を文字起こしするには、2つの長形式アルゴリズムのいずれかが必要です:
- 逐次的: バッファード推論に「スライディングウィンドウ」を使用し、30秒スライスを次々と文字起こし
- チャンク化: 長い音声ファイルを短いものに分割(セグメント間に小さなオーバーラップあり)、各セグメントを独立して文字起こしし、結果の文字起こしを境界で結合
逐次的长形式アルゴリズムは、以下のいずれかのシナリオで使用する必要があります:
- 文字起こし精度が最も重要で、速度はそれほど考慮しない場合
- 長い音声ファイルのバッチを文字起こしする場合、この場合、逐次的のレイテンシはチャンク化と同等で、0.5% WERより正確
逆に、チャンク化アルゴリズムは以下で使用する必要があります:
- 文字起こし速度が最も重要な場合
- 単一の長い音声ファイルを文字起こしする場合
デフォルトでは、Transformersは逐次的アルゴリズムを使用します。チャンク化アルゴリズムを有効にするには、chunk_length_s
パラメータをpipeline
に渡します。large-v3では、30秒のチャンク長が最適です。長い音声ファイルに対するバッチ処理を有効にするには、batch_size
引数を渡します:
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
chunk_length_s=30,
batch_size=16, # デバイスに基づいて設定
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
Torch compile
Whisperのフォワードパスはtorch.compile
と互換性があり、4.5倍の高速化が可能です。
注: torch.compile
は現在、チャンク化長形式アルゴリズムやFlash Attention 2 ‚ö†Ô∏èと互換性がありません
import torch
from torch.nn.attention import SDPBackend, sdpa_kernel
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
from tqdm import tqdm
torch.set_float32_matmul_precision("high")
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
).to(device)
# 静的キャッシュを有効化しフォワードパスをコンパイル
model.generation_config.cache_implementation = "static"
model.generation_config.max_new_tokens = 256
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
# 2回のウォームアップステップ
for _ in tqdm(range(2), desc="ウォームアップステップ"):
with sdpa_kernel(SDPBackend.MATH):
result = pipe(sample.copy(), generate_kwargs={"min_new_tokens": 256, "max_new_tokens": 256})
# 高速実行
with sdpa_kernel(SDPBackend.MATH):
result = pipe(sample.copy())
print(result["text"])
Flash Attention 2
Flash-Attention 2を使用することを推奨します(GPUがサポートしており、torch.compileを使用していない場合)。まずFlash Attentionをインストール:
pip install flash-attn --no-build-isolation
次にattn_implementation="flash_attention_2"
をfrom_pretrained
に渡します:
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, attn_implementation="flash_attention_2")
Torch Scale-Product-Attention (SDPA)
GPUがFlash Attentionをサポートしていない場合、PyTorch scaled dot-product attention (SDPA)の利用を推奨します。この注意実装は、PyTorchバージョン2.1.1以上でデフォルトで有効です。互換性のあるPyTorchバージョンがあるか確認するには、以下のPythonコードスニペットを実行:
from transformers.utils import is_torch_sdpa_available
print(is_torch_sdpa_available())
True
を返す場合、有効なPyTorchバージョンがインストールされており、SDPAがデフォルトで有効です。False
を返す場合、公式手順に従ってPyTorchバージョンをアップグレードする必要があります。
有効なPyTorchバージョンがインストールされると、SDPAはデフォルトで有効になります。attn_implementation="sdpa"
を指定して明示的に設定することもできます:
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, attn_implementation="sdpa")
SDPAの使用方法の詳細については、Transformers SDPAドキュメントを参照してください。
モデル詳細
WhisperはTransformerベースのエンコーダ-デコーダモデルで、sequence-to-sequenceモデルとも呼ばれます。Whisperモデルには2つの種類があります: 英語専用と多言語。英語専用モデルは英語音声認識タスクで訓練されました。多言語モデルは、多言語音声認識と音声翻訳を同時に訓練しました。音声認識では、モデルは音声と同じ言語の文字起こしを予測します。音声翻訳では、モデルは音声とは異なる言語の文字起こしを予測します。
Whisperチェックポイントは、さまざまなモデルサイズの5つの構成で利用可能です。最小の4つは英語専用と多言語で利用可能です。最大のチェックポイントは多言語のみです。全ての10の事前訓練済みチェックポイントはHugging Face Hubで利用可能です。チェックポイントは以下の表にまとめられ、Hubのモデルへのリンクが付いています:
サイズ | パラメータ数 | 英語専用 | 多言語 |
---|---|---|---|
tiny | 39 M | ‚úì | ‚úì |
base | 74 M | ‚úì | ‚úì |
small | 244 M | ‚úì | ‚úì |
medium | 769 M | ‚úì | ‚úì |
large | 1550 M | x | ‚úì |
large-v2 | 1550 M | x | ‚úì |
large-v3 | 1550 M | x | ‚úì |
ファインチューニング
事前訓練済みWhisperモデルは、異なるデータセットとドメインに強く汎化する能力を示します。しかし、特定の言語やタスクに対しては、ファインチューニングを通じて予測能力をさらに向上させることができます。ブログ記事Fine-Tune Whisper with ü§ó Transformersでは、わずか5時間のラベル付きデータでWhisperモデルをファインチューニングするステップバイステップガイドを提供しています。
評価済み用途
これらのモデルの主な意図されたユーザーは、現在のモデルの堅牢性、汎化性、能力、バイアス、制約を研究するAI研究者です。しかし、Whisperは特に英語音声認識のためのASRソリューションとして開発者にとっても非常に有用です。モデルがリリースされると、「意図された」用途にアクセスを制限したり、何が研究かどうかについて合理的なガイドラインを描くことは不可能であることを認識しています。
モデルは主にASRと英語への音声翻訳タスクで訓練および評価されています。約10言語で強いASR結果を示します。音声活動検出、話者分類、話者ダイアリゼーションなどの特定のタスクでファインチューニングすると、追加の能力を示す可能性がありますが、これらの領域では堅牢に評価されていません。これらのモデルを展開する前に、特定のコンテキストとドメインで堅牢な評価を実施することを強く推奨します。
特に、個人の同意なしに録音した音声を文字起こししたり、これらのモデルを何らかの主観的分類に使用することに対して警告します。精度の欠陥が顕著な結果の欠陥につながる可能性のある意思決定コンテキストなどの高リスクドメインでの使用は推奨しません。モデルは音声の文字起こしと翻訳を目的としており、分類のためのモデルの使用は評価されていないだけでなく、特に人間の属性を推論するには適切ではありません。
訓練データ
large-v3チェックポイントは、100万時間の弱ラベル付き音声と、Whisper large-v2を使用して収集された400万時間の擬似ラベル付き音声で訓練されました。
付随する論文で議論されているように、特定の言語での文字起こし性能は、その言語で使用する訓練データ量と直接相関していることがわかります。
性能と制限
私たちの研究では、多くの既存のASRシステムに比べて、モデルがアクセント、背景ノイズ、専門用語に対する堅牢性、および複数の言語から英語へのゼロショット翻訳が改善され、音声認識と翻訳の精度がほぼ最先端レベルであることが示されています。
しかし、モデルは大規模なノイズの多いデータを使用して弱教師ありで訓練されているため、予測には音声入力で実際に話されていないテキスト(つまり幻覚)が含まれる可能性があります。これは、言語に関する一般的な知識を考慮して、モデルが音声自体を文字起こししようとするのと同時に、音声の次の単語を予測しようとするためだと仮定しています。
私たちのモデルは言語間で不均一な性能を示し、リソースが少ないおよび/または発見可能性が低い言語、または訓練データが少ない言語では精度が低くなります。モデルはまた、特定の言語の異なるアクセントや方言で異なる性能を示し、性別、人種、年齢、その他の人口統計学的基準が異なる話者間で単語誤り率が高くなる可能性があります。完全な評価結果はこのリリースに付随する論文に記載されています。
さらに、モデルのsequence-to-sequenceアーキテクチャにより、繰り返しテキストを生成しやすく、ビームサーチと温度スケジューリングである程度軽減できますが、完全ではありません。これらの制限に関するさらなる分析は論文で提供されています。この動作と幻覚は、リソースが少ないおよび/または発見可能性が低い言語でより悪化する可能性があります。
広範な影響
Whisperモデルの文字起こし能力がアクセシビリティツールの改善に使用されることを期待しています。Whisperモデルはそのままではリアルタイム文字起こしに使用できませんが、その速度とサイズから、他の人がその上にほぼリアルタイムの音声認識と翻訳を可能にするアプリケーションを構築できる可能性があります。Whisperモデルの上に構築された有益なアプリケーションの真の価値は、これらのモデルの不均一な性能が実際の経済的影響を持つ可能性があることを示唆しています。
Whisperのリリースには潜在的なデュアルユースの懸念もあります。この技術が主に有益な目的で使用されることを願っていますが、ASR技術をよりアクセス可能にすることで、より多くのアクターが有能な監視技術を構築したり、既存の監視努力を拡大できる可能性があります。速度と精度により、大量の音声通信の自動文字起こしと翻訳が手頃な価格で可能になるためです。さらに、これらのモデルには、そのままでは特定の個人を認識する能力がある可能性があり、デュアルユースと不均一な性能の両方に関連する安全上の懸念が生じます。実際には、文字起こしコストが監視プロジェクトの拡大の制限要因ではないと予想しています。
BibTeXエントリと引用情報
@misc{radford2022whisper,
doi = {10.48550/ARXIV.2212.04356},
url = {https://arxiv.org/abs/2212.04356},
author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
title = {Robust Speech Recognition via Large-Scale Weak Supervision},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non-exclusive license}
}



