モデル概要
モデル特徴
モデル能力
使用事例
🚀 Whisper
Whisperは、自動音声認識(ASR)と音声翻訳のための事前学習済みモデルです。68万時間のラベル付きデータで学習されたWhisperモデルは、微調整することなく、多くのデータセットやドメインに対して強力な汎化能力を示します。
Whisperは、OpenAIのAlec Radfordらによる論文 Robust Speech Recognition via Large-Scale Weak Supervision で提案されました。元のコードリポジトリは こちら で確認できます。
免責事項:このモデルカードの内容の一部はHugging Faceチームによって作成され、一部は元のモデルカードからコピー&ペーストされています。
🚀 クイックスタート
このチェックポイントは英語専用のモデルであり、英語の音声認識に使用できます。多言語の音声認識や音声翻訳は、多言語のチェックポイントを使用することで可能です。
音声サンプルを文字起こしするには、モデルを WhisperProcessor
と一緒に使用する必要があります。
WhisperProcessor
は以下の用途に使用されます。
- 音声入力を前処理する(モデル用の対数メルスペクトログラムに変換する)
- モデルの出力を後処理する(トークンからテキストに変換する)
✨ 主な機能
- 68万時間のラベル付きデータで学習され、強力な汎化能力を持つ。
- 英語専用モデルと多言語モデルが用意されている。
- 音声認識と音声翻訳の両方に対応。
📦 インストール
このREADMEではインストール手順に関する具体的なコマンドが提供されていないため、このセクションをスキップします。
💻 使用例
基本的な使用法
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # load model and processor
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-small.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small.en")
>>> # load dummy dataset and read audio files
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> input_features = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features
>>> # generate token ids
>>> predicted_ids = model.generate(input_features)
>>> # decode token ids to text
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
['<|startoftranscript|><|notimestamps|> Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.<|endoftext|>']
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
[' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.']
コンテキストトークンは、skip_special_tokens=True
を設定することで文字起こしの先頭から削除できます。
高度な使用法
評価
このコードスニペットは、LibriSpeech test-clean でWhisper small.enを評価する方法を示しています。
>>> from datasets import load_dataset
>>> from transformers import WhisperForConditionalGeneration, WhisperProcessor
>>> import torch
>>> from evaluate import load
>>> librispeech_test_clean = load_dataset("librispeech_asr", "clean", split="test")
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-small.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small.en").to("cuda")
>>> def map_to_pred(batch):
>>> audio = batch["audio"]
>>> input_features = processor(audio["array"], sampling_rate=audio["sampling_rate"], return_tensors="pt").input_features
>>> batch["reference"] = processor.tokenizer._normalize(batch['text'])
>>>
>>> with torch.no_grad():
>>> predicted_ids = model.generate(input_features.to("cuda"))[0]
>>> transcription = processor.decode(predicted_ids)
>>> batch["prediction"] = processor.tokenizer._normalize(transcription)
>>> return batch
>>> result = librispeech_test_clean.map(map_to_pred)
>>> wer = load("wer")
>>> print(100 * wer.compute(references=result["reference"], predictions=result["prediction"]))
3.053161596922323
長文の文字起こし
Whisperモデルは、本質的に最大30秒の音声サンプルで動作するように設計されています。しかし、チャンキングアルゴリズムを使用することで、任意の長さの音声サンプルを文字起こしすることができます。これは、Transformersの pipeline
メソッドを通じて可能です。パイプラインをインスタンス化する際に 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="openai/whisper-small.en",
>>> chunk_length_s=30,
>>> device=device,
>>> )
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> prediction = pipe(sample.copy(), batch_size=8)["text"]
" Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel."
>>> # we can also return timestamps for the predictions
>>> prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
[{'text': ' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.',
'timestamp': (0.0, 5.44)}]
チャンキングアルゴリズムの詳細については、ブログ記事 ASR Chunking を参照してください。
📚 ドキュメント
モデルの詳細
Whisperは、Transformerベースのエンコーダーデコーダーモデルであり、シーケンスツーシーケンス モデルとも呼ばれます。大規模な弱教師付きで注釈付けされた68万時間のラベル付き音声データで学習されました。
モデルは、英語専用データまたは多言語データのいずれかで学習されました。英語専用モデルは音声認識のタスクで学習され、多言語モデルは音声認識と音声翻訳の両方で学習されました。音声認識の場合、モデルは音声と同じ言語の文字起こしを予測します。音声翻訳の場合、モデルは音声とは異なる言語の文字起こしを予測します。
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 | ✓ |
微調整
事前学習済みのWhisperモデルは、異なるデータセットやドメインに対して強力な汎化能力を示します。ただし、特定の言語やタスクに対しては、微調整 を行うことで予測能力をさらに向上させることができます。ブログ記事 Fine-Tune Whisper with 🤗 Transformers は、わずか5時間のラベル付きデータでWhisperモデルを微調整するためのステップバイステップガイドを提供しています。
評価された用途
これらのモデルの主な対象ユーザーは、現在のモデルのロバスト性、汎化能力、機能、バイアス、および制約を研究するAI研究者です。ただし、Whisperは開発者にとっても、特に英語の音声認識において非常に有用なASRソリューションとなる可能性があります。モデルがリリースされると、「意図された」用途のみにアクセスを制限することや、研究か否かを判断する合理的なガイドラインを定めることは不可能であることを認識しています。
モデルは主に、ASRと英語への音声翻訳のタスクで学習および評価されています。約10の言語で強力なASR結果を示します。特に、音声活動検出、話者分類、または話者分離などの特定のタスクで微調整された場合、追加の機能を示す可能性がありますが、これらの領域では十分な評価が行われていません。ユーザーは、モデルを特定のコンテキストやドメインで展開する前に、モデルの適切な評価を行うことを強く推奨します。
特に、Whisperモデルを、本人の同意なしに録音された個人の録音を文字起こしするために使用することや、何らかの主観的な分類のためにこれらのモデルを使用することを警告します。精度の欠陥が結果に大きな欠陥を引き起こす可能性のある、意思決定の文脈などの高リスクドメインでの使用を推奨しません。モデルは音声の文字起こしと翻訳を目的としており、モデルを分類に使用することは、評価されていないだけでなく、特に人間の属性を推測するために使用することは適切ではありません。
学習データ
モデルは、インターネットから収集された68万時間の音声とそれに対応する文字起こしで学習されています。このデータの65%(または43万8000時間)は英語の音声と一致する英語の文字起こしを表し、約18%(または12万6000時間)は非英語の音声と英語の文字起こしを表し、最後の17%(または11万7000時間)は非英語の音声とそれに対応する文字起こしを表します。この非英語データは98の異なる言語を表しています。
付随する論文 で議論されているように、特定の言語での文字起こしの性能は、その言語で使用する学習データの量と直接相関していることがわかります。
性能と制限
私たちの研究によると、多くの既存のASRシステムに比べて、これらのモデルはアクセント、背景雑音、専門用語に対するロバスト性が向上しており、複数の言語から英語へのゼロショット翻訳も可能です。また、音声認識と翻訳の精度は最先端レベルに近いことがわかりました。
ただし、モデルは大規模なノイズの多いデータを使用して弱教師付きで学習されているため、予測には音声入力に実際には含まれていないテキストが含まれる場合があります(すなわち、幻覚現象)。これは、モデルが言語の一般知識を持っているため、音声の次の単語を予測しようとすることと、音声自体を文字起こししようとすることを組み合わせるために起こると私たちは仮定しています。
私たちのモデルは言語間で不均一な性能を示し、低リソースおよび/または低発見可能性の言語、または学習データが少ない言語では精度が低いことが観察されています。モデルはまた、特定の言語の異なるアクセントや方言でも異なる性能を示し、これには異なる性別、人種、年齢、またはその他の人口統計基準の話者間での単語誤り率の上昇が含まれる場合があります。完全な評価結果は、このリリースに付随する論文 に掲載されています。
さらに、モデルのシーケンスツーシーケンスアーキテクチャにより、繰り返しのテキストが生成されやすくなっています。これはビームサーチと温度スケジューリングによってある程度軽減できますが、完全には解消できません。これらの制限に関するさらなる分析は 論文 で提供されています。この挙動と幻覚現象は、低リソースおよび/または低発見可能性の言語でより悪化する可能性があります。
広範な影響
私たちは、Whisperモデルの文字起こし機能が、アクセシビリティツールの改善に使用される可能性があると予想しています。Whisperモデルはそのままではリアルタイムの文字起こしには使用できませんが、その速度とサイズから、他の人がそれをベースにしてほぼリアルタイムの音声認識と翻訳を可能にするアプリケーションを構築できる可能性があります。Whisperモデルをベースにして構築された有益なアプリケーションの実際の価値から、これらのモデルの不均一な性能が実際の経済的影響を与える可能性があることが示唆されています。
Whisperをリリースすることには、潜在的な二重使用の懸念もあります。私たちはこの技術が主に有益な目的で使用されることを期待していますが、ASR技術をより広く利用可能にすることで、より多くの主体が高性能な監視技術を構築したり、既存の監視活動を拡大したりすることが可能になります。速度と精度により、大量の音声通信の安価な自動文字起こしと翻訳が可能になるためです。さらに、これらのモデルはそのままで特定の個人を認識する能力を持っている可能性があり、これは二重使用と不均一な性能の両方に関連する安全上の懸念をもたらします。実際には、文字起こしのコストは監視プロジェクトを拡大する際の制限要因ではないと予想されます。
🔧 技術詳細
このREADMEでは技術的な実装詳細に関する具体的な内容が十分に提供されていないため、このセクションをスキップします。
📄 ライセンス
このモデルは apache-2.0
ライセンスの下で提供されています。
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}
}



