본문 바로가기
HRDI_AI/머신러닝_딥러닝 핵심 기술과 실무 중심 생성형 AI 프로젝트

AutoModelForSeq2SeqLM

by Toddler_AD 2025. 11. 27.

AutoModelForSeq2SeqLM은 Hugging Face Transformers에서 “번역·요약 같은 시퀀스-투-시퀀스(Seq2Seq) 모델을 자동으로 불러오기 위한 래퍼 클래스”입니다.

조금 더 풀어서, 지금 우리 ke-t5-large-ko 코드 기준으로 설명해볼게요.


1. 이름 그대로 풀기

  • Auto
    → “모델 이름만 주면, 딥러닝 아키텍처를 자동으로 골라서 로딩하겠다”
    → 내부에서 config를 보고 “이건 T5네?”, “이건 BART네?” 하고 알아서 선택
  • ModelForSeq2SeqLM
    → “시퀀스 → 시퀀스 언어모델(Sequence-to-Sequence Language Modeling)용 모델”
    → 입력 시퀀스를 받아 출력 시퀀스를 생성하는 구조 (인코더-디코더)

그래서:

AutoModelForSeq2SeqLM =
“번역/요약/질문-응답 같은 Seq2Seq 작업을 위해
적절한 인코더-디코더 언어모델을 자동으로 로딩해주는 클래스”

라고 이해하시면 됩니다.


2. 우리 코드에서 어떻게 쓰이고 있나?

지금 스크립트에서:

model_name = "KETI-AIR/ke-t5-large-ko"

model = AutoModelForSeq2SeqLM.from_pretrained(
    model_name,
    device_map="auto",
    # dtype=torch.float16,
)
 

이 한 줄이 의미하는 것은:

  1. "KETI-AIR/ke-t5-large-ko" 리포지토리의 config.json을 읽어보고
  2. “이건 T5 계열이네?” 라고 인식한 다음
  3. 내부적으로 T5ForConditionalGeneration 클래스를 선택해서
  4. 그 가중치를 from_pretrained로 로딩한 뒤
  5. Seq2Seq 언어모델로 사용할 수 있게 래핑하는 것

즉, 직접 T5ForConditionalGeneration를 쓰는 대신:

# 이렇게 안 해도
from transformers import T5ForConditionalGeneration
model = T5ForConditionalGeneration.from_pretrained("KETI-AIR/ke-t5-large-ko")

# 이렇게만 써도 알아서 T5를 골라줌
from transformers import AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("KETI-AIR/ke-t5-large-ko")
 

처럼 모델 타입을 “자동”으로 골라주는 역할을 합니다.


3. 어떤 작업에 쓰는 모델인가? (용도)

AutoModelForSeq2SeqLM은 “단일 문장 분류” 같은 게 아니라,
“입력 문장을 다른 문장으로 바꾸는” 작업에 특화되어 있습니다:

  • 번역 (Translation)
    • 한→영, 영→한 등
  • 요약 (Summarization)
  • 생성형 QA (Question Answering: 질문 → 정답 문장)
  • 지시형 생성 (Instruction → Response)

공통점은:

“입력 시퀀스가 있고, 그에 대응하는 출력 시퀀스 전체를 생성”하는 구조

이기 때문에 인코더-디코더(Encoder-Decoder) 아키텍처를 사용합니다.

  • Encoder: 입력 문장(한국어)을 인코딩 → hidden states
  • Decoder: Encoder 출력을 참고하면서 한 토큰씩 영문 번역을 생성

4. 내부에서 제공하는 기능

AutoModelForSeq2SeqLM (정확히는 그 아래 실제 클래스, 예: T5ForConditionalGeneration)는 다음을 기본으로 제공합니다.

4-1. forward() – 학습용

 
outputs = model( input_ids=..., attention_mask=..., labels=..., ) loss = outputs.loss logits = outputs.logits
  • labels를 넣으면 자동으로 CrossEntropy loss를 계산해서 loss를 리턴
  • HuggingFace Trainer가 이 loss를 가지고 학습합니다.

4-2. generate() – 추론/번역용

 
generated_ids = model.generate( input_ids=..., attention_mask=..., max_length=..., num_beams=4, )
  • beam search, greedy, sampling 등 다양한 생성 전략을 지원합니다.
  • 우리가 predict_with_generate=True를 켰을 때 eval에서 내부적으로 이 generate()가 호출됩니다.

그래서 학습(train)추론(inference) 둘 다를 위한 기능이 이미 다 들어 있습니다.


5. AutoModel 계열의 철학

HuggingFace에는 AutoModel 계열이 여러 개 있습니다.

  • AutoModel – 그냥 backbone만 (BERT/T5/BART 등)
  • AutoModelForSequenceClassification – 문장 분류용
  • AutoModelForTokenClassification – 개체명 인식 등 토큰 태깅용
  • AutoModelForSeq2SeqLM – 번역/요약 같은 Seq2Seq 생성용

핵심 철학은:

“사용자는 모델 이름만 알고 있어도 된다.
나머지 세부 아키텍처 선택은 우리가 자동으로 해줄게.”

이 덕분에:

  • BART, T5, mBART, LED 등 서로 다른 Seq2Seq 아키텍처를 쓰더라도
  • 코드 레벨에서는 똑같이 AutoModelForSeq2SeqLM.from_pretrained("모델이름") 으로 통일할 수 있습니다.

6. 정리

AutoModelForSeq2SeqLM은 Hugging Face Transformers에서
“번역·요약 같은 시퀀스-투-시퀀스(Seq2Seq) 작업용 모델을 자동으로 불러오기 위한 클래스”다.
모델 이름만 주면 내부에서 적절한 인코더-디코더 아키텍처(T5, BART, mBART 등)를 선택하고,
토큰 단위 CrossEntropy 손실을 제공하는 forward()와
문장 생성용 generate()까지 한 번에 사용할 수 있다.
덕분에 우리는 구체적인 모델 클래스를 직접 지정하지 않고도
다양한 Seq2Seq 모델을 같은 코드로 교체해가며 실험할 수 있다.