OpenAI Whisperの新しいlarge-v3-turboモデルを少し試す

OpenAI の Whisper という文字起こしソフトウェアがあります．これを使い，カンファレンス等の文字起こしをしたりして便利に使わせてもらっています．

openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision

OpenAIのWhisperでオフライン文字起こし(STT) (鹿児島Linux勉強会 2022.11にて発表)

Whisper を使う際にモデルを指定する必要があります．
モデルは複数存在し，基本的にサイズの大きいもののほうが文字起こし精度が良いですが，コンピュータのリソースを消費します．
今回 large-v3-turbo(turbo と略されるようです．)という新しいモデルがリリースされました．このモデルは large-v3 を元にデコーダを小さくすることで精度はそのままに高速になっているそうです．
どのくらい速くなっているのか少し試してみました．

turbo model release · openai/whisper · Discussion #2363

以下は Whisper の README.md にあるモデルの比較です．一番下に追加された turbo が今回試したいものです．

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

— Available models and languages

turbo を試すには Python の openai-whisper パッケージのバージョンを 20240930 以降にする必要があります．
新規に導入する場合は以下のような感じで．

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install openai-whisper

既存のものをアップグレードする場合はこんな感じで．

$ source venv/bin/activate
$ pip install -U openai-whisper

バージョンを確認して 20240930 以降になっていることを確認．

$ pip list | grep whisper
openai-whisper 20240930

テストのための音声を用意します．今回はNHKラジオニュースを利用しました．RSS feed から最新のニュースを入手しました．

$ rsstail -n1 -N1eu https://www.nhk.or.jp/s-media/news/podcast/list/v1/all.xml | grep .mp3$ | xargs wget

音声情報．丁度5分ほどの音声です．

$ ffprobe 08fe3ee2f8d9f9fa8481508530974854_64k.mp3 2>&1 |grep Stream
Stream #0:0: Audio: mp3 (mp3float), 48000 Hz, stereo, fltp, 64 kb/s
$ ffprobe 08fe3ee2f8d9f9fa8481508530974854_64k.mp3 2>&1 |grep Duration:
Duration: 00:05:00.02, start: 0.023021, bitrate: 64 kb/s

モデルデータがない状態で Whisper を実行するとモデルデータのダウンロードが実行されます．

Linux 環境だと既定値では ~/.cache/whisper/ に保存されます．--model_dir オプションで変更することも可能です．

サイズを見ると turbo は 1.6GB 程で medium とサイズが近いです．

$ ls -Ss1 ~/.cache/whisper/
total 6990496
3014656 large.pt
1580028 large-v3-turbo.pt
1492200 medium.pt
472284 small.pt
141860 base.pt
141860 base.en.pt
73804 tiny.pt
73804 tiny.en.pt

turbo と medium で実行してみました．
今回実行した端末は CPU:Intel Core i7-10510U/RAM 16GB の端末です．日常作業を行いながらだったので Whisper だけで動かすともう少し速くなると思います．

turbo

$ time whisper --model large-v3-turbo --threads `nproc` --language Japanese 08fe3ee2f8d9f9fa8481508530974854_64k.mp3
〜略〜

real 6m48.087s
user 46m41.336s
sys 2m31.058s

medium

$ time whisper --model medium --threads `nproc` --language Japanese 08fe3ee2f8d9f9fa8481508530974854_64k.mp3
〜略〜

real 19m49.721s
user 145m13.502s
sys 0m44.894s

turbo は大分速いですね．もう少し早くなるとリアルタイム文字起こしができるのですが．
結果の文字起こしの精度も問題なさそうです．しばらくはこの large-v3-turbo モデルを使っていこうと思います．

環境

$ pip list | grep whisper
openai-whisper 20240930
$ dpkg-query -W python3 rsstail
python3 3.12.6-1
rsstail 2.1-1
$ lsb_release -dr
Description: Debian GNU/Linux trixie/sid
Release: n/a
$ arch
x86_64
$ cpu-info
Packages:
0: Intel Core i7-10510U
Microarchitectures:
4x Sky Lake
Cores:
0: 2 processors (0-1), Intel Sky Lake
1: 2 processors (2-3), Intel Sky Lake
2: 2 processors (4-5), Intel Sky Lake
3: 2 processors (6-7), Intel Sky Lake
Clusters:
0: 8 processors (0-7), 0: 4 cores (0-3), Intel Sky Lake
Logical processors (System ID):
0 (0): APIC ID 0x00000000
1 (4): APIC ID 0x00000001
2 (1): APIC ID 0x00000002
3 (5): APIC ID 0x00000003
4 (2): APIC ID 0x00000004
5 (6): APIC ID 0x00000005
6 (3): APIC ID 0x00000006
7 (7): APIC ID 0x00000007
$ grep ^MemTotal: /proc/meminfo
MemTotal: 15987016 kB
$ free
total used free shared buff/cache available
Mem: 15987016 9784984 2546356 2600260 6612472 6202032
Swap: 17575932 627800 16948132