개발 창고/AI

BERT 구조와 사전학습(Pretraining) 이해하기

Royzero 2025. 8. 25. 22:00
반응형

BERT 구조와 사전학습(Pretraining) 이해하기


1. 들어가며

이제부터는 트랜스포머 기반의 대표 모델을 본격적으로 다룹니다.
그 첫 번째가 바로 **BERT(Bidirectional Encoder Representations from Transformers)**입니다.

BERT는 2018년 구글에서 발표한 모델로, 기존 자연어 처리 모델들의 성능을 크게 뛰어넘으며 다양한 벤치마크에서 새로운 기준을 세웠습니다.


2. BERT의 핵심 아이디어

  1. 양방향성(Bidirectional)

    • 기존의 언어 모델은 왼쪽 → 오른쪽, 혹은 오른쪽 → 왼쪽으로만 문맥을 이해했습니다.
    • BERT는 양방향으로 동시에 문맥을 파악합니다.
  2. 사전학습(Pretraining)

    • 대규모 말뭉치(Corpus)에서 먼저 언어 구조를 학습
    • 이후 특정 작업(분류, 질의응답 등)에 맞게 파인튜닝(Fine-tuning)

3. BERT의 주요 학습 방식

3.1 Masked Language Model (MLM)

  • 입력 문장의 일부 단어를 [MASK] 토큰으로 가리고, 이를 예측하는 방식

  • 예:

    "나는 [MASK]를 먹었다." → "사과"

3.2 Next Sentence Prediction (NSP)

  • 두 문장이 이어지는 관계인지 학습

  • 예:

    • A: "나는 영화를 보았다."
    • B: "정말 재미있었다." → 이어짐(1)
    • B: "나는 저녁을 먹었다." → 이어지지 않음(0)

이 두 가지 과제를 통해 문맥 이해력문장 관계 파악 능력을 동시에 얻게 됩니다.


4. BERT의 구조

  • 트랜스포머 인코더(Transformer Encoder)만 사용
  • 각 입력은 토큰 단위로 쪼개져 임베딩 벡터로 변환
  • 포지셔널 인코딩 + 세그먼트 임베딩 추가
  • 여러 층의 멀티헤드 어텐션과 피드포워드 레이어를 거쳐 깊은 문맥 표현 생성

5. 파이썬 실습: Hugging Face로 BERT 사용하기

사전학습된 BERT를 활용해 간단한 문장 분류를 수행해봅니다.

from transformers import BertTokenizer, TFBertForSequenceClassification
import tensorflow as tf

# 1. 토크나이저 불러오기
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# 2. 입력 문장 인코딩
inputs = tokenizer("BERT is a powerful NLP model", return_tensors="tf")

# 3. 사전학습된 모델 불러오기
model = TFBertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

# 4. 모델 예측
outputs = model(inputs)
logits = outputs.logits

print("로짓 출력:", logits)

예상 출력 (샘플):

로짓 출력: tf.Tensor([[-0.12  0.45]], shape=(1, 2), dtype=float32)

여기서 logits 값은 분류 결과에 대한 점수이며, 소프트맥스를 적용하면 확률로 해석할 수 있습니다.


6. BERT의 활용 분야

  • 문장 분류 (긍정/부정 리뷰 분석)
  • 질의응답(QA) (질문과 문맥을 입력하면 정답 위치 추출)
  • 문장 유사도 측정
  • NER(개체명 인식)

7. 오늘의 정리

  • BERT는 양방향 Transformer 인코더 기반 모델
  • MLM과 NSP로 사전학습 후, 다양한 작업에 파인튜닝 가능
  • Hugging Face Transformers 라이브러리로 손쉽게 활용 가능
반응형