Step 16 Seq2Seq: 번역의 시작

Encoder-Decoder 구조로 시퀀스 변환 (번역/요약)

1. 지금까지와 무엇이 다른가?

Step 9~15까지는 모두 분류(Classification) 문제였습니다. 입력 텍스트를 받아 카테고리 하나를 출력했죠. 이제부터는 차원이 다릅니다. 입력도 시퀀스, 출력도 시퀀스인 문제를 다룹니다!

📊 분류 vs 생성 비교

구분분류 (Step 9~15)생성 (Step 16~)
입력텍스트텍스트 (시퀀스)
출력카테고리 1개텍스트 (시퀀스)
출력 길이고정 (클래스 수)가변 (매번 다름)
대표 태스크감정분석, 뉴스분류번역, 요약, 대화
대표 모델RoBERTa, BERTSeq2Seq, GPT

2. Seq2Seq란?

Sequence-to-Sequence. 말 그대로 시퀀스를 받아서 시퀀스를 출력합니다. 2014년 Google이 발표한 이 구조는 기계 번역의 역사를 바꿨습니다.

🏗️ Encoder-Decoder 구조

Seq2Seq 전체 구조 나는 학교에 간다 RNN RNN RNN ENCODER Context Vector "나는 학교에 간다" 의 의미 압축 RNN RNN RNN RNN I go to school DECODER <SOS> 동작 원리 ① Encoder: 입력 문장을 읽으며 의미를 하나의 Context Vector로 압축 ② <SOS> 토큰으로 Decoder 시작 신호 전달 ③ Decoder: Context Vector를 받아 단어를 하나씩 생성, <EOS> 토큰이 나올 때까지 반복

3. 핵심 아이디어: Context Vector

Encoder의 마지막 hidden state가 Context Vector입니다. 입력 문장 전체의 의미를 하나의 벡터에 담습니다.

💡 Context Vector의 역할

❌ Context Vector 없이

Decoder가 입력 문장을 기억하지 못함. 긴 문장일수록 앞부분 정보 소실.

✅ Context Vector 사용

입력 전체 의미가 벡터에 압축됨. Decoder의 모든 스텝에서 이 정보를 활용.

# Encoder: 문장 → Context Vector
input:  ["나는", "학교에", "간다"]
         ↓       ↓       ↓
        RNN  →  RNN  →  RNN
                         ↓
               context = h_final  # [1, 256] 벡터

# Decoder: Context Vector → 번역
context → RNN → "I"
context → RNN → "go"
context → RNN → "to"
context → RNN → "school"
context → RNN → <EOS>  # 종료!

4. 특수 토큰

🔤 Seq2Seq에서 사용하는 특수 토큰

토큰의미사용 위치역할
<SOS>Start of SequenceDecoder 입력 첫 번째"이제 생성 시작해!" 신호
<EOS>End of SequenceDecoder 출력 마지막"생성 완료!" 신호
<PAD>Padding짧은 문장 뒤배치 내 길이 통일
<UNK>Unknown어휘에 없는 단어미등록 단어 처리

5. Teacher Forcing

학습 시 Decoder가 틀린 단어를 예측해도 다음 입력으로 정답 단어를 주는 기법입니다.

🎓 Teacher Forcing 이해하기

Teacher Forcing OFF (추론 시)

이전 예측값을 다음 입력으로 사용.
오류가 누적될 수 있음.

예측: "I" → "go" → "to" → ...
Teacher Forcing ON (학습 시)

틀렸어도 정답을 다음 입력으로 사용.
학습이 안정적이고 빠름.

정답: "I" → "go" → "to" → ...

6. Seq2Seq의 한계

⚠️ Context Vector의 병목 문제

긴 문장일수록 정보 손실 증가 짧은 문장 (3단어) 충분! 긴 문장 (10단어) 정보손실! → 이 한계를 해결한 것이 Attention 메커니즘!

고정된 크기의 Context Vector 하나에 입력 문장 전체를 압축하다 보니, 문장이 길수록 앞부분 정보가 소실됩니다. 이 문제는 Step 18(Seq2Seq + Attention)에서 해결합니다.