Hugging Face と Cerebras、Gemma 4 の音声対話を人と話すように滑らかに

Doubao や GPT-Live とは土俵が違います。あちらのモデルは借りるだけ。こちらは 4 つの工程すべてが Apache 2.0 で、商用利用も改変も自分のマシンへの持ち帰りも自由です。代わりに、会話のテンポでは勝てません。
著者:Hugging Face Blog07-21 · 12 分で読了⚑ 公式PR · 立場に注意
深掘り · 小互の解説
1 分でわかる
  • 今の音声 AI は頭が悪いのではなく、遅いのです。話し終えてから数秒待たされ、人と話している感じがしません。
  • Hugging Face と Cerebras は、いちばん遅い工程を超高速な推論ハードに差し替えました。毎秒 1851 字を出力し、一般的な GPU の 35 倍です。
  • ただし Doubao、GPT-Live、Gemini Live はどれもエンドツーエンドの全二重。聞きながら話せて、声色まで拾います。こちらは 4 段リレーの半二重で、テンポでは及びません。
  • 価値は別のところにあります。4 段すべてがオープンソースで差し替え可能。丸ごと自分のマシンに持ち帰ってオフラインで動かせ、途中のテキストも手に入ります。
  • テンポ差を埋めるため、話し終わる前にフライングして答えを考え、外したら全部やり直します。標準の音声認識はヨーロッパ系 25 言語のみで、日本語や中国語は別途設定が必要です。
⚑共同発表による内容です。速度の数値は先方が引用した第三者測定、仕組みの詳細は公開リポジトリのソースコードから。
課題

音声 AI のボトルネックは今、速度

モデルの実力はとっくに十分で、答えも正しい。体験を壊しているのは遅延です。話し終えてから数秒、無音が続く。往復のたびにこれでは会話がぎこちなく、人と話している気がしません。

やっかいなのは、速いときと遅いときがあることです。10 回のうち 9 回は 1 秒ちょっと、10 回目だけ 3 秒。聞こえていないのかと思ってもう一度言うと、ふたりで同時に話し出す。エンジニアリングで測るのはまさにここです。100 回の応答のうち、いちばん遅い数回がどれだけ遅いか。これを P95 レイテンシと呼びます。平均値がきれいでも意味はなく、引っかかる感覚はその数回が生んでいます。

たとえるなら

反応がワンテンポ遅い相手との電話です。頭は悪くないし答えも合っている。それでも一言ごとに空く数秒のせいで、普通に会話できません。

アプローチ

いちばん遅い工程を丸ごと差し替えた

まず Cerebras が何者かをはっきりさせます。そうしないと「35 倍」という数字の真偽を判断できません。

AI チップの会社ですが、NVIDIA とはやり方が違います。他社はウェハー 1 枚を数百個のチップに切り出してつなげて使う。この会社は切らず、ウェハー 1 枚をそのまま巨大な 1 個のチップにします。利点は、データをチップ間で行き来させずに済むこと。モデルの重みをオンチップメモリに直接置けるので、読み出しが格段に速くなります。学習には向きませんが、推論——つまり学習済みモデルに文字を吐かせる用途では非常に高速です。ここ数年の商売も、その速度を売ることが中心です。

音声 AI は、あなたの声を聞いてから返事を発するまでに 4 つの工程を通ります。いちばん遅いのは真ん中、答えを考える工程です。前後の 3 つがどれだけ速くても、ここに足を引っ張られます。

Hugging Face と Cerebras は、この工程を Cerebras の推論ハードに任せました。モデルは Google DeepMind がオープンウェイトで公開した Gemma 4 31B です。

① 発話の検知 Silero VAD v5 ローカル ② 音声を文字に Parakeet TDT ローカル、6 種から選択 ③ 答えを考える 最遅、遅延の元凶 Gemma 4 31B Cerebras 上で実行 互換サービスに差し替え可 ④ 文字を読み上げ Qwen3-TTS ローカル、5 種から選択 あなたが話す AI が答える

4 つの工程はそれぞれ別スレッドで動く。真ん中だけが標準でネットワーク越し、あとの 3 つはローカル

Cerebras
1851
一般的な GPU 環境
≈ 53

単位は毎秒の出力字数。1851 は Artificial Analysis の測定値。一般的な GPU 環境の欄は「35 倍」から逆算した目安値

35 倍になれば、たまに起きる大きな引っかかりも消えます。これが P95 レイテンシ改善の直接の理由です。答えを考える工程の所要時間が極小になれば、パイプライン全体のばらつきも自然に小さくなります。

ついでにモデルの「思考」もオフにしています。接続コマンドに --responses_api_reasoning_effort none が入っているのがそれです。同じモデルでもコードを書くときは思考を入れたほうが賢い。会話では、切らないと話す速さに追いつけません。

公式の実機デモ。返しのテンポを聞いてみてください。出典は Hugging Face ブログの付属素材

Gemma 4 31B は当サイトで 2 度取り上げました。今回は別の顔で登場します——オープンソースのパイプラインから、いつでも外して差し替えられる「脳」として。

関連記事
Gemma 4 技術レポート:オープンモデルが「小さいパラメータ + 思考 + 省メモリ」で巨大モデルに挑む
この「脳」自体がどう作られたか。31B がなぜこのパイプラインを支えられるのかは、この記事から。
関連記事
LiveKit が Gemma 4 31B を最適化、リアルタイム音声で GPT-4.1 より 5 倍速・コスト 6 分の 1
同じモデルで同じくリアルタイム音声を狙いつつ、LiveKit は推論を自前で最適化する道を選びました。この 4 段リレー型と読み比べる価値あり。
背景

あちらのモデルは持ち出せない、こちらは持ち出せる

この技術の価値を理解するには、まず Doubao や GPT-Live とは土俵がまったく違うと知る必要があります。あちらが競うのは「どれだけ人らしく話せるか」。こちらが競うのは「そのモノが誰のものか」です。

まずあちら側。リアルタイム全二重の音声はもう珍しくありません。Doubao の音声モデルは 2.0、3.0 の頃からリアルタイム双方向対話に対応し、今年 4 月にはネイティブ全二重の Seeduplex をアプリ全体に展開。OpenAI は 7 月に GPT-Live を発表し、こちらが話している最中から応答します。Gemini の Live API はもっと直接的で、音声が入って音声が出る。認識・大規模モデル・合成という 3 工程が途中に存在しません。

この種のモデルには、生まれつき会話のリズムがあります。聞きながら相槌を打てるし、相手が言葉を探して黙っただけで、まだ割り込むべきでないことも判断できます。Gemini 側には Proactive Audio というスイッチがあり、オンにするとモデル自身が話すべきかを決め、ずっと黙って聞き役に回ることもできます。ByteDance が Seeduplex を公開したときの数字では、誤った割り込みが半減、会話のかぶりが 40% 減となっています。

Hugging Face のこちらは従来型です。4 工程のリレーで、認識・思考・合成がそれぞれ 1 区間を担当します。半二重なので、同じ瞬間に聞くか話すかのどちらかしかできません。こちらが割り込めば黙りますが、話している最中に「うん」と相槌を打つことはできません。

いちばん本質的な差

音声は第 2 工程でただのテキストに変換されます。あなたの抑揚、ためらい、笑い、焦り——この時点で全部消え、後ろの「脳」が受け取るのは 1 行の文字だけです(Gemma 4 31B 自体も音声を扱いません)。エンドツーエンドのモデルは音声を直接聞くので、笑っているのか焦っているのかがわかります。

ですから「人らしく話す」点では Doubao や GPT-Live に敵いません。しかもこの差はアーキテクチャが決めているので、埋めきれません。

ただし勘定にはもう半分あります。あちら 3 社がどれだけ上手に話せても、あなたは借りているだけです。モデルは相手のサーバーにあり、あなたが叩くのは API。ネットが切れれば終わりですし、値上げや規約変更、機能の停止があっても従うしかありません。こちらは逆で、モノがあなたのものになります。

では強みはどこか

「モノがあなたのもの」を具体化すると、1 枚のライセンスに行き着きます。このパイプラインの 4 工程は、真ん中の脳である Gemma 4 31B も含めてすべて Apache 2.0。商用利用も、改変も、再配布も、誰の許可も要らないという意味です。

実際に何が手に入るのか、4 つあります。

丸ごと自分のマシンへ

4 工程すべてが Apache 2.0 のオープンソースで、うち 3 つは標準でローカル動作。残る 1 つも llama.cpp で小型 Gemma 4 をホストすれば手元に引き戻せ、オフラインでも会話できます。9000 台超の Reachy Mini ロボットがこのパイプラインで動いています。

どの工程も差し替え可能

認識を Whisper に、脳を任意の OpenAI 互換サービスに、合成を Kokoro に——どれもパラメータを変えるだけ。自分でファインチューニングしたモデルも入れられます。

途中のテキストが手に入る

エンドツーエンドのモデルには内部にテキスト層がなく、発話がどう解釈されたか見えません。こちらは各段階でテキストが残るので、モデレーションの追加、保存して検索に使う、話し出す前に一文書き換える——どれも手を入れる場所があります。

既存クライアントはそのまま

対外的には OpenAI のリアルタイム音声プロトコルを話します。その仕様で書かれたアプリなら、接続先を自前サーバーに変えるだけで動きます。

クライアントのリアルタイム音声の接続先を公式エンドポイントから自前サーバーへ変更
同じクライアントコードのまま、接続先を自前サーバーに変えるだけで会話は続く。出典は huggingface/speech-to-speech リポジトリのドキュメント
Doubao / GPT-Live / Gemini Liveこちら
アーキテクチャエンドツーエンド、音声が直接出入り4 工程のリレー
聞きながら話せる可、全二重不可、半二重。割り込みには対応
声色を聞き取れる可、音声を直接処理不可、第 2 工程でテキスト化
実行場所相手のサーバー4 つのうち 3 つは標準でローカル、残り 1 つも手元に可
モデルの差し替え相手のものを使用どの工程も差し替え可
途中のテキスト層自体が存在しない転写・応答テキスト・ツール呼び出しすべて取得可
ライセンス利用規約に準拠Apache 2.0
たとえるなら

賃貸と持ち家です。借りるほうは内装済みで、荷物ひとつで住めて、体験は一番快適。でも壁は壊せませんし、大家がいつ値上げしても契約を切っても打つ手がありません。買うほうは自分で内装しなければならず、当分あちらの水準に届かない箇所もある。それでも鍵は自分の手にあり、好きに改造できて、追い出されることもありません。

以降のセクションは、その「届かない箇所」をどう埋めるかの話です。

テンポの埋め方

フライングでテンポ差を埋める

半二重の一問一答は、聞きながら話せる方式に構造上かないません。このパイプラインの対策はフライングです。話し終わるのを待たずに考え始め、この先が大きくは変わらないほうに賭けます。以下の 3 つは一続きの仕組みです。

話し終わるのを待たずに考え始める

ハードで「答えを考える」工程を圧縮すると、残った遅延の大半が意外な場所に移ります。話し終わったかどうかの判定そのものに、時間がかかるのです。

機械は無音の長さを数えて発話の終わりを判断します。あなたが止まると数え始め、規定に達してようやく動き出す。この待ち時間には何の仕事も入っておらず、純粋な確認作業です。かといって短くしすぎると、息継ぎのたびに割り込まれます。

この実装の答え

「確認」と「作業」を重ねます。無音が 64 ミリ秒あれば発話終了とみなし、認識と生成をすぐ走らせる。出来上がった答えは 1 秒だけ手元に伏せておく。この 1 秒はあなたの言い直し用です。続きを話したらこの版は破棄。本当に話し終わっていれば、1 秒経つ頃には答えができていて、そのまま口に出せます。

下のタブを切り替えて、時間がどこに使われているか見てください。

あなたが話している
無音を数えて終了を確認
ここから認識開始
ここから答えを考える
AI が話し出す

時間 →

待機と作業が直列。2 つの時間が足し算になります。

あなたが話している
無音 64 ミリ秒で走り出す
1 秒伏せて言い直しを待つ
認識と生成はこの 1 秒で完了
AI が話し出す

時間 →

待機と作業が重なるので早く話し出せます。前後関係を示す概念図で、実測時間ではありません。

確認の時間を削ったのではありません。作業の時間を待ち時間の中に隠したのです。

超高速なハードが要る理由もここにあります。答えはこの 1 秒以内に出し切らねばならず、そうでなければ結局待つことになる。思考をオンにすると即座に予算を超えるので、切るわけです。

たとえるなら

客がメニューを閉じた瞬間に厨房へ向かう店員です。ただし配膳口で 1 秒だけ立ち止まる。その 1 秒で追加注文が出れば戻って書き直し、何もなければ伝票を通す。よそより早く料理が出るのは、歩いている間にもう注文を書き終えているからです。

一言足すと、全部やり直す

フライングで怖いのは、外したまま押し通すことです。この実装は丸ごと破棄します。

その 1 秒の間にまた話し出せば、この版は無効。続きだけを推測して繋ぐことはせず、前半の録音を残したまま新しい発話と 1 つの文につなぎ、最初から転写し直し、生成し直します。だから答えの品質は落ちません。モデルが見るのは常に完全な一文です。

代償は、言い直すたびに全部やり直すこと。途切れ途切れに 4 回止まれば、裏では 4 周が無駄になります。ハードが安くて速いことが、ここでとりわけ効いてきます。

言い足しのための細かい配慮もあります。新しい発話を始めるには 384 ミリ秒の音声検知が必要で、咳払いでの誤作動を防ぐため。一方、前の発話の続きなら 192 ミリ秒で済み、しきい値は半分です。あなたの沈黙を「まだ話している」側に倒す設計になっています。

話し出したら、そのターンは確定

言い直せるかどうかは、時間の長さではなく 1 つの動作で決まります。合成モジュールが音を出し始めた瞬間にそのターンは確定し、以降の発話はすべて新しいターン扱い。確定前なら最長 7 秒の間、何度でもやり直せます。言葉を探す、息を継ぐ、途中で止めて言い足す——それには十分です。

話している最中に割り込めば、即座に黙る

前節はまだ話し出す前の言い直しでした。ここは、話している最中に直接割り込むケースです。

難しいのは、割り込んだ瞬間、4 つのスレッドのあちこちに作りかけが散らばっていることです。モデルはまだ文字を吐き、合成は音声ブロックを切り出し、送信ループは耳へ押し出し続けている。1 つずつ追いかけて止めるのは遅いうえ、取りこぼしも起きます。

この実装の答え

生成物すべてにバッチ番号を刻みます。キャンセル時は個別に追いかけず、カウンタを 1 つ増やすだけ。旧バッチは自動的に全部無効になります。各スレッドは次の文字を作る前に自分のバッチ番号が最新かを見て、違えば作業終了。互いにどちらが先かを問い合わせる必要はなく、番号だけを見ます。

たとえるなら

鍵の交換です。配った古い鍵を 1 本ずつ回収しなくても、シリンダーを替えれば古い鍵はそれだけで使えなくなります。

①
第 7 版
AI が話している最中。合成モジュールが第 7 版の音声を順に送り出している。
②
第 7 版
あなたが割り込む。検知モジュールが発話ありと報告。
③
第 8 版
カウンタを1 つ増やす。この時点で第 7 版のすべてが期限切れ。
④
第 8 版
キューを空にする。ただしあなた側のものは残す——今の発話の転写、発話終了マーカーは保持。あなたの入力なので一緒に捨ててはいけません。
⑤
第 7 版
モデルと合成がバッチ番号を確認、自分が第 7 版のままだと気づいてその場で終了。
⑥
第 8 版
第 8 版はそのまま通過し、新しい発話への応答へ。

割り込みはオフにもできます。オフでも発話は転写されますが、AI は止まらず、手元の一段を話し切ります。電話サポートの定型アナウンス、ロボットの安全案内の読み上げなど、こうした場面で使えます。

できること

導入すると、こんなことができる

話しながら文字が出る

まだ話している最中から、転写が少しずつ送られてきます。

いつでも割り込める

話の途中でこちらが口を開けば、すぐ黙って聞きます。

映像も見られる

Gemma 4 31B は画像を読めます。カメラはツールとして接続され、必要なときにクライアントが現在のフレームを送り返します。

ツールを呼べる

関数呼び出しに対応。ロボット側のダンス、首振り、停止もこの仕組みで繋いでいます。

言語を自動切替

発話ごとに言語を判定してモデルへ渡すので、途中で言語を変えても設定変更は不要です。

声も変えられる

複数の音色を内蔵。バックエンドを差し替えれば、参考音声からの声のクローンも可能です。

自分で動かす

導入はコマンド 3 つ

まずサーバーを起動し、別のターミナルから接続して話します。

インストールしてリアルタイム音声サーバーを起動
pip install speech-to-speech
export OPENAI_API_KEY=...
speech-to-speech

ここで OpenAI の key が要るのは、引数を渡さない場合、真ん中の工程が標準で OpenAI の gpt-5.4-mini に繋がるからです。今回の主役に替えるには、モデル名と接続先を指定するだけです。

Cerebras 上の Gemma 4 31B に切り替え、思考をオフにして遅延を抑える
speech-to-speech \
    --mode realtime \
    --stt parakeet-tdt \
    --llm_backend chat-completions \
    --tts qwen3 \
    --model_name "google/gemma-4-31B-it:cerebras" \
    --responses_api_base_url "https://router.huggingface.co/v1" \
    --responses_api_api_key "$HF_TOKEN" \
    --responses_api_reasoning_effort none \
    --responses_api_stream
別のターミナルから接続して話す(リポジトリをソースから取得する必要あり)
python scripts/listen_and_play_realtime.py --host 127.0.0.1 --port 8765

発話を外に出したくない場合は、真ん中の工程もローカルに置けます。片方のターミナルで llama.cpp が小型 Gemma 4 をホストし、もう片方でパイプラインをそちらに向けます。

完全ローカル実行:llama.cpp で Gemma 4 をホストし、音声パイプラインを接続
# ターミナル 1:llama.cpp で Gemma 4 をホスト
llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full

# ターミナル 2:音声パイプラインをこのローカルサーバーへ
speech-to-speech \
    --mode realtime \
    --stt parakeet-tdt \
    --llm_backend responses-api \
    --tts qwen3 \
    --model_name "ggml-org/gemma-4-E4B-it-GGUF" \
    --responses_api_base_url "http://127.0.0.1:8080/v1" \
    --responses_api_api_key "" \
    --responses_api_stream \
    --enable_live_transcription
始める前に

先に知っておきたい制約

リポジトリ自身が制約を列挙しています。導入前に目を通しておくとよいでしょう。

いちばん直接効くのは、標準の音声認識がヨーロッパ系 25 言語しか扱えないこと。日本語も中国語も入っていないので、Whisper か Paraformer に差し替える必要があります。下のコマンドは Apple Silicon の Mac 専用で、ついでに真ん中の工程もローカルの小型モデルに置き換えています。他の OS では speech-to-speech[faster-whisper] か [paraformer] を入れ、対応する引数を指定してください。

中国語を聞き取らせる(Apple Silicon の Mac 限定、真ん中の工程も同時に差し替え)
speech-to-speech \
    --stt whisper-mlx \
    --stt_model_name large-v3 \
    --language zh \
    --llm_backend mlx-lm \
    --model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

標準では同時 1 人まで

パイプラインプールは標準で 1 本のみ。2 人目の接続は拒否されます。チームで使うならこの数を増やす必要があり、1 本ごとにモデル分のメモリを消費します。

TCP モードは簡素

生の音声を流すだけで、割り込みもリアルタイム転写もツール呼び出しもなし。前述の 2 つの仕組みはこのモードでは効きません。

もう一方の通信経路は追加インストール

WebRTC は追加パッケージが別途必要で、なければハンドシェイクでエラー。標準では同一マシンか同一 LAN 向けで、インターネット越しには自前で中継サーバーが要り、それでも繋がらない環境があります。

2 経路で機能が揃っていない

ノイズ除去は WebSocket 側のみ。WebRTC 側ではカメラのスナップショットが約 60 KB まで圧縮されないと送れず、モデルが見る画像はひと回り小さくなります。

インストール時につまずく箇所も 2 つあります。オプションの音声強調モジュールは numpy 1.x、Pocket TTS は numpy 2.x を要求し、両立しません。Linux では標準の音声合成パッケージが CUDA 12.8 を前提としており、合わない場合は対応版を先に入れる必要があります。リポジトリは CUDA 13、12.4、CPU のみの 3 種類の入手先を用意しています。

インストールせずに試したい場合は、オンライン版を開けばすぐ話せます。無料枠は協定世界時で毎日リセット。未ログインで 5 分、ログイン済みの一般ユーザーで 10 分、PRO 会員と指定組織のメンバーは無制限。ローカル実行は計測対象外です。

🧰 スタートガイド · HF Realtime Voice(speech-to-speech)
価格オンライン版は無料、協定世界時で毎日リセット:未ログイン 5 分、ログイン済み一般ユーザー 10 分、PRO 会員と指定組織メンバーは無制限。ローカル実行は計測対象外
ハードルウェブ版はマイクを許可すればすぐ話せる。ローカル導入は pip 一行、ホスト型モデルを使う場合は API key が必要
リポジトリがそのまま示すコマンド 4 本。一行インストールから Cerebras 接続、完全ローカル実行、中国語対応への変更まで、コピーして使えます。
出典
Hugging Face and Cerebras bring Gemma 4 to real-time voice AIAmir Mahla、Andres Marafioti、Leandro von Werra、Saurabh Vyas·Hugging Face ブログ·2026-07-01
当サイトの注記
フライングと破棄の仕組み、バッチ番号による割り込み処理、各種ミリ秒しきい値、4 工程の差し替え可能リスト、無料枠の区分、および制約の全項目は、huggingface/speech-to-speech リポジトリのソースコードとドキュメントから。発表ブログには記載がありません。Gemma 4 31B の仕様はモデルカードから。毎秒 1851 字、35 倍は Cerebras 公式ブログから。2 枚の時系列比較図は前後関係を示す概念図で、実測時間ではありません。比較バーの「一般的な GPU 環境 約 53」は 35 倍から逆算した目安値です。「答えはこの 1 秒以内に出し切る」は、コード上で生成結果が猶予期間を待って初めて確定するという挙動からの推論です。
↑ 本文ここまで
✓ この記事は全文無料です

メンバーは全文 Markdown のコピー・保存に加え、自分の AI に購読・質問させることができます。

原文を読む ↗
📮 新着解説をメールでいち早く

役に立ちましたか?メールを登録すると、新着解説を公開と同時にお届けします。解除はいつでも。