BERT vs GPT: 인공지능의 두 얼굴 (이해 vs 생성)
1. 프롤로그 - "분류는 BERT, 생성은 GPT"라는 조언의 실체
제가 처음 자연어 처리(NLP) 프로젝트를 맡았을 때 들었던 가장 흔한 조언은 "텍스트 분류는 BERT를 쓰고, 텍스트 생성은 GPT를 써라"였습니다. 당시 저는 의문이 들었습니다. "둘 다 구글이 만든 Transformer(트랜스포머) 아키텍처 기반이라던데, 왜 용도가 이렇게 극명하게 갈리지?"
호기심에 저는 반대로 해봤습니다. GPT-2로 감성 분석(분류)을 시도했고, BERT로 문장 생성(생성)을 시도했죠. 결과는 처참했습니다. BERT가 뱉어낸 문장은 뒤죽박죽이었고, GPT가 분류한 감정은 정확도가 들쭉날쭉했습니다.
그제야 알게 되었습니다. "아, 태생부터 뇌 구조가 다르구나." BERT는 이해(Understanding)를 위해 태어난 녀석이고, GPT는 창작(Generation)을 위해 태어난 녀석입니다. 이 둘의 차이를 명확히 아는 것이 AI 엔지니어링의 시작입니다.
2. 처음엔 뭐가 이해가 안 갔나
가장 혼란스러웠던 부분은 "양방향(Bidirectional) vs 단방향(Unidirectional)"이라는 용어였습니다. "텍스트를 읽는 방향이 다르다는 건 알겠는데, 그게 왜 지능의 차이를 만들지?"
그리고 "Encoder"와 "Decoder"의 역할 분담도 헷갈렸습니다. 번역기 모델(Transformer)에서 인코더는 번역할 문장을 읽고, 디코더는 번역된 문장을 뱉어낸다는 건 알겠는데, 이걸 따로 떼어내면 무슨 일이 벌어지는지 상상이 안 갔습니다.
3. 어떤 포인트에서 이해가 됐나
이해하는 데 결정적이었던 비유는 "시험 문제 유형"이었습니다.
BERT (Bidirectional Encoder Representations from Transformers)
- 비유: "빈칸 채우기 문제" (Close Test)
- 방식: "나는
[MASK]를 먹었다. 그것은 빨갛고 달콤했다." - 사고 과정: 앞뒤 문맥("먹었다", "빨갛고", "달콤했다")을 동시에 봅니다. 그러고 나서
[MASK]에 들어갈 말이 "사과"라는 것을 추론합니다. - 핵심: 문장 전체를 한 번에 봅니다(양방향). 그래서 문맥 파악과 의미 이해에 천재적입니다.
GPT (Generative Pre-trained Transformer)
- 비유: "이어 쓰기 문제" (Autocomplete)
- 방식: "옛날 옛적에 호랑이 한 마리가..."
- 사고 과정: 지금까지 읽은 내용만 보고, 그다음 단어로 가장 적절한 "살았습니다"를 예측합니다. 그리고 또 그다음을 예측합니다. 미래의 단어는 컨닝하지 못합니다.
- 핵심: 앞에서부터 순서대로 봅니다(단방향). 그래서 말을 자연스럽게 이어가는 것(생성)에 천재적입니다.
4. 깊게 파고들기 - 구조적 차이
(1) BERT: 트랜스포머의 'Encoder' (이해 전문가)
BERT는 트랜스포머 모델에서 인코더(Encoder) 부분만 떼어내서 쌓아 올린 모델입니다. 인코더의 역할은 정보를 압축해서 "숫자(Vector/Embedding)"로 만드는 것입니다.
- 학습법 (MLM: Masked Language Model): 문장의 15%를 랜덤하게 가리고(Masking), 양옆의 단어를 힌트 삼아 정답을 맞히는 훈련을 혹독하게 시켰습니다.
- 강점: 문장 내 단어들 사이의 복잡한 관계를 파악합니다. "배(Ship)"와 "배(Pear)"를 문맥에 따라 완벽하게 구분합니다.
- 활용: 스팸 메일 필터링, 감정 분석, 검색 엔진(구글 검색에 적용됨), 개체명 인식(NER).
(2) GPT: 트랜스포머의 'Decoder' (창작 전문가)
GPT는 트랜스포머 모델에서 디코더(Decoder) 부분만 떼어내서 쌓아 올린 모델입니다. 디코더의 역할은 뱉어내는 것입니다.
- 학습법 (CLM: Causal Language Model): 다음 단어 맞히기 놀이를 시켰습니다. 인터넷의 모든 글을 읽히면서 "그다음엔 무슨 단어가 올까?"를 무한히 예측하게 했죠.
- 강점: 그럴싸한 말을 지어내는 능력입니다. 확률적으로 가장 자연스러운 단어를 선택하기 때문에 유창한 문장을 만듭니다.
- 활용: 챗봇, 소설 쓰기, 코드 작성(Copilot), 번역, 요약.
5. 실제로의 선택 가이드 (Show me the Code)
상황 1 - 고객 리뷰 긍정/부정 분류 (Sentiment Analysis)
선택: BERT 리뷰 전체를 다 읽고 판단해야 하기 때문입니다.
from transformers import BertTokenizer, BertForSequenceClassification
import torch
# BERT는 문장 전체를 한 번에 벡터화합니다.
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
text = "The movie was not bad at all."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
# 'not'과 'bad'의 관계를 이해하고 'Positive'로 분류
상황 2 - 마케팅 이메일 자동 작성 (Text Generation)
선택: GPT 자연스러운 문장 생성이 목표이기 때문입니다.
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')
prompt = "Subject: Meeting Invitation\nHi Team, I would like to"
inputs = tokenizer(prompt, return_tensors="pt")
# 창의성(Temperature)을 조절하며 다음 단어들을 생성
outputs = model.generate(inputs['input_ids'], max_length=50, temperature=0.7)
print(tokenizer.decode(outputs[0]))
6. 최신 트렌드 - 경계가 무너지고 있다
2023년 이후, LLM(Large Language Model)의 시대가 오면서 이 둘의 경계가 조금씩 희미해지고 있습니다.
- ChatGPT의 등장: GPT(생성 모델)에 RLHF(인간 피드백 강화학습)를 적용했더니, 분류나 추론 같은 '이해' 영역도 잘하게 되었습니다. "그냥 정답을 말하는 문장을 생성해 줘"라고 시키면 되니까요.
- Encoder-Decoder 통합: T5나 BART 같은 모델은 인코더와 디코더를 모두 사용하여, 요약이나 번역 같은 복합적인 작업에서 최고의 성능을 냅니다.
하지만 여전히 가성비(Cost/Performance) 측면에서는 구분이 유효합니다. 단순 분류 작업에 거대한 GPT-4를 쓰는 건 닭 잡는 데 소 잡는 칼을 쓰는 격이니까요. 빠르고 가벼운 DistilBERT가 훨씬 효율적일 수 있습니다.
7. 자주 묻는 질문 (FAQ)
Q1. BERT로 문장 생성은 절대 못 하나요?
할 수는 있습니다(Gibbs Sampling 등). 하지만 엄청 느리고 부자연스럽습니다. 빈칸을 하나 채우고, 다시 처음부터 돌려서 또 하나 채우고... 비효율의 극치입니다.
Q2. GPT가 거짓말(Hallucination)을 하는 이유는요?
GPT는 "진실"을 말하도록 학습된 게 아니라, "그럴싸한 다음 단어"를 말하도록 학습되었기 때문입니다. 문맥상 가장 확률이 높은 단어를 뱉는데, 그게 팩트인지는 검증하지 않습니다. (이걸 잡으려고 RAG 기술이 떴죠).
8. 요약 및 마무리
개발자로서 AI 모델을 고를 때, 이 기준만 기억하세요.
- BERT (이해): "분석가"입니다. 문서를 읽고 분류하거나, 정답을 찾아내는 데 쓰세요.
- GPT (생성): "작가"입니다. 글을 쓰거나, 대화를 나누는 데 쓰세요.
물론 요즘은 "똑똑한 작가(GPT-4)"가 분석도 잘해서 분석가 자리를 위협하고 있지만, 전용 분석가(BERT)가 필요한 순간(속도, 보안, 비용)은 반드시 옵니다. 도구의 특성을 정확히 알고 적재적소에 쓰는 것이 진짜 엔지니어의 실력이니까요.