どうもオタクです。
永遠・・・手に入れたくない?
皆さん唐突ですがずんだもんをご存知でしょうか?
最近YouTubeによくいるずんだの妖精(?)なんですけれども
それはこちらのvoicevoxと呼ばれる読み上げソフトの子なんです。
【https://voicevox.hiroshiba.jp/】
一度聞いてみると分かるのですが非常に良質で違和感なく喋ってくれます。
そして、こちらのソフトのUIをお借りしている別のソフトcoeiroinkというものがあります。
こちらも非常に良質な音声合成ソフトなのですが
なんと、約500文程度の読み上げデータ(ITAコーパス)さえあればgoogle colabにあげられているコードを使用してcoeiroinkで使用できる音声ライブラリを作成することができるのです!
ITAコーパスとは日本語の音声の機械学習を行う際に必要な言葉の詰まった台本らしいです。
これをもっと簡単に、スマホでもできるようにしたものにcoefontがあります。
が、しかし録音をするのにも喋らせるのにもお金がかかります。
品質は非常に良いものですし、何より録音したら終わりなので最も楽な方法でもあるのですが
無料で誰でも使える永遠の声にしたいので、今回はmycoeiroinkを作っていこうと思います。
目次
- ITAコーパスにある424文の録音
- MYCOEIROINK作成コードの実行
- COEIROINKへの導入
- 完成品
ではまず録音から始めていきましょう。
coefontを作ったことがあるのでなんとなく予想はできるんですけど
同じ環境で424文ものテキストの録音を行うのはシンプルにキッッッッツイです。
最初はiphoneで録音していたのですが、ファイルリネームや再収録がとても手間で耐えられなかったので、録音支援ツールを入手しようと思います。
coefontではこういった支援ツールが予め用意されていましたが、mycoeiroinkの方ではあくまでも学習のためのコードと実行環境を提供していただいているだけなので、録音支援ツールは自分で手に入れる必要があります。
というわけでこちらの記事を参考にreaperとスクリプトを導入しました。
画面はこんな感じになります。液タブがあったので指で操作できて便利でした。
とりあえず録音は終わりましたがなんだかんだ四時間ほど費やした気がします。読むのが難しいんです。
収録の際に難しい単語もでてくるので、こっちで読みを確認したほうが良いです。
【https://github.com/mmorise/ita-corpus/blob/main/recitation_%E6%9C%97%E8%AA%AD%E8%80%85%E7%94%A8.pdf】
なんやかんやあり、がんばって424文収録しました。
しかし、PCのファンのせいでノイズが酷いです。一応ノイズ処理しておきました。
【https://note.com/littleright_lr/n/n2486466b17a5】
こちらの記事を参考にノイズを消しました。
で、リージョンをファイル名に切り替えて出力します。
発音していない部分の空白があるデータになってしまいましたが
おそらく特徴として識別されないと信じて処理しません。
めんどくさいしな
- MYCOEIROINK作成コードの実行
公式サイトに行ってcolabを開いてすべてのコードを指示に従いながら実行するだけです。
なんて便利!
唯一困ったことがあるとすれば、ブラウザを開きっぱなしで長時間放置する必要があることでしょうか。
colabのGPUランタイム上限になるまで約5時間、21epochまで学習しました。
epochとは機械学習で学習回数のことを指します。
epoch数は50ほどあれば良いそうなので一日待ってGPUランタイムが使用できるようになったら再び学習させます。
- COEIROINKへの導入
詳しいことはcolabの方に書いてあるのでそれに従えばすぐに導入できます。
mycoeiroinkの面白いところは学習回数が浅い段階でも喋らせることができる点かも知れません。
学習回数が20増えるごとに喋らせてみたのでその感想(?)を書いておきます。
epoch20
声がプルプルします。決してなめらかとはいえない喋り方です。
epoch40
学習させたwavファイルが、発話後の無音部分を処理していなかったためか、文章を喋らせたときに最後の間が長くなってしまっています。
20epochよりもマシですが少し声がプルプルします。
epoch60
かなり違和感なく喋るようになりました。声もほぼプルプルしません。
文章の最後の不自然な間もなくなったので、実用できる感じはある。
もう少し学習回数を増やそうと思います。
epoch80
表現が難しいのですが、プルプル感や元の音声モデル感が薄まると言うか、自然になってきました。
epoch100
スクリプトは100epochまで回す用なので、学習は終わりです。これに対しての感想は……とりあえず出力結果を聞いてほしいですね。
- 完成品