背景
- JetsonでOfflineかつリアルタイムの会話を試した時のメモ
- 記憶がフレッシュなうちに備忘録として残す
- 特に音周りの技術は初めてだったので、用語を整理した
用語 / 技術
会話の組み立て
- LLM
- Large Language Model
- 膨大なテキストデータを学習し、人間のように自然な文章を生成・理解するAI技術
- Llama.cpp
- Gemma4をサーバー化するのに使用
- https://github.com/ggml-org/llama.cpp
- Gemma 4
- Googleが開発した2026年4月時点で最新のEdge LLM
- 今回は、量子化されたQ4_K_M.ggufを使用
- https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF
音声発話
- TTS
- Text to Speech
- テキストを音声に変換する技術
- piper-plus
- 高速・高品質なニューラルテキスト音声合成 (TTS) システム
- 英語版のpiperを日本人がforkしたリポジトリ
- 今回は日本語のTTSに使用
- VITS
- Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech
- piper-plusのモデルの名前
音声認識
- STT
- Speech to Text
- 音声をテキストに変換する技術
- ASR
- automatic speech recognition
- 音声認識技術
- LID
- language identification
- 言語識別
- SER
- speech emotion recognition
- 音声感情認識
- AED
- audio event detection
- 音響イベント検出
- AEC (分類)
- audio event classification
- 音響イベント分類
- Speaker identification / Speaker verification
- Speaker Identification(話者識別)
- Speaker Verification(話者照合/認証)
- 違いは、「誰であるか特定する(1対N)」か、「主張された本人か確認する(1対1)」かという点
- speech enhancement
- 「音声を綺麗にする技術」の総称
- ノイズ除去、残響除去、帯域拡張など
- タスク: 「音声 + ノイズ」→「音声」
- サブtopics:
- Speech Denoising(ノイズ除去)
- 背景ノイズの除去
- 例:エアコン、車、カフェの雑音など
- Dereverberation(残響除去)
- 残響、リバーブの除去
- 部屋の反射音を取り除く
- Bandwidth Extension(BWE/帯域拡張)
- 狭帯域音声を高音質化
- 例:電話音声(8kHz)→ 高音質音声(48kHz)
- Declipping
- クリッピング歪みの修復
- 音割れした音声の復元
- Packet Loss Concealment
- パケットロスの補完
- 通信で欠落した部分を補間
- Codec Artifact Removal
- 圧縮による劣化の修復
- 例:MP3、AACなどの圧縮ノイズ除去
- Speech Denoising(ノイズ除去)
- Source separation
- Speech Separationは音源分離の技術
- タスク: 「音声A + 音声B」→「音声A」と「音声B」
- lib:
- Audio tagging
- Audio taggingは、音声データ内の特定の音響イベントやシーン(会話、音楽、環境音など)を自動または手動で識別し、ラベル(タグ)を付ける技術
- 音声を「セリフ」「BGM」などに分類できる
- KWS
- Keyword Spotting
- 「OK Google」などのような、キーワード認識技術
- Kotoba Whisper
- 日本語に強いWhisper
- 今回は、tiny版のGGML版の量子化されたq5を使用
- 最速で動かすため、Greedy decodingとBeam Searchを調整した
- Whisper.cpp
- whisper.cppは音声データを読み込んでテキスト文章に変えてくれるソフト
- Kotoba Whisperをサーバー化するのに使用
- https://github.com/ggerganov/whisper.cpp
- sherpa
- 次世代KaldiとONNX Runtimeを活用した軽量な音声処理ツールボックス
- https://github.com/k2-fsa/sherpa-onnx
- Kaldi
- Kaldi Speech Recognition Toolkit
- 長らく音声認識のデファクトスタンダードツールとして利用されていたC++ライブラリ
- VOSK
- エッジで動く音声認識ツールキット
- 日本語モデルは、small: 48M、big: 1GBが用意されている
- SenseVoice
- ASR、LID、SER、AEC(分類)、AEDを含む音声理解能力を備えた音声基盤モデル
- https://github.com/FunAudioLLM/SenseVoice/tree/main
音認識
- VAD
- Voice Activity Detection
- 発話区間検出のための技術
- Silero VAD
- 高性能で軽量(約2MB)なオープンソースのVADモデル
- CPUで1ms以下で動作する高速性を持ち、WebRTC VADよりも高精度で、ノイズの多い環境でも音声を正確に検知 (according to the AI)
- PCM
- Pulse Code Modulation:パルス符号変調
- 非圧縮・高品質: 音波を一定周期でサンプリングし、量子化してデータ化するため、原音に忠実
音の精度向上
- PipeWire
- Linuxのマルチメディアサーバー
- AEC(キャンセル)やNS、AGCの機能がある
aec_method=webrtcを今回は使用した
- AEC (キャンセル)
- acoustic echo cancellation
- スピーカーから出た周り込みを消す技術
- NS
- Noise Suppression
- 扇風機、キーボード、エアコンなどの雑音を減らす技術
- AGC
- Automatic Gain Control
- 声などの音量を自動調整する技術
音の理解向上
- Punctuation
- 意味は句読点で、句読点や記号を自動で補うこと
- Speaker Diarization
- 録音された音声データから「いつ、誰が話したか(Who spoke when?)」を特定し、発言ごとに分割・分類する技術
- いわゆる話者分離
AIモデルの処理速度向上
- LLMの量子化
- Quantization
- モデルのパラメータを高精度な数値(16/32bit浮動小数点)から低精度な数値(4/8bit整数)に変換し、モデルサイズを大幅に軽量化・高速化する技術
- 精度低下を最小限に抑えつつ、少ないVRAM(GPUメモリ)で動作させ、安価なハードウェアでの推論を可能
- ONNX
- Open Neural Network Exchangeの意味
- 異なるAIフレームワーク間でモデルを共有・実行するためのフォーマット
- OpenMP
- C/C++のマルチスレッド並列処理を簡単に書くための仕組み
- 共有メモリ環境での並列プログラミングを支援する技術
双方向会話
- Full Duplex
- Full Duplex(全二重)音声技術は、AI対話システムにおいて、ユーザーとAIが「話しながら聞く(同時双方向)」ことを可能にする技術
- 従来の「話して、待って、聞く」というターンベースの音声対話とは異なり、人間同士のような自然な相槌や発話のオーバーラップを実現する
- GPT Realtime
- リアルタイムで低遅延の会話操作を処理するように設計された音声入力、音声出力の会話システム
- Function ToolやMCPも使える
- j-moshi
- 日本語版のmoshi
- 同時双方向的な特徴をモデル化できるfull-duplex音声対話システム
- personaplex
- real-time, full-duplex speech-to-speech conversational model
- システムプロンプトを入れる事ができる
- https://github.com/NVIDIA/personaplex
処理速度向上
- 見える化
- わかりにくい状態を見て分かる形にすること
- 例えば、処理している事がわかる用にインジケータを出さないと処理速度が遅く感じた
- 非同期
- 処理の完了を待っている間に、別の処理を進める仕組み
- 応答性とスループットを最大化する手法
- マルチスレッド化
- 計算タスクを複数コアで並列処理する仕組み
- 応答性とスループットを最大化する手法
- CPU Affinity
- 処理ごとにCPUのCoreを分離する技術
- 複数の重い処理がありOSのスケジューラーに邪魔されず処理したい時に使う
- CPU clock scaling
- OSが消費電力の削減やパフォーマンスの向上のために CPU の周波数を上げ下げする技術
- Jetsonでは性能と消費電力・発熱のバランスを取るためのCPU周波数制御をしている
- 今回はこれをOffにした
- Producer-Consumerパターン
- データを生成する「プロデューサー」と処理する「コンシューマー」の間にキュー(Queue)を挟み、非同期で処理を行う設計パターン
- タスクキュー、ジョブキュー、メッセージキューなど色々な呼び方がある
- デカップリングの一種
- TinyML
- 超低消費電力・小型のデバイス上で機械学習を動かす技術
- 数KB〜数MB程度のメモリしかない小さなチップ上で、音声認識・異常検知・画像分類などを行うAI
調査結果
- 言語認識
- 量子化されたGemma4 on GPU がよかった
- マルチモーダル機能とreasoningは無効化した
- 遅延は0.1sほどだった
- 音声認識
- 速度と精度の観点からだと
- 量子化されたWhisper tiny on GPU > SenseVoice > VOSK
- 遅延は1sほどだった
- ただし、AndroidのSpeechRecognizerの方が精度が良かった
- 発話区間検出
- Silero VADが精度もよく速度もよかった
- 強度のしきい値の調整が必要
- CPUでも遅延はほぼなし
- スピーカーの回り込み対策
- PipewireのAEC(キャンセル)が性能がよかった
- また、音の強度の調整とqueue処理でbarge-inが可能だった
- 遅延はほぼなし
- 音声発話
- piper-plusが日本語も出せて良かった
- ただし、音質はあまりよくはなかった
- CPUでも遅延はほぼなし
結論
- 会話のレスポンスまでの遅延は約1秒ほどだったので人と話している感じだった
- 量子化技術がすごく、以外にリアルタイムかつオフラインで会話が可能だった
- System promtとFunction toolが使える日本語の高速Full Duplexが来たら強いと思った
