Pretraining

1. Pretraining 개요

Pretraining(사전 훈련) 은 대량의 텍스트 데이터를 기반으로 모델이 언어 패턴을 학습하는 초기 단계입니다. 이 과정에서 모델은 특정 작업에 최적화되지 않은 일반적인 언어 이해 능력을 습득합니다. (GPT에서 P)
  • 사전 학습(Pretraining)은 대량의 텍스트 데이터에서 언어 모델을 훈련하는 과정
  • 이후 특정 태스크에 맞게 미세 조정(Fine-Tuning)하여 활용
  • 대표적인 사전 학습 모델: BERT, GPT, T5, RoBERTa, DistilBERT

2. Pretraining의 필요성

  • 대량의 데이터 활용 가능: 사람이 직접 레이블링하지 않아도 모델을 훈련 가능
  • 전이 학습(Transfer Learning) 적용: 적은 양의 데이터만으로도 높은 성능 달성 가능
  • 언어의 일반적 패턴 학습: 특정 태스크(Fine-Tuning) 전에 기본적인 언어 구조 이해

3. Pretraining 방식

사전 학습 모델은 크게 Language UnderstandingLanguage Generation 으로 나뉨.

1) Masked Language Model (MLM)

  • 일부 단어를 [MASK]로 가린 후 이를 예측하는 방식

  • BERT가 대표적인 모델

    from transformers import pipeline
    
    fill_mask = pipeline("fill-mask", model="bert-base-uncased")
    print(fill_mask("Hugging Face is a [MASK] platform."))
    

2) Causal Language Model (CLM)

  • 이전 단어들을 기반으로 다음 단어를 예측

  • GPT 시리즈가 대표적인 모델

    generator = pipeline("text-generation", model="gpt2")
    print(generator("Once upon a time", max_length=30))
    

3) Seq2Seq Pretraining

  • 입력과 출력이 있는 텍스트 변환 방식

  • T5, BART 등이 대표적

    translator = pipeline("translation_en_to_fr", model="t5-small")
    print(translator("Hello, how are you?"))
    

4. 주요 사전 학습 모델

모델 학습 방식 특징
BERT Masked Language Model (MLM) 문장 이해, 양방향 학습
GPT-2 Causal Language Model (CLM) 텍스트 생성에 특화
T5 Text-to-Text Model 모든 NLP 태스크를 텍스트 변환 방식으로 통합
RoBERTa MLM (BERT 변형) 더 많은 데이터를 활용하여 BERT 개선
DistilBERT 경량화된 BERT 연산량 감소, 속도 향상

5. Pretraining 데이터셋

  • 사전 학습 모델들은 대량의 공개 데이터셋을 활용하여 학습됨
  • 대표적인 데이터셋:
    • BooksCorpus: 11,000여 개의 책에서 추출한 텍스트 데이터
    • Wikipedia: 다양한 분야의 문서를 포함하는 백과사전 데이터
    • Common Crawl: 인터넷에서 수집한 대규모 텍스트 데이터
    • OpenWebText: Reddit에서 고품질 문서만 필터링한 데이터

6. Pretraining 구현 (Keras)

import tensorflow as tf
from transformers import TFAutoModelForMaskedLM, AutoTokenizer

model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = TFAutoModelForMaskedLM.from_pretrained(model_name)

text = "Hugging Face is a [MASK] platform for NLP."
tokens = tokenizer(text, return_tensors="tf")

output = model(**tokens)
print(output.logits.shape)  # (batch_size, sequence_length, vocab_size)

7. Pretraining의 한계

  1. 막대한 계산량 필요 → TPU, GPU 등 고성능 연산 장비 요구
  2. 일반성 문제 → 특정 도메인에 대한 Fine-Tuning 필요
  3. 문맥 한계 → 긴 문맥을 처리하는 데 제약 있음

8. 결론

  • Pretraining은 NLP 모델 성능을 극대화하는 핵심 기술
  • 다양한 Pretrained 모델을 활용하여 특정 태스크에 Fine-Tuning 가능
  • BERT, GPT, T5 등 모델에 따라 다양한 Pretraining 방식 존재

실습 노트북

Leave a Comment