Instruction Tuning
Instruction Tuning
지시문-응답 쌍으로 모델을 학습시키는 기법. 명령 수행 능력 향상.
Instruction Tuning
지시문-응답 쌍으로 모델을 학습시키는 기법. 명령 수행 능력 향상.
Instruction Tuning은 자연어 지시문(instruction)과 그에 대한 응답 쌍으로 언어 모델을 파인튜닝하는 기법입니다. "요약해줘", "번역해줘", "코드 작성해줘" 같은 명령을 이해하고 수행하는 능력을 모델에 학습시킵니다.
Google의 FLAN(Finetuned Language Net) 프로젝트에서 체계화되었으며, FLAN-T5는 1,800개 이상의 다양한 태스크 템플릿으로 학습되었습니다. 이를 통해 처음 보는 지시문에도 일반화(zero-shot generalization) 능력을 갖추게 됩니다.
기존 언어 모델은 다음 토큰 예측에 최적화되어 있어 명령 수행 능력이 부족합니다. Instruction Tuning은 "사용자 의도 파악 -> 적절한 응답 생성" 패턴을 학습시켜 ChatGPT처럼 대화형 AI를 만드는 핵심 기술입니다.
실무에서 FLAN-T5는 94.8% SQL 생성 정확도를 2시간 만에 달성했고(15B 모델 SQLCoder는 54시간), 의료 보고서 요약에서 GPT-4를 능가하는 성능을 보였습니다. 소규모 모델도 단일 GPU로 효과적으로 학습 가능합니다.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, Trainer, TrainingArguments
from datasets import Dataset
import torch
# FLAN-T5 모델 로드
model_name = "google/flan-t5-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
# Instruction Tuning 데이터셋 예시
instruction_data = [
{"instruction": "다음 문장을 요약해줘:", "input": "인공지능은 컴퓨터 과학의 한 분야로, 기계가 인간처럼 학습하고 추론하는 능력을 갖추게 하는 기술입니다.", "output": "AI는 기계에 학습과 추론 능력을 부여하는 기술입니다."},
{"instruction": "영어로 번역해줘:", "input": "안녕하세요, 만나서 반갑습니다.", "output": "Hello, nice to meet you."},
{"instruction": "감정을 분류해줘:", "input": "이 영화 정말 최고였어요!", "output": "긍정"},
]
# 데이터 전처리
def preprocess(examples):
inputs = [f"{ex['instruction']} {ex['input']}" for ex in examples]
targets = [ex['output'] for ex in examples]
model_inputs = tokenizer(inputs, max_length=256, truncation=True, padding="max_length")
labels = tokenizer(targets, max_length=128, truncation=True, padding="max_length")
model_inputs["labels"] = labels["input_ids"]
return model_inputs
dataset = Dataset.from_list(instruction_data)
tokenized_dataset = dataset.map(lambda x: preprocess([x]), batched=False)
# 학습 설정
training_args = TrainingArguments(
output_dir="./flan-t5-instruction-tuned",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=5e-5,
save_strategy="epoch"
)
trainer = Trainer(model=model, args=training_args, train_dataset=tokenized_dataset)
trainer.train()
print("Instruction Tuning 완료!")
"기본 LLM은 텍스트 완성에만 최적화되어 있어서 명령 수행이 어렵습니다. Instruction Tuning을 적용하면 '요약해줘', '번역해줘' 같은 지시문을 이해하고 수행할 수 있게 됩니다."
"Instruction Tuning은 지시문-응답 쌍으로 모델을 학습시키는 기법입니다. FLAN-T5가 대표적인데, 1,800개 이상의 태스크로 학습되어 처음 보는 지시문에도 잘 대응합니다. ChatGPT의 핵심 기술 중 하나입니다."
"FLAN-T5-base만으로도 단일 GPU에서 instruction tuning이 가능해요. 특정 도메인에 맞는 지시문 데이터셋만 구축하면 GPT API보다 저렴하게 자체 서비스를 운영할 수 있습니다."
"요약해줘", "요약해주세요", "Summarize"가 섞이면 모델이 패턴을 학습하기 어렵습니다. 일관된 템플릿을 사용하세요.
요약만 학습시키면 다른 지시문에 대한 일반화 능력이 떨어집니다. 다양한 태스크를 포함하세요.
분류, 요약, 번역, QA, 코드 생성 등 다양한 태스크를 포함하면 zero-shot 일반화 능력이 향상됩니다.