본 강좌에서는 허깅페이스의 트랜스포머(Transformers) 라이브러리를 활용하여 DistilGPT-2 모델을 이용한 문장 작성을 실습해보겠습니다. DistilGPT-2는 OpenAI의 GPT-2 모델을 기반으로 하여 경량화된 모델로, 빠르고 효율적으로 텍스트 생성을 수행하는 데 최적화되어 있습니다. 이 모델은 다양한 자연어 처리(NLP) 태스크에서 사용될 수 있으며, 특히 자동 작문에 뛰어난 성능을 보여줍니다.
1. 사전 준비
DistilGPT-2 모델을 사용하기 위해 아래의 라이브러리를 설치해야 합니다.
pip install transformers torch
- transformers: 허깅페이스 트랜스포머 라이브러리
- torch: 파이토치(PyTorch) 딥러닝 라이브러리
위의 명령어를 통해 필요한 라이브러리를 모두 설치합니다.
2. 모델 로드하기
모델을 사용하기 위해 먼저 필요한 라이브러리를 임포트하고, DistilGPT-2 모델과 토크나이저를 로드합니다.
from transformers import DistilGPT2LMHeadModel, DistilGPT2Tokenizer
# DistilGPT-2 모델과 토크나이저 로드
tokenizer = DistilGPT2Tokenizer.from_pretrained('distilgpt2')
model = DistilGPT2LMHeadModel.from_pretrained('distilgpt2')
이 코드는 distilgpt2라는 사전 학습된 모델을 로드합니다. 이제 우리는 모델을 사용해 텍스트를 생성할 수 있습니다.
3. 텍스트 생성하기
이제 준비된 모델을 사용해 텍스트를 생성해 보겠습니다. 문장의 시작 부분을 주면, 모델이 그에 기반하여 다음 단어들을 생성합니다.
# 텍스트 생성 함수 정의
def generate_text(prompt, max_length=50):
# 입력 텍스트를 토큰화
inputs = tokenizer.encode(prompt, return_tensors='pt')
# 모델을 통해 텍스트 생성
outputs = model.generate(inputs, max_length=max_length, num_return_sequences=1)
# 생성된 텍스트 디코딩
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# 사용 예
prompt = "딥러닝은"
generated_text = generate_text(prompt)
print(generated_text)
위 코드에서 generate_text
함수는 주어진 프롬프트(prompt) 다음에 최대 max_length
만큼의 텍스트를 생성합니다. tokenizer.encode
를 사용하여 입력 텍스트를 토큰화하고, model.generate
를 통해 텍스트를 생성한 후에, 생성된 텍스트를 다시 디코딩하여 문자열 형태로 반환합니다.
4. 다양한 텍스트 생성 파라미터 조정하기
텍스트 생성 시 여러 가지 파라미터를 조정하여 생성된 결과에 차이를 줄 수 있습니다. 여기에 주요 파라미터를 소개합니다:
- max_length: 생성할 텍스트의 최대 길이
- num_return_sequences: 생성할 텍스트 시퀀스의 수
- temperature: 낮은 값(예: 0.7)은 더 예측 가능한 텍스트를 생성하고, 높은 값(예: 1.5)은 다양성을 증가시킵니다.
- top_k: 가능한 다음 단어 중 상위 k개만 샘플링
- top_p: 누적 확률이 p에 도달할 때까지 가능한 범위에서 샘플링
이제 이러한 파라미터를 사용해 텍스트를 생성하는 예제를 살펴보겠습니다:
# 다양한 파라미터를 사용하여 텍스트 생성
def generate_text_with_params(prompt, max_length=50, temperature=1.0, top_k=50, top_p=0.9):
inputs = tokenizer.encode(prompt, return_tensors='pt')
outputs = model.generate(
inputs,
max_length=max_length,
num_return_sequences=1,
temperature=temperature,
top_k=top_k,
top_p=top_p,
do_sample=True
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# 사용 예
prompt = "인공지능의 발전은"
generated_text = generate_text_with_params(prompt, temperature=0.7, top_k=30, top_p=0.85)
print(generated_text)
위의 generate_text_with_params
함수에서는 추가적인 파라미터를 통해 텍스트 생성 방식을 조정합니다. 이렇게 다양한 방법으로 텍스트를 생성할 수 있습니다.
5. 실습: 소설 작성하기
이번에는 위에서 학습한 내용을 바탕으로 짧은 소설을 작성해보겠습니다. 사용자가 제공한 프롬프트에 따라 이야기의 전개를 생성해보세요.
# 소설 작성 예제
story_prompt = "한때 평화롭던 마을에 갑작스러운 폭풍이 몰아쳤다. 주민들은 모두"
story = generate_text_with_params(story_prompt, max_length=150, temperature=0.9)
print(story)
이 코드는 주어진 프롬프트에서 시작하여 최대 150자의 텍스트를 생성합니다. 템퍼러쳐를 높게 설정하였기에 보다 창의적인 내용이 생성될 것입니다. 생성된 소설을 통해 DistilGPT-2의 텍스트 생성 능력을 체험해볼 수 있습니다.
6. 결과 및 피드백
위에서 생성한 문장을 읽어보고, 생성된 텍스트가 어떤 느낌을 주는지, 그리고 모델이 어떤 부분에서 기대를 뛰어넘거나 부족했는지 피드백을 제공하세요. 이 피드백은 모델의 개선점 및 활용 방안을 찾는 데 도움이 될 것입니다.
7. 결론
본 강좌에서는 허깅페이스 라이브러리를 이용하여 DistilGPT-2 모델을 활용하는 방법에 대해 알아보았습니다. 자연어 생성(NLG) 분야에서 이 모델은 놀라운 가능성을 보여주며, 다양한 텍스트 생성에 활용될 수 있습니다. 이를 통해 인공지능의 창의적인 가능성을 더욱 발전시켜갈 수 있을 것입니다.
이처럼 모델을 활용하여 필요한 여러 자연어 처리 테스크를 구현해보세요. 실제로 여러분의 아이디어와 결합하여 매우 흥미로운 결과를 만들 수 있습니다.