杉田
Whisperとは
Whisperは、多様な音声データを使ってトレーニングされた音声認識モデルです。このモデルは、多言語の音声認識、音声翻訳、言語識別を高精度で実行できます。WhisperはChatGPTでおなじみのOpenAIが提供しており、MITライセンスのOSS版とAPI版があります。
Whisperの関連ドキュメントは以下を参照してください。
- OSS版:openai/
whisper: Robust Speech Recognition via Large-Scale Weak Supervision -github. com - API版:Speech to text -OpenAI API
Whisperで利用可能なモデルと言語
Whisperで利用可能なモデルは6種類あり、全てのモデルに多言語モデルが用意されています。英語のみのモデルは一部のモデルに限られています。これらのモデルは速度と精度のバランスを選べるよう設計されていて、Parametersの値が増えるにつれて精度が向上し、実行にかかる時間が増えていきます。
表に記載のある相対速度は、A100
Size | Parameters | English-only model | Multilingual model | Required VRAM | Relative speed |
---|---|---|---|---|---|
tiny | 39M | tiny. |
tiny |
~1GB | ~10x |
base | 74M | base. |
base |
~1GB | ~7x |
small | 244M | small. |
small |
~2GB | ~4x |
medium | 769M | medium. |
medium |
~5GB | ~2x |
large | 1550M | N/ |
large |
~10GB | 1x |
turbo | 809M | N/ |
turbo |
~6GB | ~8x |
Whisperを使ってみる
Whisperは、MITライセンスのOSS版とAPI版の利用が可能です。それぞれを利用する方法を見ていきます。
以下は筆者の動作環境になります。
- M2 MacBook macOS Sonoma 14.
7 メモリ 16GB - Python 3.
11. 5 [1]
OSS版
OSS版のWhisperを利用するには、pipでインストールします。また、動画と音声を記録・
Whisperでは音声データの読み取りにFFmpegを使用しているため、FFmpegが対応している音声形式であれば処理可能です。
以下は、Whisperのmediumモデルを使って音声データを文字起こしする例です。文字起こしにかかる時間を測定するために、timeモジュールを使って計測しています。
実行時に、モデルが使用する浮動小数点精度が実行環境でサポートされていない場合、UserWarning: FP16 is not supported on CPU;
という警告が表示されます。その場合は、transcribe()メソッドにfp16=Falseオプションを指定してください。
上記のコードを実行すると、文字起こしされたテキストがprint()関数で表示されます。使用する音声ファイルは、以下の文章
上記のプログラム
また、音声ファイルには
initial_promptオプション
今回のケースでは
再実行すると、
このように完全ではありませんが、専門用語の多い音声データの場合、initial_
initial_
largeモデルで文字起こし
以下はモデルをlargeに変更し、initial_
API版
API版では、large-v2モデルを使用した文字起こしと翻訳の2つのエンドポイントを提供しています。
利用方法
APIを利用するには、OpenAIのアカウントが必要です。また、最低5USドルの残高をアカウントに入金し、クレジットカードを登録する必要があります。入金は以下の画面から行います。
試しに使ってみたい方は、自動チャージ機能をOFFにしておくと良いでしょう。
APIの料金
Whisperモデルを使用して音声からテキストへの変換を行う場合、音声の長さに基づいて料金が計算されます。音声の再生時間を基準に課金され、秒単位で切り上げられます。料金に関しては以下の公式ドキュメントを参照してください。
Whisper
$0.006 / minute (rounded to the nearest second)
現時点では、料金は1分ごとに0.
APIキーの作成
APIを使用するためにAPIキーを作成します。APIキーの作成は用途によって異なりますが、ここではプロジェクト単位でAPIキーを発行します。以下のURLにアクセスし、APIキーを発行します
- (1) 画面左上部の
「Create project」 をクリックし任意のプロジェクト名を入力します。 - (2) 画面右上部の
「Dashboard」 をクリック - (3) 画面左メニューの
「API Keys」 をクリック - (4) 「create new secret key」
をクリックしAPI keyを発行します。
以下は、APIを使用して音声データをテキストに変換するサンプルコードです。取得したAPIキーは環境変数OPENAI_
- mp3、mp4、mpeg、mpga、m4a、wav、webm
上記を実行して得られた文字起こしの結果です。緑が濃くなっている個所は
APIには、以下のパラメータを指定することができます。
引数 | 説明 |
---|---|
file | audioファイルのオブジェクト |
model | whisper-1のみ使用可能 |
language | 入力言語。ISO-639-1フォーマットで指定することで精度があがる |
prompt | 複数指定したい場合はカンマで区切る |
response_ |
出力の形式。json、text、srt、verbose_ |
temperature | サンプリング温度。デフォルトは0 |
- promptは、OSS版で紹介したinitial_
promptと同じように利用できます - response_
formatはデフォルトはjsonで、verbose_ jsonを指定するとより詳細な値を取得できます。srtやvttはタイムコード付きの字幕データで、YouTubeなどにアップロードできる形式です。 - temperatureは0~1の範囲で設定可能で、出力のランダムさを調整します。デフォルト値は0です。値が高いほど多様的な応答が生成され、値が低いほど一貫性や正確性が高くなります。文字起こしのような正確性が求められるタスクでは通常0の設定でよいでしょう。
ファイルサイズの制限
APIは25MB以下のファイルのみサポートしています。それ以上の長さの音声ファイルの場合は25MB以下に分割するか、圧縮された音声形式を使用する必要があります。
以下では、PyDubパッケージを使用して音声を分割する方法を紹介します。
PyDubはpipでインストールします。
以下は90秒の音声ファイルを30秒ごとに分割する例です。
また、PyDubのsplit_
Whisperモデルの派生プロジェクト
Whisperの他にwhisper.
特徴 | Whisper | whisper. |
faster-whisper | mlx-whisper |
---|---|---|---|---|
実装言語 | Python | C++ | Python | Python |
速度 | 標準 | 高速 | 非常に高速 | 高速 |
用途 | 汎用的 | 軽量環境 | 高速推論が必要な場合 | Macに最適化 |
それぞれの特徴と使い方について解説します。
whisper.cpp
- GitHubリポジトリ:https://
github. com/ ggerganov/ whisper. cpp
whisper.
- Whisperモデルをggmlフォーマットに変換したものを使用することで、メモリ使用量を最小限に抑えつつ、高速な計算を可能にします。
- CPUのみで高い性能を発揮することが可能で、モバイルデバイスや組み込みシステムなどのリソースが限られた環境でも利用できます。
- Windows、Linux、macOSだけでなく、Raspberry PiやWebAssemblyを含む多くの環境で動作します。
使い方
Whisper.
% ffmpeg -i voice_sample.m4a -ar 16000 -ac 1 -c:a pcm_s16le voice_sample.wav
以下の手順でWhisper.
# 1. リポジトリをクローン % git clone https://github.com/ggerganov/whisper.cpp.git % cd whisper.cpp # 2. モデルをダウンロード (large-v3を指定してダウンロード) % sh ./models/download-ggml-model.sh large-v3 # 3. プロジェクトをビルド % make # makeを実行すると、buildディレクトリの中にコンパイルされたwhisperが作成されます # 4. 文字起こしを実行 % ./build/bin/main -m models/ggml-large-v3.bin -f voice_sample.wav -l ja
利用可能なモデルは以下で確認できます。
faster-whisper
- GitHubリポジトリ:https://
github. com/ SYSTRAN/ faster-whisper
faster-whisperは、OpenAIのWhisperモデルを高速化したPythonベースの実装です。以下の特徴があります。
- 高速推論エンジンであるCTranslate2を使用し、オリジナルのWhisperに比べて最大4倍高速で動作するとされています。
- メモリ使用量を削減しつつ、オリジナルモデルと同等の精度を実現しています。
- Silero VADを利用することで無音部分を除去し、文字起こし精度を向上できます。
使い方
pipでインストールします。
% pip install faster-whisper
faster-whisperはCUDA対応のGPUを使用した高速化をサポートしていますが、CPUでも動作します。筆者のローカル環境では、CUDA対応のGPUがないためGPUを活用できません。このため、以下のサンプルはdevice=cpu
を設定して、CPUでの実行としています。
以下は、音声ファイルを文字起こしする簡単なサンプルコードです。
以下の表に、transcribeメソッドで使用できる主なパラメータをまとめました。
パラメータ | 説明 |
---|---|
audio | 音声ファイルのパスまたはファイルオブジェクト |
beam_ |
ビームサーチのサイズ |
language | 入力言語 ISO-639-1フォーマットで指定 |
without_ |
タイムスタンプを含まない出力を生成 |
vad_ |
無音部分をフィルタリングし、文字起こしから除外 |
無音部分をフィルタリングする場合vad_
)、デフォルトでは2秒以上の無音部分が除去されます。この動作をカスタマイズするには、以下のようにvad_
を設定します。
vad_parameters = {'min_silence_duration_ms': 500} # 無音部分の最小時間を500msに設定
segments, info = model.transcribe(
audio_path, beam_size=5,
vad_filter=True, vad_parameters=vad_parameters
)
無音検知にはSilero VADライブラリが使用されています。より詳細な設定については以下をご覧ください。
mlx-whisper
mlx-whisperはApple Siliconに最適化された機械学習フレームワークMLXを活用し、OpenAIのWhisperモデルを高速かつ効率的に実行するためのライブラリです。MLXにより、Apple製デバイスでの音声文字起こしを高いパフォーマンスで処理できるよう設計されています。MLXの詳しい情報は、公式リポジトリ
使い方
pipでインストールします。
% pip install mlx-whisper # 以下のコマンドで、音声ファイルの文字起こしを簡単に実行できます。 % mlx_whisper voice_sample.wav
以下は、Pythonから音声ファイルを文字起こしする簡単なサンプルコードです。
import mlx_whisper
audio_data = 'voice_sample.m4a'
# path_or_hf_repoには、使用するモデルを指定します
result = mlx_whisper.transcribe(
audio_data, path_or_hf_repo="mlx-community/whisper-large-v3-mlx"
)
print(result[text])
path_
指定がない場合は、デフォルトでmlx-community/
処理時間の比較
以下は、筆者のローカル環境
model | Whisper |
whisper. |
faster-whisper |
mlx-whisper |
---|---|---|---|---|
large-v3 | 31分 | 23分6秒 | 19分 | 13分1秒 |
large-v3-turbo | 9分11秒 | 8分2秒 | 6分21秒 | 3分36秒 |
以下はWhisper APとGoogle Colaboratory
model | Whisper |
faster-whisper |
---|---|---|
large-v2 | 1分30秒 | 3分6秒 |
ローカル環境にてlarge-v3モデルを使用しても、そこまでストレスなく文字起こしを実行できました。特に筆者の環境においてはmlx-whisperが高速であり、他のモデルと比べて優れたパフォーマンスを発揮しました。
まとめ
今回は、OpenAIのWhisperと、そのOSS版、API版を利用したPythonでの文字起こし方法、さらにWhisperの派生ツールであるwhisper.
Whisperを使うことで、多少の誤りはあるものの、音声の文字起こしの際に一から書き起こすよりも大幅に工数を削減できます。この技術は、議事録作成やメモ取り、インタビューの文字起こし、字幕の作成など、さまざまな場面で非常に役立ちます。さらに、Whisperで文字起こししたテキストをChatGPTなどにかけて、まとめや校正を行うことも可能です。
これからWhisperの精度はますます向上していくことが期待されています。進化し続けるこの技術を活用することで、今後さらに高精度で効率的な文字起こしが可能になるでしょう。ぜひ、みなさんも活用してみてください。