🎤 結論(まずはざっくり)
Encoder–Attention–Decoder 構造とは、
テキストを音声(またはメルスペクトログラム)に変換するための
“情報を読む → 関連付ける → 出力を作る” という3段階モデルのことです。
特に Tacotron / Tacotron2 などの TTS で使われており、
自然な発話の基礎となります。
🧩 ① Encoder(テキストを数値ベクトルに変換)
テキストはそのままではAIに扱えません。
そこで Encoder が次の処理を行います:
✔️ Encoderがすること
テキストを文字や音素に分割
Embedding で数値ベクトル化
Conv + LSTM で文の特徴を学習
例
“hello”
→ [‘h’,’e’,’l’,’l’,’o’]
→ [ベクトル, ベクトル, …]
→ 文全体の意味・発音特徴を持つ系列データ
Encoder の出力は、
文章を「読みやすい形」に整理した特徴データだと思えばOK。
🔎 ② Attention(どの文字を読んでいるか対応付ける)
Attention は TTS の心臓部で、最も重要です。
TTS では「テキストのどの部分を、話し声のどのタイミングで使うか」
という対応(Alignment)が必要ですが、
これを自動で解決してくれるのが Attention です。
✔️ なぜ必要?
音声は 1秒=数百フレーム
テキストは10文字程度
→ 「ある文字を何フレーム分話すか」が決まらない
✔️ Attention が行うこと
Decoder が「次にどの文字の情報を見るべきか」を計算する
視線を動かすように
今は “he” の部分を読む
次は “ll” を読む
最後は “o” を読む
といった 読み位置(焦点) を動かします。
TTS 特有の Attention
Location-sensitive Attention
逆戻りしにくい
読み飛ばしが起きにくい
🎛 ③ Decoder(メルスペクトログラムを生成)
✔️ Decoder が行うこと
Attention で選ばれた文字情報を使い、
少しずつメルスペクトログラムを生成する。
仕組み:
現在のメルフレーム (1フレーム) を入力
LSTM(またはGRU)に通す
次のメルフレームを生成
Attention で次に参照する文字位置を更新
これを繰り返す(autoregressive)
図で描くとこう:
(text) → Encoder → Attention → Decoder → mel
→ mel
→ mel
※ Tacotron2 は1ステップで5フレームまとめて生成する(Teacher Forcingあり)
📘 全体の流れ(図)
┌────────┐ ┌──────────┐ ┌──────────┐
│ Encoder │ → │ Attention │ → │ Decoder │ → Melスペクトログラム
└────────┘ └──────────┘ └──────────┘
↑ テキスト入力 ↑ 文字のどこを使う?
これが TTS の “中核構造” です。
🗣 なぜこの構造がTTSに向いているの?
✔️ 1. 文字数と音声フレーム数が一致しない
文字数:数十
音声フレーム:数千
Attention が自動で対応付けてくれる。
✔️ 2. 抑揚(プロソディ)が自然に出る
Decoder が自動で長さや強弱を学習するため
人間に近い発話が実現。
✔️ 3. End-to-Endで学習が簡単
従来のような細かい手設計(ルール)が不要。
🔧 技術者向け(もう少しだけ深く)
Encoder
512次元 embedding
3層の 1D Conv(ReLU)
Bi-LSTM(256ユニット×2方向)
Attention
Location-Sensitive
Additive(Bahdanau)Attention の拡張
Decoder
Prenet(Dropout付き全結合)
2層 LSTM(1024次元)
Postnet(Conv)
🎯 まとめ(超簡単理解バージョン)
構造 役割 たとえ
Encoder テキストを理解する 本を読む
Attention 次にどこを読めばいいか決める 文章の特定の場所に視線を置く
Decoder 声の元(mel)を作る 読んだ文章を声に変換