kotoba-whisper-v2.0で日本語高速文字起こし

先日OpenAIのWhisperという文字起こしソフトウェアで新しいlarge-v3-turboというモデルを試しました．

OpenAI Whisperの新しいlarge-v3-turboモデルを少し試す – matoken’s meme

今回 whisper-large-v3 を蒸留技術により日本語に最適化して6.3倍に高速化したという kotoba-whisper を知りました．
日本語に限れば良さそう．ということで試してみました．

爆速でローカル動作する日本語特化の文字起こしAI『kotoba-whisper-v2.0』の実力は？【レビュー】 – 窓の杜

Kotoba Technologies

kotoba-tech/kotoba-whisper

前回OpenAI Whisperを利用しましたが，今回ggml版のkotoba-whisper-v2.0も見つけたのでC++実装のWhisper.cppで試しました．

Whisper.cppの用意

ggerganov/whisper.cpp: Port of OpenAI’s Whisper model in C/C++

Tip

CPUで利用する場合OpenVINOを利用しているのでIntel Corei 6世代以上が必要．

Whisper.cpp導入

$ 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モデルを用意しました．

kotoba-tech/kotoba-whisper-v2.0-ggml · Hugging Face

cstr/whisper-large-v3-turbo-german-ggml · Hugging Face

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はモデルダウンロードスクリプトが付属しているが，正常系しか無いので不安定な回線などで途中で失敗した場合は以下を

whisper.cpp のモデルデータのダウンロードに失敗したあとダウンロードし直す – matoken’s meme

モデルサイズ

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

主な環境

CPU: Intel® Core™ i7-10510U CPU @ 1.80GHz

RAM: DDR4 16GB

ストレージ: NvME SSD

OS: Debian sid amd64

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.334s

large-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.764s

kotoba-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

メモリ不足が響いて遅いのではと思い再起動して再計測したがあまり変わらなかった．

large-v3-turbo

real 9m47.796s
user 76m7.572s
sys 0m3.873s

kotoba-whisper-v2.0

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 が出ているようです．

kotoba-tech/kotoba-whisper-v2.1 · Hugging Face

速度については変わらなそうですが，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