生成AIを使ったサービスに新機能を追加しました
どうもえいやです。
ここ最近は、前回の記事で開発したAIを使って作った英語学習サービスの新機能開発などに取り組んでいます。欲しいな、と思った機能を広く浅く、60点出来くらいにしていくのが一旦の目標です。
今回は音声クローン技術を用いた読み上げ機能をリリースしました。音声クローン技術とは、元のボイスを用意して、その声色そっくりの合成音声を作る技術です。
今回の機能のために、ナレーターや出題者、会話文に出てくるキャラクターそれぞれが声色を使い分けての読み上げができるようにクローン音声モデルを作成しました。音声読み上げ機能がついたことで、こちらのサービスをリスニングの勉強にも使うことができるようになりました。
音声つきなのは、まだ一部のデータだけとなります。全データの音声を作るとなると容量の問題などで色々と不都合が出るので、生成された問題がある程度良さそうな時に生成することにします。
(こちらの記事は 2024年05月18日に Note に投稿したものを改変・転載したものです)
AI技術の解説
実装のコードなどは僕の Github を確認してみてください。
使用技術
今回の音声クローンに用いたのは OpenVoice V2 です。NVIDIAのGPU向けに作成されているためCUDAが使えないマシンではエラーがおきてしまうので、今回は M1 MBA で動くようにプログラム全体をCPUでも動くように書き換えて使用します。一部の機能については、M1 GPU向けのMPSでも動くようにできると思いますが、今回はCPUで計算します。
以下にフォークしてCPUで動くように調整したリポジトリを置いておきますね。
音声データセットには、moe-speech を用います。moe-speech は日本のプロの声優の声を大量に集めたデータセットです。質の高い学習元データとして重宝します。
また、透明性の高いライセンスに従って安心して利用ができるので、生成された声がやたら萌え声だったりイケボだったりしても困らない場合にはこちらを使っていれば問題はおきません。ただし、データセットが膨大すぎるがゆえに、声選びは面倒くさいです。
今回のサービスでも、出題者の音声のモデルを適当に選んでしまったので、出題者はやたら可愛い女の子の声になってしまっています。出題だと長尺の喋りがないので、試しに出題者のボイスモデルに長台詞をしゃべらせてみましょう。
女性声優をクローンしたものなので、がっつり萌え声ですね。
TTS
TTS(テキスト to スピーチ)ライブラリは、有名どころで Mozilla TTS の後継である coqui TTS がありますが、今回は OpenVoice V2 向けに調整されている音声モデルが使用できる Melo-TTS を使うことになります。
こちらは、OpenVoice V2 の方に解説があるとおりに導入すれば使えますが、たまにおかしくなるのでその場合は pip から削除して入れ直すと上手く動くことが多いようです。
なお、音声が入ったWavファイルがあればクローン音声で変換できるので、他のTTSで作成しても良いのですが、調整されていない音声だとやや変換結果のクローンっぷりが悪くなります。とくにそっくりにしゃべる必要がなければ何を使っても構わないでしょう。
TTS調教
TTS を使った読み上げでは
- ”A”を”エー”と発音させたり
- ”WW I”を”ワールドウォーワン”と発音してくれなかったり
- ”AI”を”アイ”と発音してしまう
など困った感じになってしまうので、調整が必要ですがMelo-TTSはTTSとしての機能はあまり豊富ではないので、テキストの綴りを頑張っていじって調整する必要があります。
また、長すぎるテキストを話させるとメモリ不足になったりストレージが圧迫されてしまったりするので、適度に分割してしゃべらせて後で結合しましょう。そのあたりのスクリプトも僕の Github の実装に同梱されています。
生成結果
さて、そのように色々と調整を掛けたりかけなかったりで、以下のような感じに出来上がります。違和感が小さいところは放っておいてます。
わりと自然に読み上げができていると思いますので、今回はこれでいくことにします。学習サイトの方では、Youtubeの再生リストから勝手に引っ張って音声再生機能を提供するようにしてあります。
テキストを確認しながら音声を再生することができますので、リスニングと発音の確認に役立ててみてください。
Discussion