【アプリ開発日記3週目】リアルタイム音声会話のベストプラクティスを考える(2024年10月時点、前編)
こんばんは、ちゅーりんです。
今週は先週までのアプリのメイン機能完成と、新たなアプリ開発へ。
本来は1つ目の方を先に書くべきなのですが、話題的には2つ目のリアルタイム音声会話のほうが面白いので、こちらから書きます。
1,現時点でのリアルタイム音声会話のベストプラクティス
音声会話といえば先週ChatGPTの「Advanced Voice」が一般公開(10/6時点では有料ユーザーのみですが)されましたね。
私もさっそく使ってみましたが、何よりその応答速度と日本語の自然な発音に驚かされました。
これまでMicrosoftのAzureをはじめとするクラウドサービスやVoiceVoxを使った自前TTS・音声会話を多くの人が作ってきて、私もその一人でしたが、どうしても会話間の時間が空いてしまったり、日本語がカタコトだったりと一つのハードルがあったのです。
それを、今回のAdvanced Voiceは見事に克服していた。会話の内容は、例えばしりとりしようと言っても繋がらないなどテキスト生成の側面で気になる点はありますが、リアルタイム音声会話という点ではもう人間の一歩手前というところまで来ている感じがします。
課題をあげるなら、抑揚(笑い声や、今テンション高いななど)や応答速度(まだ相手に被せることはあまりない)がありますが、少なくとも事務的な相談なら出来ました。
同時に、比べると話題になっていませんが、「リアルタイムAPI」なるものも10月1日に公開されています。
この中には、もちろん音声合成も。6種類の声から選べ、出力結果をテキスト生成と同じくストリームで返してくれます。つまり長文でもすぐ返ってくる。
先程のAdvanced Voiceに期待してこちらも試してみましたが、こちらの品質は正直微妙というところ。応答速度は1-2秒とやはり飛躍的に上がっているのですが、カタコト感は否めません。
ということでボツになりました。
2024/10/7 追記
リアルタイムAPIでAdvanced Voiceと同じレベルの応答速度と流暢な日本語が再現できました。ので、こちらを採用します。
デモがこちらに用意されていました。
はじめ方としては「connect」でマイクに接続後、手動(プッシュツートーク) とvad (音声アクティビティ検出) の会話モードを選択するとのこと。これらはいつでも切り替えることができるそうです。
(追記おわり)
その対抗馬であり、今回軍配が上がったのがlitagin02さんの「Style-Bert-VITS2」です。今年に入って大きな変化があったわけではありませんが、元々日本語の発音が驚くほど自然で、GPUさえあれば好きな声を学習させることも出来ます。
私も2-3月によく使わせてもらっていたので、バージョンアップし当時学習させた自前モデルで音声合成したところ、やはりこちらの声のほうがいいという結論になりました。
とても有り難いことに、(Bert-VITS2:これの元となったリポジトリに追加して下さっているみたいです)APIも用意してくださっていたので、こちらをGPUサーバーに入れてAPIを飛ばしたところ成功。
生成時間もGPTと同様1-2秒未満だったので、リアルタイムは対応していないもののこれで行くことにします。あるいは自分でリアルタイム対応させるか。
そしてテキスト生成のモデルですが、私の中では3択で
GPT-4o(o1は速度的にボツ)
Claude3.5-sonnet
Llama-3-ELYZA-JP
ここで気になるのがLlama-3-ELYZA-JPです。
ローカルで可能な上、現時点ではローカルに絞ると日本語性能が最も高い(と思われる)。医療情報を今後扱う以上気になってはいますが、ストリーム非対応、上記2つと比べるとまだ性能不十分なのです。
将来的にはELYZAにLlama-3.1あるいはそれ以上の日本語能力が備わることに期待ですが、現時点ではGPT or Claudeで行こうと思います。
どちらのほうがキャラ付けしやすいか、また気の利いた会話ができるか(プロンプトが有効か)で決める予定ですが、今週はタイムアップのため来週に持ち越しです。
とは言え、いよいよリアルタイム音声会話が実用レベルの一歩手前まで来ていることは確か。
少なくとも今回それが確認できたので、次回、実際にアプリに実装し手応えを確認していきます!
2,アプリのメイン機能完成
さて、本来メインとなるはずだった話題です。が、本当にこれは1週間の進捗を書いていくだけなのでざっと飛ばしてまとめに入ります。
(※さきほどまでの話とは別のアプリです)
これで必要最低限の機能は揃いました。前回の「今日~今週何をすればいいか分かる」というコアな部分に絞りきっての実装です。
実は上記のUIもまだ頭に浮かんでおらずという開始ではあったのですが、無事納得の行く形に収まってよかったです。これで堂々、次のアプリにいけますね。
とは言え次のアプリも認知機能をターゲットにしたものですし、今回のアプリも引き続き修正などを行っていきます。
おわりに
「個人開発は1ヶ月が限度」と私は決めています。ダレてくるからです。
長くても3ヶ月。ただそれでもコアは1ヶ月以内に終わらせる、そういうペースで私は創るようにしています。
もちろん小さなものばかり作っていても仕方がないのですが、たまに大当たりが出たり、今回のようにこれまでの積み重ねが認められたことがきっかけで大きなものに繋がる(医療現場に自らのアプリを実装する)ことがある、だからこそ一つ一つの小さなものも自分の納得行くまでこだわり抜いて、次に行く、ようにしています。
今回リアルタイム音声会話を面白く感じることが出来たのも、一つにはそれがあるのではと思っています。じゃあ自分だったらこう実装しようと。
今週、ふと悔しい思いをしたことがあります。
マーケターの森岡毅さんが、このようなお話をされていました。
リーダーシップがかっこいいなと思いながら、悔しいですが、おそらく私はThinkingに当てはまるのだと思います。
しかし同時にこうも話されているのです。
私のゴールは「自分が死んだ100年後も残るものを作る」。それが「組織」で、それにはやはりリーダーシップは間違いなく必要なのですが、少なくともその重要さを今気づけたこと、そしてそのゴールへの道筋は1つではなく自分自身は戦略面で、共に行く人がリーダーシップでも成功する道はあるのではないかと、考えています。
無理にリーダーシップに移るより、自分の強みを伸ばしたほうが結果的にゴールに辿り着く。
だからこそ、今の最善を。このアプリを育てつつ、それに次ぐ第2の現場導入アプリを開発していきます。
リアルタイム音声会話、次回に続きます!