エンジニアリング2026-02-12公開·11分で読めます
スマホで話者ダイアライゼーション:ディープダイブ
4ワットの電力枠で、音声を一秒もアップロードせず、リアルタイムにエンドツーエンドの話者ダイアライゼーションをどう動かしているか。
問題
ダイアライゼーションは「誰がいつ話したか」に答える。それは「文字の壁」と「会話」を分けるものだ。ダイアライゼーションがなければ「出しちゃおう」は誰のものでもないが、あれば固有の名前に着地し、アクションアイテムになる。
パイプライン
- VAD(音声区間検出) —— 後段すべてのゲート。実音声があるときだけサイクルを使う。私たちのVADはlog-mel特徴上を10msごとに回る200KBのCNN。
- 話者埋め込み —— 有声区間ごとに固定長192次元ベクトルを抽出。ECAPA-TDNN系を12MB int8まで蒸留したモデル。
- オンラインクラスタリング —— 修正付き凝集型。新しい証拠で過去ラベルを更新する。
- スムージング —— 400ms未満の短い切替は併合し、UIのちらつきを防ぐ。
モバイルで何が難しいか
- 埋め込みモデルが、ASRモデルとLLM要約と同じメモリ枠で同居できるほど小さい必要がある。
- クラスタリングは逐次でなければならない——毎ステップで会議全体を再クラスタはできない。我々はコサイン距離による定数メモリのオンライン凝集クラスタリングを使う。
- ラベルが修正されてもUIはちらついてはいけない。テキスト差し替えではなく、200msのクロスフェードでラベル変更をアニメーションする。
- 重なり発話は単一ラベル仮定を壊す。そうした区間は支配話者でラベル付けし、セグメントを「overlap」とマークして、下流の要約に重みを下げさせる。
最終形
12MBの埋め込みモデル、6秒更新窓のストリーミングクラスタリング、ラベル変更をジャンプではなくアニメーションで見せる転写ビュー。iPhone 15 Proで初ラベル中央値950ms、Pixel 8aで1.6s。
まだ痛いところ
- 似た声——同一音域、同一アクセント、同一性別——は最初の30秒ほど埋め込みを惑わせる。UIに「声を学習中」のヒントとして出している。
- 雑音室のクロストークでは急激に劣化する。端末上の小さな音源分離前段を試している。