『FastSpeech:論文の概要と実装』

『FastSpeech:論文の概要と実装』の早口表現:実装について解説

テキスト読み上げとトランスフォーマーによる実現方法について学びましょう

2019年、FastSpeechは、単語の繰り返しや省略を防ぎながら、推論速度を大幅に改善することで、ニューラルテキスト読み上げのフロンティアを押し進めました。それにより、話し方や韻律における出力音声の制御も可能になりました。

この記事では、トランスフォーマーがテキスト読み上げにどのように使用されているかを理解し、FastSpeechの論文の概要を簡潔に紹介し、ゼロから実装する方法を紹介します。ただし、トランスフォーマーやその異なる構成要素については既に理解しているものとします。もし理解していない場合は、このトピックを詳しく説明した前の記事のレビューを強くお勧めします。

ヴァン・ゴッホ風の絵、トランスフォーマーがマイクで話す姿がポディウムに写っています — Canvaを使用して著者によって生成されたもの

目次

背景イントロダクションメルスペクトログラム論文の概要イントロダクション実験と結果アーキテクチャエンコーダー長さ調整デコーダー実装戦略完全な実装

背景

イントロダクション

従来のテキスト読み上げ(TTS)モデルでは、連結的な手法や統計的な手法が使用されていました。連結的手法では、音素音声(言語の音の単位)のデータベースから音声を合成することによって音声を合成しました。統計的手法(例:HMM)では、音波を生成するために必要な基本的な音声特性をモデル化しようとしました。しかし、どちらの手法も自然な音声や感情の表現に問題がありました。つまり、与えられたテキストに対して非自然なまたはロボットのような音声を生成する傾向がありました。

TTSの品質は、深層学習(ニューラルネットワーク)を使用することで大幅に改善されました。このような方法では、通常、2つの主要なモデルが使用されます:最初のモデルはテキストを受け取り、対応するメルスペクトログラムを出力し、2番目のモデルはメルスペクトログラムを受け取り、音声を合成します(ボコーダーと呼ばれます)。

メルスペクトログラム

スペクトログラム by The Official CTBTO Photostream on Flickr CC BY-SA 2.0.

最も基本的な形では、音声波形は単に時間の経過に伴う気圧の変動を表す振幅の連続です。短時間フーリエ変換(STFT)を使用して、どの波形でも対応するメルスペクトログラム(元の波形の異なる周波数の振幅を示す行列)に変換することができます。短時間フーリエ変換を使用してオーディオの一部をメルスペクトログラムにマッピングすることは簡単ですが、逆はかなり難しく、最良の体系的な方法(たとえば、Griffin Lim)では粗い結果しか得られません。このタスクに対してモデルをトレーニングすることが好ましいアプローチです。このタスク用にトレーニングされた既存のモデルには、WaveGlowとWaveNetがあります。

したがって、繰り返し述べるように、ディープラーニングの方法では、しばしばテキストから音声へのアプローチが、テキストの多くのインスタンスに対応する音声のメルスペクトログラムを予測するモデルをトレーニングすることによって行われます。それから、別のモデル(ボコーダーと呼ばれる)を使って、予測されたスペクトログラムをオーディオにマッピングします。FastSpeechは、NvidiaのWaveGlowモデルを使用しています。

A Happy Transformer Writing a Research Paper, Painted in Van Gogh Style. — Generated by Author using Canva

論文の概要

イントロダクション

最近のトランスフォーマーベースのテキスト読み上げ(TTS)の方法は、従来の方法に比べて音声の品質を劇的に改善させていますが、これらのモデルにはまだ次の3つの主な問題があります:

  • トランスフォーマーのデコーダが自己回帰的であるため、インファレンススピードが遅いことがあります。つまり、メルスペクトログラムのチャンクを逐次的に生成し、以前に生成されたチャンクに依存しています。これは、RNNやCNNベースの古いディープラーニングモデルにも当てはまります。
  • 頑健ではありません。注意スコア(またはアライメント)のわずかなエラーが逐次生成中に伝播することにより、単語のスキップや繰り返しが発生する可能性があります。
  • 生成された音声の速度や韻律(イントネーションなど)などの特徴を簡単に制御する方法がありません。

FastSpeechは、これらの3つの問題を解決しようとします。他のトランスフォーマーアーキテクチャとの2つの主な違いは次のとおりです:

  • デコーダは非自己回帰的であり、完全に並列化可能です。したがって、スピードの問題を解決します。
  • デコーダの直前に長さ調整器コンポーネントを使用し、音素とメルスペクトログラムの理想的な整列を保証し、クロスアテンションコンポーネントを削除します。
  • 長さ調整器の動作方法により、ハイパーパラメータを使用して音声の速度を簡単に制御することができます。一時停止の長さなど、韻律の細かい特性も同様に制御できます。
  • これに対して、長さ調整器の目的のために、トレーニング中にシーケンスレベルの知識蒸留を使用します。言い換えれば、トレーニングには別のすでにトレーニングされたテキスト読み上げモデル(トランスフォーマーTTSモデル)に依存しています。

実験と結果

著者は、LJSpeechデータセットを使用しました。このデータセットには、約24時間にわたる音声が13100個のオーディオクリップに分散して格納されています(各クリップには対応する入力テキストが付属しています)。トレーニングのタスクは、テキストを入力してモデルが対応するスペクトログラムを予測することです。データの約95.6%がトレーニングに使用され、残りは検証およびテストに使用されるように分割されました。

  • インファレンスの高速化自己回帰的なトランスフォーマーTTSモデルと比較して、推論速度が38倍(またはボコーダを含まない場合は270倍)向上します。そのため、FastSpeechという名前です。
  • 音声の品質英語を母語とする20人の評価者による平均評価スコアを使用して、著者はFastSpeechがトランスフォーマーTTSモデルとTacotron 2(当時の最新技術)の品質に非常に近いことを示しています。
  • 頑健性FastSpeechは、難しいテキスト読み上げの例50件において、スキップや繰り返しのゼロエラーレートでTransformer TTSおよびTacotron 2を上回りました。Transformer TTSとTacotron 2はそれぞれ24%と34%でした。
  • コントロール性著者は、速度と一時停止の長さの制御が機能することを示す例を示しました。
  • 略奪著者は、トランスフォーマーに1D畳み込みを統合し、シーケンスレベルの知識蒸留を使用するなどの決定の効果を確認しています。それぞれの決定の欠如によるパフォーマンスの劣化(平均評価スコアに基づく)も示されています。

アーキテクチャ

FastSpeechの論文からのFastSpeechアーキテクチャの図

最初の図はエンコーダ、長さレギュレータ、デコーダからなる全体のアーキテクチャを描いています。

フィードフォワードトランスフォーマ(FFT)ブロックは、エンコーダとデコーダの両方で使用されます。これはトランスフォーマエンコーダレイヤーに似ていますが、位置ごとのFFNを1D畳み込みで置き換えています。ハイパーパラメータNは、エンコーダとデコーダの中に直列に接続されたFFTブロックの数を表します。論文では、Nは6に設定されています。

長さレギュレータは、その入力のシーケンス長を、その入力に基づいて時間予測器(第3図)によって調整します。時間予測器は第4図に示される単純なネットワークです。

データフローは以下のような形状をしているはずです:

エンコーダ

エンコーダは、テキストで与えられた文字に対応する整数のシーケンスを取ります。論文では、テキストを音素文字のシーケンスに変換するためにグラフェム-フォネム変換器を使用することができますが、私たちは単純に文字を使用して文字の単位として使用し、モデルがトレーニング中に必要な任意の音素表現を学習できることを想定しています。したがって、入力「こんにちは!」に対して、エンコーダは[“S”,”a”,”y”,…,”!”]のようなシーケンス10の整数を取ります。

エンコーダの目的は、与えられたテキスト内の各文字に豊富なベクトル表現を割り当てることです。このベクトル表現は、音素文字自体、その順序、およびその他の文字との関係を考慮に入れています。トランスフォーマと同様に、エンコーダではAdd&Normの目的で割り当てられたベクトルの次元数を維持します。

n個の文字からなる入力シーケンスに対して、エンコーダは[ h₁,h₂,…,hₙ ]を出力します。ここで、各表現は次元数emb_dimを持ちます。

長さレギュレータ

長さレギュレータの目的は、単純に各文字に対してエンコーダの表現を繰り返すことです。考え方は、テキスト内の各文字の発音が通常、複数の(またはゼロの)メルスペクトログラムユニット(デコーダによって生成される)に対応するということです。メルスペクトログラムユニットとは、メルスペクトログラムの1列を指し、その列に対応する時間窓に音の周波数分布を割り当て、波形中の実際の音に対応します。

長さレギュレータの動作は次のようになります:

  1. 各文字のメルスペクトログラムユニットの数を予測します。
  2. その数に応じてエンコーダの表現を繰り返します。

例えば、「knight」に対応する入力文字のエンコーダの表現 [h₁, h₂, h₃, h₄, h₅] が与えられた場合、推論時には次のような処理が行われます:

  1. 長さレギュレータは、各表現を時間予測器に渡します。時間予測器は、表現(他のすべての文字との関係を含める)を使用して、対応する文字のメルスペクトログラムの数を表す単一の整数を予測します。
  2. 時間予測器が [1, 2, 3, 2, 1] を返したとすると、長さレギュレータは各隠れ状態を予測された継続時間に応じて繰り返し、[h₁, h₂, h₂, h₃, h₃, h₃, h₄, h₄, h₅] を生成します。これにより、シーケンスの長さ(10)がメルスペクトログラムの長さとなります。
  3. この新しいシーケンスをデコーダに渡します。

実際の設定では、knightをFastSpeechに渡し、時間予測器の出力を検査すると、[ 1, 8, 15, 3, 0, 17]となります。ここで、文字kghは他の文字と比べてメルスペクトログラムにほとんど寄与していないことに注目してください。実際には、その単語が話されるときには、ほとんどnitが発音されます。

操作性 予測された期間をスケーリングすることで、速度を簡単に制御できます。たとえば、[1、8、15、3、0、17]が倍になると、単語knightを言うのにかかる時間は2倍になります(速度が0.5倍速)。また、半分に乗算して(四捨五入された後)、単語の発話に対応する特定の文字(例:スペース)の期間を変更すると、その発音の期間(一時停止期間など)を制御することも可能です。

トレーニング

トレーニング中、FastSpeechは予測された期間を使用して期間予測器を予測せずに、訓練済みのTTS Transformerの注意行列を使用して期間を予測します。

  • そのトランスフォーマーのクロスアテンションは、各文字とMel Spectrogramユニットを注意スコアで関連付けます。
  • したがって、FastSpeechのトレーニング中に文字cのMel Spectrogramユニット(期間)の数を予測するために、TTSトランスフォーマーのクロスアテンション行列を使用して、その文字に最大の注意が向けられたMel Spectrogramユニットの数を数えます。
  • クロスアテンションは複数の注意行列(各ヘッド用の1つ)を含むため、これは最も「対角線」的な注意行列でこの操作を実行します。文字とMel Spectrogramユニット間の現実的な対応を確保することができるかもしれません。
  • この期間は、期間予測器のトレーニングにも使用されます(単純な回帰タスク)。これにより、推論中にこの教師モデルを必要としません。

デコーダー

デコーダーは、この新しい表現を受け取り、各Mel Spectrogramユニットの周波数内容(ベクトル)を予測しようとします。これは、テキストに対応するスペクトログラム全体を予測することと同等であり、これはボコーダを使用してオーディオに変換することができます。

デコーダーはエンコーダーと類似のアーキテクチャを使用しています。最初のブロック(埋め込み層)を最後のブロックとして線形層に置き換えるだけです。この層は、デコーダーの先行FFTブロックがMel Spectrogramユニットのために形成した複雑な特徴表現を使用して、各Mel Spectrogramユニットの周波数ベクトルを生成します。

周波数の数n_melsは、この層のハイパーパラメータです。論文では80として設定されています。

現代的な未来型トランスフォーマーがコンピュータをプログラミングしている、ヴァン・ゴッホ風の絵 — — Canvaを使用して作成、著者によって生成されました

実装

FastSpeechのアーキテクチャ図(FastSpeechの論文から)

ストラテジー

FastSpeechのアーキテクチャは次のように対応しています

実装を開始します:

そして

次に、エンコーダーとデコーダーを実装することができます。なぜなら、それらの構成は以下のようになっているからです

これで必要なのは長さ調整器だけです

最後のステップを行うと、

完全な実装

この記事をスパムにしないために、以前にオーガナイズされたコードの最適化と学習しやすいバージョンの< a href=”https://github.com/xcmyz/FastSpeech”>元の実装の注釈付きノートブックを用意しました。推論目的で使用できます。それはGithubまたはGoogle Colabで見つけることができます。ただし、Google Colabでは音声は再生されません(ノートブックをダウンロードしてオフラインで実行する必要があります)。トランスフォーマーアーキテクチャで見つけられる異なるコンポーネントを理解することを強くお勧めします。

A Modern Futuristic Jet Flying Towards the Stars Painted in Van Gogh style — Generated by Author using Canva

この記事で提供される説明がFastSpeechとそのアーキテクチャの理解を向上させるのに役立ち、ゼロから実装する方法についてのガイドとなることを願っています。次回まで、さようなら。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more