허깅페이스 트렌스포머 활용강좌, DistilGPT2 작문

본 강좌에서는 허깅페이스의 트랜스포머(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) 분야에서 이 모델은 놀라운 가능성을 보여주며, 다양한 텍스트 생성에 활용될 수 있습니다. 이를 통해 인공지능의 창의적인 가능성을 더욱 발전시켜갈 수 있을 것입니다.

이처럼 모델을 활용하여 필요한 여러 자연어 처리 테스크를 구현해보세요. 실제로 여러분의 아이디어와 결합하여 매우 흥미로운 결과를 만들 수 있습니다.

8. 참고 자료