1. 서론
현대의 자연어 처리(NLP) 분야에서 전이 학습(Transfer Learning)과 사전 훈련(pre-training) 모델이 큰 인기를 끌고 있습니다. 특히, Hugging Face의 Transformers 라이브러리는 이러한 모델을 쉽게 사용할 수 있는 도구를 제공합니다. 본 강좌에서는 Hugging Face의 Transformers 라이브러리를 활용하여 DistilGPT2 모델을 설치하고, 사전 학습된 모델을 불러오는 방법에 대해 설명하겠습니다.
2. DistilGPT2란 무엇인가?
DistilGPT2는 OpenAI의 GPT-2 모델을 기반으로 한 경량화 모델입니다. 일반적인 GPT-2 모델보다 훨씬 적은 수의 파라미터를 가지고 있지만, 성능은 꽤 유지되고 있습니다. 특히, 훈련 시간과 리소스를 줄이는 데 유리하여 실용적인 애플리케이션에서 많이 사용됩니다.
- 경량성: DistilGPT2는 수백만 개의 파라미터를 감축하여 더 빠른 처리 속도를 자랑합니다.
- 우수한 성능: 사전 훈련된 모델이므로 범용적인 자연어 처리 작업에 잘 맞습니다.
- 다양한 활용: 텍스트 생성, 요약, 번역 등 여러 NLP 태스크에 사용될 수 있습니다.
3. 설치하기
Hugging Face의 Transformers와 PyTorch 또는 TensorFlow 라이브러리가 필요합니다. 가장 간단하게는 pip를 이용하여 설치할 수 있습니다. 아래의 명령어를 사용해보세요.
pip install transformers torch
4. 사전 학습 모델 불러오기
설치가 완료되면, 사전 훈련된 DistilGPT2 모델을 불러올 수 있습니다. 아래의 예제 코드를 통해 이를 수행하겠습니다.
from transformers import DistilGPT2Tokenizer, DistilGPT2LMHeadModel
# 1. 토크나이저와 모델 불러오기
tokenizer = DistilGPT2Tokenizer.from_pretrained("distilgpt2")
model = DistilGPT2LMHeadModel.from_pretrained("distilgpt2")
# 2. 텍스트 입력
input_text = "AI는 미래의 기술입니다."
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# 3. 모델을 사용한 텍스트 생성
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
# 4. 생성된 텍스트 출력
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
위 코드는 DistilGPT2 모델을 불러와 입력된 텍스트를 기반으로 해서 새로운 텍스트를 생성하는 과정입니다.
5. 코드 분석
1. 토크나이저와 모델 불러오기:
DistilGPT2Tokenizer.from_pretrained("distilgpt2")
와 DistilGPT2LMHeadModel.from_pretrained("distilgpt2")
를 사용하여 사전 학습된 토크나이저와 모델을 불러옵니다.
2. 텍스트 입력:
입력 텍스트를 tokenizer.encode()
를 사용하여 토큰화합니다. return_tensors='pt'
인자는 PyTorch 텐서 형태로 반환하도록 해줍니다.
3. 모델을 사용한 텍스트 생성:
model.generate()
메소드를 사용하여 입력된 텍스트로부터 최대 50개의 단어로 이루어진 새로운 텍스트를 생성합니다.
4. 생성된 텍스트 출력:
tokenizer.decode()
를 사용하여 생성된 아이디를 다시 텍스트로 변환합니다. 또한 skip_special_tokens=True
를 통해 특수 토큰은 제외합니다.
6. 활용 예제
실제 환경에서 DistilGPT2 모델을 활용하는 다양한 예제에 대해 살펴보겠습니다. 텍스트 생성, 대화형 AI, 텍스트 요약 등 여러 상황에서 활용할 수 있습니다.
6.1 텍스트 생성 모델
특정 주제나 키워드에 기반한 텍스트를 생성하는 텍스트 생성 모델을 만들 수 있습니다.
def generate_text(model, tokenizer, prompt, max_length=50):
input_ids = tokenizer.encode(prompt, return_tensors='pt')
output = model.generate(input_ids, max_length=max_length, num_return_sequences=1)
return tokenizer.decode(output[0], skip_special_tokens=True)
prompt = "딥러닝은"
generated = generate_text(model, tokenizer, prompt)
print(generated)
위의 함수는 주어진 프롬프트를 바탕으로 새 텍스트를 생성해주는 기능을 가지고 있습니다.
6.2 대화형 AI 예제
사용자와 대화하는 간단한 AI도 구현할 수 있습니다.
def chat_with_ai(model, tokenizer):
print("AI와 대화를 시작합니다. 종료하려면 'quit'를 입력하세요.")
while True:
user_input = input("당신: ")
if user_input.lower() == 'quit':
break
response = generate_text(model, tokenizer, user_input)
print("AI: ", response)
chat_with_ai(model, tokenizer)
7. 모델 평가 및 튜닝
사전학습된 모델을 액세스하고 사용할 수 있는 방법을 배웠지만, 특정 도메인에 맞춰 성능을 향상시키기 위해 모델을 미세 조정할 필요가 있을 수 있습니다. Fine-tuning을 통해 특정 데이터셋에 대해 모델을 학습시킬 수 있으며, Hugging Face의 Trainer
클래스를 사용하여 손쉽게 이 작업을 수행할 수 있습니다.
from transformers import Trainer, TrainingArguments
# 트레이닝 아규먼트 설정
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=2,
save_steps=10_000,
save_total_limit=2,
)
# Trainer 인스턴스 생성
trainer = Trainer(
model=model,
args=training_args,
train_dataset=your_train_dataset,
)
# 모델 학습
trainer.train()
8. 결론
본 강좌를 통해 Hugging Face의 Transformers 라이브러리를 사용하여 DistilGPT2 모델을 설치하고 사전 훈련된 모델을 불러오는 방법을 배웠습니다. 텍스트 생성, 대화형 AI 등 여러 응용 프로그램을 만들어볼 수 있으며, 더 나아가 Fine-tuning을 통해 특정 데이터셋에 맞춰 모델을 개선할 수도 있습니다.