7.4K Views
October 20, 23
スライド概要
スライド概要
2023/8/25「[第4回Generative AI勉強会] ChatGPTを活用した自動運転車用対話エージェントの構築」
発表者:林 知樹
ChatGPTを活用した 自動運転対話エージェントの開発 株式会社 Human Dataware Lab. COO / 情報科学博士 林 知樹 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 1
自己紹介 p 名前: n 林 知樹 (情報科学博士 / 31歳) n https://kan-bayashi.github.io/ p 仕事: n COO @ Human Dataware Lab. Co., Ltd. n Researcher @ TARVO Inc. n Collaborative researcher @ NU p 専門: n 音声・環境音処理全般 (VC, TTS, etc.) カスタムキーボード沼の住人 最近のお気に入り 60% (かわいい) p 好きなモノ: n Custom Keyboard (最近は60%) n (Neo) Vim My neovim startup 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 2
オープンソースつくってます p 音声処理ツールキット n https://github.com/espnet/espnet (お陰様で7k Stars) n 最近はWhisper-style ASRの拡張がアツいです! p 高音質ニューラルボコーダツール ParallelWaveGAN n https://github.com/kan-bayashi/ParallelWaveGAN n 音響特徴量から高品質な音声波形を生成できます! 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 3
HDLではこんなことしています 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 4
本発表を聞いて得られるもの 自動運転対話エージェントを構築するのに必要な下記の 3ステップをなんとなく理解し、作れそうな気分になる! 1. 音声で対話出来るようにしよう! n Wakeword✕Endpointing✕ASR✕TTSをLLMと連携 2. 自動運転車 (Autoware) と連携しよう! n Rosbridge✕FastAPI✕Function callで可能性は無限大 3. かわいいガワ (アバター) と連携しよう! n Unity✕Live2Dで汎用性の高いかわいいガワをGET 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 5
Step1: 音声で対話できるようにしよう 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 6
Step1: 音声で対話できるようにしよう 音声対話を実現するのに必要な4つの技術とは? 1. ウェイクワード検出 (Wakeword Detection) n 「OK Google」「Hey Siri」的なアレ 2. 発話終端検出 (Endpointing) n ウェイクワード発声後の発話終了地点を検出する 3. 音声認識 (ASR) n ユーザの発話をテキストに変換する 4. テキスト音声合成 (TTS) n LLMの返答テキストを音声に変換する ※ フロントエンド部分 (マイクアレイ処理) も かなり大事ですがは今回は省略 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 7
音声対話処理簡易全体像 Wakeword ウェイクワード検出 マイク Endpointing 発話終端検出 ASR 音声認識 LLM 応答生成 TTS テキスト音声合成 スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 8
ウェイクワード検出 Wakeword マイク Endpointing ウェイクワード検出 • 呼びかけ用のキーワードを検出する • チャンク (※) 単位で常時処理し続ける • 処理時間<<チャンクサイズが必要! •発話終端検出 ローカルでの処理が望ましい ※ チャンク: ストリーミングで音声波形を処理するときの単位 数ミリ秒の波形を1チャンクとして処理することが多い ASR 音声認識 LLM 応答生成 TTS テキスト音声合成 スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 9
発話終端検出 Wakeword マイク Endpointing ASR ウェイクワード検出 発話終端検出 ウェイクワードが検出された地点 から発話の終わりを検出する • チャンク単位での処理を行う •音声認識 処理時間<<チャンクサイズが必要! • ローカルでの処理が望ましい • LLM 応答生成 TTS テキスト音声合成 スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 10
音声認識 Wakeword ウェイクワード検出 マイク Endpointing 発話終端検出 音声認識 ASR LLM TTS 検出された発話区間の波形を 受け取ってテキストへと変換する • スピードと精度がトレードオフ! • ローカルマシンのスペックに応じて 応答生成 APIを利用するかどうか判断する • テキスト音声合成 スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 11
応答生成 Wakeword ウェイクワード検出 マイク Endpointing ASR 発話終端検出 音声認識 応答生成 LLM TTS イニシャルプロンプトを初期化時に 与えてキャラ設定を付与する • 音声認識されたテキストを 受け取って返答を行う テキスト音声合成 • スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 12
テキスト音声合成 Wakeword ウェイクワード検出 マイク Endpointing 発話終端検出 ASR 音声認識 LLM 応答生成 テキスト音声合成 TTS スピーカー 以下ループ • • • 返答テキストを音声に変換する 生成音声をスピーカーから再生する 初期化時にイニシャルプロンプトの キャラ付けに応じて話者性を決める 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 13
音声対話処理簡易全体像 Wakeword ウェイクワード検出 マイク Endpointing 発話終端検出 ASR 音声認識 LLM 応答生成 TTS テキスト音声合成 スピーカー 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 14
LLMの応答遅延を減らしたい! LLMの応答遅延を減らしてスムーズに対話したい! 1. ChatGPTで `stream=True` を利用 n 返答をGeneratorとして受け取る n Streamで処理を受け取ることで音声対話だとGPT-4と GPT-3.5-Turboの体感遅延が変わらない 2. プロンプトの工夫 n 短い応答を指示する (or 文字数を指定してもOK) n 可能な限り句読点を付与せよと指示する (3のため) 3. 文節単位でのテキスト音声合成の実施 n テキストを句読点の情報を使って文節に分ける n 文節単位で合成を行い順次再生を行う 最初の応答音声を早めに提示し、再生している時間を目一杯使えるように頑張る! 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 15
色々と設定を切り替えたい! p 各コンポーネントのインターフェースを統一 n 色々な種類のモデル・APIを簡単に着替えられるように! p Yamlファイルで諸々の設定を一括管理 n コンフィグファイルの差し替えでサクッと切り替え! 参考: Chat-GPT・LineAPI・Herokuを使ってルイズと会話できるようにした話 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 16
実際に対話してみよう! プロンプトによるキャラ設定とTTSモデルの話者性を 変えることで様々なシチュエーションに対応可能 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 17
Step2: Autowareと連携させよう 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 18
Step2: Autowareと連携させよう Autowareと連携するために必要な手順とは? 1. Autowareの状態を取得・管理するクラスを実装 n Rosbridgeを利用してROS Topic / Serviceを制御する n 車両状態を把握し、APIの実行可否を判断する 2. システムが自発的に発話できる仕組みを追加 n ユーザーからの問いかけではなく、システム側から ユーザーに問いかけられるようにする 3. Function call✕Autoware API n 出発等のROS2 service等を叩くREST APIを作る n LLMのFunction callでAPIを叩く権利を付与 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 19
Autowareの状態取得・管理クラスの実装 p ROSのめんどくさいところ n システムPythonの利用が前提 + 環境構築コストが高い n ROS環境依存にするとメンテナンス性が悪くなる ROSBridge✕roslibpy(1)を利用することで ROS環境に依存しない状態管理クラスを実装! p 状態管理クラス処理の流れ サブスレッド n n (1) roslibpy: https://github.com/gramaziokohler/roslibpy 各トピックをサブスクライブ 非同期コールバックでメンバー変数にメッセージを格納 メインスレッド n n メンバー変数に格納されたメッセージから車両状態 フラッグを更新 車両状態に応じてアナウンスを対話システムに要求 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 20
実装イメージ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 21
現状の処理フロー 会話の始動が常にユーザー側を想定 システム側が起点となって発話できない 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 22
アナウンスキューの追加 Announce Queue キューが空 Wakeword アナウンス文 追加 Autoware 状態管理マン キューが空でない マイク Endpointing ASR スピーカー LLM 応答生成はせず履歴にのみ追加 TTS キューから取り出された アナウンス文を合成して再生 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 23
アナウンスキューの追加 Announce Queue キューが空 Wakeword アナウンス文 追加 Autoware 状態管理マン キューが空でない マイク Endpointing ASR スピーカー Autowareの状態に応じて 必要なアナウンスが提供可能! LLM 応答生成はせず履歴にのみ追加 TTS キューから取り出された アナウンス文を合成して再生 以下ループ 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 24
Function call✕Autoware API p Function callとは? n LLMが外部APIを叩けるようにする機能 n プロンプトとは別に外部APIの情報をJSON形式で渡す n 対話内容に応じて自動的にAPIを呼び出してくれる 関数名、関数の説明、引数の説明、 引数が必要かどうかをJson形式で用意 (Returnに関する説明は必要ない) Function callで渡すAPI説明の記述例 (Autowareの目的地設定関数) 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 25
Function call✕Autoware API p FastAPIでREST APIの準備 n AutowareのServiceを叩く関数を状態管理クラスに追加 n FastAPIを利用してServiceを叩く関数をREST API化 Autoware 状態管理クラス 「発進して」 Function call “{success: true}” 「発進します」 対話 FastAPI ユーザー エージェント Call Return Status ROS2 service call Autoware 車両 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 26
実際に動かしてみよう! API✕Function callで 様々な操作をエージェントに実施させることが可能 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 27
Step3: かわいいガワをつけよう 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 28
Step3: かわいいガワをつけよう p 対話システムにおけるアバター (ガワ) の重要性 n 音声だけのやりとりはちょっと味気ない n ガワで応答遅延を感じにくくさせたい! n かわいいガワだと対話のテンションが上がる Unity✕Live2Dでかわいいガワを作ろう! 発話 - エージェントの状態 - 生成した音声のパス TCP通信 ユーザ リップシンクで 音声再生 Unity 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 対話 エージェント 29
実際に動かしてみよう! Live2Dモデルの差し替え・モーションの充実化で夢が広がる! Live2Dモデル: 桃瀬ひより / 声: つくよみちゃん 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 30
作ってみた感想 p 感動したこと n n Function callがあまりにも便利すぎる l 意図推定やら構文解析による引数パースとか全く不要 l APIの返り値にReasonをしっかり入れておくと実行に失敗 したときもいい感じに返答を生成してくれる 対話のめんどくさいところをいい感じにやってくれる l 肯定/否定のバリエーション対処 l 文脈を加味した選択肢の指示語理解 (「じゃあそれで」とか) p 困ったこと n n n 対話の自由度が高いのでテストケースの設定が難しい l これもLLMくんに全部パターンを出してもらうのもあり 雑音環境下や自由すぎる発話の音声認識誤りがつらい l 人類はもっと音声認識モデルの気持ちを理解すべき 遅延が結構大きいので迅速な指示は現状難しい l 「あ、そこまがってください」みたいなのやりたい 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 31
まとめ 1. 音声で対話出来るようにした! n Wakeword✕Endpointing✕ASR✕TTSをLLMと連携 2. 自動運転車 (Autoware) と連携した! n Rosbridge✕FastAPI✕Function callで可能性は無限大 3. かわいいガワ (アバター) と連携した! n Unity✕Live2Dで汎用性の高いかわいいガワをGET なんとなく雰囲気で要素技術を理解して 「自分でも作れそう!」な気分になったら幸いです! 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 32
参考: タダでローカルで使えるライブラリ群 ChatGPT以外タダで自分だけのエージェントを作ろう! 夏休みの自由工作に是非どうぞ! p Wakeword detection n EfficientWord-Net p Endpointing n Sirelo-VAD p 日本語 ASR n ESPnet / ESPnet-ONNX / Faster-whisper p 日本語 TTS n ESPnet / ESPnet-ONNX / VoiceVox p Unity✕Live2D n VTuber-Python-Unity 2023/08/25 Generative AI 勉強会 「ChatGPTを活用した自動運転エージェントの開発」 33