翻訳AIが「猫」という単語を出力する瞬間、入力側の「cats」に視線を向けている——そんな入力と出力の橋渡しをするのがSource-Target Attentionです。Self-Attentionとの区別が試験で狙われやすい、Attention理解の要となるキーワードです。

📖 ひと言でいうと

Source-Target Attentionとは、エンコーダ・デコーダ型のモデルで、デコーダが出力を1ステップ生成するごとに「入力(ソース)側のどの部分を参照すべきか」を動的に決める仕組みです。Encoder-Decoder Attentionとも呼ばれます。

例えるなら、通訳者が訳文を一語ずつ話しながら、手元にある原文メモの該当箇所へ都度目を走らせるようなものです。「今この単語を訳すには原文のどこを見るべきか」という視線の配り方を、モデルが自動で学習します。

🖼 1枚でわかるSource-Target Attention

Source-Target Attention
  • 別名 — Encoder-Decoder Attention
  • 役割 — デコーダが出力生成時にエンコーダ側の注目箇所を動的に決定
  • 背景 — Seq2Seqの固定長ベクトルによる情報損失への対策
  • 計算 — 関連度(アライメントスコア)→ソフトマックス→加重平均
  • 成果物 — コンテキストベクトル(次の出力生成の情報源)
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

Source-Target Attentionは、特に機械翻訳などの自然言語処理タスクで重要な役割を担う技術である。これは、エンコーダ・デコーダモデルにおいて、デコーダが出力を生成する際に、エンコーダが入力文から抽出した特徴の中で、どの部分に注目すべきかを動的に決定する仕組みである(Encoder-Decoder Attentionとも呼ばれる)。従来のシーケンス・ツー・シーケンス(Seq2Seq)モデルでは、エンコーダが入力文全体を固定長のベクトルに圧縮し、デコーダはそのベクトルを基に出力文を生成していた。しかし、この方法では、長い文や複雑な文脈を扱う際に情報の損失が生じやすいという課題があった。そこで、Attention機構が導入され、デコーダが出力の各ステップで、エンコーダの隠れ状態全体を参照し、適切な部分に焦点を当てることが可能となった。具体的には、デコーダは現在の生成ステップにおいて、エンコーダの各隠れ状態との関連度(アライメントスコア)を計算し、ソフトマックス関数で正規化することで重みを得る。これらの重みを用いて、エンコーダの隠れ状態の加重平均を求め、コンテキストベクトルとして取得する。このコンテキストベクトルが、デコーダの次の出力を生成する際の重要な情報源となる。

かみ砕くと、Seq2Seqでは入力文の情報が固定長ベクトル1本に押し込められ、長文で情報が失われるのが弱点でした。Source-Target Attentionは、デコーダが出力の各ステップで「エンコーダの隠れ状態の全部」を見に行けるようにし、その中から今必要な部分に重みを付けて取り出す仕組みです。

「関連度を計算→ソフトマックスで正規化→加重平均でコンテキストベクトルを作る」という3段階の計算手順まで問われ得るので、流れごと理解しておきましょう。

🔍 しっかり理解する

計算の流れ——スコアから重み、そしてコンテキストベクトルへ

関連度計算
デコーダの現在状態とエンコーダの各隠れ状態のアライメントスコア
正規化
ソフトマックス関数で合計1の重みに変換
加重平均
重み×隠れ状態を合算しコンテキストベクトルを取得
出力生成
コンテキストベクトルを情報源に次の単語を生成

この処理は出力1単語ごとに毎回やり直されます。つまり注目先は固定ではなく、「今どの単語を生成しようとしているか」に応じて毎ステップ変わる——これが「動的に決定する」の意味です。

クエリ・キー・バリューの言葉で整理すると、デコーダの現在の状態がクエリ(問い合わせ)、エンコーダ側の各隠れ状態がキー(照合対象)とバリュー(取り出す中身)に対応します。「クエリはターゲット側、キーとバリューはソース側から来る」のがSource-Target Attentionの構造的な特徴です。

Self-Attentionとの違い——どこと どこを結ぶか

🅰 Source-Target Attention
  • 入力(ソース)と出力(ターゲット)の間の注目
  • クエリ=デコーダ側、キー/バリュー=エンコーダ側
  • 「訳語と原語の対応付け」のような異なる系列間の関係を捉える
  • Encoder-Decoder Attentionとも呼ぶ
🅱 Self-Attention
  • 同じ1つの系列の内部での注目
  • クエリ/キー/バリューがすべて同一系列由来
  • 「この単語は同じ文のどの単語と関係が深いか」を捉える
  • Transformerの中核要素

名前のとおり、Source(入力側)とTarget(出力側)という2つの異なる系列を結ぶのがSource-Target Attention、1つの系列(Self=自分自身)の中の単語同士を結ぶのがSelf-Attentionです。Transformerのデコーダには両方が組み込まれており、Self-Attentionで「ここまで生成した訳文の文脈」を整え、Source-Target Attentionで「原文のどこを見るか」を決めています。

なぜ長文に強くなるのか

固定長ベクトル方式では、デコーダが使える情報は「入力全体の要約1本」だけでした。Source-Target Attentionでは、エンコーダの隠れ状態(単語ごとの情報)がすべて保持されたまま残り、必要なときに必要な場所を参照できます。要約1枚だけを渡されるのと、原文全ページを手元に置いて付箋を貼りながら訳すのとの違い、と考えると腑に落ちるはずです。入力が長くなっても参照先が増えるだけで、情報そのものは失われません。

💡 具体例で考える

「I love cats」を訳す瞬間の重みの動き

「I love cats」を「私は猫が好き」と訳す場面を考えます。デコーダが「猫」を生成するステップでは、エンコーダの隠れ状態のうち「cats」に対応するものとの関連度が高く計算され、ソフトマックス後の重みは例えばcatsに0.8、loveに0.15、Iに0.05のように偏ります。この重みで加重平均したコンテキストベクトルは「cats」の情報を色濃く含み、デコーダは自信を持って「猫」を出力できます。次に「好き」を生成するステップでは、重みの山は「love」側へ移ります。

このように単語の対応関係(アライメント)が重みとして現れるため、Attentionの重みを可視化すると「訳語と原語の対応表」のような図が得られることが知られています。英語と日本語のように語順が大きく違う言語対でも、注目先が文の前後へ柔軟にジャンプできる点が強みです。「アライメントスコア」という名称も、この単語同士の整列(アライメント)関係を数値化したものという意味で理解すると覚えやすいでしょう。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • Self-Attentionとの混同 — 最重要の区別です。異なる系列間(エンコーダ⇔デコーダ)を結ぶのがSource-Target Attention、同一系列内はSelf-Attentionです。
  • 「注目先は事前に固定される」は誤り — 重みは出力の各ステップで毎回計算し直されます。「動的に決定」という表現がこの点を指します。
  • コンテキストベクトルと固定長ベクトルの混同 — Seq2Seqの固定長ベクトルは入力全体の1回きりの要約、コンテキストベクトルは各生成ステップで作り直される加重平均です。
  • 別名の見落とし — Encoder-Decoder Attentionという表記で出題されても同じものを指すと判断できるようにしておきましょう。

📝 試験でのポイント

💡 ポイント
  • 「デコーダが出力生成時に、エンコーダが抽出した特徴のどこに注目すべきかを動的に決定する仕組み」という定義文の正誤判定・穴埋めが基本形です。
  • 計算手順の並べ替え(アライメントスコア計算→ソフトマックス正規化→加重平均→コンテキストベクトル)が問われる可能性があります。
  • Self-Attention/Source-Target Attention/Multi-Head Attentionを並べ、記述に合うものを選ばせる対比問題が典型パターンです。
  • 導入の背景として「Seq2Seqの固定長ベクトル圧縮による情報損失」を選ばせる因果問題にも備えましょう。

📚 まとめ

💡 ポイント
  • Source-Target Attention(Encoder-Decoder Attention)は、デコーダが出力を生成する際にエンコーダ側のどこに注目すべきかを動的に決める仕組みです。
  • 背景にはSeq2Seqの固定長ベクトル圧縮による情報損失の課題があります。
  • 計算は「アライメントスコア→ソフトマックスで重み化→隠れ状態の加重平均=コンテキストベクトル」の流れです。
  • 異なる系列間を結ぶ点が、同一系列内のSelf-Attentionとの決定的な違いです。