GPT
Generative Pre-trained Transformer
OpenAI의 대규모 언어 모델. 자동 회귀 방식으로 텍스트 생성.
Generative Pre-trained Transformer
OpenAI의 대규모 언어 모델. 자동 회귀 방식으로 텍스트 생성.
GPT(Generative Pre-trained Transformer)는 OpenAI가 개발한 자기회귀(autoregressive) 언어 모델 시리즈입니다. 2018년 GPT-1(117M 파라미터)을 시작으로 GPT-2(1.5B), GPT-3(175B), GPT-4까지 발전했으며, 대규모 텍스트 데이터에서 다음 토큰을 예측하는 방식으로 사전학습됩니다.
GPT의 핵심 아키텍처는 Transformer의 디코더 부분만 사용합니다. 입력 시퀀스가 주어지면 마스크드 셀프 어텐션으로 이전 토큰들만 참조하여 다음 토큰을 생성합니다. BERT가 양방향 인코더를 사용하는 것과 달리, GPT는 단방향 디코더로 텍스트 생성에 특화되어 있습니다.
GPT 모델은 두 단계로 학습됩니다. 먼저 대규모 텍스트 코퍼스(웹페이지, 책, 위키 등)로 사전학습한 후, RLHF(Reinforcement Learning from Human Feedback)로 인간의 선호도에 맞게 파인튜닝합니다. ChatGPT는 GPT-3.5에 InstructGPT 기법을 적용한 버전입니다.
실무에서 GPT는 OpenAI API를 통해 사용됩니다. gpt-4, gpt-4-turbo, gpt-3.5-turbo 등 다양한 모델이 제공되며, 토큰당 가격이 책정됩니다(GPT-4 Turbo 기준 입력 $10/1M tokens, 출력 $30/1M tokens). 128K 컨텍스트 윈도우로 긴 문서 처리도 가능합니다.
from openai import OpenAI
client = OpenAI(api_key="your-api-key")
# 기본 Chat Completion
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Python에서 리스트 컴프리헨션을 설명해주세요."}
],
temperature=0.7,
max_tokens=500
)
print(response.choices[0].message.content)
# 스트리밍 응답
stream = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": "AI의 미래에 대해 설명해주세요."}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
# Function Calling (도구 사용)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
}]
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": "서울 날씨 알려줘"}],
tools=tools,
tool_choice="auto"
)
# JSON 모드
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[
{"role": "system", "content": "You output JSON only."},
{"role": "user", "content": "List 3 programming languages with their use cases."}
],
response_format={"type": "json_object"}
)
# 토큰 수 확인
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4")
text = "Hello, how are you?"
tokens = encoding.encode(text)
print(f"Token count: {len(tokens)}") # 5 tokens
"GPT와 BERT의 차이점을 설명해주세요." - "GPT는 단방향 디코더로 텍스트 생성에 특화되어 있고, BERT는 양방향 인코더로 텍스트 이해에 최적화되어 있습니다. GPT는 다음 토큰 예측으로 학습하고, BERT는 마스크드 언어 모델링과 문장 관계 예측으로 학습합니다. 생성 태스크는 GPT, 분류나 QA는 BERT가 더 적합합니다."
"GPT-4와 GPT-3.5 중 어떤 걸 쓰는 게 좋을까요?" - "비용 효율성이 중요하면 GPT-3.5-turbo가 20배 저렴합니다. 다만 복잡한 추론, 코드 생성, 긴 컨텍스트가 필요하면 GPT-4가 확실히 우수해요. 먼저 GPT-3.5로 MVP를 만들고, 품질이 부족한 부분만 GPT-4로 업그레이드하는 방식을 추천합니다."
"temperature를 0으로 설정한 이유가 있나요?" - "네, 이 API는 고객 지원 자동화용이라 일관된 응답이 중요합니다. temperature 0이면 greedy decoding으로 가장 확률 높은 토큰만 선택해서 재현성이 보장됩니다. 창의적 콘텐츠 생성이라면 0.7-0.9 정도가 적당해요."
GPT-4는 입출력 토큰 모두 과금됩니다. 시스템 프롬프트가 매 요청마다 포함되므로 길면 비용이 급증합니다. tiktoken으로 사전에 토큰 수를 계산하고, 필요시 요약이나 청킹으로 최적화하세요.
GPT는 자신감 있게 잘못된 정보를 생성할 수 있습니다. 팩트체크가 중요한 용도에서는 RAG(검색 증강 생성)를 적용하거나, 출처 명시를 요청하고 검증 절차를 추가하세요.
OpenAI API는 분당 요청 수(RPM)와 분당 토큰 수(TPM) 제한이 있습니다. 대량 처리 시 exponential backoff와 재시도 로직을 구현하고, 필요시 Usage Tier 업그레이드를 신청하세요.