Smart Turn Multimodalの紹介

2026年1月14日

人間は毎日、無意識のうちに「いつ話すか」を判断しています。これまで会話AIは主に電話通話に焦点を当ててきたため、入力も音声に限定されがちでした。 しかし、カメラや画面を備えたデバイスに話しかけることが当たり前になった今、私たちは複数のモダリティ(情報の種類)を活用できます。音声AIは、 PipecatLiveKit といったオープンソースのフレームワークの恩恵を受けてきました。 私たちはそれらの取り組みに着想を得て、Pipecatの Smart Turn を音声・映像対応に拡張したフォーク版を公開します。これは、視覚的な手がかりを取り入れて、リアルタイムの発話終了(ターン終了)検出を行うものです。 本リリースは実験的なものです。荒削りな部分や、今後の継続的な変更があることをご理解ください。

課題:沈黙は曖昧である

音声だけに基づくターン検出は、韻律(プロソディ)、文法、そして沈黙を手がかりに、ユーザーが話し終えたかどうかを判断します。 ですが、優れた音声モデルであっても、曖昧な「間」の扱いは難しいものです。 たとえば 500ms の沈黙は、ユーザーが考えているだけなのか、返答を待っているのか、どちらにも解釈できてしまいます。 視覚情報がない場合、システムは会話の途切れを避けるために、保守的なタイムアウト閾値(多くの場合 1000ms 超)を設定せざるを得ず、 その結果、会話の流暢さが損なわれてしまいます。

一方で、視覚的な合図は異なる働きをします。 人は、たとえ完全に沈黙していても、ボディランゲージによって発話の「場」を保つことができます。 たとえば口が開いている、視線を外している、手を挙げている、といった動きです。 Smart Turn Multimodal は、このギャップを埋めることを目指しています。

マルチモーダルエンドポインティングが有効だったケースの例

後期融合アーキテクチャ(Late Fusion Architecture)

Smart Turn Multimodalは後期融合(Late Fusion)のアプローチを採用しています。 音声と映像はそれぞれ別々のエンコーダ系列で処理され、最後のボトルネック層でのみ統合されます。これにより、 事前学習済みの Whisper エンコーダを保ちながら、映像エンコーダが最終的な判断を補正(調整)できるようになります。

2つの分岐(ブランチ)は以下の通りです:

  • 音声ブランチ(Audio branch): Smart Turn v3.2 の Whisper Tiny エンコーダを使用し、8秒間の音声を処理
  • 映像ブランチ(Video branch): Kinetics-400 で事前学習された R3D-18(3D ResNet)エンコーダを使用し、直近32フレーム(約1秒)を処理

映像ブランチは、音声予測を「補正する」ように学習します。 たとえば Whisper が「Ambiguous(曖昧:0.5)」と出した場合でも、映像で口が閉じていることが確認できれば、統合後の出力は「Complete(完了:0.9)」寄りになります。 もしカメラがオフ、または利用できない場合でも、モデルはゼロパディングによって音声のみの推論へ自然にフォールバックできるため、コード変更は不要です。

flowchart LR subgraph Inputs A["Audio Waveform
(8 seconds)"] -->|Log-Mel Spec| B("Whisper Encoder") C["Video Frames
(Last 32 frames)"] -->|"Resize 112x112"| D("Video Encoder
R3D-18") end subgraph FeatureExtraction ["Feature Extraction"] B -->|Context Pooling| E["Audio Embedding
384-dim"] D -->|Linear Projection| F["Video Embedding
256-dim"] end subgraph LateFusion ["Late Fusion"] E --> G{"Concat"} F --> G G -->|"Fused Vector
640-dim"| H["Fusion Layer
(Linear + GELU)"] end subgraph Output H -->|Project back to 384| I["Classifier"] I -->|Sigmoid| J(("Turn End
Probability")) end style B fill:#e1f5fe,stroke:#01579b,stroke-width:2px style D fill:#fff3e0,stroke:#ff6f00,stroke-width:2px style H fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px style J fill:#fce4ec,stroke:#880e4f,stroke-width:2px

Smart Turn Multimodalアーキテクチャ:音声(Whisper)と映像(R3D-18)ブランチが融合層で収束

コンポーネントの詳細

音声エンコーダー(Whisper Tiny)

音声ブランチでは、Whisper Tiny のエンコーダ部分を使用します。 8秒間の音声を、80チャンネルの log-mel スペクトログラム(Melバンド80本、約400タイムステップ)へ変換します。 バックボーンは、68万時間の音声で事前学習された Transformer Encoder です。 平均プーリング(mean pooling)の代わりに、(Smart Turn v3.2 で採用されている)クロスアテンション・プーリング(cross-attention pooling)を使い、 発話を表す 384次元の単一コンテキストベクトルを抽出します。

映像エンコーダー(R3D-18)

映像ブランチでは、Kinetics-400 データセットで事前学習された 3D ResNet-18(R3D-18)を使用します。 2D CNN と異なり、3D畳み込みは時空間的な特徴(spatiotemporal features)を捉えることができるため、 モデルは「静止した口が開いている状態」と「口を閉じる動き」を区別できるようになります。

  • 入力: 112×112解像度の32フレーム(約1秒の映像)
  • 出力: 512次元の特徴量を融合(fusion)のために256次元に投影
flowchart TD Input["Input Tensor
(Batch, 3, 32, 112, 112)"] -->|"3D Conv"| L1["Layer 1
Spatiotemporal Features"] L1 -->|"ResNet Blocks"| L3["R3D-18 Backbone"] L3 -->|"AvgPool3D"| L4["Raw Features
(Batch, 512)"] L4 -->|"Linear Projection"| Output["Video Embedding
(Batch, 256)"] style Input fill:#fff3e0,stroke:#ff6f00,stroke-width:2px style Output fill:#fff3e0,stroke:#ff6f00,stroke-width:2px

R3D-18映像エンコーダー:時空間特徴(時間経過に伴う動き)を処理

融合層(Fusion Layer)

私たちは、連結(concatenation)に基づく late fusion を使用します。 音声エンコーダは 384次元の埋め込み(embedding)を生成し、映像エンコーダは 256次元の埋め込みを生成します。 これらを連結して 640次元のベクトルにし、線形層・LayerNorm・GELU 活性化を通して 384次元へ射影(project)します。 その結果は分類器(classifier)に入力され、sigmoid によって ターン終了の確率が出力されます。

もし映像が欠けている場合(カメラがオフなど)、映像埋め込みはゼロテンソルに置き換えられます。 この「モダリティ・ドロップアウト(modality dropout)」により、コード変更なしでカメラ不具合に対して頑健なモデルになります。

flowchart TD A["Audio Embedding
e_a: 384-dim"] B["Video Embedding
e_v: 256-dim"] M{"Missing Video?"} M -- Yes --> Z["Zero Tensor
0: 256-dim"] M -- No --> B A --> C{"Concatenate"} Z -.-> C B --> C C -->|"Combined: 640-dim"| D["Linear Layer
640 -> 384"] D --> E["Layer Norm"] E --> F["GELU Activation"] F -->|"h_fused: 384-dim"| G["To Classifier"] style C fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px style G fill:#f3e5f5,stroke:#4a148c,stroke-width:2px style Z stroke-dasharray: 5 5

融合メカニズム:連結により映像特徴が音声の確信度を調整

学習

私たちは、音声モデルが学習した特徴を失わないように、2段階の学習プロセスを採用しています:

  • ステージ1(Alignment): 音声エンコーダーと分類器を凍結。映像エンコーダーと 融合層のみ学習可能。映像ブランチは音声予測を正しい方向に調整する埋め込みを出力することを学習。
  • ステージ2(Joint fine-tuning): ネットワーク全体を解凍し、 低い学習率で学習。これにより音声ブランチはコア機能を失うことなく、視覚的コンテキストにわずかに適応。

学習データ

学習にはMetaのCasual Conversations データセットのサブセットを使用しています。 データは、非会話的な要素を取り除くためにクリーニングされています(例:人が指示されて動いたり、感情表現をするよう求められている動画など)。

使用方法

このマルチモーダルモデルは、推論時に音声テンソルと映像テンソルの両方を必要とします。 映像が利用できない場合は Noneを渡すと、モデルが自動的にゼロテンソルを使用し、内部的に音声のみの挙動へフォールバックします。

モデルの実行または学習については、 Smart Turn Multimodal GitHubリポジトリ をご覧ください。

現在の制限事項

これは実験的リリースです。既知の制約は以下の通りです:

  • データセットの多様性: 現在は主に、台本のない独白(unscripted monologues)が中心の1つのデータセットで学習しています。 多様な会話スタイルに対する汎化については、まだ検証中です。
  • VADトリガー: このモデルは、VAD(Voice Activity Detection)によって検出された沈黙をきっかけに起動します。 しかし現実には、人間は沈黙が起こる前にターンの終わりを予測することも多く、今後の課題です。
  • 後期融合: フュージョンはボトルネック部分でのみ行われます。 これにより音声バックボーンは保たれますが、早い段階でのクロスモーダル(音声×映像)の相互作用は制限されます。

謝辞

以下の方々に感謝いたします:

  • オープンソース音声AIエコシステムを牽引するPipecat/Daily
  • Casual Conversationsデータセットを提供するMeta