クラウドに頼らない音声アシスタント
これをご覧ください。インターネットから切り離されたESP32-S3マイクロコントローラーが、あなたの声に反応します。最近のデモでは、わずか10ドルの小さなチップが英語やフランス語の音声コマンドを聞き取り、オンボードのLEDの色を変更しました。ボタンを押して話しかけるだけで、Wi-FiもBluetoothもクラウド接続も使わず、ボードが直接リクエストを処理します。
ハードウェアは驚くほどシンプルです。約10ドルのESP32-S3マイクロコントローラー(16MBのフラッシュストレージと8MBのメモリを搭載)に、小型のデジタルマイク、録音開始用のプッシュボタン、そしてRGB LEDを追加しただけです。デモで見せているノートPCは結果を表示しているだけで、聞き取りから実行までの重い処理はすべてボード上で直接行われています。
このローカル音声認識が重要なのは、クラウド型音声アシスタントの一般的な問題を回避できるからです。ネットワークの遅延を排除し、音声録音をリモートサーバーに送信しないことでプライバシーを確保し、完全にオフラインで動作します。このデモは「ライトを紫に点滅させて」といった限定的なコマンドインターフェースを示すものですが、汎用スマートスピーカーではなく、小型で安価なハードウェア上で完全に独立した音声制御を実現するための強力な一歩となります。
モデルはチップよりも大きかった
Cactus Computeの音声認識モデル「Whistle」は、単一のモデルファイルで16.9MBという、直面した課題でした。これはデバイスのファームウェアを考慮する以前に、ESP32-S3のフラッシュストレージ容量である16MBを超えています。参考までに、OpenAIのWhisperベースモデルは145MBと非常に巨大であり、Whistleはそれより9倍近く小さいものの、それでもこの小さなチップには大きすぎました。
コンパクトなサイズにもかかわらず、Whistleは驚くほど高性能です。以下の7言語に対応しています:
- 英語
- フランス語
- ドイツ語
- スペイン語
- イタリア語
- オランダ語
- ポーランド語
話された言語を自動的に検出し、正確な単語のタイムスタンプを提供します。さらに、音声から直接オーディオエンベディングを生成することも可能で、単なる文字起こし以上の機能を提供します。
Whistleをチップに収める鍵は、独自の「インテリジェンス・ラダー(知能の梯子)」アーキテクチャにあります。生の音声を処理するエンコーダーは常に8層すべてで実行されますが、テキストを書き起こすデコーダーは枝刈り(プルーニング)が可能です。Cactus Computeはデコーダーの深さを選択できるように設計しており、層を減らしても正しく機能します。
作成者は4層のデコーダーを選択しました。モデルのパーティションをフラッシュチップの末尾まで慎重に拡張した結果、フラッシュの空き容量はわずか98KBとなりました。2層のオプションであればより簡単に収まりましたが、文字起こしのエラーが顕著に増加したため、追加の層が持つ価値が証明されました。
小さなボードが音をアクションに変える仕組み
小さなチップはどのようにして実際にあなたの声を聞き取っているのでしょうか?プロセスは、マイクが16kHzであなたの声をキャプチャすることから始まります。この生の音声は、時間の経過に伴う声のピッチとエネルギーを視覚化した「ヒートマップ」であるMelスペクトログラムに変換され、10ミリ秒単位のセグメントに分割されます。
次に、一連の畳み込み層がこのヒートマップを圧縮します。各スライスは約80ミリ秒の音声を表すようになり、2秒間のコマンドがわずか25フレームに凝縮されます。この効率的な表現は、リソースが制限されたESP32-S3にとって不可欠です。
次に、Whistleのencoderが処理を引き継ぎます。8層構造により、80ミリ秒の各フレームがクリップ内の他のすべてのフレームを同時に「認識」できるようになります。つまり、モデルは単語を単独で捉えるのではなく、文全体の文脈の中で理解します。
最後に、decoderが文字起こしを一度に1つずつ生成します。まず、language tokenを使用して言語(英語やフランス語など)を識別します。単語を生成する際、「cross-attention」を使用してencoderの出力を再確認し、聞き取った内容との整合性を確保します。
次に、Needleではない小さなパーサーが文字起こしされたテキストを解釈し、「赤」や「5秒」といった単語を特定のLEDの色や点滅パターンにマッピングします。Whistleの機能の詳細については、Whistle: Speech to Text in 16.9 MB - Cactus Computeをご覧ください。
2秒間のコマンドを処理する最初の試みでは24秒近くかかり、音声アシスタントとしては遅すぎました。大幅な最適化が必要でした。Cactus Computeのエンジニアは、1パスあたり複数のフレームを処理し、ESP32-S3の2つのコアにワークロードを分散させ、チップのベクトルユニットで8ビット整数演算を使用することで高速化を実現しました。これらの変更により、一般的な応答時間はより実用的な10秒まで短縮されました。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
魅力的なデモであり、ディクテーションの代替ではない
Whistleの精度に関する主張は印象的ですが、文脈が重要です。Cactus Computeは、「flash the light blue(ライトブルーに点滅させて)」のような合成英語カラーコマンドに対して約78%の成功率を報告しました。これらのテストに録音されたマイクノイズを追加してもほとんど変化はなく、限定的で制御された環境下での堅牢性が示されました。
実用的な調査結果から、特定のフレーズに対するモデルの強みが浮き彫りになりました。「make it red(赤にして)」や「turn it green(緑にして)」といった短いフレーズは、テストで82〜93%の確率で機能しました。しかし、色を表す単語単体では、44%という低い精度でした。キーワードのバイアス設定や、フランス語などの他の言語での再試行により、固定コマンドセットの結果は改善されました。
WhistleのApache 2.0リリースとNeedleとの共通ランタイム設計は、エッジデバイスにおけるプライベートな音声対ツールシステムの未来を示唆しています。しかし、現在のESP32-S3ボードでは、両方のモデルを同時に搭載することはできません。約24 MBのフラッシュメモリが必要になるためです。また、約10秒のレイテンシとコマンド精度への特化という点も、より広範なアプリケーションへの適用を制限しています。
この魅力的なデモは、ローカル音声制御における重要な一歩を示すものであり、ディクテーションの代替ではありません。プロジェクトの詳細はGitHubリポジトリで確認でき、model cardも参照できます。
よくある質問
Whistleとは何ですか?
Whistleは、Cactus Computeが開発したコンパクトな音声認識モデルで、7つの言語でローカルに音声を文字起こしするように設計されています。
WhistleはESP32-S3で動作しますか?
はい、カスタムビルドと軽量化されたdecoderを使用すれば可能です。デモで使用されたボードでは、16 MBのフラッシュメモリ制限内で4層バージョンが動作しています。
ESP32-S3音声プロジェクトにはWi-Fiが必要ですか?
いいえ。音声のキャプチャ、文字起こし、LEDコマンドのロジックは、Wi-FiやBluetoothなしでボード上で実行されます。
デモの精度と速度はどの程度ですか?
作成者によると、合成英語カラーコマンドで約78%の精度があり、コマンドあたりの処理時間は平均で約10秒です。
このボードでWhistleをNeedleと同時に実行できますか?
デモの構成では不可能です。両方のモデルを合わせると約24 MB必要となり、ボードの16 MBのフラッシュメモリを超えてしまいます。

