自作の軽量キーワード分類器とwhisper-baseの比較
呼称パターンだけを判定する専用の小型分類器を自作し、whisper-baseと同じ試験セットで比較しました。速度は圧倒的ですが、学習データの話者数が実用の壁になりました。
① 検証課題
決まった呼称パターンだけを判定する専用の軽量分類器(Keyword Spotting/KWS)を自作した場合、実測カルテ②のwhisper-base(オープン語彙の汎用ASR)と比べて、速度・精度はどう変わるか。
② 環境
- モデル構成: 対数メルスペクトログラム入力のCNN分類器(クラス分類。自由なテキスト生成はしません)
- 学習データ: edge-tts合成音声2話者分(呼称フレーズ+「その他」クラス)のみ
- 話者ホールドアウト: 評価に使うja-JP-KeitaNeural(Keita、呼称フレーズ15試行)は学習に含めず、未学習話者として評価
- 実行方式: ONNX Runtime Web(ブラウザ内、CPU実行)
- 実行日: 2026-07-17
- CPU・GPU・OS: 実行環境のCPU型番・GPUモデル・OSはハーネスのログに記録なしです。
- 音声条件・試験セット: 実測カルテ①②と同一。静音/SNR10dB/SNR5dBの3条件、各条件20発話(呼称10種+雑談10種を話者2種=Keita/Nanamiに配分)、3条件合計60発話
- 特徴量の実装: 学習(Python)と推論(ブラウザJS)で対数メル特徴量の実装を別々に用意
③ 判定基準(事前に置いた基準)
実測カルテ①②と同一の基準(測定スクリプトのdocstringに明記)。
| 指標 | 基準 |
|---|---|
| recall(静音) | 90%以上 |
| recall(雑音下: SNR10dB・SNR5dB) | 80%以上 |
| 誤受理率 | 5%以下 |
| p95レイテンシ | 2500ms以下 |
④ 結果(実測値)
ミリ秒の実測値は小数点以下を四捨五入して表記します(本ページ・関連カルテ共通の丸め規則)。
モデル規模と推論速度
| 項目 | 自作KWS | whisper-base(参考・カルテ②) |
|---|---|---|
| パラメータ数 | 約18.6万(185,723) | 未測定 |
| モデルファイルサイズ(ONNX単体) | 約0.74MiB(777,064バイト) | 未測定 |
| 推論レイテンシ p50 | 7.6ms | 1466ms(WebGPU)/2662ms(CPU) |
| p95レイテンシ(全体) | 9.1ms | 1606ms(WebGPU)/3027ms(CPU) |
モデルファイルサイズはONNX単体の値です(参考: 同じ自作モデルをWASMランタイム込みでダウンロードした場合の合計は、指差呼称チェッカーのデモページで約3.7MiBと実測しています)。 推論速度は自作KWSが2桁以上高速です(p50で約190〜350倍)。一方でモデルの「賢さ」は下記の精度実測で明暗が分かれました。
精度:話者を変えると成立しない
| 条件 | recall(基準90%/80%) | 誤受理率(基準5%以下) |
|---|---|---|
| 静音 | 70%(未達) | 40%(未達) |
| SNR10dB | 70%(未達) | 50%(未達) |
| SNR5dB | 70%(未達) | 60%(未達) |
| 話者(全条件合算) | recall |
|---|---|
| 学習話者(Nanami) | 100% |
| 未学習話者(Keita・15試行) | 40% |
誤受理率は全条件で基準(5%以下)を大きく超過。信頼度スコアのしきい値を引き上げても(0.995まで)誤受理率は13.3%までしか下がらず、しきい値調整だけでは解決しませんでした。短い否定サンプルを追加した再学習も試しましたが、誤受理率は40%→50%に悪化しました(出典は⑥参照)。
結論:話者2種類(片方は学習前提の音声)ではデータが根本的に不足
学習話者(Nanami)ではrecall100%と高精度に見えますが、これは「学習に含めた話者を、学習に含めたテキストで当てられる」ことを示しているに過ぎません。未学習話者(Keita・15試行)でのrecall40%が、話者非依存の判定性能の実測値です。ただしこれは1名・15試行のみの実測であり、複数話者での傾向確認ではありません。whisper-baseは今回のedge-tts 2話者(Keita・Nanami)を学習に含んでおらず、大規模な事前学習データのみで学習済みのモデルです。そのため両話者とも「未学習話者」という条件は同じで、その上でrecall100%を達成しています(比較の非対称性は下記⑤参照)。
Python学習実装とJS推論実装の特徴量パリティ
学習(Python)と推論(ブラウザJS)で対数メル特徴量の実装を独立に用意したため、数値的な一致を検証しました。実測は誤差の最大値7.629×10⁻⁶・平均値1.139×10⁻⁷で、学習時と推論時の特徴量は実用上一致していると判断しました。
⑤ この実測から言えないこと
- 自作KWSとwhisper-baseの比較は対等な条件ではありません。whisper-baseは汎用ASRとして大規模データで事前学習済みのモデルであるのに対し、自作KWSは今回2話者分のみで学習したその場限りのモデルです。
- 未学習話者recall40%はKeita1名・15試行のみの実測です。「専用の小型分類器は原理的にダメ」という結論ではありませんが、「話者3名以上・実声を含む学習データを用意すれば改善する」という見立ては、この実測が検証したものではなく未検証の仮説です。
- 推論速度(8ms)はCPU実行での計測です。whisper-base側のWebGPU実測(1.6秒)とは実行方式が異なる比較である点に注意してください。
- 「その他」クラス(誤受理対策)の学習データも2話者分のみで、短い相槌等のカバーが不十分な可能性があります。
- この実測は話者非依存性の壁を示すもので、KWS方式そのものの実用可能性を否定するものではありません。
⑥ 再現方法
比較対象のwhisper-base実測は実測カルテ②、指差呼称の記録用途としての実装は指差呼称チェッカーで試せます。
学習データ・学習スクリプト・測定ハーネス・生の実測データは社内の検証用リポジトリに保存済みです(本サイトの公開リポジトリには含まれません)。数値の再検証をご希望の場合はお問い合わせください。
出典(内部データファイル名・参考情報): recall/誤受理率/レイテンシはasr/arm3_score_summary.json。パラメータ数18.6万は学習ログmodel/training_log.jsonのn_params。モデルファイルサイズ777,064バイトはmodel/kws_model.onnxの実測ファイルサイズ。特徴量パリティ誤差はkws/logmel.parity.test.mjsの実行結果。再学習で誤受理率が40%→50%に悪化した記述はkws/kws-data-collection-plan.mdに基づきます。
関連する業務ページ
この実測が、自社の記録用途にそのまま使えるかを先に整理する
この仕組みが自分の現場に要るか、先に整理する
いくつかの質問に答えると、次に試すデモ・追加で確かめること・PoC受入基準のひな型が表示されます。登録は不要で、結果はその場で全部見られます。
意思決定室で整理する(登録不要・約3分)