世界を動かす技術を、日本語で。

Whistle: 16.9 MBの音声をテキストに変換

概要

Whistleは、軽量で高速な音声認識モデル。 16.9MBの単一ファイルで、CPUのみで動作し追加依存なし。 英語を含む7言語対応、30秒までの音声をローカルで即時文字起こし。 Needleエンジンと同一バイナリで統合利用可能。 主要な既存モデルよりも小型・高速・多機能。

Whistle:超軽量・高速な音声認識モデルの特徴

  • Whistle は、モバイル、ウェアラブル、ロボット、スマートホーム、自動車、マイコン向け音声認識モデル
  • 16.9MB の単一ファイル構成、追加依存なし、CPU上で動作
  • Needle と同じC++エンジン・コンテナ・量子化方式を使用
  • 英語、ドイツ語、フランス語、スペイン語、イタリア語、オランダ語、ポーランド語の 7言語対応
  • 30秒(16kHzモノラル)までの音声 を端末内で一括処理
  • 言語自動検出 機能、または明示指定も可能
  • 単語ごとのタイムスタンプ と確率値を出力
  • 音声埋め込み(embedding) も取得可能(80msごとに1行)

モデル構造と処理フロー

  • エンコーダ

    • 16kHzモノラル音声を、80ログメルバンド(25msウィンドウ、10msホップ、250-3500Hz)に変換
    • Conv層(128ch, kernel 9, 3段階ダウンサンプリング)で375フレーム/30秒に圧縮
    • Simple Attentionブロック×8 (Needleと共通、非因果型)
  • デコーダ

    • Laddered Simple Attentionブロック×8 (幅512、8q:2kv、3-tap因果畳み込み、Needleと共通構造)
    • 各層で Gated Cross Attention を用いエンコーダ出力を参照
    • ビームサーチ×5 (長さ正規化log確率でスコアリング)
    • キーワードバイアス (Aho-Corasickオートマトンで特定フレーズのlog確率を上昇)
  • 語彙

    • 8,192テキストピース+7言語トークン(言語検出結果もトークンで出力)
    • 最大320トークンまでのトランスクリプト
  • 静音判定

    • 音声クリップのラウドネスを事前計測し、しきい値未満なら認識処理をスキップ

性能比較とベンチマーク

  • Whistle

    • サイズ: 16.9MB
    • 初回トークン出力までの時間 :11.1ms(10秒音声時)
    • デコード速度 :1,319トークン/秒
    • Word Error Rate :LibriSpeech, SPGISpeech, Earnings-22, FLEURS平均で高精度
  • Whisper base

    • サイズ:145.3MB
    • 初回トークン:73.2ms
    • デコード速度:266トークン/秒
  • Moonshine tiny v2

    • サイズ:41.9MB
    • 初回トークン:22.8ms
    • デコード速度:262トークン/秒
  • Whistleは主要ベンチマークでWhisper baseやMoonshine tiny v2を上回る小型・高速・多機能モデル

利用方法・API・ツール連携

  • Needleエンジン でWhistleモデルを直接ロード可能

    • needle --model whistle.cact --audio clip.wav
    • 複数モデル・ツール連携も同一バイナリで実現
    • 例:音声→ツールコールまで一括処理&JSON出力
  • Python API

    • pip install cactus-needle
    • サンプル:
      import needle
      print(needle.transcribe("clip.wav")["text"])
      
    • オプション:word_timestamps=True, keywords=[...], language="de"など
  • C API

    • needle_load, needle_transcribe, needle_embedで全機能提供
    • 17プラットフォーム(macOS, Linux, Android, iOS, Windows ARM, RISC-V, MIPS, ブラウザ, WASI等)向けバイナリ・ライブラリ同梱
  • ソース・モデル配布

    • ウェイトはHugging Faceで公開
    • エンジン・プラットフォーム別フォルダはCactus-Compute/needle3
    • ソースコードはGitHubで公開

Whistleの導入メリット

  • 端末内処理 でプライバシー保護・低遅延
  • 小型・高速 で組み込み機器やモバイルにも最適
  • 多言語・高精度 で幅広い用途に対応
  • Needleとの親和性 でツール連携や音声UI開発が容易
  • クロスプラットフォーム 対応(主要OS/アーキテクチャを網羅)

Whistleと他モデルの比較・選定ポイント

  • Whisper base や Moonshine tiny v2 よりも圧倒的に 軽量 かつ 高速
  • 音声認識精度 もベンチマークで高水準
  • 即時ツール連携 や 埋め込み抽出 など、音声UI開発に必要な機能をワンストップで提供
  • 依存ゼロ・単一ファイル なので、IoTやエッジデバイスにも展開容易

まとめ

  • Whistle は、音声認識の新しい標準となる軽量・高速・多機能モデル
  • 組み込み・モバイル・スマートデバイス 向けの新規開発や既存システムのアップグレードに最適
  • プライバシー・クロスプラットフォーム・ツール連携 重視のプロジェクトに特に推奨

Hackerたちの意見

すごい!英語ではこれがめちゃくちゃ正確だね。壊そうとしたけど、完璧に理解してくれた!ちょっと話がそれるけど、もうそろそろみんなをイライラさせないスペルチェッカーを作るのも簡単になってるはずだよね(Apple、見てるよ!)。

音声認識の課題はバイナリのサイズじゃないと思う。私の経験では、脳卒中後に口がたるんでる84歳のクロアチア人の父が自伝を書こうとする時に理解するのが大変なんだ。先週、Windowsの音声認識を設定してあげたけど、10分で1ページ書けるのを見るのはすごくいいよ。キーボードだと何日もかかるからね。でも、彼が出す音は全部ページに書かれちゃうんだ。

└

お父さんのこと、気の毒に思うよ。一般的な音声認識モデルじゃなくて、ディクテーションモデルが必要だね。そういうモデルは「えーっと」とか「うーん」を無視したり、「象、いや猿が木に登った」を「猿が木に登った」に変えたり、時々句読点を声に出して言うのをサポートしたりするんだ。Geminiチームが最近、これに強いGemini 3.5 Transcribeをリリースしたみたいだよ。APIで使えるよ。

└

いろんな課題があって、それぞれに解決策が必要だよね。私は、Androidの古いGoogleアシスタントが本当に恋しい。Spotifyで聞きたい曲をほとんど確実に再生してくれたから。Geminiはほとんど毎回失敗するし、かなり遅いんだ。実際、これは難しい問題で、人々が聞きたい曲は定期的にリリースされていて、珍しい名前が付いていたり、言葉の順番が変だったりするから、普通のLLMスタイルのツールではうまくいかないんだよね。

└

関係ないけど、あなたのユーザー名大好き!

└

こんな小さいもので、CPUのL3キャッシュに収まるってことは、いろんな目的で常に使えるってことだよね。

└

お父さんのためにしっかりした解決策が見つかるといいね。2年前にスピーチ障害の人向けのSTTを調べてたんだけど、結局は3つの問題に集約されることが多かったんだ。データの不足、話し方の不規則さ、そして翻訳の常に曖昧さ、患者ごとのスピーチパターンの個人差。

└

スピーチからテキストへの課題はバイナリのサイズじゃないと思う。こういう小さいモデルの使い道は、デバイス上でのSTT/TTSをもっとアクセスしやすくすることだよね。プライバシーやレイテンシに敏感な使い方なら重要だけど、品質が犠牲になることもある。私の経験では、これらの小さいTTSモデルは、音声が分布内(西洋のアクセント、高品質の音声、一般的な語彙)だと意外と良いけど、その範囲を超えるとすぐに劣化することが多い。複雑な機能(ダイアライゼーション、多言語、リアルタイムストリーミングなど)にはあまり対応してないことが多い。

最初はこれを「笛からテキスト」って読んじゃった。そっちの方がずっとクールだね。

└

LLMをトレーニングするのに良いプロジェクトだね。https://en.wikipedia.org/wiki/Silbo_Gomero

└

マーベルのヨンドゥみたいだね!

デモでは、話して録音している間の文字起こしのストリーミング出力が見れないのが残念だな。これは、一般的なライブSTTアプリには必須の機能だと思う。

Hacker Newsで議論の続きを見る