어쩌면 일지

Chat GPT를 이용한 텍스트 생성: 소설, 시 등 본문

[AI,코딩]

Chat GPT를 이용한 텍스트 생성: 소설, 시 등

조아라세연 2023. 4. 12. 19:02
728x90

Nightcafe studio로 생성한 이미지입니다.

Chat GPT는 텍스트 생성 모델로서, , , 소설 등 다양한 텍스트를 자동 생성할 수 있다. 이를 위해서는 다음과 같은 방법을 사용할 수 있다.

 

- 난이도 하/ 정확도 하 : Chat GPT에 명령하기

ex. 화자, 시점, 키워드, 줄거리, 글투, 분량 입력

 

- 난이도 하/ 정확도 중 : AIRPM을 활용해서 텍스트 생성하기(4/15 업로드 예정)

 

- 난이도 최상/ 정확도 상 : 아래 참고

 

1.     데이터 수집: 자동 생성할 텍스트와 비슷한 스타일이나 주제의 데이터를 수집한다.

 

2.     전처리: 수집한 데이터를 전처리하여 Chat GPT 모델이 학습하기 적합한 형태로 가공한다.

 

3.     모델 학습: 전처리된 데이터를 바탕으로 Chat GPT 모델을 학습시킨다.

-      Chat GPT가 데이터를 학습할 수 있도록 하려면, 말하고자 하는 주제와 관련된 다량의 텍스트 데이터가 필요하다. 일반적으로는 해당 주제와 관련된 웹사이트나 문서, 뉴스 기사 등을 크롤링하여 수집한 후, 이를 전처리 과정을 거쳐 Chat GPT가 이해할 수 있는 형태로 가공한다. 이후, 가공된 데이터를 Chat GPT 모델에 학습시키는 과정을 거쳐 모델을 성능을 개선시킬 수 있다.

-      Chat GPT는 학습된 모델을 이용하여 질문에 대한 답변을 생성한다. 따라서 질문을 입력하는 창에 입력된 내용은 Chat GPT가 답변을 생성하는데 사용되지만, 모델을 학습시키는 데 사용되지는 않는다. 모델을 학습시키려면, 전처리된 데이터를 모델 학습을 위한 데이터셋으로 사용해야 한다.

-      전처리된 데이터를 모델 학습을 위한 데이터셋으로 사용하기 위해서는 해당 데이터셋을 텍스트 파일 형태로 저장해야 한다. 이때 각 줄에는 한 문장이 들어가도록 한다.

그리고 이러한 데이터셋을 이용하여 모델을 학습시키는 프로그램을 구현할 수 있다. 예를 들어, Python에서는 Tensorflow, PyTorch 등 다양한 딥러닝 프레임워크를 사용하여 Chat GPT 모델을 학습시키는 프로그램을 작성할 수 있다.

다음은 Python을 이용해 데이터를 학습시키는 방법의 예시다.

먼저, 학습시킬 데이터셋을 준비해야 한다. 이후에는 Python에서 Hugging Face Transformers 라이브러리를 이용해 Chat GPT 모델을 만들고 학습시킬 수 있다.

 

1.     Transformers 라이브러리 설치

!pip install transformers

2.     학습 데이터셋 불러오기

먼저, 학습시킬 데이터셋을 불러와야 한다. 이 때, 전처리된 데이터셋을 불러온다. 전처리된 데이터셋은 모두 하나의 텍스트 파일에 저장되어 있어야 한다.

 

with open('data/novel.txt', 'r') as f:

    text = f.read()

 

3.     Tokenizer 및 모델 설정

 

from transformers import GPT2Tokenizer, GPT2LMHeadModel

 

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

model = GPT2LMHeadModel.from_pretrained('gpt2', pad_token_id=tokenizer.eos_token_id)

 

4.     입력 데이터 토큰화

input_ids = tokenizer.encode(text, return_tensors='pt')

 

5.     모델 학습

from torch.utils.data import Dataset, DataLoader

 

class NovelDataset(Dataset):

    def __init__(self, input_ids):

        self.input_ids = input_ids

   

    def __len__(self):

        return len(self.input_ids)

   

    def __getitem__(self, index):

        return self.input_ids[index]

   

dataset = NovelDataset(input_ids)

dataloader = DataLoader(dataset, batch_size=4, shuffle=True)

 

device = 'cuda' if torch.cuda.is_available() else 'cpu'

model.to(device)

 

optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)

 

for epoch in range(10):

    for batch in dataloader:

        optimizer.zero_grad()

        batch = batch.to(device)

        outputs = model(batch, labels=batch)

        loss = outputs.loss

        loss.backward()

        optimizer.step()

       

    print(f'Epoch {epoch+1} Loss: {loss.item()}')

이렇게 모델을 학습시킨 후에는, 새로운 문장을 생성하고자 할 때는 다음과 같은 코드를 사용한다.

 

generated = model.generate(input_ids, max_length=100, num_return_sequences=5, no_repeat_ngram_size=2, repetition_penalty=1.5, top_k=50, top_p=0.95, do_sample=True)

for g in generated:

    print(tokenizer.decode(g, skip_special_tokens=True))

 

이 코드는 길이가 100인 다섯 개의 새로운 문장을 생성하는 코드입니다. 각 파라미터의 역할은 다음과 같습니다.

 

max_length: 생성될 문장의 최대 길이

num_return_sequences: 생성될 문장의 개수

no_repeat_ngram_size: 생성된 문장에서 중복되지 않는 n-gram의 크기

repetition_penalty: 생성된 문장에서 특정 토큰이 반복되는 것을 억제하는 역할

top_k: 다음 단어 후보

 

4.     텍스트 생성: 학습된 Chat GPT 모델을 사용하여 새로운 텍스트를 자동 생성한다.

 

5.     후처리: 생성된 텍스트를 보완하고 문장의 흐름이 자연스럽게 이어지도록 후처리 작업을 수행한다.

 

이렇게 생성된 텍스트는 다양한 분야에서 활용될 수 있다. 예를 들어, 글쓰기, 시 작성, 소설 창작, 광고 캡션 작성 등 다양한 분야에서 텍스트 생성 기술을 활용하여 새로운 텍스트를 생성할 수 있다. 또한, 자동 생성된 텍스트를 기반으로 한 콘텐츠 생성, 인공지능 챗봇 등 다양한 응용분야에서도 활용할 수 있다.

728x90
Comments