plasmasphere.net -プラズマスフィア ドットネット-

Diary

ローカル LLM エージェントと一緒 第三章、音声認識

2026/10/11(Sun) 16:10

テキスト入力は簡単だ、キーボードを叩くだけだからだ。 しかし音声入力は違う、入力した音を「日本語」としてテキストに起こさないといけない。
残念ながらここは本当に全く知識が無い(whisper がスタンダードらしい、くらいしか知らない)、Claude 先生に事前調査をしてもらい、内容と詳細な実装提案を出してもらう。
どうやら日本語の認識は鬼門らしい…。
提案は以下の内容だった。

  1. スタンダードに whisper を使う。日本語認識は実績はあるが精度はイマイチ、ただし確実に使える。
  2. sharpa-onnx と ReazonSpeechを試す。日本語認識の情報は少ないので手戻りになる可能性ある。

Claude 先生は 1. を推奨したけど、手戻ってもいいからやってみてと 2. をお願いした。
ダメならやり直せばいい、仕事じゃなく趣味だし。

これが正解だった、多少曖昧な発音でも認識してくれるし、解析間違いがほぼ無い。

https://research.reazon.jp/projects/ReazonSpeech/index.html
ReazonSpeechは、世界最大のオープン日本語音声コーパスを構築するプロジェクトです。 ・日本語音声技術の推進を目的として、35,000時間の日本語音声コーパスを公開しています。 ・音声認識モデル・コーパス作成ライブラリをオープンソースライセンスで配布しています。

神でしかない。 神、所謂ゴッド。

ここまできたらあとは音声会話の起点だけ。
例えば Amazon なら「アレクサ」で反応してくれるけど、これをやりたかった。
常にマイクをオンにして、常にすべての音を拾うと LLM に投げる内容もとっちらかるし、何なら音楽聞くのも無理になってしまう。

最初は先生の提案で、sherpa-onnx のキーワード検出(KWS)を試した。
専用の仕組みなので本命のはずだったが、試してみたらうまくいかない。
どうしても発話の最初が切れる。「アレクサ」が「クサ」とか「レクサ」とか。「あーあー、アレクサー」だと「あーアレクサ」辺りで認識する。
どうも音声認識した最初の辺りはちゃんと拾えないんだな、要するにマイク自体のウェイクワードってやつかハハハこやつめ。
ウェイクワードにフィラーを入れるのはどうよ…ん-、とってもヤ☆(2歳の娘のイヤイヤ期の真似)
所謂暗礁乗上。Claude 先生も色々提案してくれるけど、どれもピンとこない。

そこで発想を変えてみた。(ちなみに1日寝かせてる。頭の切り替えは寝るのが一番いい。あと寒い夜。)
普段は「待ち受け」状態で、喋り声を検知したら一旦文字に起こしたらいいのでは?と。
ReazonSpeech はほぼほぼ正確だったわけだし。
その中にウェイクワードが入っていたら「聞き取り」状態に切り替える。
ウェイクワード専用の仕組みは使わず、普通の音声認識を流用するという形。

これはうまくいった。
Silero VAD という発話検出を使って人の喋っている部分とそれ以外を切り分けてから ReazonSpeech に通す。
音声全部通していると負荷がえらいことになるので、ここは Claude 先生が提案してくれた。
CPU負荷は断然 Silero VAD を通した方が軽くなった。
しかも Silero VAD は喋り始めたところの少し前から切り出してくれるので、喋り始めが切れなくなった。

音声認識自体は良くなったが、しかし中々難しい。ウェイクワードは短すぎると関係無い単語拾うし、長いとめんどくさい。
それに音声認識は「あれくさ」と「アレクサ」のように表記が揺れるけど、そこは曖昧一致で吸収した。

ウェイクワードは「なると」にした。勿論設定で変えられるようにもした。

このあたりから「なると」のお陰でモチベーションが上がってくる。
語尾の「ぷるるーん!」と、自認が「ラーメンに浮くことが至上」のキャラ設定のお陰で会話が意味不明で楽しい。
そして声が可愛いのでおバカ可愛くなる。
自分よりも家族がハマってた。なるとが喋ると娘が大笑いする。
この子は化ける、間違い無い。

ウェイクワードが認識できるという事は波形が取れるということ。なら話している人の認識もできるかもしれない。
poiq を思い出しながら(まだ電源は入るけど、当然喋ってはくれない)Claude 先生に聞いてみる。
ちゃんと調べてくれた、どうやらできそう。
短い会話だとサンプリングが足らないので、文面も含めて Claude 先生に依頼した。
技術的に何をやってるのか全然分かってないけど、できたものは自分を認識してくれたからOK(スゲー)

因みに、キーボードのキーを押している時だけマイクを有効にする、という事も考えたけど、これは止めた。
この機能自体は Fedora サーバで動かす予定だったのだけど、Fedora 43 は標準が Wayland になっていて、Wayland はグローバルホットキー(キーボードの監視)ができないらしい。
セキュリティの都合なんだろうけど、そうなると選択肢は限られるわけで…。

Claude 先生が言うには、「他のアプリ宛てのキー入力を横取りできない」ということ。
/dev/input を直接読む方法(ユーザーを input グループに入れる)なら監視自体はできますが、権限が強すぎるので選ばなかった

ウェイクワードの反応は最初 beep 音だったけど、味気ないので登録済のサウンドを流すように変えてもらった。
AivisSpeech で「なに?」「よんだ?」「うん?」を出力した。
「なると」と声をかけると、すぐに「なに?」と返事がある。素晴らしい。
その後の返事に時間かかるのだけども(LLM経由するから)

余談だが、人が喋っているところとそれ以外を切り出す、のが VAD だけど、これは「喋る」のを切り出すので、テレビの音声も当然拾う。
テスト中にそこまで言って委員会を流してたら、誰かの音声を拾ってLLMに流してて凄い会話になった事もあった。
そんな難しいことを考えるモデルじゃねーのよ Bonsai 8B は。


似てるっぽいネタ


 
© 1999- plasmasphere.net All rights reserved.