Tacotron2による音声合成を体験する

Tacotron2とは

f:id:shirowanisan:20201221131935p:plain

Tacotron2Google社が提案したテキストから音声に変換するアルゴリズム」です。

論文発表は2017年。しかし、2020年11月現在でも、その生成音声は最高水準の品質です。

下記にその生成音声を載せておきます。肉声と違いがわからないかもしれません。

 

"This is a pen."

 

Tacotron2の仕組み

f:id:shirowanisan:20201108202551p:plain

Tacotron2を使ってテキストを音声に変換する場合は「テキストからメルスペクトログラムへの変換」のあとに「メルスペクトログラムから音声への変換」を行います。

メルスペクトログラムとは、とてもざっくり説明すると声の設計図のようなものです。

Tacotron2は「テキストからメルスペクトログラムへの変換」のみを行います。

「メルスペクトログラムから音声への変換」は、Tacotron2の論文ではWaveNet、NVIDIA社のソースコードではWaveGlowというアルゴリズムを用いています。

WaveGlowは、WaveNetの処理を軽量化したものです。

Tacotron2のソースコード

Tacotron2のアルゴリズムはGoogle社から提案されましたが、その実装ソースコードはNVIDIA社が公開しています。

以下より、NVIDIA社のTacotron2+WaveGlowのソースコードをダウンロード可能です。

ただし、ソースコードの実行にはNVIDIA社のGPUが必要です。

github.com

github.com

クラウドでTacotron2+WaveGlowを使う

GPUを持っていなくても、Tacotron2はクラウドでのコード実行環境「Google Colab(無料)」で実行することが可能です。手順は以下の通りです。

  1. 下記のリンクにアクセスする
  2. タブの「編集→ノートブック」ハードウェアアクセラレータをGPUに変更
  3. 上から順番にコードを実行する
  4. コード内のtext変数の値を変えることで好きな言葉での音声生成が可能

colab.research.google.com

※ 現在(2021/06/12)、アップデートなどが原因で上記のGoogle Colab Notebookが動作しないようです。応急処置ではありますがpreprocessing部分の内容を以下のように置き換えると動かすことができました。ただ、こちらの置き換えも今後のアップデートによっては動かなくなる可能性もあるのでご注意ください。

# preprocessing
!git clone https://github.com/NVIDIA/tacotron2.git %cd /content/tacotron2 from text import text_to_sequence import numpy as np sequence = np.array(text_to_sequence(text, ['english_cleaners']))[None, :] sequence = torch.from_numpy(sequence).to(device='cuda', dtype=torch.int64) input_lengths = np.array([len(sequence[0])]) input_lengths = torch.from_numpy(input_lengths).to(device='cuda', dtype=torch.int64) # run the models with torch.no_grad(): mel, _, _ = tacotron2.infer(sequence, input_lengths) audio = waveglow.infer(mel) audio_numpy = audio[0].data.cpu().numpy() rate = 22050

Tacotron2の学習を行う

f:id:shirowanisan:20201108171830p:plain

Tacotron2の学習に必要なものは音声ファイルと、それに対応するテキストのみです。

下記のリンクのように音声ファイルのパステキストをまとめたファイルで指定します。 

https://raw.githubusercontent.com/NVIDIA/tacotron2/master/filelists/ljs_audio_text_train_filelist.txt

自分の好きな声を生成するTacotron2を作る

好きな声の音声ファイルでTacotron2を学習させれば、その声質のTacotron2が作れます。

下記の動画は、私が作ったTacotron2に話させたものです。

ちなみに、WaveGlowはNVIDIA社公開のモデルを使い、自分で学習させていません。

「メルスペクトログラムから音声への変換」非話者依存なので、好きな声に変えたいという目的においては、再学習の必要はありません。

まとめ

Tacotron2は入力にイントネーションの情報がないため、イントネーションが安定しないことがあります。

今後は、このイントネーションをどう安定させるかが課題ですね。

参考文献

[1712.05884] Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions

エンタメ活用へ向けたAIによる音声生成(Part1) · DeNA Engineers' Blog

美少女声への変換と合成. Introduction | by Lento | Medium

DeepLearning でアニメキャラのボイロを作った話 【モデル作成編 その1】 - MLエンジニアのモノづくり日記

Tacotron2を調べてみた1 - やってみた!