Skip to main content

[LLM] 3. GPT 모델 개요 및 실습


GPT 모델이란


GPT는 Generative Pre-trained Transformer의 약자입니다. GPT는 autoregressive 방식으로 왼쪽에서 오른쪽으로 문장을 예측합니다.

GPT의 text 처리 방식

input text -> 토큰화 -> tokenized text -> 토큰 ID화 -> token IDs -> token embeddings -> GPT decoder transformer -> token embeddings -> token ids -> output text

GPT 모델 실습 TOY 모델

import random

corpus = [
"오늘 날씨가 맑다",
"오늘 날씨가 흐리다",
"오늘 날씨가 춥다",
"오늘 기분이 좋다",
"오늘 기분이 나쁘다"
]

# 단어 사전 만들기
word_dict = {}
for sentence in corpus:
words = sentence.split()
for i in range(len(words)-1):
key,value = words[i], words[i+1]
if key not in word_dict:
word_dict[key] = []
word_dict[key].append(value)

# 다음 단어 예측 함수
def predict_next_word(word):
if word in word_dict:
return random.choice(word_dict[word])
else:
return "?"

# 단어 예측
input_word = "오늘"
predicted_word = predict_next_word(input_word)
print(f"'{input_word}' 다음에 올 단어는: '{predicted_word}'")
  • ✅ 실행 예시
'오늘' 다음에 올 단어는: '기분이'
'오늘' 다음에 올 단어는: '날씨가'

간단한 LLM 구현하기


PyTorch와 Hugging face의 transformers 라이브러리를 이용하여 GPT-2 모델을 가져와서 실행해보는 실습을 진행합니다.

import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer

# load model & tokenizer
model_name = "gpt2"
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)

# input text 정의
input_text = "Artificial Intelligence is"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# text 생성
output = model.generate(input_ids, max_length=50, num_return_sequences=1)

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print("Generated Text: \n", generated_text)

코드를 나눠서 보자면

model_name = "gpt2"
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)

모델과 토크나이즈를 pretrained된 애들로 불러왔고

input_text = "Artificial Intelligence is"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

text를 token ID로 변환하여서

output = model.generate(input_ids, max_length=50, num_return_sequences=1)

답변을 생성하였습니다.

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)

생성된 답변을 decode하여 자연어로 볼 수 있도록 변환합니다.