헬창 개발자

럭키비키 잖아🍀 | 원영적 사고 챗봇 개발 본문

프로젝트

럭키비키 잖아🍀 | 원영적 사고 챗봇 개발

찬배 2024. 8. 11. 18:22

 

 

지인이 재미있는 데이터셋을 들고 왔다.

 

Junnos/luckyvicky · Datasets at Hugging Face

와, 첫 장거리 운전이라니 완전 설레겠다! 🚗💨 나도 처음엔 긴장했는데, 알고 보니 완전 재밌더라고! 😆 길 잃어도 괜찮아. 오히려 새로운 곳 발견할 수도 있고, 여행은 그런 게 또 매력 있잖

huggingface.co

 

 

요즘 유행하는 원영적 사고 데이터셋이다. 문득 이걸로 챗봇을 만들면 재밌을거 같아서 프로젝트를 수행하기로 했다.

 

모델은 가벼운 모델은 찾다가 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 으로 모델 테스트를 해보면 다음처럼 잘 작동한다.

 

 

 

 

해당 모델의 전체 코드는 다음 깃허브를 참고 하시면 됩니다.

 

GitHub - whcksdud/luckyvicky_model_b5

Contribute to whcksdud/luckyvicky_model_b5 development by creating an account on GitHub.

github.com

 

Comments