モデル概要
モデル特徴
モデル能力
使用事例
🚀 Whisper
Whisperは、自動音声認識(ASR)と音声翻訳のための事前学習済みモデルです。68万時間のラベル付きデータで学習されたWhisperモデルは、微調整を必要とせずに多くのデータセットやドメインに対して高い汎化能力を示します。
Whisperは、OpenAIのAlec Radfordらによる論文 Robust Speech Recognition via Large-Scale Weak Supervision で提案されました。元のコードリポジトリは こちら で確認できます。
免責事項:このモデルカードの内容の一部はHugging Faceチームによって作成され、一部は元のモデルカードからコピー&ペーストされています。
✨ 主な機能
- 自動音声認識(ASR)と音声翻訳のための事前学習済みモデル
- 68万時間のラベル付きデータで学習され、微調整なしで高い汎化能力を示す
- 英語専用モデルと多言語モデルの両方が利用可能
📦 インストール
このREADMEには具体的なインストール手順が記載されていないため、このセクションをスキップします。
💻 使用例
基本的な使用法
音声サンプルを文字起こしするには、モデルを WhisperProcessor
と一緒に使用する必要があります。
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> # モデルとプロセッサをロード
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-base.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-base.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.']
skip_special_tokens=True
を設定することで、文字起こしの先頭からコンテキストトークンを削除できます。
高度な使用法
評価
このコードスニペットは、LibriSpeech test-clean でWhisper base.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-base.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-base.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"]))
4.271408904897505
長時間音声の文字起こし
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-base.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)}]
チャンキングアルゴリズムの詳細については、ブログ記事 ASR Chunking を参照してください。
微調整
事前学習済みの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技術をより広く利用可能にすることで、より多くの主体が高性能な監視技術を構築したり、既存の監視活動を拡大したりすることが可能になります。速度と精度により、大量の音声通信の安価な自動文字起こしと翻訳が可能になるからです。さらに、これらのモデルはそのままで特定の個人を認識する能力を持っている可能性があり、これは二重使用と不均一な性能に関連する安全上の懸念を引き起こします。実際には、文字起こしのコストは監視プロジェクトの拡大における制限要因ではないと私たちは予想しています。
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}
}
📄 ライセンス
このモデルは apache-2.0
ライセンスの下で提供されています。



