Null Test v0.1:10の音声強調エンジン、18条件——プール平均でrawに勝ったものは皆無
ハーネス、データセット、設定、そして今回は結果です。10の強調エンジンを、WER、誤りの分解、VAD、コストの観点で生の対照に対して採点しました。プールしたWERではrawが勝ちました——ただし18の個別条件のうち11では少なくともひとつのエンジンがrawに勝ち、挿入は減るどころか増えました。
2026年10月20日更新:別の実験で、合成したライブ会話を使い、私たちのv8_2をai-coustics Quail VF 2.2 Sと比較しました。faster-whisper base.enでは互角、Gemini Liveの入力書き起こしではv8_2が先行し、どちらが先行するかは条件で決まります。ライブ会話をご覧ください。この記事の内容は何も変わりません。
2026年8月14日更新:テレフォニーのキャリア条件5つを追加して行列を再生成し、13条件から18条件になりました。絶対値は動きましたが、順位は動いていません。以下のすべての数字は公開済みのbenchmark.jsonから引用しています。
本日、私たちはNull Test v0.1を公開します——ハーネス、データセットのマニフェスト、設定、ルール、そして最初の完全な結果一式です。これは、認識器の前に音声強調(speech enhancement)エンジンを置いたときにSTT精度に何が起きるかを、18の音響条件にわたって、勝つことを許された帰無仮説の対照に対して測定するものです。
プールした数字では、その対照が勝ちました——そしてその下にある条件別の内訳にこそ、実際のエンジニアリングが宿っています。
ヌルテスト(null test)はオーディオエンジニアリングの正典的な測定です。処理済みの信号を参照から差し引けば、残るものはプロセッサがやったことそのもの——損傷も含めて——です。それがこのプロジェクトの野心のすべてであり、だからこの名前なのです。
なぜこれが存在するのか
公開されている主張は互いに相容れません。Krispはおよそ46%の単語誤り率(WER)削減を謳います。ai-cousticsはおよそ43%。独立した研究(arXiv:2512.17562)は、テストした40構成すべてで強調済み音声が生音声より悪いスコアだったと報告しています——ただしMetricGAN+のみ、医療音声、意味的WERでの話です。AssemblyAIはこれを引用しつつ、別途、Krispの出力を自社のSTTに与えるとWERがほぼ倍になる一方、音声区間検出(VAD)の誤トリガーは約3.5x削減されたと報告しました。Deepgramは強調は精度を損なうという立場を公表しており、付随するデータを私たちは見つけていません。誰ひとり、コーパスも条件セットも設定も対照も共有していません。この不一致の長い版はノイズ抑制は本当にSTTの役に立つのか?にあります。
実行した内容
| 認識器 | faster-whisper base.en、CTranslate2 int8 CPU、グリーディデコーディング |
| VAD | Silero VAD、しきい値0.5、512サンプルブロック |
| テストセット | 話者10人、180クリップ、約1406秒の音声、シード20260101 |
| 参照語数 | 条件あたり約190語、バックエンドあたり合計3420語 |
| 条件 | 18 |
| バックエンド | 12(raw、パススルー対照、強調器10) |
| ホスト | Apple M1 Max、onnxruntime 1.28.0、intra-opスレッド1本に固定 |
18条件の内訳:clean、SNR -5、0、5、10、20 dBの広帯域ノイズ、babble_snr5、0 dBと5 dBの競合話者、reverbとreverb_snr10、そしてテレフォニー7条件——telephony(G.711 µ-lawの往復)、telephony_snr10、さらにA-law、G.722、12 kbpsのOpus、3%と10%のバースト性パケット損失です。
強調器10種の内訳:GTCRN(MIT)、FastEnhancerの5変種T/S/B/M/L(MIT)、2構成のDeepFilterNet3(MITまたはApache-2.0)、そしてai-cousticsの2モデル、Quail LとQuail VF 2.2 L——この2つはライセンス供与されたSDK経由で実行するプロプライエタリな参照ベースラインです。
この行列に私たち自身のモデルは入っていません。 ChamberとClearlineは、同じルールの下で、いままさに全員を打ち負かした同じ対照に対して、この行列の行になります。出場者より先に審判を公開すること。それがこの順序の眼目でした。
結果
18条件すべてをプールした結果です。
| バックエンド | WER | 挿入 | 削除 | RTF | レイテンシ |
|---|---|---|---|---|---|
| Raw(処理なし) | 14.77% | 101 | 60 | — | 0 ms |
| ai-coustics Quail L | 15.56% | 126 | 57 | 0.124 | 30 ms |
| ai-coustics Quail VF 2.2 L | 18.10% | 161 | 75 | 0.076 | 30 ms |
| GTCRN (MIT) | 20.26% | 210 | 40 | 0.050 | 16 ms |
| FastEnhancer-L (MIT) | 20.44% | 159 | 107 | 0.376 | 25.8 ms |
| FastEnhancer-M (MIT) | 22.40% | 217 | 83 | 0.110 | 22 ms |
| FastEnhancer-T (MIT) | 22.46% | 145 | 109 | 0.013 | 16 ms |
| DeepFilterNet3 | 35.18% | 380 | 197 | 0.133 | 100 ms |
プールしたWERでrawに勝った強調器はありません。 最良はai-coustics Quail Lの15.56%で、rawの14.77%に対して約0.8ポイント悪く、このサンプルサイズでは負けではなく同点と呼ぶべきものです。その下はすべて5ポイント以上の負けで、そちらは同点ではありません。
プールした数字が答えるのは「強調をデフォルトでオンにすべきか」であって、それ以外はほとんど何も答えません。行動の根拠にすべきは以下の条件別のセクションであり、そこは別のことを言っています。
挿入は減るのではなく、増えました。 rawは101件でした。GTCRNは210件、DeepFilterNet3は380件を生みました。これは、強調が幻覚された単語を取り除くというベンダーの主張の真逆であり、立ち止まる価値があります。挿入とは潰れた単語のことではなく、誰も言っていない単語を認識器が出力することです。私たちの読みでは、抑制器が残すもの——ミュージカルノイズ、ゲートされた無音、塗りつぶされた過渡音——のほうが、取り除かれたノイズよりも「音声としてデコード可能」なのです。
GTCRNの誤り分解がその論点を示します。挿入210件に対して削除はわずか40件、rawは101件と60件でした。このモデルはあなたの機能語を食べているのではなく、誰も発していない単語を足しています。正反対の失敗モードであり、ひとつのWERの数字は、あなたがどちらを買ったのかを隠します。だからこそ、すべてのセルはS・D・Iを別々に公開しているのです。
ベンダーの主張が実際に成立する場所
プールした数字で止まることは、私たちがベンダーを批判しているまさにそのことをやるのと同じです。強調は特定の条件で現実の差をつけて勝ちます——18条件中11で、少なくともひとつのエンジンがrawに勝ちました——そしてそれは予測どおりの条件です。ノイズや競合する声が本当に音素手がかりを破壊している場所です。
最も明瞭なのは話者分離(speaker isolation)です。ai-coustics Quail VFはVoice Focusモデルで、その仕事は主要話者を分離し他の声を退けることです。5 dBの競合話者条件では挿入を19件から10件に、WERを26.3%から20.5%に削減しました。5 dBの喧騒条件では24.7%から20.5%、挿入は10件から7件に減少。これらは、ここでどの強調器が記録したものより強い結果です。低SNRの広帯域ノイズも同じ形を示し、0 dBでは10エンジン中8つがrawに勝ち、最良は4.7ポイント差でした。
rawに勝つものが何もなかった7条件も、同じだけの情報を持っています。残響のある2条件と、テレフォニーのキャリア5条件です。その5つのうち4つでは、エンジンが達成できる最良が何もしない場合との正確な同点であり、それ自体がひとつの答えです。
そのどれも支持しないのが、一般的な主張です。プールするとQuail VFはrawより3ポイント以上悪くなります。クリーンな素材、残響のある素材、狭帯域の素材の上でも動作し、そこでは情報を取り除くことしかできないからです。強調は音声が本当に悪い場所で割に合い、そうでない場所ではコストになります。そして単一のスカラー——私たちのものも含めて——は、あなたのトラフィックがその線のどちら側にあるのかを隠します。
VAD:誰もが引用する指標はほとんど動かず、重要な指標は大きく動く
同じ実行で、すべてのストリームに対してSilero VADを採点しました。プールしたVADのF1は、rawの0.950に対して、最良の強調済みストリームで0.947。VADのF1で強調を採点すれば、何の効果もないと結論することになります。
誤警報率は別の物語です。そして誤警報こそ、偽のバージイン(barge-in)の正体です。
| 条件 | 誤警報率(raw) | 強調後 | エンジン |
|---|---|---|---|
| 5 dBの喧騒 | 97.7% | 68.2% | FastEnhancer-L |
| 5 dBの競合話者 | 58.1% | 37.2% | ai-coustics Quail VF |
5 dBの喧騒下では、rawストリームは実質的にすべての非音声フレームで誤警報を出します——ゲートとして機能しなくなったVADです。強調はこれを68.2%まで下げます。依然として悪いものの、30ポイントの改善です。
つまり同じ実行が、強調はプールWERで5ポイントのコストになり、誤警報率を3分の1削ってくれると言っているのです。これは矛盾ではなく、アーキテクチャです。強調済み音声はターン検出器へ、生音声は認識器へ。私たちはこれをSDKのデフォルトとして出荷しており、論拠は分割パイプラインにあります。
テレフォニー:助けになった強調器は皆無、いくつかは大きな害
G.711 µ-lawの往復では、rawのWERは5.8%です。これに対して、ai-coustics Quail Lは+1.6ポイント、Quail VFは+2.6、GTCRNは+3.2、FastEnhancer-Tは+6.8、DeepFilterNet3は+9.5。同じ往復にSNR 10 dBのノイズを加えると、rawは10.5%で、差は+0.5から+9.5に広がります。
テレフォニー音声で意味のある改善を生んだ強調器はひとつもなく、いくつかは大きな劣化を引き起こしました。 rawをわずかに下回る行が2つありますが、どちらも結果と呼べるものではありません。FastEnhancer-Sはクリーン行で-0.5——参照語190語では、何もしない場合から1語以内——で、ノイズ行では+3.7。Quail VFはノイズ行で-1.1、クリーン行で+2.6。どちらの向きにも、同点です。
今回の更新で追加されたキャリア5条件は、同じことをより直截に言います。A-law、G.722、12 kbpsのOpus、3%のバースト性損失では、どのエンジンも達成できる最良はrawとの正確な同点で、10%の損失ではそこに届くものすらありません。最悪のセルは深刻です——FastEnhancer-MがA-lawで記録したのは49.0%。rawは7.4%で、rawでは2件だった挿入が61件になっています。コンパンディングによる量子化ノイズはこのモデルの想定の外にあり、モデルは幻覚で応答します。
これが重要なのは、通話量があるのはテレフォニーだからであり、この形は偶然ではないからです。DNS Challenge——公表されている大半のノイズ除去モデルがそれに合わせてチューニングされているベンチマークシリーズ——には、狭帯域トラックが一度も存在しませんでした。この分野が16 kHzと48 kHzに最適化されたのは、採点されたのがそれだったからです。
ただし、大きな注釈つきで重要です。基本のテレフォニー条件でrawのWERが5.8%ということは、これは簡単な条件であり、本番の電話デプロイを壊しているものではありません——ただし書きを参照してください。ネイティブな狭帯域エンジンとリサンプル往復対照を含む、独立した8 kHzエンドツーエンド実験まで含めた狭帯域の完全な物語は、音声AIが実際に壊れるのは8 kHzの世界にあります。その短い版はこうです。ネイティブ8 kHzは同一ベンダーの「リサンプルして祈る」に0.7ポイント差で勝ち、そして手つかずの通話者音声には何ひとつ勝てません。
ただし書き、全文
限界を伴わない結果は広告です。これらは上のすべての数字に添えられます。
- 単一の認識器。 faster-whisper
base.en。別の認識器なら別の絶対値になります。ハーネスはDeepgramとAssemblyAIをサポートしているので順位は再確認でき、私たちを信用していない誰かにそれをやってほしいと思っています。 - 条件あたり約190参照語、プールで3420語。大きな効果を分離するには十分ですが、WERの1〜2ポイントを解像するには足りません。1語は条件あたり約0.5ポイント、プールでは0.03に相当します。raw対Quail Lの差は同点として読んでください。その下の5〜20ポイントの差は同点ではありません。
- DeepFilterNet3はブロックオンラインのアダプタ経由で測定しています。 公開されているONNXエクスポートはどれも再帰状態テンソルを持たず、公開済みの重みではフレーム単位のストリーミングが不可能だからです。同モデルの35.18%は品質の下限でありコストの上限で、100 msのレイテンシはネイティブのRustランタイムが達成する値をはるかに上回ります。この一文を添えずにこの数字を引用しないでください。また、このモデルは48 kHzで動作しており、16 kHzの素材を48 kHzへアップサンプルして与えています——設計された条件ではなく、正直なVoIPの状況です。
- ai-cousticsの行はプロプライエタリなベースラインで、ライセンス供与されたSDK経由で実行しています。参照点であって、私たちの出荷コードパスでは決してありません。
- ライセンスが再利用を制約します。 ESC-50のノイズはCC-BY-NC-3.0なので、該当条件は評価専用です。LibriSpeechはCC-BY-4.0で、喧騒条件と競合話者条件はLibriSpeechのみから構築されているため、NC制約はかかりません。
- onnxruntimeはintra-opスレッド1本に固定、逐次実行。RTF列は1コア上の1ストリームであり、ファンアウトではありません。
- 英語のみ、バッチ採点、聴取パネルなし、ターンレベルの指標なし。 強調はブロックごとに駆動され状態はブロック間で引き継がれますが、認識器は完全な発話で採点され、VADはフレームレベルです。「誤ったバージインの減少」を製品指標にするには、ラベル付きのターン境界と合意された定義が必要です。
- テレフォニー条件は以前より現実的になりましたが、それでも電話の通話ではありません。 現在はA-lawとG.722のレッグ、12 kbpsのOpus、減衰リピートによる隠蔽を伴う3%と10%のバースト性二状態パケット損失を含みます——デコーダに有利に働く独立なランダム損失でも、損害を過大に見せる無音埋めでもなく、です。依然として欠けているもの:非線形なスピーカー歪みを伴う音響エコー、ハンドセット側の抑制、AMR-WBまたはEVSのレッグ。エコーは私たちが最も気にかけているギャップです。私たち自身のロードマップのうちパッチでは閉じられない部分の背後にある劣化要因だからです。
- これら18条件は、8 kHzのキャリアレッグの後、16 kHzで保存されています。そのため各バックエンドは自身のネイティブレートでそれらを見ます。正真正銘の狭帯域実験——60クリップ、終始8 kHz、何もリサンプルせず、ネイティブ8 kHzエンジンを含む——は別の成果物であり、参照語1,140語という独自の解像度限界を持ち、そこでは1語が0.09ポイントに相当します。
攻撃できる程度に詳細な方法論
ストリーミングは正直にシミュレートされます。 すべての強調器は、宣言されたブロックサイズでブロックごとに駆動され、状態はブロック間で引き継がれ、宣言されたアルゴリズム的レイテンシを超えるルックアヘッドはありません。オフラインでのファイル全体処理は強調器に有利に働き、ライブのエージェントが得るものではありません。レイテンシはアルゴリズム的レイテンシ——フレーム+ルックアヘッド——として報告されます。これはモデルの性質であって、私たちのラップトップの性質ではありません。
RTFは引用ではなく、測定します。 固定された単一コア、ウォームアップパスは破棄、ハードウェア文字列はすべての行に記録。実時間の4xでWERに勝つモデルは出荷の選択肢ではないので、精度の数字とコストの数字は一緒に旅をします。
ノイズは混合済みを調達するのではなく、自分で混合します。 クリーンな音声に、アクティブな発話領域のみで計算された目標SNRでノイズを加えます。先頭と末尾の無音が比率を歪めないようにするためです。残響は実測の室内インパルス応答との畳み込みです。テレフォニーは実際のコーデック往復——8 kHzへリサンプル、G.711 µ-lawエンコードとデコード、リサンプルで戻す——であり、チャネルの代役を務めるローパスフィルタではありません。実際のコーデックレッグであり、それでも実際の電話ではありません。省かれているものは上のただし書きが列挙しています。
テキスト正規化は固定され、公開されています。 WERは、すべての仮説と参照に同一に適用されるひとつの正規化器——小文字化、句読点除去、数字の展開、短縮形の処理——の後の(S + D + I) / Nです。正規化はWERを複数ポイント動かし得るので、リポジトリでバージョン管理され、すべての行に記録されます。
決定性と、発話単位の出力。 ノイズ選択、SNRの抽選、RIR選択のシードは固定。データセットのマニフェストはファイルごとのSHA-256でコンテンツアドレス化され、取得時に検証されるため、同じコミット上の同じ設定は同じ行を生みます。すべての実行は集計値と並んで発話単位の仮説と参照も出力するので、誰でも再計算し、別の切り口で集計し、ある結果を担いでいる10ファイルを見つけられます。集計値しかないベンチマークは検証できません。この分野がここに至った経緯の大半は、それです。
これを審判たらしめるルール
- raw対照は常に行列の中にあり、勝つことを許されています。 v0.1では勝ちました。
- 私たちは自分自身を、同じルールの下、同じ表の中で採点します。 ChamberとClearlineは行になります。別建てのマーケティングページにはなりません。
- すべてのセルを公開します。私たちが負けるセルも含めて。 結果を見た後に条件が落とされることはありません。
- 設定はリポジトリにあります。 自社エンジンの設定が不適切だとベンダーが考えるなら、修正はYAMLファイルへのプルリクエストであり、私たちは再実行して再公開します。
- 反論権。 メンテナーやベンダーは誰でも、別の設定での再実行を要求できます。私たちは両方を公開します。
- ライセンスは行ごとに明記します。 ベンダーの規約がベンチマーク結果の公開を禁じている場合、私たちはそのセルがブロックされていると述べ、黙って省くのではなく理由を名指しします。
出力フォーマット
完全なドキュメントは/benchmarkにあります。あるバックエンドのサマリーはこうです。
{
"id": "gtcrn",
"label": "GTCRN",
"license": "MIT",
"wer": 0.2026,
"werSubstitutions": 443,
"werInsertions": 210,
"werDeletions": 40,
"werRefWords": 3420,
"vadF1": 0.9472,
"vadFalseAlarm": 0.1638,
"rtf": 0.0498,
"latencyMs": 16.0
}
各バックエンドは、条件ごとに同じ分解を収めたconditionsオブジェクトも持ちます——興味深い不一致が住んでいる場所です。
自分で実行する
git clone https://github.com/anecho/nulltest
cd nulltest
uv sync
# fetch and verify the dataset against the content-addressed manifest
python -m nulltest.data fetch --manifest data/manifest.json
# one condition, two backends, one recogniser — a few minutes on a laptop
python -m nulltest.run \
--condition babble_snr5 \
--backend gtcrn --backend raw \
--stt faster-whisper:base.en \
--out out/
python -m nulltest.report out/ --format md
エンジンの追加はファイル1つです。ベンチマークが会話する相手は、常にこのインターフェースだけです。
class Enhancer(Protocol):
id: str
sample_rate: int
block_size: int # samples per process() call
algorithmic_latency_ms: float
def reset(self) -> None: ...
def process(self, block: np.ndarray) -> np.ndarray:
"""block: float32 mono, shape (block_size,), range -1 to 1. Returns same shape."""
あなたのエンジンがresetとprocessを実装していれば、行列に入れます。とりわけ、私たちが引用した主張を公表しているベンダー自身に、自前のアダプタと設定を提出してほしいと思っています。
次に起きること、そして商業の部分
v0.2では、Onset経由のターンレベルのエンドポインティング指標、確定までのレイテンシを含むストリーミングSTT、順位を信頼ではなく検証の対象にするための2つ目・3つ目の認識器、多言語条件、そして非線形なスピーカー歪みを伴うエコー条件を追加します。ChamberとClearlineは、採点に値するものを持ったときに行列に入ります。
最後の点については率直に。ここでの1行はプレスリリースではなく、読む価値が生まれる前にそれを公開するつもりはありません。アーキテクチャとコーパスの実験は、上の表を生んだものと同じホールドアウト条件に対して進行中であり、Clearlineはその行に値したときに行列に入ります——その名に値するテレフォニー条件の上で、Clearlineに勝つことを許された対照に対して測定されて、です。
商業の部分を、一度だけ、飾らずに述べます。このベンチマークは製品ではありません。ベンチマークには買い手もリテンションもありません——リーダーボードを更新契約する人はいないのです。私たちが売るつもりのものはClearline、すなわちテレフォニーの音声経路です。ネイティブ8 kHzの主要話者分離、残留エコー抑制、分単位の課金、即時のAPIキー、営業電話なし。v0.1がそれについて語ることを私たちに許すのが正確に何であるかに、注意してください。棚の上の何ひとつ狭帯域チャネルでは役に立たないこと、そして8 kHzで話者分離を出荷している者がそもそも誰もいないことです。私たちのもののほうが良いとは、まだ言っていません——その数字は段落ではなく表に属し、測定されたときにそこへ行きます。Null Testは、何を作るべきかを私たちが知った方法であり、私たちがそれについて嘘をついていないかをあなたが確かめる方法です。
ハーネスとissue:github.com/anecho。完全な行列:/benchmark。クイックスタート:/docs。条件、エンジン、認識器の追加を望むなら、issueを開いてください——それが私たちの体裁を悪くすると予想している場合も含めて。