Notice
Recent Posts
Recent Comments
Link
헬창 개발자
럭키비키 잖아🍀 | 원영적 사고 챗봇 개발 본문
지인이 재미있는 데이터셋을 들고 왔다.
요즘 유행하는 원영적 사고 데이터셋이다. 문득 이걸로 챗봇을 만들면 재밌을거 같아서 프로젝트를 수행하기로 했다.
모델은 가벼운 모델은 찾다가 EleutherAI/polyglot-ko-5.8b 모델을 선정했다.
학습 데이터를 구성하기 위해 input/output 데이터를 전처리를 해주는 과정을 진행했다.
import json
from datasets import Dataset, DatasetDict
new_data = []
for item in data['train']:
temp = {}
del item['index']
temp["instruction"] = item['input']
temp['input'] = ""
temp['output'] = item['output']
new_data.append(temp)
with open('new_data.json', 'w', encoding='utf-8') as json_file:
json.dump(new_data, json_file, indent=4, ensure_ascii=False)
print("Data has been saved to new_data.json")
data_dict = {
'instruction': [item['instruction'] for item in new_data],
'input': [item['input'] for item in new_data],
'output': [item['output'] for item in new_data],
}
dataset = Dataset.from_dict(data_dict)
dataset_dict = DatasetDict({
'train': dataset
})
data = dataset_dict.map(
lambda x: {'text': f"### 질문: {x['instruction']}\n\n### 답변: {x['output']}</끝>" }
)
학습 프롬프트 형식으로 데이터셋을 구성하고 출력을 해보면 다음처럼 훈련데이터가 구성된다.
이 모델은 lora를 지원하지 않는 모델이라 타켓모듈을 다음처럼 변경해줘야 한다.
["q_proj", "v_proj"] -> [ "query_key_value"]
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=["query_key_value"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
이제 train을 하고 loss를 출력해보면 잘 나왔는데 1000step까지만 학습했어도 됐을거 같다.
모델을 사용하기위해 학습된 모델이랑 토크나이저를 허깅페이스에 업로드 해주고 streamlit 으로 모델 테스트를 해보면 다음처럼 잘 작동한다.
해당 모델의 전체 코드는 다음 깃허브를 참고 하시면 됩니다.
'프로젝트' 카테고리의 다른 글
전북 청년 빅데이터 경진대회 참여 후기 (0) | 2023.12.10 |
---|---|
2023 전북 공공데이터 창업경진대회 출품작 _ 하루이즘 (0) | 2023.07.25 |
[토이 프로젝트] MZ 테스트 (0) | 2023.03.27 |
[졸업 프로젝트] 감정 - 7 (END) - (1) | 2023.02.14 |
[졸업 프로젝트] 감정 -6- (0) | 2023.02.14 |
Comments