遅ればせながらChatGPTの回答を3Dキャラに喋らせて会話してみた
2023/6/2
ChatGPTと声で直接会話
決して目新しい試みではありませんが、遅ればせながら我々もGhatGPTと生の声で会話し、回答を3Dキャラクターに喋らせてみました。
まずは動画をご覧ください。
およそ2時間程度で、このようなサンプルを作ることができました。
今回はまだ検証の第一段階ですので、ツッコミどころだらけです。
キャラクタと声色が合っていない、台詞回しが不自然、など数え上げればキリがありません。
今後も継続的に改善を重ね、記事にして公開していこうと思います。
使用した主な技術
さて、今回の開発で使用した技術を下記に列挙してみました。
まず前提として、ChatGPTは我々の生の話し声をそのまま理解してはくれません。
また、ChatGPTからの回答も話し声ではなく文章で返ってきます。
そこで、ユーザーの声による質問とChatGPTからの文章での回答に対し、下記のような技術を間に挟み込むことで、あたかもお互いの声同士で会話をしているようなコミュニケーションを成立させることができます。
Speech-To-Text(音声を文字に変換する工程)
ChatGPTに質問を理解してもらうために、まずは質問者の声を文字情報に変換する工程が必要になります。
いわゆる「文字起こし」を自動で行う技術です。
この技術をオンラインで提供しているサービスは無数にありますが、代表的なものを下記に挙げてみました。
Google Speech-To-Text
Watson Speech-To-Text
Microsoft Speech Services
Amazon Transcribe
これらのサービスが提供するAPIに対して音声情報を送信すると、瞬時に文字起こしされた文章が返ってきます。
今回の検証では、Google Speech-To-Textを使用しています。
Text-To-Speech(文字を音声に変換する工程)
ChatGPTから返ってくる文字情報としての回答を、自然な話し声に変換する工程も必要です。
日本語では「音声合成」などとも呼ばれます。
代表的なものを下記に挙げてみました。
Google Text-to-Speech
Watson Text-to-Speech
Microsoft Speech Services
Amazon Polly
これらのサービスが提供するAPIに対して文字情報を送信すると、瞬時にその文章を読み上げた音声データが返ってきます。
今回は、Google Text-to-Speechを使用しています。
また日本語に限れば、上記の他にもいわゆる「アニメ声」を合成してくれる日本独自のサービスが多数存在しています。
リップシンク( 音声と唇の同期)
Text-To-Speechが読み上げた音声をあたかもキャラクタが喋っているように見せるためには、音声とキャラクタの唇の動きを同期させる必要があります。
このような技術は、リップシンク (Lip Synch) と呼ばれます。
再生中の音声をリアルタイムで分析し、波形から母音を抽出してキャラクタの唇を動かします。
この技術を使うためには、キャラクタの3Dモデルに「あいうえお」のそれぞれの母音を発生するときに唇の形を動かすためのアニメーションをあらかじめ仕込んでおく必要があります。
ChatGPTと音声による会話が成立する流れ
ざっくりとまとめると、上記の技術を以下のような順番で用いることで、ユーザーからの話し声による質問に対して、キャラクターが話し声により回答するようになります。
ユーザーが質問したい内容を喋る
質問の音声情報をSpeech-To-Textで文字情報に変換
ChatGPTに質問の文字情報を送信
返ってきた回答の文字情報をText-To-Speechで音声情報に変換
回答の音声を再生しつつ、リップシンクでキャラクタの唇の動きを同期
自然な会話を成立させるコツ
ChatGPTを利用したことのある方ならご存知かとは思いますが、基本的にChatGPTはとても饒舌です。
また、回答を小分けにして返してくるので、回答の全文が書き出し終わる頃までにはかなりの時間がかかっています。
APIを経由してChatGPTを使用したときも、同様の時間がかかります。
その時間を待っていたのでは、とても自然な会話にはなりません。
そのため、ChatGPTに回答の最大文字数を制限させる必要があります。
回答が短いほど、APIのレスポンスは速くなります。
またその分だけ、Text-To-Speechが音声を合成する工程も速くなります。
一番簡単なのは、ユーザーの質問をSpeech-To-Textで文字起こしした後に、「50文字以内で」といった定型文を追加することです。
例えば、ユーザーが「おにぎりとおむすびの違いは?」と質問したら、ChatGPTには、「おにぎりとおむすびの違いは?50文字以内で」と送るのです。
何もつけない場合、饒舌なChatGPTは「おにぎりとおむすびは、日本の伝統的な手軽な食べ物で、米を中心とした食べ物です。一般的には...」などと、そもそも論を始めてきます。
50文字に制限をすれば、「おにぎりは具を中に入れ、三角形や球状に握り、海苔で包む。おむすびは塩で味付けし、米を丸め、具を中に入れずにそのまま食べる。」と、真偽の程はさておきドンピシャな回答が返ってきます。
さらに10文字以内に制限すれば「形状、具の有無。」とこれまた真偽の程はさておき、極限まで無駄を削ぎ落とした回答が返ってきます。
これだけではいかにも非人間的なので、さらに「10文字以内で。女性の口調で」などとつけてみましょう。
「形と具の違いよ!」という回答を得られます。
「形状」を「形」と言い換えてくるあたり、なかなか芸が細かいです。
ChatGPTを活用したUnity開発に参加させてください!!
Vitalify Asiaでは、Unityによる先進的な技術を使用したアプリを日々開発しています。
ゲーム開発、AR/VRアプリ開発、2Dイラスト制作、3Dモデリングを得意としています。
上記以外にも幅広い分野でのアプリケーション開発が可能ですので、お気軽にお問い合わせください。