godfam3/CareerSage
04
Model Information
이 모델은 학생의 진로 상담 요약 내용을 분석하여 개인화된 진로 상담을 제공하는 챗봇입니다. 학생의 흥미, 취미, 그리고 이미 탐색한 진로 경로를 기반으로 맞춤형 진로 조언을 제공합니다.
Training
- 환경: Colab A100
- 데이터셋: AiHub 인공지능기반 학생 진로탐색을 위한 상담 데이터 구축했습니다.
- 적은 리소스로 학습 가능할 수 있도록 QLoRA(Quantized Low-Rank Adaptation) 기법을 활용해 파인튜닝을 진행했습니다.
- 이 기법은 메모리 사용량도 줄일수 있고 성능을 유지할수 있서 나름 제한적인 자원안에 학습할수있게 합니다.
How to Use
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "godfam3/CareerSage"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
model_pipeline = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=1024, device='cuda')
example = '직업 선호도 검사를 받아본 적이 있으며 취미는 운동이다.\n운동과 게임을 좋아하지만, 운동이나 게임으로 진로를 선택할 마음은 없다.\n운동과 관련된 직업으로 경찰, 소방 공무원이나 체육학과, 경호학과 등에 대하여 알게 되었다.\n좋아하는 과목으로는 체육을 꼽았으며, 체육 선생님을 진로로 생각해 보았다가 아이들이 선생님께 예의 없게 구는 걸 보고 생각을 바꾸었다.\n진로를 탐색해볼 방법으로 교육청에서 주관하는 꿈의 학교에 대하여 알게 되었다.\n지난 상담 시간에 체육 교사에 대하여 대화를 나누었는데 여전히 체육 교사에는 관심이 없다.\n취미는 운동이며 운동과 관련된 직업에 스포츠 마케터, 스포츠 기록 분석연구원, 스포츠 해설가, 스포츠 트레이너, 스포츠 에이전트, 스포츠 카운슬러, 야외활동 지도사 등이 있음을 알게 되었다.\n운동과 관련된 각 직업이 하는 일들에 대하여 알게 되었으나 관심이 가는 직업은 없다.'
messages = [
{
"role": "user",
"content": "당신은 진로 상담 전문가입니다. 다음 글은 학생 진로 상담 요약문입니다. 해당 학생에게 알맞는 진로 상담을 작성해주세요: {}".format(example)
}
]
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipe_finetuned(
prompt,
do_sample=True,
temperature=0.2,
top_k=50,
top_p=0.95,
add_special_tokens=True
)
print(outputs[0]["generated_text"][len(prompt):])
"""
학생은 운동을 좋아하고 취미로 운동을 하고 있다. 체육교사에도 관심이 있었으나 아이들이 선생님께 예의 없게 구하는 것을 보고 흥미를 잃었다고 한다. 체육과 관련된 직업에 대해서도 알아보았으나 관심이 없다.
학생에게 추천하는 직무는 운동 관련직, 안전 관련직, 교육 관련 서비스직이다. 운동 관련직에는 운동선수, 스포츠 트레이너, 스포츠 강사 등이 있다. 학생이 운동을 좋아하고 취미로 하고 있으므로 이 직업에 도전해 볼 수 있다. 안전 관련직에는 경찰, 소방관, 경호원 등이 있다. 학생이 예의를 갖고 사람들을 도와주고 싶다면 이 직업을 선택하는 것이 좋을 것이다. 교육 관련 서비스직에는 초등학교 교사, 유치원 교사, 보육교사 등이 있다. 학생이 아이들을 좋아하고 예의를 갖고 있으므로 이 직업을 선택하는 것도 좋은 선택이 될 수 있다.
학생은 현재 초등학교 5학년으로 진로를 정하는 데는 충분한 시간이 있다. 다양한 직업에 대해서 알아보고 자신의 성향과 잘 맞는 직업이 무엇인지 알아보는 시간을 가지기를 권한다. 또한 직업 체험을 해보거나 직업인을 만나서 인터뷰해 보는 것도 좋은 방법이 될 수 있다.
"""
Fine-tuning 파라미터
본 코드에서 outputs = pipe_finetuned(...) 구문은 파인튜닝된 모델을 호출하여 주어진 프롬프트에 대한 응답을 생성하는 역할을 합니다. 이때 prompt 매개변수는 모델이 응답할 사용자 입력 또는 학생의 진로 상담 요약문을 포함하고 있습니다.
- do_sample=True는 모델이 텍스트를 생성할 때 샘플링을 사용하도록 설정하여 다양하고 창의적인 응답을 유도합니다.
- temperature=0.2는 생성되는 텍스트의 결정성을 높여주어, 더 일관되고 집중된 답변을 제공합니다.
- topk=50과 topp=0.95는 모델이 다음 단어를 선택할 때 고려할 토큰의 범위를 제한하여 품질을 유지하면서도 다채로운 출력을 가능하게 합니다.
- addspecialtokens=True는 모델이 입력 및 출력을 올바르게 포맷할 수 있도록 필요한 특수 토큰을 포함하도록 설정합니다.
이러한 과정을 통해 파인튜닝된 모델은 사용자에게 보다 개인화된 진로 상담 응답을 제공할 수 있게 됩니다.
미래 추가 발전 가능성
모델이 학생의 실시간 피드백을 반영하여 더 개인화된 추천을 할 수 있는 기능을 추가하거나, 데이터셋을 더 확장하여 다양한 직업군에 대한 더 깊이 있는 분석이 가능하도록 추가 개발할수 있을것 같습니다. 또한, 다국어 지원이나 더 다양한 학문적, 직업적 배경을 반영한 상담 기능의 개발 가능성도 있습니다.
