Whisper large と同精度とあります.
v1.1 から長時間音声対応 + 認識精度よりよくなりました!
$ reazonspeech input.mp3
でかんたん認識できるようになりました!
恋する女子のときめきゅんあるあるテスト音声で試します!
{"start_seconds": 0.48, "end_seconds": 11.319, "text": "恋する女子のときめきゅんあるあるこっちかなこっちかなもう違う"}
正解は 恋する女子のときめキュン、あるある です. Whisper large での結果と合っています!
...
{"start_seconds": 426.522, "end_seconds": 430.454, "text": "男性の方々にも女性が待ち合わせの前に"}
{"start_seconds": 430.454, "end_seconds": 437.313, "text": "入念に準備をしているところだったりとかあとデート中は実はすごくドキドキしていることが"}
{"start_seconds": 439.28, "end_seconds": 445.377, "text": "あったりもするのでそういったところもぜひ見ていただいて日頃女性がこういうふうにして"}
{"start_seconds": 445.377, "end_seconds": 451.714, "text": "自分たちの前で頑張ってくれているんだなみたいなことが伝わる内容になっていると思います"}
{"start_seconds": 451.714, "end_seconds": 454.546, "text": "ぜひ見ていただきたいと思います有村架純でした"}
470 秒最後までうまく認識してくれました.
最後きちんと「有村架純」になりました
(Whisper large だと有村香澄とかになったりする)
model weight ダウンロード先
(reazonspeech のベースになっている) espnet では, モデルデータは huggingface の形式(?)に準拠しているようですが, モデルデータのダウンロード先は ~/.cache/huggingface
ではなく,
デフォルトだと
<python folder>/lib/python3.10/site-packages/espnet_model_zoo/models--reazon-research--reazonspeech-espnet-next
に保存されます.
miniconda を使っている場合は,
~/miniconda3/envs/<envname>/lib/python3.10/site-packages/espnet_model_zoo/models--reazon-research--reazonspeech-espnet-next`
になります.
weight サイズは v1 の 600MB くらいからは増えて, next では 800MB くらいでした.
改善必要点
おおむね whisper large と同じくらいの認識率でしたが,
{"start_seconds": 33.333, "end_seconds": 38.993, "text": "おなかすいたなおおおなかすいたまだかなまだかな"}
など多少文字が複製されたりがありました. 15 秒単位で処理しているようなので, その切れ目あたりに音声がかぶっているとうまくいかないのかもしれません. それでも whisper medium よりは認識はよいでした.
CUDA 最適化はまだまだ...?
CUDA 12.1 なマシンで動かしたら torch tensor が CPU or device に無いよとか言われて実行エラーになりました.
reazonspeech の git+https で入るのだと espnet が古く,
の .cpu()
が抜けていていたためです.
ただ, espnet 側で .cpu()
付けて動かせるようにして処理速度はいまいちでした(3090 で 470 秒音声が認識 150 秒くらい). nvidia-smi
で見ても稼働率は低いため, beam searh など, CPU で処理する部分に引っ張られて遅くなっているようです.
(ちなみに消費メモリは 4.4 GB でした)
そのうち改善されるかもはしれませんが, ESPNet 側でいろいろ対応しないといけないようなきもするので, とりあえずは CPU 実行でしょうかね.
whisper.cpp で reazonspeech モデル実行部分だけすり替えできるようになるとよりよいかもです.
まとめ
CommonVoice などの人の声だけのテストデータに対してはそこそこいい感じで判定してくれる感じではありました.
モデルサイズは 800 MB くらいですので, Siri みたいなユースケースでスマホに組み込んで数秒単位の音声認識するのにも使えそう(whisper large も頑張ればいけるがちょっとつらい). お料理中に声で応答「お料理で豚こまが 50g 余った! 豚こま 50g でええ感じの明日のお弁当のおすすめ教えて!」と ChatGPT に問い合わせるとか!
より精度ほしいような, 議事録や, 映画とかなどのいろいろ雑音の入った音声データの文字起こしなどのユースケースでは, もうしばらくは Whisper large を使うのがよいでしょう.
そのうち ReazonSpeech が改善されて Whisper 置き換えもできるようになるでしょう
TODO
- rnnoise とかでの雑音除去をプリプロセスで入れてみる https://github.com/werman/noise-suppression-for-voice
- スマホに組み込んで使えるようにする(Whisper.cpp あたり使いモデル部分だけ改変でいけんかのう)
- wav2vec あたりと組み合わせ phoneme, 単語単位でのアラインメントにチャレンジ