金融と工学のあいだスマートフォン用の表示で見る金融と工学のあいだ興味関心に関するメモ(機械学習、検索エンジン、プログラミングなど)この広告は、90日以上更新していないブログに表示しています。2018-08-17ChainerでWaveNetによる音声合成のチュートリアルを書いてみたIntroductionこのチュートリアルではWaveNetを使ったボコーダーにより人の音声を合成します。実行できるチュートリアルは最下部にあります。ボコーダーとは、音声をパラメータ化した入力を元に音声を合成することです。ロボットボイスは、人の音声からその発話の特徴量をパラメータとして取得し、それを元にロボットの音色の音声を合成しています。そのため、音声合成で一般的なText-to-Speech(TTS)のように文字列を入力とするのではなく、音声を入力として音声合成します。上記の画像のように、音声波形はあるサンプリングレートで毎時刻の値で波形が保存されていますが、それをWaveNetは生成します。今回はボコーダーということで、ランダムに音声を生成するのではなく、入力した音声と似た発話の音声を合成できるようになっています。いういうことかというと、音声をパラメータ化してWaveNetの入力として使うことで、生成される音声に条件付けできるようになっています。このチュートリアルでわかることは以下の通りです。Oordらによって提案されたPixcelCNN[2]は、数千ものの画素数の画像を精緻に生成できる手法ですが、これを音声に応用したものです。artな精度を発揮しています。生成確率の積としてモデリングしています。\end{align*}ただ、単にPixcelCNNを適用しただけではなく、WaveNetを提案する上で以下のような工夫もされています。Convolutionを使っていることが挙げられます。依存するようにできます。-1)しかありません。そのため、音声のような長期の関係性があるデータを生成するためには隠れ層を相当な数増やさなければなりません。Convolutionを使用します。Convolutionはフィルタをあてるときに、入力をいくつかスキップします。その結果、出力に影響を与える入力を効果的に過去までさかのぼって使うことができます。実数連続値を出力とする問題の場合、通常は回帰問題として解くことが多いですが、WaveNetでは識別問題として解いています。識別問題で使用されるsoftmax分布はその分布の形に一切の仮定がないため任意の分布をモデルでき、結果として精度が良い場合があるからです。音声の場合各サンプルが16bitで表現されることが多く、そのままだと16bit=65,536クラスの識別問題として解かなければなりません。この数の識別問題は解けそうもないため、以下のようなμ-law変換[3]を用いて8bit=256に量子化します。\end{align*}これなら画像程度の量子化数になるので扱いやすい問題になります。Residual層とスキップコネクションWaveNet全体としては、以下のようなネットワークを使用しています。スキップコネクションを使うことで収束を高速化します。Blockの入力に補助的な特徴量を追加することができます。conditioningといいます。発話者のidを入力することで、その発話者独特の音声を生成することができます。conditioningと言います。今回のチュートリアルでは発話者のスペクトログラムを入力することで、発話者の細かい音色や内容を生成することができます。以下のように、Colaboratoryで実装の説明を行っています。ブラウザさえあれば今すぐにGPU環境でチュートリアルを動かすことが可能なので、お試しください。Colaboratory」のリンクをを押すとColaboratoryで開くことができます。(1)texはてなブログをはじめよう!kumechannさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。