본문 바로가기
NLP

Multi-Turn 한국어 데이터를 Fine-Tunning 하는 방법 - (1)

by AI미남홀란드 2024. 3. 28.
728x90

 

언어모델의 중요한 능력중에 멀티턴 대화 능력이다. 특정 도메인 Task 파인튜닝을 할 시에 데이터가 고객센터에서의 QnA 처럼 멀티턴인 경우가 있다. 그 데이터를 고려해서 파인튜닝을 하는 방법을 한번 알아보자. 모델은 Gemma 를 활용해서 파인튜닝을 해볼 예정이다. 한국어로 파인튜닝이 된 모델일 Gemma-Ko 시리즈를 사용할 예정이다.

Gemma

Data - MultiTurn

https://huggingface.co/datasets/maywell/koVast

 

maywell/koVast · Datasets at Hugging Face

[ { "from": "user", "value": "데스크탑의 창의적인 사고 기술이 뭐야?" }, { "from": "gpt", "value": "데스크탑의 창의적인 사고 기술은 컴퓨터가 인간처럼 창의적으로 생각할 수 있도록 하는 기술로, 인공지

huggingface.co

오늘 사용해볼 데이터셋은 maywell/koVast  박정환님의 멀티셋 데이터이다. 학생이라고 하시는데 LLM 에 대한 연구를 엄청 잘하시고 실제로 리더보드도 운영중이시고 한국어 LLM 의 문제점을 꼽아서 지적하고 진짜 대단한분이라고 생각한다. 

 

Dataset은 json 형식

 

데이터는 json 형식의 user , gpt 가 대화하는 형식으로 구성이 되어있다.

 

!pip install datasets

from datasets import load_dataset

dataset = load_dataset("maywell/koVast")

 

데이터의 형태

 

데이터셋 확인 

#dataset['train']['conversations'][0]

[{'from': 'user', 'value': '대학 입학 단계에서 의사소통 기회가 뭐야?'},
 {'from': 'gpt',
  'value': '대학 입학 단계에서의 의사소통 기회는 대학과 연결하고 다양한 수준의 학업과 교육 활동에 참여하기 위해 제공되는 기회를 말합니다. 이는 대학에 입학하고 처음 대학 생활을 시작할 때 학생들이 대학 내에서 자신을 표현하고 다른 사람들과 소통하는 기회를 제공합니다.'},
 {'from': 'user', 'value': '그럼 이런 의사소통 기회를 잘 활용하려면 어떻게 해야 해?'},
 {'from': 'gpt',
  'value': '이런 의사소통 기회를 잘 활용하기 위해서는 몇 가지 전략을 따르는 것이 좋습니다. 첫째, 강력하고 생산적인 관계를 형성하기 위해 대학 내에서 다양한 사람들과 교류하고 소통하는 것이 중요합니다. 둘째, 성공적인 대인관계를 위해서는 피드백을 제공하고 수락하는 것이 중요합니다. 이를 통해 서로의 의견을 이해하고 존중하며, 더 나은 관계를 형성할 수 있습니다.'},
 {'from': 'user', 'value': '전문적인 관점에서 소셜 미디어를 어떻게 활용해야 해?'},
 {'from': 'gpt',
  'value': '전문적인 관점에서 소셜 미디어를 활용하기 위해서는 몇 가지 팁을 따르는 것이 좋습니다. 첫째, 자신의 전문적인 입장을 강화하기 위해 소셜 미디어를 적절히 사용하는 것이 중요합니다. 이는 자신의 전문 분야에 관련된 정보를 공유하고, 전문적인 토론에 참여하는 것을 의미합니다. 둘째, 소셜 미디어를 통해 학업, 교외 활동 및 일자리 기회를 탐색하는 데 도움이 되는 정보를 찾아보는 것도 유용합니다. 이를 통해 자신의 경력 발전에 도움이 될 수 있는 기회를 발견할 수 있습니다.'},
 {'from': 'user', 'value': '서면 의사소통의 중요성은 구체적으로 뭐야?'},
 {'from': 'gpt',
  'value': '서면 의사소통의 중요성은 다양한 서신 및 문서를 만들고 수정하는 데 적절한 문법과 스타일을 활용하는 것에 있습니다. 이는 교과 과제, 논문, 책임 서류, 편지 등을 작성할 때 중요한 역할을 합니다. 서면 의사소통을 잘 하는 것은 커뮤니케이션 능력을 향상시키고, 다양한 상황에서 명확하고 효과적으로 메시지를 전달하는 데 도움이 됩니다. 이는 학업 성공뿐만 아니라 장기적인 경력 발전에도 중요한 요소입니다.'}]

 

 

Gemma의 data format 을 확인해보니

 

 

Gemma 형식 및 시스템 안내  |  Google AI for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Gemma 형식 및 시스템 안내 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 명령 조정을 위

ai.google.dev

<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>

 

<bos><start_of_turn>  role : data <end_of_turn><eos> 으로 구성이 되어있는 것을 볼 수가 있다.

 

기존의 Llama 구조 같은 경우와 비슷하다고 할 수 있는데 멀티턴 구조를 어떻게 구축하는지 몰라서 도움을 받았다. 기존 라마 같은 경우에는 <s><role:data></s><s><role:data></s> 이렇게 문장 하나당 s토큰으로 마무리를 지었다.

 

<bos><start_of_turn> role:data <end_of_data><start_of_turn> role:data <end_of_turn><eos> 이런식으로 구성하면 될 것 같다는 피드백을 들었다. 라마 방법처럼 해도 상관은 없을거 같다고 했는데 아래 의 버전이 더 적합해보여서 전처리코드를 구성했다.

 

def generate_prompt_2(example):
    prompt_list = []
    for conversation in example:
        prompt = "<bos>"
        for i in range(0, len(conversation), 2):
            user_message = conversation[i]['value']
            model_message = conversation[i+1]['value'] if i+1 < len(conversation) else ''
            prompt += r"""<start_of_turn>user
{}<end_of_turn>
<start_of_turn>model
{}<end_of_turn>""".format(user_message, model_message)
        prompt += "<eos>"
        prompt_list.append(prompt)
    return prompt_list

 

list 를 하나 선언해주고 매개변수 example 은 리스트를 순회하면서 먼저 <bos> 를 입력하고 그 후 conversation 값에서 첫번째 Value 값을 user_message 로 넣어주고 모델의 응답 메시지를 추출합니다. 만약 i+1이 대화의 길이보다 작다면, 즉 응답 메시지가 존재한다면, 해당 메시지를 추출합니다. 그렇지 않다면(즉, 마지막 메시지가 사용자의 메시지인 경우), 빈 문자열을 사용합니다. 그 후 Prompt 에 포맷에 맞춰 변수들은 할당되어 출력한 후 <eos> 를 붙혀서 append 해주는 구조입니다.

 

<bos><start_of_turn>user\n대학 입학 단계에서 의사소통 기회가 뭐야?<end_of_turn>\n<start_of_turn>model\n대학 입학 단계에서의 의사소통 기회는 대학과 연결하고 다양한 수준의 학업과 교육 활동에 참여하기 위해 제공되는 기회를 말합니다. 이는 대학에 입학하고 처음 대학 생활을 시작할 때 학생들이 대학 내에서 자신을 표현하고 다른 사람들과 소통하는 기회를 제공합니다.<end_of_turn><start_of_turn>user\n그럼 이런 의사소통 기회를 잘 활용하려면 어떻게 해야 해?<end_of_turn>\n<start_of_turn>model\n이런 의사소통 기회를 잘 활용하기 위해서는 몇 가지 전략을 따르는 것이 좋습니다. 첫째, 강력하고 생산적인 관계를 형성하기 위해 대학 내에서 다양한 사람들과 교류하고 소통하는 것이 중요합니다. 둘째, 성공적인 대인관계를 위해서는 피드백을 제공하고 수락하는 것이 중요합니다. 이를 통해 서로의 의견을 이해하고 존중하며, 더 나은 관계를 형성할 수 있습니다.<end_of_turn><start_of_turn>user\n전문적인 관점에서 소셜 미디어를 어떻게 활용해야 해?<end_of_turn>\n<start_of_turn>model\n전문적인 관점에서 소셜 미디어를 활용하기 위해서는 몇 가지 팁을 따르는 것이 좋습니다. 첫째, 자신의 전문적인 입장을 강화하기 위해 소셜 미디어를 적절히 사용하는 것이 중요합니다. 이는 자신의 전문 분야에 관련된 정보를 공유하고, 전문적인 토론에 참여하는 것을 의미합니다. 둘째, 소셜 미디어를 통해 학업, 교외 활동 및 일자리 기회를 탐색하는 데 도움이 되는 정보를 찾아보는 것도 유용합니다. 이를 통해 자신의 경력 발전에 도움이 될 수 있는 기회를 발견할 수 있습니다.<end_of_turn><start_of_turn>user\n서면 의사소통의 중요성은 구체적으로 뭐야?<end_of_turn>\n<start_of_turn>model\n서면 의사소통의 중요성은 다양한 서신 및 문서를 만들고 수정하는 데 적절한 문법과 스타일을 활용하는 것에 있습니다. 이는 교과 과제, 논문, 책임 서류, 편지 등을 작성할 때 중요한 역할을 합니다. 서면 의사소통을 잘 하는 것은 커뮤니케이션 능력을 향상시키고, 다양한 상황에서 명확하고 효과적으로 메시지를 전달하는 데 도움이 됩니다. 이는 학업 성공뿐만 아니라 장기적인 경력 발전에도 중요한 요소입니다.<end_of_turn><eos>

 

이제 위 데이터를 활용해서 Fine-tunning을 진행하면 된다. SFT 튜닝 형식이기 때문에 LoRA 튜닝 또는 QLoRA 튜닝으로 모델을 파인튜닝해볼 생각입니다. 다음편에 계속..!

 

 

728x90

'NLP' 카테고리의 다른 글

Chat Vector 를 통한 한국어 모델 튜닝  (0) 2024.06.12
RAG 어떻게 하면 더 잘 할까?  (30) 2024.04.09
Self Consitency prompt  (0) 2024.03.07
Transformer Mechanism 이란?  (0) 2024.03.06
Attention Mechanism 이란?  (0) 2024.03.05