C.W.K.
Stream
Lesson 06 of 06 · published

Sequence-to-sequence + cross attention

~13 min · seq2seq, encoder-decoder, translation

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

번역, 요약, 코드 생성 뒤의 패턴

어떤 task는 한 sequence를 다른 길이의 sequence로 매핑: 번역 (영어 → 한국어), 요약 (기사 → 초록), 코드 생성 (설명 → 코드). 이건 encoder-decoder 패턴 따라.

Encoder는 전체 입력 sequence 읽고 context representation 만들어 (보통 hidden state sequence). Decoder는 encoder context (cross-attention 통해)와 이미 생성한 토큰 (self-attention 통해) 둘 다에 조건화돼서 토큰별로 출력 생성.

2026년 production: research 아니면 seq2seq를 처음부터 짜지 마. KerasHub가 T5, BART, Whisper pretrained 한 줄 로드 제공. Task에 fine-tune; architecture 세부는 처리됨.

Code

KerasHub T5/BART/Whisper·python
import keras_hub

# T5 — general seq2seq, fine-tunable
t5 = keras_hub.models.T5CausalLM.from_preset("t5_base_multi")

# BART for summarization (pretrained on CNN/DailyMail)
bart = keras_hub.models.BartSeq2SeqLM.from_preset("bart_large_en_cnn")

input_text = "TensorFlow is an open-source machine learning framework..."
summary = bart.generate(input_text, max_length=100)
print(summary)

# Whisper — speech-to-text
whisper = keras_hub.models.WhisperAudioToText.from_preset("whisper_base_en")
Custom seq2seq core — Encoder + CrossAttention·python
import tensorflow as tf
from tensorflow.keras import layers

class Encoder(tf.keras.layers.Layer):
    def __init__(self, vocab_size, d_model):
        super().__init__()
        self.embedding = layers.Embedding(vocab_size, d_model, mask_zero=True)
        self.rnn = layers.Bidirectional(
            layers.GRU(d_model // 2, return_sequences=True),
            merge_mode='concat',
        )

    def call(self, x, training=False):
        return self.rnn(self.embedding(x), training=training)


class CrossAttention(tf.keras.layers.Layer):
    def __init__(self, d_model):
        super().__init__()
        self.mha = layers.MultiHeadAttention(key_dim=d_model // 4, num_heads=4)
        self.layernorm = layers.LayerNormalization()

    def call(self, x, context, training=False):
        attn_out, _ = self.mha(
            query=x, value=context, key=context,
            return_attention_scores=True, training=training,
        )
        return self.layernorm(x + attn_out)

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.