GPT3.5 Turbo Fine-tuning: 개인 비서 만들기
Table of Contents
- 소개
- 데이터 세트 설치
- 데이터 포맷팅
- 훈련 및 검증 데이터 분리
- 데이터 저장 및 업로드
- 모델 탐색
- 추론하기
- 그래픽 인터페이스 만들기
- 예시 질문 및 답변
- 결론
소개
GPT 3.5 turbo 모델은 최근 공개되어 개인화된 데이터를 사용하여 개인 비서를 만드는 방법에 대해 설명합니다. 이 튜토리얼에서는 Yahoo 질문 응답 데이터 세트를 사용합니다. 이 데이터 세트는 질문 열과 답변 열로 구성되어 있습니다. 본 튜토리얼에서는 모델 훈련을 위해 데이터를 특정 형식으로 포맷팅하고 훈련 및 검증 데이터를 분리합니다. 그 후, 데이터를 저장하고 OpenAI 플랫폼에 업로드하여 모델을 훈련시키고 추론합니다. 또한, 그래픽 인터페이스를 사용하여 모델과 상호작용하는 방법에 대해서도 알아봅니다.
1. 데이터 세트 설치
먼저, hugging face의 데이터 세트 패키지를 설치해야 합니다. 이 패키지는 hugging face에서 데이터 세트를 다운로드하는 데 사용됩니다. 데이터 세트가 설치된 후, 데이터 세트를 로드하기 위해 load_dataset
함수를 사용합니다. 트레이닝 세트만 사용합니다.
!pip install datasets
from datasets import load_dataset
dataset = load_dataset("yahoo_answers")
train_dataset = dataset["train"]
2. 데이터 포맷팅
포맷팅은 모델 훈련에 필요한 데이터의 특정 형식으로 정리하는 작업입니다. 데이터를 특정 형식에 맞게 포맷팅하기 위해 작성된 함수를 사용합니다.
def format_data(input_data):
formatted_data = []
for data in input_data:
role = {
"role": "system",
"content": "You are the user of the Yahoo platform. Please reply to the user's question using polite and respectful language."
}
content = {
"role": "user",
"content": data["question"]
}
response = {
"role": "assistant",
"content": data["answer"]
}
formatted_data.append({"role": role, "content": content, "response": response})
return formatted_data
formatted_train_data = format_data(train_dataset[:500])
3. 훈련 및 검증 데이터 분리
포맷팅된 데이터 세트를 훈련 데이터와 검증 데이터로 분리합니다. 일반적으로 70%의 데이터를 훈련에 사용하고 나머지 30%는 검증에 사용합니다.
train_data = formatted_train_data[:350]
validation_data = formatted_train_data[350:]
4. 데이터 저장 및 업로드
이제 데이터를 JSON 파일로 저장하고 OpenAI 플랫폼에 업로드해야 합니다.
import json
from openai import upload_data
def save_data(data, filename):
with open(filename, "w") as f:
json.dump(data, f)
save_data(train_data, "train_data.json")
save_data(validation_data, "validation_data.json")
train_data_id = upload_data("train_data.json", purpose="fine-tuning")
validation_data_id = upload_data("validation_data.json", purpose="fine-tuning")
5. 모델 탐색
모델 훈련을 위해 fine-tuning이 필요합니다. 모델 이름, 훈련 데이터 ID, 검증 데이터 ID를 지정하여 fine-tuning을 시작합니다.
from transformers import GPT2LMHeadModel
from transformers import GPT2Tokenizer
model_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
model.train(
training_data_id=train_data_id,
validation_data_id=validation_data_id,
num_epochs=3,
train_tokens=100000
)
6. 추론하기
훈련된 모델을 사용하여 질문에 대한 답변을 추론할 수 있습니다.
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
def answer_question(question):
input_data = {
"role": "system",
"content": "You are the user of the Yahoo platform. Please reply to the user's question using polite and respectful language."
}
question_data = {
"role": "user",
"content": question
}
response = model.generate_response(
input_data=tokenizer.tokenize(input_data),
question_data=tokenizer.tokenize(question_data),
model_id=model.id,
num_responses=1
)
return tokenizer.detokenize(response["choices"][0]["message"])
7. 그래픽 인터페이스 만들기
모델과 상호작용하기 위해 그래픽 인터페이스를 만들 수 있습니다. 이 인터페이스를 사용하여 질문을 할 수 있고 모델이 답변을 제공합니다.
import gradio as gr
def answer_question_interface(question):
return answer_question(question)
iface = gr.Interface(
fn=answer_question_interface,
inputs="text",
outputs="text",
title="Yahoo 포럼 사용자 비서",
description="사용자의 질문에 대한 답변을 제공합니다."
)
iface.launch()
예시 질문 및 답변
-
질문: 인터넷 브라우저 중 어떤 것이 가장 좋은가요?
- 답변: 개인의 취향과 용도에 따라서 가장 좋은 인터넷 브라우저는 다를 수 있습니다. 모질라 Firefox는 빠르고 메모리 사용량도 적어서 좋은 선택입니다.
-
질문: 어떤 모델을 사용하나요?
- 답변: GPT 3.5 Turbo 0613 모델을 사용하여 fine-tuning을 수행합니다.
결론
이 튜토리얼에서는 GPT 3.5 Turbo 모델을 활용하여 개인 비서를 만드는 방법에 대해 알아보았습니다. Yahoo 질문 응답 데이터 세트를 사용하여 데이터를 포맷팅하고 훈련 및 검증 데이터로 분리했습니다. 그 후, 데이터를 저장하고 OpenAI 플랫폼에 업로드하여 모델을 fine-tuning하고 추론하는 과정을 진행했습니다. 또한, 그래픽 인터페이스를 사용하여 모델과 상호작용하는 방법도 살펴보았습니다.
FAQ
Q: fine-tuning에 얼마나 많은 데이터를 사용해야 하나요?
A: 일반적으로 70%의 데이터를 훈련에 사용하고 나머지 30%는 검증에 사용합니다.
Q: fine-tuning을 위해 어떤 모델을 사용해야 하나요?
A: GPT 3.5 Turbo 0613 모델을 활용하여 fine-tuning을 수행할 수 있습니다.
Q: 그래픽 인터페이스를 사용하여 질문을 할 수 있나요?
A: 네, 그래픽 인터페이스를 사용하여 질문을 할 수 있고 모델이 답변을 제공합니다.
Q: 개인 비서에 대해 더 알고 싶은데 어디에서 자세한 정보를 얻을 수 있나요?
A: 자세한 정보는 해당 노트북의 링크에서 확인할 수 있습니다.
자원