📖

WhisperのREADME

2022/09/28に公開

多言語対応の音声認識モデルのWhisperREADMEを読んでみます。
軽くColabでお試しはしましたが、やはり一度はREADMEを読まないと全体が理解できません。


Whisper

[Blog] [Paper] [Model card] [Colab example]
Whisperは汎用的な音声認識モデルです。大規模音声データセットで学習しています。英語音声認識や言語識別だけでなく、多言語音声認識を行うことができるマルチタスクモデルです。

Approach


Transformer sequence-to-sequence modelは、多言語音声認識、音声翻訳、音声言語識別、音声アクティビティ検出など、様々な音声処理タスクを学習する。これらのタスクはすべて、共通のトークンのシーケンスで表現され、従来の音声処理パイプラインが多くステージを持つのに対して、単一のモデルで置き換えることができます。マルチタスク学習形式では、タスク指定子や分類対象として機能する特殊なトークンのセットを使用します。

Setup

Python 3.9.9とPyTorch 1.10.1を使用してモデルを学習・テストしましたが、コードはPython 3.7以降と最新のPyTorchバージョンに互換性があります。コードはいくつかのPythonパッケージにも依存しています。特に、HuggingFace Transformersのトークナイザー実装とffmpeg-pythonの音声ファイル読み込みに依存しています。次のコマンドは、このリポジトリから最新のコミットを取得し、Python の依存パッケージと一緒にインストールします。

pip install git+https://github.com/openai/whisper.git 

また、コマンドラインツールffmpegがシステムにインストールされている必要があり、これはほとんどのパッケージマネージャから入手可能です。

# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg

# on Arch Linux
sudo pacman -S ffmpeg

# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg

# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg

# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg

tokenizersがあなたのプラットフォーム用のビルド済みホイールを提供しない場合に備えて、rustもインストールする必要があるかもしれません。もし、上記のpip installコマンドでインストールエラーが発生した場合は、Getting startedのページに従って、Rust開発環境をインストールする必要があります。

Available models and languages

5つのモデルサイズと、4つの英語版のみのモデルがあり、速度と精度のトレードオフがあります。以下は、各モデルの名称と、必要なメモリ容量および相対的な速度の概算です。

Size Parameters English-only model Multilingual model Required VRAM Relative speed
tiny 39 M tiny.en tiny ~1 GB ~32x
base 74 M base.en base ~1 GB ~16x
small 244 M small.en small ~2 GB ~6x
medium 769 M medium.en medium ~5 GB ~2x
large 1550 M N/A large ~10 GB 1x

英語のみのアプリケーションの場合、.en モデルの方が性能が高い傾向があり、特に tiny.en と base.en モデルでその傾向が顕著です。small.enとmedium.enでは、その差はあまり大きくありません。
Whisperの性能は、言語によって大きく異なります。下図は、Fleursデータセットの言語別WERの内訳を、largeモデルを用いて示しています。その他のモデルやデータセットに対応するWERやBLEUスコアは、論文の付録Dに掲載されています。

Command-line usage

次のコマンドは、音声ファイルに含まれる音声を、mediumモデルを使って書き起こします。

whisper audio.flac audio.mp3 audio.wav --model medium

デフォルトの設定(smallモデル)は、英語の音声を書き写すのに適しています。英語以外の音声を含む音声ファイルを書き写すには、--languageオプションで言語を指定します。

whisper japanese.wav --language Japanese

-task translateをつけると、音声が英語に翻訳されます。

whisper japanese.wav --language Japanese --task translate

以下を実行すると、利用可能なすべてのオプションが表示されます。

whisper --help

利用可能な全言語の一覧はtokenizer.pyを参照してください。

Python usage

また、Python内で書き起こしを行うことも可能です。

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

内部的には transcribe() メソッドはファイル全体を読み込み、30秒間のスライドウィンドウで音声を処理し、各ウィンドウで自己回帰的に配列間予測を行っています。

以下は、モデルへの低レベルアクセスを提供する whisper.detect_language() と whisper.decode() の使用例です。

import whisper

model = whisper.load_model("base")

# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# print the recognized text
print(result.text)

License

Whisperのcodeとmodel weightsはMITライセンスのもとで公開されています。詳しくはLICENSEをご覧下さい。


お試し

軽く試しました。
アナウンスの音声 48秒
tinyは全然ダメ!
small以上がよいですね!
largeは遅いけどすごい!

  • tiny 処理時間 13.543秒
!whisper sampleTokyo.wav --model tiny --language ja
[00:00.000 --> 00:05.120] 朝のともみです。今日の東京株式市場でニッケーヘーキン株川
[00:05.120 --> 00:16.200] コハバゾクシントなっています。終わりには機能に比べ、22年7日2年2年中の1万1,818円50発線でした。
[00:16.200 --> 00:27.600] 同生一部のネアガリメーガラスは1646、対してネサガリは368、川ラスは1400ガラとなっています。
[00:27.600 --> 00:36.380] ここでプレゼントのお知らせです。この番組では、毎月発行の万すりレポートしがつごを中線で10メーサマにプレゼントいたします。
[00:36.380 --> 00:57.380] お申し込みはお出まで、東京レーさん、レイチレーナナ、837さん、レースさん、レイチレーナナ、837まで。以上番組からのお知らせでした。
  • base 処理時間 15.667秒
[00:00.000 --> 00:02.000] 朝のともみです。
[00:02.000 --> 00:07.000] 今日の東京株式市場で、日計平均株価は小幅属心となっています。
[00:07.000 --> 00:16.000] 終わり根は機能に比べ22円72,000だかの1,1888円58,000でした。
[00:16.000 --> 00:20.000] 当初一部の寝上がり名がら数は146。
[00:20.000 --> 00:23.000] 対して寝下がりは368。
[00:23.000 --> 00:27.000] 変わらずは104名がらとなっています。
[00:27.000 --> 00:29.000] ここでプレゼントのお知らせです。
[00:29.000 --> 00:36.000] この番組では毎月発行のマンスリーレポート4月号を中戦で10名様にプレゼントいたします。
[00:36.000 --> 00:38.000] おもしこみはお電話で。
[00:38.000 --> 00:46.000] 東京0-3-0-1-0-7-8-3-7-3-0-1-0-7-8-3-7-3まで。
[00:46.000 --> 01:06.000] 以上番組からのお知らせでした。
  • small 処理時間 24.233秒
!whisper sampleTokyo.wav --model small --language ja
[00:00.000 --> 00:02.120] 朝のともみです
[00:02.120 --> 00:07.320] 今日の東京株式市場で日系平均株価は小幅属進となっています
[00:07.320 --> 00:16.240] 終わり根は昨日に比べ22円72千高の11,088円58千でした
[00:16.240 --> 00:20.360] 当初一部の値上がり明がら数は1,146
[00:20.360 --> 00:23.520] 対して値下がりは368
[00:23.520 --> 00:27.560] 変わらずは104明がらとなっています
[00:27.560 --> 00:29.600] ここでプレゼントのお知らせです
[00:29.600 --> 00:36.320] この番組では毎月発行のマンスリーレポート4月号を中線で10名様にプレゼントいたします
[00:36.320 --> 00:38.360] お申し込みはお電話で
[00:38.360 --> 00:46.200] 東京030107-8373-030107-8373まで
[00:46.200 --> 01:00.600] 以上番組からのお知らせでした
  • medium 処理時間 52.011秒
!whisper sampleTokyo.wav --model medium --language ja
[00:00.000 --> 00:07.280] 朝野ともみです 今日の東京株式市場で日経平均株価は小幅俗進となっています
[00:07.280 --> 00:16.120] 終わり値は昨日に比べ22円72,000高の11,088円58,000でした
[00:16.120 --> 00:23.480] 当初一部の値上がり名柄数は1,146 対して値下がりは368
[00:23.480 --> 00:29.560] 変わらずは104名柄となっています ここでプレゼントのお知らせです
[00:29.560 --> 00:36.280] この番組では毎月発行のマンスリーレポート4月号を 抽選で10名様にプレゼントいたします
[00:36.280 --> 00:46.080] お申し込みはお電話で東京030107-8373 030107-8373まで
[00:46.080 --> 01:00.520] 以上番組からのお知らせでした
  • large 処理時間 85.62秒
!whisper sampleTokyo.wav --model large --language ja
[00:00.000 --> 00:07.280] 朝野ともみです 今日の東京株式市場で日経平均株価は小幅続進となっています
[00:07.280 --> 00:16.080] 終わり値は昨日に比べ22円72,000だかの11,088円58,000でした
[00:16.080 --> 00:27.440] 当初一部の値上がり銘柄数は1,146 対して値下がりは368変わらずは104銘柄となっています
[00:27.440 --> 00:36.280] ここでプレゼントのお知らせです この番組では毎月発行のマンスリーレポート4月号を抽選で10名様にプレゼントいたします
[00:36.280 --> 00:46.040] お申し込みはお電話で 東京03-01-07-8373-03-01-07-8373まで
[00:46.040 --> 01:01.040] 以上番組からのお知らせでした

Discussion