先日OpenAIのWhisperという文字起こしソフトウェアで新しいlarge-v3-turboというモデルを試しました.
今回 whisper-large-v3 を蒸留技術により日本語に最適化して6.3倍に高速化したという kotoba-whisper を知りました.
日本語に限れば良さそう.ということで試してみました.
前回OpenAI Whisperを利用しましたが,今回ggml版のkotoba-whisper-v2.0も見つけたのでC++実装のWhisper.cppで試しました.
Whisper.cppの用意
Tip | CPUで利用する場合OpenVINOを利用しているのでIntel Corei 6世代以上が必要. |
$ git clone https://github.com/ggerganov/whisper.cpp (1) $ cd whisper.cpp $ make -j`nproc` (2) $ ./main -f samples/jfk.wav (3)
sourceの入手
build
サンプル音声で動作テスト
モデルの入手
今回, kotoba-whisper-v2.0 のモデルと,比較のために large-v3 large-v3-turbo のggmlモデルを用意しました.
Note | Download link は 「Files and Versions」→該当ファイルの「Download file」 |
$ wget2 -c https://huggingface.co/kotoba-tech/kotoba-whisper-v2.0-ggml/resolve/main/ggml-kotoba-whisper-v2.0.bin -P ./models $ wget2 -c "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin?download=true" -O models/ggml-large-v3.bin $ wget2 -c "https://huggingface.co/cstr/whisper-large-v3-turbo-german-ggml/resolve/main/ggml-model.bin?download=true" -O models/ggml-large-v3-turbo.bin
Note | Whisper.cppはモデルダウンロードスクリプトが付属しているが,正常系しか無いので不安定な回線などで途中で失敗した場合は以下を |
モデルサイズ
kotoba-whisper-v2.0, large-v3-turboは同じくらいのサイズ.
$ ls -1s models/ggml-kotoba-whisper-v2.0.bin models/ggml-large-v3-turbo.bin models/ggml-large-v3.bin 1483916 models/ggml-kotoba-whisper-v2.0.bin 1586492 models/ggml-large-v3-turbo.bin 3022500 models/ggml-large-v3.bin
文字起こしデータの用意
文字起こしデータは前回試したNHKラジオニュースの約5分の.mp3が残っていたのでこれを利用しました.
OpenAI Whisperはいろいろなデータを読んでくれるのですが,Whisper.cppは16kbit wavのみ対応なので前もって変換してあげる必要があります.ここではffmpegに変換してもらいました.
$ ffmpeg -i input.mp3 \ -ar 16000 -ac 1 -c:a pcm_s16le \ output.wav
実際の文字起こし
Note | 主な環境
|
large-v3
$ time ./main -t `nproc` -m models/ggml-large-v3.bin -l ja -f ./output.wav
:
real 25m54.494s
user 175m39.723s
sys 1m4.334slarge-v3-turbo
$ time ./main -t `nproc` -m models/ggml-large-v3-turbo.bin -l ja -f ./output.wav
:
real 11m10.153s
user 80m42.460s
sys 0m8.764skotoba-whisper-v2.0
$ time ./main -t `nproc` -m models/ggml-kotoba-whisper-v2.0.bin -l ja -f ./output.wav
:
real 10m7.137s
user 74m48.509s
sys 0m6.373s速度比較
| モデル | 処理時間 | 多国言語対応 |
|---|---|---|
large-v3 | 26min | OK |
large-v3-turbo | 11min | OK |
kotoba-whisper-v2.0 | 10min | NG |
今回の環境ではkotoba-whisper-v2.0はlarge-v3より6.3倍とまでは行かないが高速,しかし多他国言語対応のlarge-v3-turboとそこまで変わらない.
余録
計測した後端末をハイバネーションしようとしたらswapが足りず失敗.
$ systemctl hibernate
Call to Hibernate failed: Not enough suitable swap space for hibernation available on compatible block devices and file systems
$ free
total used free shared buff/cache available
Mem: 15992640 9952748 1965752 1276452 5725024 6039892
Swap: 17575932 11481084 6094848メモリ不足が響いて遅いのではと思い再起動して再計測したがあまり変わらなかった.
real 9m47.796s user 76m7.572s sys 0m3.873s
real 9m22.681s user 72m32.067s sys 0m4.110s
まとめ
今回日本語に特化したWhisperモデルの kotoba-whisper-v2.0 をWhisper.cppで試してみました.
元となったlarge-v3より確かに高速になっていますが,OpenAIのlarge-v3-turboとそこまで変わらない速度なので他国言語対応のこちらのほうが良いかもしれないと思いました.環境により変わるのかもしれません.
とやっていたら kotoba-whisper-v2.1 が出ているようです.
速度については変わらなそうですが,Whisper.cpp側の問題もあるかもしれないので次はOpenAI Whisper+koeoto-whisper-v2.1を試してみようと思います.
Note |
Whisper.cppには8coreまでしか使えないという制限があるらしいです.自分の環境では8coreまでなので関係ないかもしれませんが. |
環境
$ git -C whisper.cpp log -1
commit 31aea563a83803c710691fed3e8d700e06ae6788 (HEAD -> master, origin/master, origin/HEAD)
Author: Vin Misra <vinith@alum.mit.edu>
Date: Wed Nov 6 13:02:11 2024 -0800
whisper : fix extra memory usage (#2534)
* passing samples_padded by ref to the threads.
* passing samples_padded by ref to the threads.
---------
Co-authored-by: Vinith Misra <physicsdemon@gmail.com>
$ lsb_release -dr
Description: Debian GNU/Linux trixie/sid
Release: n/a
$ arch
x86_64
$ lscpu | grep ^Model\ name:
Model name: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
$ head -1 /proc/meminfo
MemTotal: 15992644 kB