モデル概要
モデル特徴
モデル能力
使用事例
🚀 Whisper
Whisperは、自動音声認識(ASR)と音声翻訳のための事前学習済みモデルです。68万時間のラベル付きデータで学習されたWhisperモデルは、微調整することなく多くのデータセットやドメインに対して高い汎化能力を示します。
Whisperは、OpenAIのAlec Radfordらによる論文 Robust Speech Recognition via Large-Scale Weak Supervision で提案されました。元のコードリポジトリは こちら で確認できます。
免責事項: このモデルカードの内容は、一部がHugging Faceチームによって作成され、一部が元のモデルカードからコピー&ペーストされています。
🚀 クイックスタート
このセクションでは、Whisperモデルの基本的な使い方を紹介します。
✨ 主な機能
- 自動音声認識(ASR)と音声翻訳のための事前学習済みモデル。
- 68万時間のラベル付きデータで学習され、微調整なしで高い汎化能力を示す。
- 英語専用モデルと多言語モデルが用意されている。
📦 インストール
このREADMEには明示的なインストール手順が記載されていないため、このセクションをスキップします。
💻 使用例
基本的な使用法
以下のコードは、音声サンプルを文字起こしする基本的な使用例です。
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # モデルとプロセッサを読み込む
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-medium.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium.en")
>>> # ダミーデータセットを読み込み、音声ファイルを読み取る
>>> 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
>>> # トークンIDを生成する
>>> predicted_ids = model.generate(input_features)
>>> # トークンIDをテキストにデコードする
>>> 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.']
高度な使用法
評価
以下のコードは、Whisper medium.enを LibriSpeech test-clean で評価する例です。
>>> 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-medium.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-medium.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.0154449620004904
長時間の文字起こし
以下のコードは、30秒以上の音声サンプルを文字起こしする例です。
>>> 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-medium.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."
>>> # 予測結果にタイムスタンプを付けることもできます
>>> 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)}]
📚 ドキュメント
モデルの詳細
Whisperは、Transformerベースのエンコーダ・デコーダモデルで、シーケンス-to-シーケンス モデルとも呼ばれます。大規模な弱教師付き学習を用いて注釈付けされた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システムに比べて、これらのモデルはアクセント、背景雑音、専門用語に対する堅牢性が向上しており、複数の言語から英語へのゼロショット翻訳も可能です。また、音声認識と翻訳の精度は最先端レベルに近いことがわかりました。
ただし、モデルは大規模なノイズの多いデータを用いた弱教師付き学習で学習されているため、予測結果には音声入力に実際には含まれていないテキストが含まれる場合があります(すなわち、幻覚現象)。これは、モデルが言語の一般知識を持っているため、音声の次の単語を予測することと、音声自体を文字起こしすることを試みることを組み合わせるために起こると考えられています。
私たちのモデルは言語によって性能が不均一であり、低リソースおよび/または低発見可能性の言語、または学習データが少ない言語では精度が低いことが観察されています。また、特定の言語の異なるアクセントや方言でも性能に差が見られ、異なる性別、人種、年齢、またはその他の人口統計学的基準の話者間で単語誤り率が高くなる場合があります。完全な評価結果は、このリリースに付随する論文 に掲載されています。
さらに、モデルのシーケンス-to-シーケンスアーキテクチャにより、繰り返しのテキストが生成されやすくなっています。これはビームサーチや温度スケジューリングによってある程度軽減できますが、完全に解消することはできません。これらの制限に関する詳細な分析は 論文 で提供されています。この挙動や幻覚現象は、低リソースおよび/または低発見可能性の言語ではさらに悪化する可能性があります。
広範な影響
私たちは、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}
}



