この記事の概要を簡単まとめ!
- ゆかコネブラウザ音声認識、Edge vs Googleの構図
- デバイスを指定できないEdge、負荷が高まっているChrome
- ゆかコネ搭載のオフライン認識を代用できないかと考える
- 音響モデルを切り替えることで精度と言語を変更できる
- Alpha CepheiのVOSK軽量モデル(デフォルト)と大容量モデルで比較
- 音声認識精度はそこまで変わらず、接続詞などが補完された程度
- モデルロードの異常で音声認識結果が崩壊するバグ(発生原因不明)
- あくまでも非常用、他が使えるならメインにする理由はない
YukariWhisperの方は、v0.0.3にアップデートされた。無許可改造が効いたかどうかは果たしてわからないが、そのバージョンからは皆に優しいものになった。しかし実用には3080Tiレベルでない場合、2GPU体制でなければほぼ使い物にならないので、解決するまではブラウザ音声認識に戻している。
しかしブラウザ音声認識にも問題があることを発見した。EdgeとChromeに対応するそれは、Edgeはマイクを選択できず、Chromeは利用者の増加に伴って応答が悪くなっていた。UDトークは環境上うまく使えなかったため、残った音声認識としてオフライン認識を試すことにした。これが使えれば、今後の音声認識のヒントになるはずだ。
ひとっ飛びできる目次
音響モデルで変わる音声認識精度
ゆかコネ音声認識の探求
YukariWhisper vs ブラウザ音声認識
ゆかコネは一度調べ始めると、調べ終わるまでかなり熱中して調べられる。直近では音声認識比較からYukariWhisperについて、基本調査と独自改造で連続2回調査している。音声認識比較ではUDトークが環境の関係でうまくいかなかったので、これに関してはリベンジしたい気持ちがある。YukariWhisperは出したばかりということもあって不備が多かったが、ここで取り上げた結果かどうかは知らないが後に修正が入った。それにより今ではプログラミング未経験者でも扱えるものになっている。
YukariWhisperはOpenAIのWhisperを高速化したfaster-whisperをベースに、ゆかりねっとまたはゆかコネ専用に設計されたものである。開発元からわかるように機械学習=AIの応用の1つであり、機械学習と言えばGPUである。つまりこれは基本的にGPUで音声認識を行わせるものである。機械学習の始まりと言える2018年頃と現在ではGPU自体の性能と機械学習の精度と速度に影響する性能は軒並み上がっており、Tensorコアの増加、CUDA CCバージョンのアップグレードで使用できる計算型も多彩で精度を保ちつつ軽量化と高速化が進んでいる。これらを利用することで、低負荷で高性能な音声認識を使えるということで使用している人もいる。
動作要件はNVIDIA系GPUでPascal以上であること。つまりGTX/RTX基準で1000番台以上である。しかし快適に利用するには3000番台以上でなければ難しく、実質的に高性能GPU利用者のみに限られる方法となった。また、異常な認識結果はNGワードの修正で解消できているであろう、しかし原因不明の音声認識を確定しない現象を度々観測しているので、その点で使いづらさがある。加えて私の環境では2080TiでもVRAM消費率が70%を越えて動作が不安定になることもあって、現在は使用停止中である。
Discord内でも同様に使っていた人からは認識されにくく、1分程度固まったとこともあるということで使いにくさを感じ、ブラウザ音声認識に戻したと話していた。そのため現在主流なのはブラウザ音声認識になるであろう。オンラインでの音声認識となるそれはEdgeとChromeのどちらかを選択して使用する形式で、ブラウザさえインストールされていればすぐ使えるものである。もっとも、WindowsなのでEdgeはプリインストールであり、Edgeならすぐ使える。煩雑な設定もなく負荷も軽いため、ゆかコネの初期設定解説で使われている。
デバイスを指定できないEdge、負荷が高まっているChrome
旧ゆかコネと現ゆかコネ(ゆかNEO)を総計して2年2ヶ月使っている。よくわからないまま使っていたあの頃から、様々な機能を検証して報告するまでに至った過程で、(gumbek氏のSpeechRecognitionWebを使わない)ブラウザ音声認識についてもそれぞれの「癖」を持っていることが分かった。
Edgeは元を辿ればChromiumベースであり、細かい部分の違いを除いてChromeと似ているものである。マイクやカメラの設定も普段使っているようにすれば、大体は問題ない。だが私が調べた限りでは、どうにもデバイスの優先度がおかしいのである。OSが物理マイクを接続中、既定デバイスを物理マイク以外の任意のデバイス(カメラ付属のマイクや仮想オーディオデバイスも含む)にした上でEdgeのマイク設定を既定にする。理論上はOSによって既定に選択されたその任意のデバイスを使用するのだが、どういうわけかそれを無視して物理マイクを優先するのである。物理マイクの接続を解除すると正しい挙動になったため、Edge内部の問題であることが確定した。これはいちユーザーがどうこうできるものではない。
Chromeは音声認識の最前線を行っていることもあって、変換精度は高く、特にゲーム系の用語において正確性が高い。そのためユーザー数もかなり多い方である。しかし最近にOpenAIの技術がエンドユーザーでも手軽に使用できるようになったことで。その結果をGoogleに流すという行動が増えている。この結果Googleの負荷が非常に高くなっており、時々音声認識を受け付けなくなる・確定が遅くなるということが起きている。リアルタイム性と連続発話での取りこぼしを考慮すると、Chromeの音声認識の実用性は低くなっている。
相対的評価ではまだEdgeの方がしっかり音声認識するということになるのだが、それでもEdgeは音声認識開始と終了の前後で発話の取りこぼしをすることがある。EdgeもEdgeで金の力で手に入れたGPT-4を組み込んだBing AIが存在し、それによる負荷で音声認識にも影響が出ていると推定される。もっとも、オンラインで使用するものであればそれらの影響は考慮し妥協しなければならないというのが現状であり、すぐの改善は難しいであろう。
スポンサーリンク
スポンサーリンク
ゆかコネ搭載のオフライン認識
ゆかコネ音声認識比較時にのみ使用したものとして、オフライン認識がある。これは殆どの人が使ったことがないはずだ。既に他に音声認識が揃っているのと、その精度はそれらに劣るため、あくまでも非常用の立ち位置を出ないためである。ただ、オフラインで利用できることから、EdgeないしChromeまたはUDトークと比較して、それらのサーバ負荷が高い状態でも音声認識が止まることはない。
また、音声認識精度を左右する要素として、音響モデルというものがある。専門的なものであるため簡単に言えば、言葉の最小単位、「あ」「い」…といったものを定義付けるためのファイルである。音響モデルには単語辞書も含まれているようである1)専門的な話はこのあたりを参照すること。。これはゆかコネのインストール先の\vosk\model
にあり、入れ替えることで対応する言語そのものを変更することや精度と応答速度を変更できることをNao氏から教えてもらった。
ゆかコネが現在使用中のモデルは、Alpha Cepheiが提供するVOSKという音響モデルである。現在提供されているモデルは、日本語モデルでvosk-model-small-ja-0.22(48MB)とvosk-model-ja-0.22(1GB)であり、ゆかコネでは配布サイズと応答を軽くするために軽量モデルを採用している。検証データセットはCSJ(日本語話しコーパス言葉)で、文字誤り率(CER)は軽量モデル9.52, 大モデル8.40としている。Whisperがlarge-v3でFleursを使用したときのCER/WERが4.9と比較すると微妙に見えるが、そもそもタイプが違うので10%を切っているのなら良好な性能と言えるはずだ。
仕様上比較できるのはこの2つだけであるが、ゆかコネのオフライン認識は仮想オーディオデバイス経由が簡単に行える。もしこの音声認識の精度が実用範囲であるなら、ブラウザの仕様として不安定なEdge、サーバ自体が不安定なGoogleに代わって、しばらくはオフライン認識でも戦えるのではないかと考えた。そこで、軽量モデルと大モデルを両方検証し、その結果からどう使っていくのかを考察していく。
オフライン認識を強くする
検証にあたり、検証時のゆかコネのバージョンは2.1.37(dev)、オフライン認識のバージョンはv0.21である。
VOSK日本語モデル(大)のダウンロード
検証にあたって、VOSK日本語モデルの大モデルをダウンロードする。これはApache2.0ライセンスで提供されている。先のリンクからJapaneseの欄を探し、そこの”vosk-model-ja-0.22″をクリックすることでダウンロードが開始される。ZIP形式のファイルのため、ダウンロード後は任意の場所に解凍するか、ゆかコネのインストール先の\vosk\model
に直接解凍する。その際は元からインストールされているものは別の場所にバックアップとして移動してから解凍すること。なお、この操作はゆかコネが起動していない状態で行うこと。
軽量モデルと大モデルの負荷
検証前に確認する事項として、軽量モデルと大モデルのそれぞれの負荷を確認した。モデルの差異による影響はRAM使用量にあり、次の結果が得られた。
測定タイミングは、オフライン認識を起動してモデルをロードする前に撮影し、その後ロードして安定してから撮影している。音声認識を開始する前にVOSKモデルをRAMに展開し、アクセス可能な状態にしているものと考えられる。そのため認識速度はマザーボード、CPU、RAMの仕様に引っ張られるはずだ。したがってこの結果だけを見れば、最新のPCほど有利なものになると推測される。
RAM使用量については、軽量モデル300MB、大モデル1.5GBの結果となった。デスクトップで運用する場合はそもそも32GB以上が前提としていることも多いので、RAM不足に陥ることは殆どないはずだ。ラップトップの場合は換装および増設不可なものも多いため、配信専用として運用する場合には間に合うが、それ1つで全てをこなす場合には辛いものとなるであろう。
スポンサーリンク
スポンサーリンク
マイク設定およびパラメータ
オフライン認識もコントロールパネルが別ウィンドウで開かれる。そこでは以下の設定を行える。
- 音響モデルのロード:
ゆかコネのインストール先\vosk\model
にあるモデルをロードする。この操作をしなくてもスタート時に自動でロードする。 - 入力:入力デバイスを選択する。
- ノイズカット:スライダーでノイズカットを行う。右に移動することで強くなる。入力を見ながら行うと調整しやすい。
- 無視するフレーズ:1行単位でセットする。指定した単語が含まれる場合、結果を表示しなくなる。どうやら機能していないようである。
オフライン認識では必要最低限の機能を抑えており、ノイズカットも装備している。除外設定については使用してみたものの、機能しているような感じではなかったため、ここはまだ調整段階であるようだ。とはいえ、YukariWhisperのようなノイズを音声として認識してしまうようなことは実験中に殆ど起きなかったため、特に問題はなさそうである。
実験結果
実験に際し、入力の均一化のために以前に使用した録音音声を使用する。今回はそれぞれの動画単体ずつで、認識してから最初の結果を表示するまでにかかった時間と、翻訳が表示されるまでの確定時間を、後付けでタイムカウンターをつけたものとして掲載する。なお、字幕が消える時間は一律7秒で固定している。
軽量モデル動画
大モデル動画
表示時間と確定時間、精度比較表
表示時間と確定時間、および精度でそれぞれ表にまとめ、比較を行う。なお、一部音声では段階的に認識されるため、それぞれの時間を記載している。
データ1 | テスト用音声の録音を開始します。 |
データ2 | はいお疲れ様でした、さようなら。 |
データ3 | パスタソースは、別にその市販品じゃなくてもいいんですよ。家にあるその身近な調味料を使えばいいですよ。 |
データ4 | パスタは1回80gに落とす、その代わりに野菜をたくさん入れること。 |
データ5 | ブランド着てる奴って、結局見えだけなんじゃないですかって。あのSTAY TUNEでも、なんかそんなようなフレーズありますよ。 |
データ6 | みーちゃん食べたい。 |
データ7 | メインシステム、戦闘モード起動。 |
データ8 | やっぱりね、BTOじゃ満足しなかったから。だから俺は自作にこだわったわけ。 |
データ9 | 俺は嫌いなものには嫌いって言う、自分に嘘をついたってしょうがないからな。 |
データ10 | 作戦目標クリア、システム通常モードに移行します。 |
データ11 | 別に好きなようにやればいいと思うよ、長生きしたって正直良いことないと思ってるから。 |
データ12 | 騙されたな! |
音声データ | 軽量表示時間 | 大表示時間 | 軽量確定時間 | 大確定時間 |
データ1 | 2.56 | 2.73 | 4.73 | 4.93 |
データ2 | 2.46 | 1.60 | 4.65 | 5.00 |
データ3 | 2.15 → 2.33 | 2.43 → 3.61 | 5.36 → 4.73 | 6.03 → 6.56 |
データ4 | 2.05 | 2.85 | 7.40 | 7.75 |
データ5 | 2.08 → 1.98 → 2.18 | 2.75 → 2.53 → 1.60 | 3.90 → 5.13 → 4.50 | 4.58 → 4.78 → 5.00 |
データ6 | 1.81 | 2.68 | 4.13 | 4.05 |
データ7 | 1.73 | 2.68 | 4.56 | 4.98 |
データ8 | 0.98 | 2.70 | 7.68 | 8.23 |
データ9 | 2.01 | 2.75 | 6.90 | 6.83 |
データ10 | 2.01 | 2.71 | 5.91 | 6.66 |
データ11 | 2.01 → 2.16 | 2.55 → 3.61 | 4.13 → 5.50 | 4.63 → 6.56 |
データ12 | 1.93 | 2.38 | 2.88 | 3.95 |
音声データ | 軽量モデルJP | 大モデルJP | 軽量モデルEN | 大モデルEN |
データ1 | テスト用音声録音を開始します | テスト用音声の録音を開始します | Start test audio recording | Start recording test audio |
データ2 | はいお疲れ様でしたさよなら | はいお疲れ様でしたさよなら | Yes, thank you for your hard work Goodbye | Yes, thank you for your hard work Goodbye |
データ3 | パスタソースは別にそう市販品じゃなくていいですよ 家でにあるその道から調味料を使えばいいですよ |
パスタソースは別に、市販品じゃなくていいですよ 家にあるその道から調味料を使えばいいですよ |
Pasta sauce doesn’t have to be commercially available. Just use the seasonings you have at home. |
The pasta sauce doesn’t have to be a store-bought product. You can use any seasonings you have at home. |
データ4 | パスタは一回八十クラブに落とすその代わりに野菜をたくさん入れること | パスタは一回八十クラブに落とすその代わりに野菜をたくさん入れること | Drop the pasta into the 80 club at once and add lots of vegetables instead. | Drop the pasta into the 80 club at once and add lots of vegetables instead. |
データ5 | ブランドきている言って 結局右だけのじゃないですか ステイ中でもだかそうだような触れずあります |
ブランドきてるよっつって 結局見栄だけなんじゃないですか ステイ中でもだからそんなようなフレーズありません |
Say the brand is popular After all, it’s only the right one, right? Even during my stay, I didn’t touch anything that seemed to be bothering me. |
The brand is coming In the end, it’s just for looks, isn’t it? I’m still staying, so there are no phrases like that. |
データ6 | ビーチは食べた | ビーチは食べたい | I ate the beach | I want to eat at the beach |
データ7 | メインシステム戦闘モード起動 | メインシステム戦闘モード起動 | Main system combat mode activated | Main system combat mode activated |
データ8 | やっぱりでBTOじゃあ満足しなかったから、だから俺は自作にこだわった訳 | やっぱりねぇBTOじゃあ満足しなかったから、だから俺は自作にこだわった訳 | After all, I wasn’t satisfied with BTO, so that’s why I stuck to making it myself. | After all, I wasn’t satisfied with BTO, so that’s why I insisted on making my own. |
データ9 | これは嫌いなことには嫌いっていう、自分に嘘ついたしょうがないからな | これは嫌いなことには嫌いっていう、自分に嘘をついたってしょうがないからだ | There’s no way I’m lying to myself, saying I don’t like something I don’t like. | There’s no point in lying to yourself, saying you don’t like something you don’t like. |
データ10 | 作戦目標をクリア、システム通常ボードに移行します | 作戦目標クリア、システム通常モードに移行します | Clear the mission objective and move to the system normal board | Operational objective cleared, system transitions to normal mode |
データ11 | 別に好きなようにやればいいと思うよ 長生きしたって正直いいことないと思ってるから |
別に好きなようにやればいいと思うよ 長生きしたって正直いいことないと思ってるから |
I think you should do whatever you like. Honestly, I don’t think living a long life is a good thing. |
I think you should do whatever you like. Honestly, I don’t think living a long life is a good thing. |
データ12 | 騙されたなぁ | 騙されたなぁ | I was fooled | I was fooled |
スポンサーリンク
スポンサーリンク
結果考察
上記の結果から、まず音声認識精度は目に見えて劇的に変化するということはなかった。細かい変化として助詞・助動詞・接続詞の認識精度が上がっているような感じであり、それ以外はほぼ据え置きか、軽量モデルで認識しなかった部分が認識するという差である。反応速度についても、軽量モデルを基準に大モデルは平均して1秒前後遅延があると分かる。この差は翻訳の確定時間にも影響し、これらも考慮すると決して無視できない結果と言える。1.5GBのRAMの負荷に対して認識結果がそこまで上がらなかったことを考えると、ゆかコネの妥協点である「まあまあ伝われば問題ない」を満たす軽量モデルでも十分と言える。
また、期待していた部分である反応速度もそこまでいいとは言えず、それであれば素直に他の音声認識を利用した方がいい。加えて固有名詞にはとても弱く、VOSKではまず認識しない。Suchmosの名曲”Stay Tune”を認識できないことがそれを証明しており、ブラウザ音声認識ではこれを正しく認識できていた。このあたりは話者次第と言ってしまうとそれまでだが、同じオフライン環境でも使用でき、ほぼ同量のVRAMを使用するYukariWhisperの方が(既知のバグを除いて)正確性と反応速度に優れている。GPUは高い買い物であるが安易にアップグレード可能なので、GPUに余裕があればそちらの方が正解となるであろう。
Nao氏の見解
Nao氏によれば、軽量モデルについては単語登録で精度を上げられるということで、Nao氏自身が試した。しかしその精度は微妙であり、モデルの再学習の手間とコストを考えればWhisperを使った方がいいというのが答えになった。確かに、再学習にかかる面倒さを考えればその方がNao氏がゆかコネ本体とプラグインの整備に取れる時間を確保できるというものである。そうでなくてもUDトークを使うなどすればいいわけで、どうにかする手段はいくらでもあるはずだ。
要検証:モデルを正しくロードしないバグ
検証中に発見したバグとして、モデルを正しくロードしないことが何回か発生した。モデルのロードがおかしくなると、音声認識結果が全く異なるものになり、使用すると逆に妨害になるほど結果が悪化した。ロードがおかしくなる原因については不明で、ゆかコネ起動中にモデルを入れ替えることや、別の音声認識からオフライン認識に切り替える、オフライン認識を一旦終了した後再度オフライン認識を行うといった操作でおかしくなったが、逆に同じ操作をしてもおかしくならなかったこともあり、明確な原因を特定できなかった。また、オフライン認識を再起動する方法では確実に解消できないこともあって、明確な対処法はゆかコネを再起動するくらいしかなく、対処が面倒になっている。
このバグについては使用すればすぐわかるため気付くのは早い。しかし修正が難しいので、その場合は他の音声認識を使うべきである。前述の精度も含めれば、敢えて選択する理由がないようだ。
あくまでも非常用、他が使えるならメインにする理由はない
以上で検証を終了する。ここ最近のブラウザ音声認識の遅延と認識詰まりを観測し、それはサーバ側の問題であることが分かった。そこでインターネットに頼らない音声認識であり、既に十分に音声認識が整っている以上これまで触れられてこなかったオフライン認識を研究することにした。認識にはAlpha Cepheiが提供するVOSKの軽量モデルをデフォルトで使用しており、軽量な分音声認識精度は最低限を確保している程度であり、実用性は微妙である。
そこでもう1つの大容量モデルをダウンロードし、それに置き換えて確認した。入力の均一化のために以前使用した録音音声をベースに、今回は音声認識が同一形式のためそれぞれのモデルにおける精度・表示時間・翻訳確定時間も比較を行った。使用モデルが大きければ精度も上がると期待されたが、そこまで劇的に上がるということもなく、助詞・助動詞・接続詞の認識精度が上がった程度の変化で、それに対して負荷と遅延が増している感じであった。要するに、割に合わないという感じである。せっかくじっくり調べてみたものの、これでは少し残念な結果になったと言わざるを得ない。
また、モデルについては対応するものがVOSK以外が存在しないようで、モデルの入れ替えによる精度向上と速度維持のバランス調整はこれ以上見込めない。Nao氏の方では軽量モデルに対し辞書登録による翻訳レベルの向上も試してみたものの、微妙な結果に終わったという。このことも含めれば、敢えてオフライン認識を使う理由はないであろう。理想はYukariWhisperだが人によってはスペック不足があり得て、しばらくはブラウザ音声認識が主流になるはずだ。それらが調子悪いときには非常用としてなら機能するのでその時に使えばいいだろう。とりあえずは今のままでいいはずだ。
以上、ゆかコネ検証報告:オフライン認識はどこまで戦えるか、であった。非常用は非常用の域を出ないとは、このことである。
KIBEKIN at 00:00 Feb. 15th, 2024
スポンサーリンク